LoginSignup
22
9

More than 3 years have passed since last update.

友達全員にメッセージを送るシンプルな送信専用LINE BOTを作る【Node.js】 #linedc

Last updated at Posted at 2020-12-16

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などの名前でファイルを作成し、以下を記述します。

チャンネルシークレットチャンネルアクセストークンを実際の値に変更しましょう。

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. 完成! 実際の送信された様子

これで完成!すぐですね〜

スクリーンショット 2020-12-16 22.56.42.png

ブロードキャストメッセージで全員に送信

ブロードキャストメッセージは、プッシュメッセージの種類の一つとなります。

  • プッシュメッセージ: 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通/月までなので注意

ブロードキャストメッセージは、配信ごとに無料メッセージ通数が減っていくので注意しましょう。

スクリーンショット 2020-12-16 23.29.36.png
https://www.linebiz.com/jp/service/line-official-account/plan/

リプライメッセージが無いとこんなにシンプル

  • Webhookの設定がいらない

コードを見ると分かりますが、expressなどを使ってなく、サーバーを立てるなどが必要ないです。

スクリーンショット 2020-12-16 23.16.29.png

Webhook設定は空ですが問題なく動いています。

  • 管理画面での設定もデフォで大丈夫

今回気づきましたが、Webhookをオンにするなどをする必要が無いと、特にBOTの管理画面で設定を変更する必要もなく、動いてくれます。

  • ngrokなどのトンネリングやHerokuなどサーバーの準備をする必要が無い

サーバーが不要なので、今までngrokでトンネリングして検証したり、Herokuなどにホスティングして試すということをしてましたが、それらも不要です。

  • ハンズオンなどでも良いかも

サーバー不要で検証もいらないので、 とりあえず試すには向いてそう。

おまけ: 実用化させるために

このスクリプトをGitHub Actionsなどで定期実行すればOKですね。
(GitHub Actionsの使い方は各自調べて下さい!)

github/workflows/node.js.yml
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 ]

まとめと所感

今までとりあえずのチュートリアルはリプライメッセージをベースにやっていたけど、ブロードキャストメッセージを使った配信専用も手軽で良さそうですね。

ハンズオンのバリエーションが増えそうです。

(年末なので) 今年もお世話になりました!良いお年を〜

22
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
9