4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Node-REDでLINE botの接続確認

Last updated at Posted at 2019-10-10

自作の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ノード
  • それ以外だった場合はボットの返信処理を行う

という流れで組むだけです、この接続確認を取り入れたボットのフローは以下のようになります。

スクリーンショット 2019-10-11 03.23.01.png

このフローの中のswitchノードの設定は以下の通りです。

スクリーンショット 2019-10-11 03.30.14.png

また、今回は詳しく取り上げませんが、ボットの返信処理に関しては、こちらを参考にするか、のびすけさんの作られたMessaging APIノードを使って簡単に作成出来ます。

4
3
0

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
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?