Oteto Blogのロゴ

GASとTeamsを連携しWebhookでチャネルに自動通知を行う

やりたいこと

GASを使ってTeamsのチャネルに自動投稿をしたい。

あわよくばメッセージ内で特定のメンバーにメンションし、かつ時間指定して毎日特定の時刻に定期実行したい。

解決法

1. Incoming WebhookのURLを取得

TeamsではIncoming Webhookを利用できるので、その下準備としてWebhook URLを取得しておく。

やり方は公式ドキュメントが参考になる。

1. メッセージ作成

今回は例として「Adaptive Card」の形式でメッセージを送信してみる。

function createPostContent(memberName) {
  return {
    type: "message",
    attachments: [
      {
        contentType: "application/vnd.microsoft.card.adaptive",
        content: {
          type: "AdaptiveCard",
          body: [
            {
              type: "TextBlock",
              text: `Hello ${memberName}.`,
            },
          ],
          $schema: "http://adaptivecards.io/schemas/adaptive-card.json",
          version: "1.0",
        },
      },
    ],
  };
}

送信内容をオブジェクトとして設定する。

今回はサンプルなのでTextBlockのみを使って単純なテキストのみを送信するが、公式が提供しているGUI上のアダプティブカードデザインツールを使えばより複雑なものを設定できる。

2. メンションを加える(任意)

特定のメンバーに対してメンションし通知したい場合は下記の方法で実現できる。 【Teams】Incoming Webhookでメンションを付けて個人宛に通知する

3. 送信処理の実装

function postTeams() {
  const webhookUrl = "<Incoming WebhookのURL>";
  const postContent = createPostContent();
  const params = {
    method: "post",
    contentType: "application/json",
    payload: JSON.stringify(postContent),
  };

  UrlFetchApp.fetch(webhookUrl, params);
}

最後にTeamsへの送信処理の実装。

先ほど取得したIncoming WebhookのURLと送信内容を渡し、GASのUrlFetchApp.fetch()でPOSTすれば完了。

4. トリガー設定(任意)

時間指定して毎日特定の時刻にGASのジョブを実行したい場合は下記の方法で実現できる。 【GAS】時間指定で毎日定期実行されるトリガーを設定する