Render.comとLINE APIでリマインダーを作成する

公開日: 

経緯

現在自分が所属している組織の『NPO しんじん・るい』では、メンバーとして色々な年齢層の人が在籍しており、業務の主な連絡手段として LINE を用いています。その中で、『業務の自動化』、『リマインダー』があったら便利だねという話になり、LINE bot を自分が実装することになったので記事に残します。

やりたいこと

まずは最小限の機能を搭載したシステムを作りたい。ということで要件は

  • 毎週土曜日に LINE のグループにリマインドを送信

のみです。JavaScript しか普段触っていないので、Node.js で作っていきます。

使用するサービス

LINE API

https://developers.line.biz/ja/services/messaging-api/

Render.com

https://render.com/

LINE API

LINE メッセージを送信する際に使用します。無料プランだと月に 200 通のしか送信することができないので注意が必要です。しかも 5 人のグループに 1 通送ると 5 通扱いになるぽいのでそれも要注意。ただ、今回の要件だと無料プランで十分です。

料金プラン

https://www.lycbiz.com/jp/service/line-official-account/plan/

LINE API については記事を書いているので、詳細はそちらをご覧ください。

https://www.yukendev.com/blogs/tips-line-api

Render.com

定期処理を実行するために、Render.com というサービスを使います。定期処理を実行するサービスはいくつもありますが、めちゃめちゃ簡単にできそうだったのでこれにしました。

記事を書いたので詳しくはそちらをご覧ください。

https://www.yukendev.com/blogs/tips-render-com-cron-job

完成品

https://github.com/yukendev/shin.jing.rui-bot

現状機能が追加されて、毎週土曜日に LINE でリマインドするだけではなくなっていますが。稼働中のシステムです。

詳細

以下のコードが毎週土曜日の午前 9 時半に実行されています。

import { sendLineMessage } from '../api/line.js';
import { getWeekOfMonth } from '../utils/date.js';
import dotenv from 'dotenv';

/*
   日本時間で毎週土曜日の午前9時半に実行されるジョブ
 */
dotenv.config();

const shinjingruiGroupId = process.env.SHINJINGRUI_LINE_GROUP_ID;

if (shinjingruiGroupId !== undefined) {
  const weekOfMonth = getWeekOfMonth();

  if (weekOfMonth === (1 || 3)) {
    // 学習支援&子ども食堂が開催されない土曜日
    sendLineMessage(
      shinjingruiGroupId,
      '来週の学習支援に参加できる人は、絵文字で反応をオネガイシマス🐈‍⬛',
    );
  } else if (weekOfMonth === (2 || 4)) {
    // 学習支援&子ども食堂が開催される土曜日
    sendLineMessage(
      shinjingruiGroupId,
      `今日は第${weekOfMonth}週の土曜日。学習支援と子ども食堂の開催日です🐈‍⬛`,
    );
  }
}

僕たちの団体では、毎月第二と第四土曜日に子ども達の学習支援事業と子ども食堂を開催しています。

毎週来れる人を LINE で聞くのが忘れがちで、数日前になって人が足りない!?っていう事態があったので、自動で毎週第一と第三土曜日に自動で参加の呼びかけをするようにしました。

以下が LINE API の呼び出し部分です。

import https from 'https';

export const sendLineMessage = (id: string, message: string) => {
  const token = process.env.LINE_ACCESS_TOKEN;

  const data = JSON.stringify({
    to: id,
    messages: [
      {
        type: 'text',
        text: message,
      },
    ],
  });
  const options = {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      Authorization: `Bearer ${token}`,
    },
  };
  const url = 'https://api.line.me/v2/bot/message/push';
  const request = https.request(url, options);
  request.write(data);
  request.end();
};

API の呼び出しとは言っても、ただトークンを含んだリクエストを送っているだけです。

以上で、毎週定期的に LINE でリマインドを送るようなシステムを作ることができました。

最後に

こういうの作ってる時が一番楽しい。

では

Bye