LoginSignup
34
27

More than 5 years have passed since last update.

[golang]GoのSDKで手軽にLINE BOT APIを試してみた

Last updated at Posted at 2016-05-05

LINEが公開しているGoのSDKを利用して、LINE 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

これでgo-getting-startedディレクトリ配下に必要なファイル群が配置されます。

  • アプリケーションをデプロイ
$ heroku create
$ git push heroku master
  〜
* [new branch]      master -> master

pushが成功すれば無事にデプロイ完了です。

HerokuへFixieアドオンを追加する

HerokuのダッシュボードからGUIで追加できます。
上記でデプロイしたアプリケーションのダッシュボードを開きます。
そこのAdd-onsというテキストに Fixie と入力すると、アドオンの候補が出てきます。

addons.png

Fixieを選択して、「Provision」を押下すればアドオンの追加は完了です。
今回はFreeのプランを選択しました。簡単、便利ですね。

LineにホワイトリストのIPを登録する

LINE Developersにログインして、LINE BOT APIのチャンネル画面にアクセスする。
左のメニューに「Server IP Whitelist」のリンクがあるのでそこをクリックして、先ほど追加したFixieアドオンの固定IPアドレスを登録します。

IPアドレスの確認方法は「Fixie」画面のAccountボタンを押下して、「Outbound IPs」に記載されてます。
2種類ほどあると思うので、両方登録しておきます。
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を編集する

デフォルトで用意されている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.goに以下の処理を追加しました。

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でできることは改めてGithubのUsageを参照して下さい。
SDK of the LINE BOT API Trial for Go

godepで依存関係を宣言する

main.goの編集が終わったらアプリケーションのルートへ移動してgodepコマンドを実行します。
godepはGoにおけるライブラリの依存関係を管理するツールです。

godepをインストールする。

$ go get -u github.com/tools/godep

これでGodepディレクトリのGodep.jsonを更新する。

$ cd $GOPATH/src/github.com/heroku/go-getting-started
$ godep save ./...

もしここでgoのversionエラーが発したら、以下のコマンドを実行して再度、saveします。

$ godep update -goversion
$ godep save ./...

Godep.jsonをもとに、_workspaceディレクトリへ必要なライブラリをインストールする。

$ godep go install ./...

ファイルをコミットしてデプロイする

ここまで出来たら、gitでコミットしてアプリケーションを再度デプロイします。

$ git add .
$ git commit -m "コミットログ"
$ git push heroku master

デプロイが成功したら、LINE BOTを友達にして何か適当にメッセージを送信します。
すると送信したメッセージにOK が付与されて返ってくるはずです。

もしデプロイに失敗したら、HerokuのダッシュボードからActivityログを確認するか、デバッグコードを入れてログを確認してみて下さい。

$ heroku logs --tail

まだトライアルの段階ですが、いろんな可能性を秘めたLINE BOT APIに期待です。
SDKを利用するとテキストだけでなく画像や動画、スタンプなども簡単に操作できて楽しいですね。

それでは、以上です。

34
27
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
34
27