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

  • 0
    いいね
  • 0
    コメント

    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で!

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