Edited at

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


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番号)

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の試運転等に最適であると思うので、是非皆さんも試して見てください!