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

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

LINE Messaging APIを使って、LINE Botから定型文を返信する 📱

前回 はこちらのタイミングで定型文を送信するLINE BOTをつくりました。
今回は、Node.jsを使って、定型文を返信するLINE Botを作成します。
途中までは、前回の記事 と全く一緒です。

blog.kimizuka.org

共通の準備(前回と一緒なのでスキップ可能)

❶ Developerアカウントを作成する

https://developers.line.biz/ja/ からアカウントを作成します。
既にアカウントを持っている方はスキップしてください。

developers.line.biz


詳しくは こちら

developers.line.biz

❷ プロバイダーを作成する

https://developers.line.biz/console/ にログインして、プロバイダーの作成ボタンを押下し、プロバイダーを作成します。
既にプロバイダーを持っている方はそちらを使用しても大丈夫です。

詳しくは こちら

developers.line.biz

❸ チャンネルを作成する

❷で作成したプロバイダから、新規チャンネルを作成します。
今回はLINE BOTをつくるためのチャンネルなので、Messaging APIを選択します。

必須項目をすべて埋めて、Messaging APIを作成しましょう。



詳しくは こちら

developers.line.biz

❹ チャネルシークレットをメモする

「チャネル基本設定」から「チャネルシークレット」をメモします。あとで使います。

❺ チャネルアクセストークンを発行しメモする

❸で作成したチャンネルの「Messaging API設定から」から「チャンネルアクセストークン」の「発行ボタン」を押下し、チャンネルアクセストークンをメモします。あとで使います。

詳しくは こちら

developers.line.biz

❻ Botと友達になる

「Messaging API設定」のQRコードを読み込み、友達になります。

今回用の準備

❶ Ngrokのアカウントを作成しauthtokenをメモする(任意)

LINE BOTがメッセージを受け取った際の処理を書くには、WebHookを使ってイベントを受け取る必要があります。

developers.line.biz

イベントを受け取るボットサーバーは、グローバルに公開されている必要があるため、開発中はNgrokなどのツールを使ってローカルに立てたサーバをグローバルに公開すると、挙動確認のために何度もデプロイしなくて済むので便利です。

ngrok.com

Ngrokはエングロックと読みます。Nginx(エンジンエックス)と、ほぼ同じ法則の読み方ですね。

アカウントを作成したら、 https://dashboard.ngrok.com/get-started/your-authtoken からauthtokenを確認し、メモしておきましょう。
Ngrokはダウンロードして、グローバルにインストールしても良いのですが、僕はいつもnpmでローカルにインストールして使っています。

実装

❶ コードを書く

.env
CHANNEL_SECRET=共通の準備❹でメモしたチャネルシークレットを記載
CHANNEL_TOKEN=共通の準備❺でメモしたチャネルアクセストークンを記載
NGROK_AUTH_TOKEN=今回用の準備❶でメモしたオーストークンを記載
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;
// 将来を見据えて.envでポートを指定できるようにしておくが、今回は未指定なので3000となる
const PORT = process.env.PORT || 3000;
const config = {
  channelSecret: CHANNEL_SECRET,
  channelAccessToken: CHANNEL_TOKEN
};
const client = new line.Client(config);

async function handleLineWebHook(event) {
  return client.replyMessage(event.replyToken, {
    type: 'text',
    text: 'Hello World.' // 返信内容
  });
}

const app = express();

// middlewareを読み込む位置に注意が必要
// https://line.github.io/line-bot-sdk-nodejs/guide/webhook.html
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 }`);
})();

コード内のコメントにも書きますが、ミドルウェアを読み込む場所を間違えると動きません。

line.github.io

昔は、

app.post('/webhook', line.middleware(config), (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);
  });
});

で、動いたような気がするのですが、これだと動かなくなってました。

❷ コードを実行する

初回のみ、

npm install

と、

npm run upgrade:ngrok

が必要です。

npm install は必要なライブラリのインストール。
npm run upgrade:ngrok はngrok.ymlの作成を行います。

それ以降は、

node index.js

でOKです。

実行すると、ターミナルに、

BOT_SERVER_URL: https://HOGEHOGE.ngrok-free.app/webhook

と、Ngrokの力で世に公開されたURLが表示されるのでメモしておきます。
このURLは、実行する度、毎回変わります。

❸ WebHookのURLを設定する

LINE Developers にログインし、チャンネルの「Messaging API設定 > Webhook設定 > Webhook URL」から、WebHookのURLを設定します。
WebHookのURLは❷でメモしたURLです。

URLを入力したら、「検証」を押下してみましょう。
うまくいっていれば、「成功」と表示されます。

成功したら、「Messaging API設定 > Webhook設定 > Webhookの利用」をONにします。

❹ LINE BOTの設定を変更する

実は、LINE BOTには標準で自動返信機能が備わっており、これをOFFにしないとWebHookとバッティングするのでOFFにします。

「Messaging API設定 > Webhook設定 > LINE公式アカウント機能 > 応答メッセージ」の編集を押下し、「Webhook」をONに、「応答メッセージ」をOFFにします。


❺ メッセージを送信してみる

これで、すべての設定が完了です。

試しにLINE BOTに何かメッセージを送信してみましょう。
なにを送信しても、即レスで「Hello World.」と返してくれるはずです。

リポジトリは こちら です。

github.com