Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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


poccariswet
engineer🏃‍♂️
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away