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