Go
golang

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

More than 1 year has passed since last update.

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を利用するとテキストだけでなく画像や動画、スタンプなども簡単に操作できて楽しいですね。

それでは、以上です。