1
/
5

Node.jsでLINEリッチメニュー適用スクリプトを書いてみた

この記事はdotD公式noteの転載です。

執筆者は、Server-side Engineer 前田翔平さんです。

https://www.wantedly.com/companies/company_7005547/post_articles/372001


こんにちは!dotDでmeepaの開発を担当している前田です。

meepa | 子どもの本当の好きに出会う 課外活動マッチングサービス子どもの本当の好きに出会う 課外活動マッチングサービス。meepaは親の思い込みや限られた情報にとらわれない、子どもの「本meepa.io

以前、「LINE Messaging APIでリッチメニューを作成・表示させる方法」を書きましたが、「毎回richMenuId・画像を設定して何度もAPIを叩くのが面倒・・・」と思い始めてきました。
なので、Node.jsでリッチメニュー適用スクリプトを書いて、コマンド1回実行すれば、指定したLINEボットにデフォルトのリッチメニューが適用されるようにしました。

https://note.com/shohei_12/n/n5f533b9e8bb4


特に、リッチメニューの更新頻度が多い方や、複数のLINEボットに同じリッチメニューを適用しなければならない方は、ぜひこの記事をご覧ください!
リッチメニューの適用を楽に行うことができるようになります!

目次

  1. スクリプト
  2. まとめ

スクリプト

import fs from "fs";
import { Client } from "@line/bot-sdk";
import { CHANNEL_ACCESS_TOKEN, RICH_MENU } from "./config.js";

class RichMenu {
  constructor(client, richmenu) {
    this.client = client;
    this.richmenu = richmenu;
  }

  // デフォルトのリッチメニューを適用する
  async applyDefaultRichMenu() {
    await this.#createRichMenu();
    await this.#setRichMenuImage();
    await this.#setDefaultRichMenu();
  }

  // リッチメニューを作成する
  async #createRichMenu() {
    await this.client.createRichMenu(this.richmenu).then((richMenuId) => {
      this.richMenuId = richMenuId;
    });
  }

  // リッチメニューの画像をアップロードする
  async #setRichMenuImage() {
    await this.client.setRichMenuImage(
      this.richMenuId,
      fs.createReadStream("./public/img/img_richMenu.png")
    );
  }

  // デフォルトのリッチメニューを設定する
  async #setDefaultRichMenu() {
    await this.client.setDefaultRichMenu(this.richMenuId);
  }
}

const client = new Client({
  channelAccessToken: CHANNEL_ACCESS_TOKEN,
});
const richmenu = RICH_MENU;

const richMenu = new RichMenu(client, richmenu);

// デフォルトのリッチメニューを適用する
richMenu.applyDefaultRichMenu();

このスクリプトは、applyDefaultRichMenu()を実行して、①リッチメニューを作成する → ②リッチメニューの画像をアップロードする → ③デフォルトのリッチメニューを設定する の順でAPIを叩いて、指定したLINEボットにデフォルトのリッチメニューを適用します。

コンストラクタの第1引数には、以下の値を渡します。
'<channel access token>'はLINE Messaging APIのChannel access tokenです。

new Client({
  channelAccessToken: '<channel access token>',
});

コンストラクタの第2引数には、リッチメニューオブジェクトを渡します。

{
  size: {
    width: 2500,
    height: 1686
  },
  // Other rich menu object properties
  // ...
}

まとめ

業務のなかで、複数のLINEボットにリッチメニューを適用する場面が度々あり、もっと速く適用できたらいいなと思ったので、スクリプトを書きました。

今回の件で、手作業をしているところで自動化・効率化できそうなことはガンガンしていきたいなと思いました!

最後に、dotDでは、新しい事業を共に作っていくためのエンジニアのメンバーを募集しています!
少しでも興味を持ってくださった方はお気軽にご連絡ください!!


株式会社dotD | 事業創造ファームdotDはB2B,B2Cに関わらずのデジタルを活用した事業を連続的、非連続的に作り出すことによって社会の基盤になることを目dotd-inc.com

株式会社dotD's job postings

Weekly ranking

Show other rankings
Invitation from 株式会社dotD
If this story triggered your interest, have a chat with the team?