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

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

それでは、以上です。


『 Go 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。