みかづきブログ・カスタム

基本的にはちょちょいのほいです。

LINE Messaging APIを使って、LINE Botからメッセージに応じたテキストを返信する(ぬるぽの時だけガッを返す) 📱


前回 はユーザーから何と送られてきても、「Hello World.」と返信するLINE Botをつくってみましたが、今回はユーザーのメッセージの内容に応じて返信するテキストを変更してみます。

コードを書くまでの工程は 前回 と全く一緒なので省略します。

blog.kimizuka.org

コードを書く

.env

CHANNEL_SECRET=LINEのチャネルシークレットを記載
CHANNEL_TOKEN=LINEのチャネルアクセストークンを記載
NGROK_AUTH_TOKEN=Ngrokのオーストークンを記載

package.json

{
  "scripts": {
    "upgrade:ngrok": "ngrok config upgrade"
  },
  "dependencies": {
    "@line/bot-sdk": "^8.0.1",
    "dotenv": "^16.3.1",
    "express": "^4.18.2"
  },
  "devDependencies": {
    "ngrok": "^5.0.0-beta.2"
  }
}

index.js

'use strict';

require('dotenv').config();

const ngrok = require('ngrok');
const express = require('express');
const line = require('@line/bot-sdk');
const { CHANNEL_SECRET, CHANNEL_TOKEN, NGROK_AUTH_TOKEN } = process.env;
const PORT = process.env.PORT || 3000;
const config = {
  channelSecret: CHANNEL_SECRET,
  channelAccessToken: CHANNEL_TOKEN
};
const client = new line.Client(config);

async function handleLineWebHook(event) {
  if (event.type === 'message' || event.message.type === 'text') {
    // event.message.textに送られてきたメッセージのテキストが入っている
    if (/^ぬるぽ$/.test(event.message.text)) {
      return client.replyMessage(event.replyToken, {
        type: 'text',
        text: 'ガッ' // ぬるぽに対する返信
      });
    }
  }

  return client.replyMessage(event.replyToken, {
    type: 'text',
    text: '...' // ぬるぽ以外に対する返信
  });
}

const app = express();

app.use('/webhook', line.middleware(config));

app.post('/webhook', (req, res) => {
  if (req.body.events.length === 0) {
    res.sendStatus(200);

    return;
  }

  Promise.all(req.body.events.map(handleLineWebHook)).then((result) => {
    return res.json(result);
  });
});

app.listen(PORT);

(async () => {
  const url = await ngrok.connect({
    addr: PORT,
    authtoken: NGROK_AUTH_TOKEN
  });

  console.log(`BOT_SERVER_URL: ${ url }/webhook`);
})();

前回 から、handleLineWebHookの中身だけを変更しています。

if (event.type === 'message' || event.message.type === 'text') {
  if (/^ぬるぽ$/.test(event.message.text)) {
    return client.replyMessage(event.replyToken, {
      type: 'text',
      text: 'ガッ'
    });
  }
}

ここで、送られてきたメッセージを判定し、「ぬるぽ」と完全一致した際のみ「ガッ」と返信しています。

if (event.type === 'message' || event.message.type === 'text') {
  if (/ぬるぽ/.test(event.message.text)) {
    return client.replyMessage(event.replyToken, {
      type: 'text',
      text: 'ガッ'
    });
  }
}

と、正規表現を変更すれば、部分一致にもできます。

早速WebHookのURLを変更して挙動を確認してみましょう。

「ぬるぽ」と送信したときだけ、「ガッ」と返ってくることが確認できるはずです。
今回は以上です。リポジトリは こちら です。

github.com