golang
ngrok
linebot

Ngrokを用いた簡単Botテスト作成

Ngrokを用いた簡単Botテスト作成

Ngrokって???

Ngrokは、localhostで動いているサーバーを、LANの外からアクセスできるようなるものです。
ローカル環境を外部に公開できるため、webhook, callbackなどの受信が必要でも、ローカル環境でその受信が可能となります。
そのため、Botのテスト用にもってこい!ってことなんです。
今の所、読み方は(エヌジーロック)らしいです!


インストール方法

Mac用

$ brew cask install ngrok

でダウンロード可能です!

Windows | Linux用

上のリンクからダウンロードし、zipを解凍してください。
また、PATHを通しておくことをお勧めします


起動方法

$ ngrok http 9000(port番号)

ngrok-start.png



これで、ローカル環境で立ち上げたポート番号9000番を外部からアクセスできるようになります。


LineBotのテストを実際にNgrokを使って行ってみる

次にこのngrokを使って、LineBotのオウム返しを実行してみる。

⚠️ LineBotのアカウント作成は以下を参照してください。

サーバの準備 && Webhookの設定

 上記の方法でLineBotの設定が終わったら、プログラムを準備します。
今回はgolangで!

.bashrc
export LINE_CHANNEL_SECRET="Your channnel secret" 
export LINE_CHANNEL_TOKEN="Your channnel token"
export PORT=9000
// オウム返し
package main

import (
        "log"
        "net/http"
        "os"

        "github.com/line/line-bot-sdk-go/linebot"
)

func main() {
        bot, err := linebot.New(
                os.Getenv("LINE_CHANNEL_SECRET"),
                os.Getenv("LINE_CHANNEL_TOKEN"),
        )
        if err != nil {
                log.Fatal(err)
        }

        // Setup HTTP Server for receiving requests from LINE platform
        http.HandleFunc("/callback", func(w http.ResponseWriter, req *http.Request) {
                events, err := bot.ParseRequest(req)
                if err != nil {
                        if err == linebot.ErrInvalidSignature {
                                w.WriteHeader(400)
                        } else {
                                w.WriteHeader(500)
                        }
                        return
                }
                for _, event := range events {
                        if event.Type == linebot.EventTypeMessage {
                                switch message := event.Message.(type) {
                                case *linebot.TextMessage:
                                        if _, err = bot.ReplyMessage(event.ReplyToken, linebot.NewTextMessage(message.Text)).Do(); err != nil {
                                                log.Print(err)
                                        }
                                }
                        }
                }
        })
        if err := http.ListenAndServe(":"+os.Getenv("PORT"), nil); err != nil {
                log.Fatal(err)
        }
}

というものを準備します。 PORT番号は9000番です。

準備ができたら、ngrokを起動して、LineBotのWebhookの設定をしましょう。

今回実行すると、先ほど同様以下が出ます

ngrok_https.png


それの一番下のURLをコピーし、先ほど示した、Webhook URLのところに、ngrokのURL + "/callback"として追加します。


webhook_callback.png


これで準備が完了したので実行して見ます。


callback.gif

最後に

Ngrokを用いればBotの試運転等に最適であると思うので、是非皆さんも試して見てください!