Ngrokを用いた簡単Botテスト作成
Ngrokって???
Ngrokは、localhostで動いているサーバーを、LANの外からアクセスできるようなるものです。
ローカル環境を外部に公開できるため、webhook, callbackなどの受信が必要でも、ローカル環境でその受信が可能となります。
ローカルPC上で稼働しているネットワーク(TCP)サービスを外部公開できるサービスで、ローカルPCのWebサーバを外部公開することができます。
そのため、Botのテスト用にもってこい!ってことなんです。
今の所、読み方は(エヌジーロック)らしいです!
インストール方法
Mac用
$ brew cask install ngrok
でダウンロード可能です!
Windows | Linux用
上のリンクからダウンロードし、zipを解凍してください。
また、PATH
を通しておくことをお勧めします
起動方法
$ ngrok http 9000(port番号)
これで、ローカル環境で立ち上げたポート番号`9000`番を外部からアクセスできるようになります。
LineBotのテストを実際にNgrokを使って行ってみる
次にこのngrokを使って、LineBotのオウム返しを実行してみる。
⚠️ LineBotのアカウント作成は以下を参照してください。
サーバの準備 && Webhookの設定
上記の方法でLineBotの設定が終わったら、プログラムを準備します。
今回はgolangで!
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の設定をしましょう。
今回実行すると、先ほど同様以下が出ます
それの一番下のURLをコピーし、先ほど示した、Webhook URLのところに、ngrokのURL + "/callback"として追加します。
これで準備が完了したので実行して見ます。
最後に
Ngrokを用いればBotの試運転等に最適であると思うので、是非皆さんも試して見てください!