LINEとWatson Assistantを連携し、LINEにチャットボット実装できるようになっていました。
1年ちょっと前に調べた時には、なかったのか、LINEは日本だけ使われているから、情報が少なかっただけなのかはわかりませんが、早速実装してみたいと思います。
身内が主催している、11月にある「ゆず香るん祭り」の案内用を想定して作ってみました。

目次
システム構成
使うのは、下記3つ
- LINE Developers
- IBM Cloud Node-Red
- IBM Cloud Watson Assistant
NodeRedはLINEとWatson Assistantとのメッセージの中継になります。

Watson Assistant設定
チャットボットの設定
Assistantの設定は前に記事を書いたことがあるので、下記2つ参考にしていただきたいです。
1つ目のリンクの「IBM Watson Assistantサービスの追加」のパートと、2つ目のリンクです。
Workspace IDの取得
Watson Assistantを起動して、作成したSkillを開いて、ViewAPIDetailsを開いてください。
開くと、WorkSpaceIDが表示されるので、コピーしておいてください。Node-Redに設定します。

Node-Red設定①
アプリケーションの追加
下記の順番で、アプリケーションを追加してください。


Watson Assistantを接続
次に、NodeRedのアプリケーションにWatsonAssistantをバインディング(接続)します。

Watson Assistantのサービスを選択します。


Node-Red起動
再ステージ後、Node-Redを起動します。たまに、失敗しますが、Node-Redアプリケーションの再起動とかで起動します。
アプリURLにアクセスからNode-Redを起動

初期設定

やっと起動

フロー読込
起動画面右上から、Node-Redのフロー読み込みます。


ここに、下記のJSON形式のテキストを貼り付けてください。
[{"id":"f008c9e8.648378","type":"http in","z":"77645773.e3de38","name":"getmessage","url":"/line_bot","method":"post","upload":false,"swaggerDoc":"","x":110,"y":80,"wires":[["701fae9f.57081","b9f41b64.e45e7"]]},
{"id":"5342dac8.30af54","type":"http request","z":"77645773.e3de38","name":"returnmessage","method":"POST","ret":"obj","paytoqs":false,"url":"https://api.line.me/v2/bot/message/reply","tls":"","proxy":"","authType":"","x":730,"y":280,"wires":[["b4374a5.eee4c38"]]},
{"id":"701fae9f.57081","type":"function","z":"77645773.e3de38","name":"setMsg","func":"flow.set(\"replyToken\",msg.payload.events[0].replyToken);\n\nmsg.payload = msg.payload.events[0].message.text;\n\nreturn msg;","outputs":1,"noerr":0,"x":210,"y":140,"wires":[["c097ab20.f07b68","9d80eaf2.1173c8"]]},
{"id":"b9f41b64.e45e7","type":"debug","z":"77645773.e3de38","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":290,"y":60,"wires":[]},{"id":"c097ab20.f07b68","type":"watson-conversation-v1","z":"77645773.e3de38","name":"","workspaceid":"%WATSON WORKSPACEID%","multiuser":false,"context":true,"empty-payload":false,"default-endpoint":true,"service-endpoint":"https://gateway.watsonplatform.net/assistant/api","timeout":"","optout-learning":false,"x":310,"y":200,"wires":[["2e8bdc9a.aacfd4","7ea61d74.5413b4"]]},
{"id":"2e8bdc9a.aacfd4","type":"function","z":"77645773.e3de38","name":"getAssistantMsg","func":"var post_request = {\n \"headers\": {\n \"content-type\": \"application/json; charset=UTF-8\",\n \"Authorization\": \" Bearer \" + \"{%LINE アクセストークン%}\"\n },\n \"payload\": {\n \"replyToken\": flow.get(\"replyToken\"),\n \"messages\": [\n {\n \"type\": \"text\",\n \"text\": msg.payload.output.text[0]\n }\n ]\n }\n};\n\nreturn post_request;\n","outputs":1,"noerr":0,"x":520,"y":240,"wires":[["5342dac8.30af54"]]},
{"id":"7ea61d74.5413b4","type":"debug","z":"77645773.e3de38","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":510,"y":160,"wires":[]},{"id":"b4374a5.eee4c38","type":"debug","z":"77645773.e3de38","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":780,"y":220,"wires":[]},
{"id":"9d80eaf2.1173c8","type":"http response","z":"77645773.e3de38","name":"","statusCode":"","headers":{},"x":370,"y":120,"wires":[]}]
こんな感じで、フローが追加できます。
フローは、LINEからメッセージ取得>Assistant>応答メッセージを返すだけです。
まず、接続済のAssistantに「workspace id」を設定します。assistantのノードをダブルクリックします。

WorkSpaceIDのとこを先ほど取得したものに置き換えます。

最後にこのNode-RedアプリケーションのURLを取得しておきます。LINEDevelpersで設定します。
下記の赤線までのURLにline_bot/をつけたものになります。
line_botはNode-Redのフローの一番最初のgetmessageで設定しています。
https://アプリ名.au-syd.mybluemix.net/line_bot/

LINE Developers設定
次に、LINE Developersを設定します。LINEアカウントを持っている前提で進めます。
ログイン
下記のLINE Developerに行き、ログインを押します。
https://developers.line.biz/ja/


新規プロバイダー
プロバイダー名入れるだけですね。

新規チャンネル
必要項目を入力していきます

チャネル設定
ここからが、LINEからNode-REDに接続する設定になります。
作った、チャネルを開きます。

- アクセストークンを発行してください。Node-REDに設定します
- WebHook送信を利用するに変更
- WebHookURLにNode-REDのアプリのURLを設定
- 自動応答メッセージは自由に設定

Node-Red設定②
Node-REDのフロー編集画面に戻ります。
getAssistantMsgをダブルクリックします

%LINE アクセストークン%をLINE Developersで取得したアクセストークンに置き換えます。

以上で終了です。お疲れ様でした。
LINEでQRコードでお友達追加して、メッセージを送ってみましょう。
最後に
チャットボットは結構作っても、使われることなく失敗しそうなイメージがありますが、ちゃんと使って便利だなと思えるチャットボットを作っていきたいと思います。