GAS(Google Apps Script)で、特定のサイクルで自動でチャットにメッセージを送信したい、というご相談を過去何度か頂戴したことがあります。

Googleチャット、Slack、Chatworkなど、webhookが利用できるツールであれば比較的簡単にそのような自動送信スクリプトを構築できます。

今回は、「毎月の最終金曜日にGoogleチャットにメッセージを送信する」というサンプルコードを公開したいと思います。

私が作成したサンプルコードの主な仕様は以下の通りです。

<サンプルコードの仕様>

・webhookUrl を本番環境のwebhook URLに置き換えてください(Googleチャット以外も対応可能です)。
・textMessage を実際のメッセージ内容に置き換えてください。Googleチャットの場合<users/all>を付けることで自動で全員宛のメンションが付与されます。

サンプルコードをカスタマイズすればかなり便利にご利用いただけるかと思いますので、ぜひ、ご自由にお使いください!

※ご質問にはお答えできませんので予めご承知おきくださいませ。

コード

function sendToChatMonthly() {
  const today = new Date();

  // 月末の日付を取得
  const endOfMonth = new Date(today.getFullYear(), today.getMonth() + 1, 0);

  // 月末から逆算して最終金曜日を検索
  const lastFriday = new Date(endOfMonth);
  while (lastFriday.getDay() !== 5) {
    lastFriday.setDate(lastFriday.getDate() - 1);
  }

  // 最終金曜日のみ実行
  if (today.getDate() === lastFriday.getDate()) {
    const headers = {
      "Content-Type": "application/json; charset=UTF-8",
    };

    const webhookUrl = "https://chat.googleapis.com/v1/spaces/ABCDEFGHI/messages?key=◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯";

    const textMessage = `<users/all>\n【シフト提出】\n本日はシフト提出期限です。お忘れなく!`;

    const options = {
      method: "post",
      headers: headers,
      payload: JSON.stringify({ text: textMessage }),
    };

    UrlFetchApp.fetch(webhookUrl, options);
  }
}

トリガー設定

対象関数:sendToChatMonthly

「時間手動型」かつ「日付ベースのタイマー」で、メッセージを送信されたい時間帯を指定して設定してください。