1
/
5

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

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

meepa | 子どもの本当の好きに出会う 課外活動マッチングサービス
meepaは「子どもの本当の好きに出会う」を目指して、幼稚園・保育園・学童などで子どもたちが様々な体験の機会を得られるように、園と課外活動提供者をマッチングするサービスです。
https://meepa.io/

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

LINE Messaging APIでリッチメニューを作成・表示させる方法|Shohei Maeda
こんにちは。dotDでmeepaの開発を担当している前田です。 Meepa | 子どもの本当の好きに出会えるAIによる課外活動マッチング 子どもの本当の好きに出会えるAIによる課外活動マッチング。忙しいお父さん・お母さんでも10分で使うことができ、お父さん・お meepa.io ...
https://note.com/shohei_12/n/n5f533b9e8bb4

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

▼目次

  • スクリプト
  • まとめ

スクリプト

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();
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>',
});new Client({
channelAccessToken: '<channel access token>',
});

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

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

まとめ

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

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

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


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



株式会社dotDからお誘い
この話題に共感したら、メンバーと話してみませんか?
株式会社dotDでは一緒に働く仲間を募集しています

同じタグの記事

今週のランキング

funabashi yukikoさんにいいねを伝えよう
funabashi yukikoさんや会社があなたに興味を持つかも