49
42

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-09-13

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


49
42
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
49
42