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】時間指定で毎日定期実行されるトリガーを設定する