第6話 オウム返しBOTを作ってみる
こんにちは!Kenです。
前回はすごくボリュームのある回でしたね(^◇^;)
今回は軽めの内容にしたいと思います。題名の通り、こちらの送ったメッセージを繰り返し返信するオウム返しBOTです。
今回の狙いはmessageイベントを理解するところにあります。
switch構文への追加
const lineBot = (req,res) => {
res.status(200).end();
const events = req.body.events;
const promises = [];
for(let i=0;i<events.length;i++){
const ev = events[i];
switch(ev.type){
case 'follow':
promises.push(greeting_follow(ev));
break;
}
}
Promise
.all(promises)
.then(console.log('all promises passed'))
.catch(e=>console.error(e.stack));
}
前回までのコードです。switch構文で、イベントの種類によって処理を場合分けしています。
LINEで「こんにちは」とか「ハロー」とかの通常メッセージが送られてきた場合のイベントの種類はmessageとなります。これを踏まえて上のコードに追加していきましょう。
switch(ev.type){
case 'follow':
promises.push(greeting_follow(ev));
break;
case 'message':
promises.push(handleMessageEvent(ev));
break;
}
このようにmessageイベントのケースを追加します。
そして同様にhandleMessageEvent( )という関数をpromisesにpushしてあげます。
handleMessageEvent( )のコーディング
こんな感じで実装します。
const handleMessageEvent = async (ev) => {
const profile = await client.getProfile(ev.source.userId);
const text = (ev.message.type === 'text') ? ev.message.text : '';
return client.replyMessage(ev.replyToken,{
"type":"text",
"text":`${profile.displayName}さん、今${text}って言いました?`
});
}
ちなみに今回のevの内容は次のようになります。
ev: {
type: 'message',
replyToken: 'xxxxxxxxxxxxxxx',
source: { userId: 'yyyyyyyyyyyyyy', type: 'user' },
timestamp: 1601102227933,
mode: 'active',
message: { type: 'text', id: 'zzzzzzzzzzzz', text: 'こんにちは' }
}
messageのtypeがtextの場合、変数textにev.message.textを代入し、それ以外の時は空文字を代入してます。
ここまで出来たら、herokuへデプロイします。
$ git add .
$ git commit -m "handleMessageEvent added"
$ git push heroku master
デプロイは成功しましたか。
LINEで以下のように返信がくれば成功です!
物足りないかもしれませんが、今回は以上です!
次回はPostgreSQLを使ったデータベースを構築していきたいと思います。
少しでも参考になりましたら「スキ」をいただけると幸いです。
最後までお読みいただき、ありがとうございました!
MENTA でLINEBOT開発サポートをしております。お気軽にご相談ください。