LINE BOTは大枠はユーザーからの投稿に返信するリプライメッセージ
と、BOT起点でユーザーにメッセージを配信するプッシュメッセージ
に分かれますが、後者のプッシュメッセージのみ(後述: 厳密にはブロードキャスト)でBOTを作ってみたいと思います。
久々に#linedc
イベント参加してみたので勢いで執筆〜
STEP0. まずはBOTアカウント作成やチャンネルシークレット取得
1時間でLINE BOTを作るハンズオンの資料のSTEP1までを終わらせましょう。
STEP1. JavaScriptコードのコピペでBOT作成
プロジェクト用のフォルダ準備します。とりあえずmylinebot
としました。
$ mkdir mylinebot
$ cd mylinebot
SDKのインストール
$ npm init -y
$ npm i @line/bot-sdk
mylinebot
フォルダにapp.js
などの名前でファイルを作成し、以下を記述します。
※チャンネルシークレット
とチャンネルアクセストークン
を実際の値に変更しましょう。
'use strict';
const line = require('@line/bot-sdk');
const config = {
channelSecret: 'チャンネルシークレット',
channelAccessToken: 'チャンネルアクセストークン'
};
const client = new line.Client(config);
const main = async () => {
const messages = [{
type: 'text',
text: 'いっせい送信です!'
}];
try {
const res = await client.broadcast(messages);
console.log(res);
} catch (error) {
console.log(`エラー: ${error.statusMessage}`);
console.log(error.originalError.response.data);
}
}
main();
実行
$ node app.js
STEP2. 完成! 実際の送信された様子
これで完成!すぐですね〜
ブロードキャストメッセージで全員に送信
ブロードキャストメッセージは、プッシュメッセージの種類の一つとなります。
- プッシュメッセージ: 1人のユーザーに送信する
- マルチキャストメッセージ: 複数のユーザーに送信する
- ナローキャストメッセージ: 属性情報やリターゲティングを利用して複数のユーザーに送信する
- ブロードキャストメッセージ: LINE公式アカウントと友だちになっているすべてのユーザーに送信する (←今回これ)
https://developers.line.biz/ja/docs/messaging-api/sending-messages/#push-messages
通常のプッシュメッセージはユーザーIDを指定して送信する必要がありますが、 ブロードキャストメッセージは友達になっているユーザー全てにメッセージを配信できるので、特にIDを気にせず利用できます。
LINE公式アカウントと友だちになっているすべてのユーザーに、任意のタイミングでプッシュメッセージを送信します。
参考: ブロードキャストメッセージを送る - 公式
Node.jsのSDKにもあるので便利です。メッセージオブジェクトの配列を指定します。
await client.broadcast(`メッセージオブジェクトの配列`);
line/line-bot-sdk-nodejs https://github.com/line/line-bot-sdk-nodejs/blob/e2ffe1a72a7e49e3a7967c4695fb126734a44452/lib/client.ts#L129
フリープランだと1000通/月までなので注意
ブロードキャストメッセージは、配信ごとに無料メッセージ通数
が減っていくので注意しましょう。
https://www.linebiz.com/jp/service/line-official-account/plan/
リプライメッセージが無いとこんなにシンプル
- Webhookの設定がいらない
コードを見ると分かりますが、expressなどを使ってなく、サーバーを立てるなどが必要ないです。
Webhook設定は空ですが問題なく動いています。
- 管理画面での設定もデフォで大丈夫
今回気づきましたが、Webhookをオンにするなどをする必要が無いと、特にBOTの管理画面で設定を変更する必要もなく、動いてくれます。
- ngrokなどのトンネリングやHerokuなどサーバーの準備をする必要が無い
サーバーが不要なので、今までngrokでトンネリングして検証したり、Herokuなどにホスティングして試すということをしてましたが、それらも不要です。
- ハンズオンなどでも良いかも
サーバー不要で検証もいらないので、 とりあえず試すには向いてそう。
おまけ: 実用化させるために
このスクリプトをGitHub Actionsなどで定期実行すればOKですね。
(GitHub Actionsの使い方は各自調べて下さい!)
name: 日本時間の12:30,18:30に配信
on:
schedule:
- cron: '30 3,9 * * *' #(UTCなので9時間ズレ)
jobs:
build:
# マシン準備
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [15.x]
# 以下が実際のステップ
steps:
- uses: actions/checkout@v2
- name: Use Node.js 15.x
uses: actions/setup-node@v1
with:
node-version: '15.x'
- name: npm install command
run: npm i
- name: メッセージ配信
run: node app.js
初回プッシュ時だけ、cron
周辺のコードを以下にして実行すると安定します。
on:
push:
branches: [ master ]
まとめと所感
今までとりあえずのチュートリアルはリプライメッセージをベースにやっていたけど、ブロードキャストメッセージを使った配信専用も手軽で良さそうですね。
ハンズオンのバリエーションが増えそうです。
(年末なので) 今年もお世話になりました!良いお年を〜