Go의 SDK로 LINE BOT API를 쉽게 시도했어요.

13941 단어 Go
우리는 라인이 공개한 Go SDK를 이용해 라인 BOT API를 시도했다.
GitHub
SDK of the LINE BOT API Trial for Go

컨디션


VM CentOS 7
Go 1.5
Heroku

전제 조건


LINE BOT API에 대한 Developer 계정이 확보되었습니다.
LINE Developers
Heroku의 상세한 조작 방법은 단절된 것이다.
$GOPATH 설정 등이 완료되었습니다.

Heroku를 위한 Go 응용 프로그램 설계


자세한 내용은 공식 홈페이지를 참고하세요.
Getting Started on Heroku with Go
  • 어플리케이션 준비
  • $ go get github.com/heroku/go-getting-started
    $ cd $GOPATH/src/github.com/heroku/go-getting-started
    $ ls -l
    
    이렇게 하면goo-getting-started 디렉터리에 필요한 파일 그룹을 설정합니다.
  • 응용 프로그램 해제
  • $ heroku create
    $ git push heroku master
      〜
    * [new branch]      master -> master
    
    push가 성공하면 디자인을 순조롭게 완성할 수 있습니다.

    Heroku에 Fixie 추가


    Heroku의 대시보드에서 GUI로 추가할 수 있습니다.
    위에서 디자인한 응용 프로그램의 계기판을 엽니다.
    거기 Add-ons 텍스트에 Fixie를 입력하면dd-on 후보가 나옵니다.

    Fixie를 선택하고 Provision 을 누르면 완료가 추가됩니다.
    이번에는 프리 플랜을 선택했다.간단해, 편리해.

    Line에 화이트리스트 IP 등록


    LINE Developers에 로그인하여 LINE BOT API의 채널 화면에 액세스합니다.
    왼쪽 메뉴에 "Server IP Whitelist"링크가 있습니다. 여기를 클릭하여 방금 추가한 Fixie adion의 고정 IP 주소에 로그인하십시오.
    IP 주소 확인 방법은 Fixie 화면의 Acount 버튼을 눌러 Outbound IPs에 기재하는 것입니다.
    나는 대략 두 가지가 있다고 생각하기 때문에 두 가지 모두 등록해야 한다.
    Fixie Dashboard

    LINE에 Callback URL을 등록합니다.


    LINE Developers에 로그인하여 LINE BOT API의 채널 화면에 액세스합니다.
    왼쪽 메뉴에는 "Basic infomation"링크가 있습니다. 여기를 클릭하고 "Callback URL"에서 LINE BOT API 호출 URL에 로그인하십시오.
    이번에 등록된 URL은 다음과 같습니다.
    https://デプロイしたアプリのドメイン:443/callback
    계획은https로 변경되었습니다.또한 포트 번호 443에 로그인하는 것도 잊지 마세요.

    Go의 SDK 가져오기


    다음 명령을 사용하여 SDK를 가져옵니다.
    $ go get github.com/line/line-bot-sdk-go/linebot
    
    이렇게 하면 완성된다.

    main.편집 고


    기본적으로 준비된 Go 파일을 편집합니다.
    $ cd $GOPATH/src/github.com/heroku/go-getting-started/cmd/go-getting-started/
    $ vi main.go
    
    main.go
    package main
    
    import (
        "fmt"
        "log"
        "net/http"
        "net/url"
        "os"
    
        "github.com/gin-gonic/gin"
        "github.com/line/line-bot-sdk-go/linebot"
    )
    
    func main() {
        port := os.Getenv("PORT")
    
        if port == "" {
            log.Fatal("$PORT must be set")
        }
    
        router := gin.New()
        router.Use(gin.Logger())
        router.LoadHTMLGlob("templates/*.tmpl.html")
        router.Static("/static", "static")
    
        router.GET("/", func(c *gin.Context) {
            c.HTML(http.StatusOK, "index.tmpl.html", nil)
        })
    
        //この処理を追記
        router.POST("/callback", func(c *gin.Context) {
            proxyURL, _ := url.Parse(os.Getenv("FIXIE_URL"))
            client := &http.Client{
                Transport: &http.Transport{Proxy: http.ProxyURL(proxyURL)},
            }
            // Channel ID、Channel Secret、MIDはLINE Developers画面のBasic infomationで確認できます。
            bot, err := linebot.NewClient(<Your Channel ID>,"<Your Channel Secret>","<Your MID>", linebot.WithHTTPClient(client))
            if err != nil {
                fmt.Println(err)
                return
            }
    
            received, err := bot.ParseRequest(c.Request)
            if err != nil {
                if err == linebot.ErrInvalidSignature {
                    fmt.Println(err)
                }
                return
            }
            for _, result := range received.Results {
                content := result.Content()
                if content != nil && content.IsMessage && content.ContentType == linebot.ContentTypeText {
                    //送信されたメッセージにOK を付けて返す
                    text, err := content.TextContent()
                    res, err := bot.SendText([]string{content.From}, "OK "+text.Text)
                    if err != nil {
                        fmt.Println(res)
                    }
                }
            }
        })
    
        router.Run(":" + port)
    }
    
    main.goo에 다음과 같은 처리가 추가되었습니다.
    router.POST("/callback", func(c *gin.Context) {
      〜
    }
    
    /callback 방문이 오면 사용자로부터 받은 메시지에 OK 반환을 추가하는 간단한 처리입니다.
    중점은 실례를 만드는 곳이다.
    url.Parse(os.Getenv("FIXIE URL")에서 Fixie를 프록시 서버로 지정하면 고정 IP를 사용하여 LINE BOT API에 자주 접근할 수 있으며, 미리 흰 목록에 IP를 등록하면 접근을 허용한다.
    프록시 서버를 지정하지 않으면 LINE BOT API에 액세스하는 동안 오류가 발생합니다.
    인스턴스가 생성되면 SDK를 사용하여 LINE BOT API를 쉽게 사용할 수 있습니다.
    SDK가 할 수 있는 일은 Giithub의 Usage를 다시 참조하십시오.
    SDK of the LINE BOT API Trial for Go

    goodep에서 의존 관계를 선포하다


    main.go를 편집한 후 프로그램의 경로로 이동하여 goodep 명령을 실행합니다.
    goodep은 Go의 라이브러리 의존 관계를 관리하는 도구입니다.
    godep을 설치합니다.
    $ go get -u github.com/tools/godep
    
    이것이 바로 Godep 디렉토리의 Godep입니다.json을 업데이트합니다.
    $ cd $GOPATH/src/github.com/heroku/go-getting-started
    $ godep save ./...
    
    여기서 goo의 버젼 오류가 발생하면 다음 명령을 실행하여 다시 저장합니다.
    $ godep update -goversion
    $ godep save ./...
    
    Godep.json 기반워크스페이스 디렉터리에 필요한 라이브러리를 설치합니다.
    $ godep go install ./...
    

    서류를 제출한 후 처리하다


    완료되면git로 제출하여 다시 응용 프로그램에 대한 디버깅을 진행합니다.
    $ git add .
    $ git commit -m "コミットログ"
    $ git push heroku master
    
    만약 deproy가 성공한다면, 나는 LINE BOT을 친구로서 적절하게 메시지를 보낼 것이다.
    이렇게 되면 보낸 메시지는 OK가 될 것이다.
    디버그에 실패하면 Heroku의 대시보드에서 Activity 로그를 확인하거나 디버그 코드를 입력하여 로그를 확인하십시오.
    $ heroku logs --tail
    
    아직 수습 단계이지만 다양한 가능성을 숨긴 라인 봇 API를 기대하고 있다.
    SDK를 사용하면 텍스트뿐만 아니라 이미지와 애니메이션, 인장 등도 쉽게 조작할 수 있어 기쁘다.
    그럼 이게 다야?

    좋은 웹페이지 즐겨찾기