概要
自作の LINE-mqttbot のデバッグ方法をいつも忘れてるのでメモしておきます
ngrok を使います
環境
- macOS 11.7.6
- Ruby 3.2.1
- line-bot-api 1.28.0
- LINE-mqttbot
準備その1: コード取得
- git clone https://github.com/kakakikikeke/LINE-mqttbot.git
- cd LINE-mqttbot
- bundle install
準備その2: MQTTブローカーの準備
なんでも OK です
今回は CloudMQTT を使います
準備その3: LINEビジネスアプリの登録
https://developers.line.biz/console/ ここから登録します LINE アカウントがあれば登録できます
トークンなどの必要な情報をメモしておきましょう
- チャネルID (LINE_CHANNEL_ID)
- チャネルシークレット (LINE_CHANNEL_SECRET)
- チャネルトークン (LINE_CHANNEL_TOKEN)
「セキュリティ設定」の IP アドレス制限は今はないらしいので既存の設定がある場合は削除しておきましょう
起動する
LINE と MQTTブローカの必要な情報を環境変数に設定して起動します
LINE_CHANNEL_SECRET=caxxx \
LINE_CHANNEL_TOKEN=Ckxxx \
MQTT_HOST=m11.cloudmqtt.com \
MQTT_PORT=10707 \
MQTT_TOPIC=topic_name \
MQTT_SUB_TOPIC=topic_name \
MQTT_QOS=0 \
MQTT_USERNAME=username \
MQTT_PASSWORD=xxxxxxxxxxxx \
bundle exec rackup config.ru
ngrok でグローバルからアクセスできるようにする
9292 ポートで起動するのでそれを ngrok でアクセスできるようにします
- ngrok http 9292
払い出された URL はメモしておきましょう
ngrok の URL を LINEビジネスアプリのWebhook URL に設定する
- MessaginAPI 設定 -> Webhook 設定 -> Webhook URL
https://xxx.jp.ngrok.io/callback という感じでちゃんと最後に /callback
を設定するのを忘れないようにしましょう
動作確認
-
mosquitto_sub -h m11.cloudmqtt.com -p 10707 -t 'topic_name' -u 'username' -P 'xxxxxxxx'
でメッセージが受け取れるか確認します
あとは携帯やデスクトップ版の LINE アプリから LINE ビジネスアプリと友達になりメッセージを送信して MQTT にまでメッセージが来るか確認すれば OK です
最後に
ngrok の URL は毎回ランダムなものが払い出されるのでそのたびに LINE ビジネスアプリの WebhookURL に設定してあげましょう
ローカルでの動作確認なのでランダムで払い出される URL のほうがセキュアかなと思います (ngrok の場合 URL さえ知っていれば誰でもアクセスできてしまうので)
トラブルシューティング
CloudMQTT は長時間使われていないと停止するので Connection Refuse になる場合は一旦 ResetDB してみてください