自作のLINE botを作るときに欠かせないのがwebhook。LINE Developersのチャンネル設定画面ではwebhookの接続確認をボタンで出来ます。しかし、以前の記事では、ボタンを押すとエラー文が出ると書きましたが、これは接続確認のときの処理を入れてないせいで起こるエラーです。ちなみに接続確認のときにwebhookで出力されるjsonは以下のようなものです。
{"events":[
{
"replyToken":"00000000000000000000000000000000",
"type":"message",
"timestamp":1570728501562,
"source":{
"type":"user",
"userId":"Udeadbeefdeadbeefdeadbeefdeadbeef"
},
"message":{
"id":"100001",
"type":"text",
"text":"Hello, world"
}
},
{
"replyToken":"ffffffffffffffffffffffffffffffff",
"type":"message",
"timestamp":1570728501562,
"source":{
"type":"user",
"userId":"Udeadbeefdeadbeefdeadbeefdeadbeef"
},
"message":{
"id":"100002",
"type":"sticker",
"packageId":"1",
"stickerId":"1"
}
}
]}
このjsonは接続確認用のダミーなので、replyTokenの00000000000000000000000000000000
でメッセージを返信する処理を行ってもメッセージが送られないのでAPIのエラーになりサーバーからのステータスコードとしては500
が返ってくるので接続確認のエラーにつながるというわけです。これを解決するためには接続確認のときのreplyTokenが来たときには余計な処理ををせずにhtml responseノードを接続してLINE側にレスポンスを行うだけです。具体的には、
- inputのhtmlノードの後すぐにswitchノードを追加する
- 上記のreplyTokenかそうでないかで条件分岐を行う
- 上記のreplyTokenだったときの接続先はhtml responseノード
- それ以外だった場合はボットの返信処理を行う
という流れで組むだけです、この接続確認を取り入れたボットのフローは以下のようになります。
このフローの中のswitchノードの設定は以下の通りです。
また、今回は詳しく取り上げませんが、ボットの返信処理に関しては、こちらを参考にするか、のびすけさんの作られたMessaging APIノードを使って簡単に作成出来ます。