35
23

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 2018-07-04

大分前の話ですが、以前bluemix冬の大勉強会でNode-REDの本をいただいたので、早速色々試そうと思い、この中にあったLINE botを試そうとしたのですが、IBM Cloudに変わってかなり仕様が変わってしまい色々ハマってしまいました。しかも調べてもLINEとNode-REDの連携する方法があまりネットになかったので、Node-REDでボットを作る方法をまとめようと思います。

必要なもの

  • IBM Cloudのアカウント(無料のライトプランでOK)
  • LINE Developerアカウント

※今回は「はじめてのNode-RED(工学社)」を参考にしています。

チャンネルの作成

まずはLINE Developersにログインし、Messaging APIにアクセスします。

スクリーンショット 2018-07-02 03.32.26.png

ここからブロバイダーを選択します。無い場合は新規で作成します。
スクリーンショット 2018-07-02 03.33.47.png

チャンネルの情報を入力します。入力が完了したらそのまま次に進んで作成を完了させます。
スクリーンショット 2018-07-02 03.37.58.png

この後、チャンネルの基本設定では次の項目を設定していきます。

  • Wabhook:有効
  • Webhook URL:この後設定します
  • Channel Secret:再発行(後で使うのでコピーします)
  • アクセストークン:後で使うのでコピーします
  • QRコード:スマホで読み込んで友達登録しておきます

Node-REDの設定

ここで一旦line developerから離れてIBM Cloudにログインして、リソースの作成を開きます。この中からNode-RED Starterを開きます。

resource.PNG

アプリ名を設定し、アプリを作成します。

set.PNG

Node-REDが開くので、ここからユーザー名、パスワードを設定します。多分再設定できないので忘れないようなユーザ名、パスワードを設定します。ワークスペースまでたどり着いたら、まずは入力の「httpノード」と出力の「debugノード」を接続します。httpノードの設定を「Method : POST」、「URL : /callback」とします。
スクリーンショット 2018-07-03 03.21.00.png

完成したら、「<ホスト名>.mybluemix.net/callback」を先ほどのMessaging APIのチャンネル設定のページにあるWebhook URLの欄に入力し、「接続確認」ボタンを押します。おそらく場合によってはエラー文が出力されることもありますが、Node-REDのデバッグでこのようなオブジェクトが出たらLINEのチャンネルと通信できています。
(2019/10/12追記)接続確認の方法に関してはこちらの記事でまとめました

スクリーンショット 2018-07-03 03.26.54.png

Node-REDにLINE bot SDKをセットアップする

これでMessaging APIとNode-REDの通信を行うことができました。ただ、このままだとメッセージを受け取るだけでメッセージを送信することはできません。そこでNode-REDから返信を行えるようにLINEにあるNode.js用のSDKを使うと簡単に送信できます。IBM CloudのNode-REDを作成した時のリソースにアクセスし、「継続的デリバリー」から「ツールチェーンの表示」をクリックします。

スクリーンショット 2018-07-03 10.55.45.png

本ではローカル環境にコード一式をダウンロードしていくつか修正しますが、Webエディタを使って修正もできるので、今回はこの中にある「Eclipse Orion Web IDE」をクリックし、開きます。

スクリーンショット 2018-07-03 11.13.42.png

この中にある「package.json」を開きこの中の「dependencies」に以下を追加します。

"@line/bot-sdk": "*"

さらにNode-REDから呼び出せるように「bulemix-setting.js」の「functionGlobalContext」に以下を追加します。

linebot: require('@line/bot-sdk')

入力が終わったら一番左のメニューバーにある「Git」をクリックし、Gitを開きます。

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3137303532302f33643631653362392d643534312d653239622d376561622d6465646133613036316364632e706e67.png

ここからコミットを行い、プッシュします。ツールチェーン画面に戻り、「Delivery Pipeline」をクリックします。

スクリーンショット 2018-07-03 11.30.34.png

「Deploy Stage」を実行されていない場合はステージ左上の再生ボタンを押してデプロイを行います。これでNode-REDでLINEのSDKを使うことができます。

簡単なボットを作る

それでは実際にボットを作成していきます。今回は送信されたメッセージにそのまま返答するオウム返しを作ろうと思います。先程作ったフローにfunctionノードと出力のhttpノードを追加し、下図のように接続します。

node.PNG

functionノードには以下のコードを記入して、右上の「デプロイ」ボタンを押します。


const line = context.global.linebot;

const config = {
  channelAccessToken: '<YOUR_TOKEN>',
  channelSecret:  '<YOUR_SECRET>',
};

// create LINE SDK client
const client = new line.Client(config);
// get event
const event = msg.payload.events[0];
// get message
const received_msg = event.message.text;
// return message
var massage = { type: 'text', text: received_msg };


// replay!
client.replyMessage(event.replyToken, massage);

return msg;

これでオウム返しのボットができました。ラインのアプリからメッセージを送ると、このように送ったメッセージがそのまま返ってきます。

C4D27859-0CD4-4A35-905C-DD455EB553FC.png

割とSlackボットは良く見かけますがLINEでも簡単にボットが出来てしまうのはいいなと思います。色んな人に試して貰えるし。しかも、IBM Cloudなので、Watson Assistantなどを使って自然な会話を出来るボットが出来るようになると思うので、色々いじってみようと思います

35
23
3

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
35
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?