search
LoginSignup
9

More than 1 year has passed since last update.

posted at

updated at

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

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 ]

まとめと所感

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

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

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

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
What you can do with signing up
9