見出し画像

第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で以下のように返信がくれば成功です!

画像1

物足りないかもしれませんが、今回は以上です!

次回はPostgreSQLを使ったデータベースを構築していきたいと思います。

少しでも参考になりましたら「スキ」をいただけると幸いです。

最後までお読みいただき、ありがとうございました!

MENTA でLINEBOT開発サポートをしております。お気軽にご相談ください。

この記事が気に入ったらサポートをしてみませんか?