やりたいこと
定期的なリマインドを自動でTeamsに投稿したい。
例えば、「経費申請は明日が締め切りなので今日までに申請してね」とか忙殺されがちな月次事務処理の連絡とか。
自動でチーム全体に通知が届けば、「いつも前もって申請してよ」から解放されるはず。
まずはTeamsにWebhookで投稿をしてみる
事前準備
Webhookを受信する準備を整えます。
以下を参考に受信したいチームのチャネルに対して受信Webhookを作成する。
Webhookとは?
Webサービスやアプリケーションに用意されたURLにPostのHTTPリクエスト送ることで
Webサービスやアプリケーションに通知や更新の動作をさせること。
jsonのパラメータを渡してリクエストすることで、Webサービス側で受け取ったパラメータを利用した通知を表示してくれたりします。
↓を見るとわかりやすいと思います
Webhookしてみる
PowerShellを立ち上げてリクエストしてみる
$url = "受信WebhookのURL"
$body = ConvertTo-JSON @{
title = '連絡'
text = '経費申請は明日が締め切りなので今日までに申請してね'
}
$body = [Text.Encoding]::UTF8.GetBytes($body)
# Postする
Invoke-RestMethod -Method Post -Uri $url -Body $body -ContentType 'application/json'
こんな感じに投稿される
よしよし
あとはWindowsのタスクスケジューラに登録すれば‥
だと、PCの起動状態に左右されるし、
サーバーがあればそれを使ってもいいけど
どうせならGoogleAppScriptを使って定期的にリクエストをすることで
PCの電源をoffにしていても自動投稿される仕組みが望ましい。
スプレッドシートを開こう
スクリプトを追加する。
function postTeams() {
const postContents = {
"type": "message",
"attachments": [{
"contentType": "application/vnd.microsoft.card.adaptive",
"contentUrl": null,
"content": {
"type": "AdaptiveCard",
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"version": "1.4",
"body": [{
"type": "Container",
"items": [{
"type": "TextBlock",
"text": "経費申請の連絡",
"wrap": true,
"style": "heading",
"color": "Accent"
}],
"style": "accent"
}, {
"type": "Container",
"items": [{
"type": "TextBlock",
"text": "経費申請は明日が締め切りなので今日までに申請してね",
"wrap": true,
"style": "default",
"size": "Medium",
"weight": "Bolder"
}, {
"type": "ActionSet",
"actions": [{
"type": "Action.OpenUrl",
"title": "今すぐ申請する",
"style": "positive"
}]
}]
}]
}
};]
};
var webhookUrl = '受信WebhookのURL';
var params = {
method: 'post',
contentType: 'application/json',
payload: JSON.stringify(postContents)
};
var response = UrlFetchApp.fetch(webhookUrl, params);
}
titleとtextだけ渡してもいいけど、
AdaptiveCardを使うことで見た目のレイアウトも変更できる。
↓を使うことでGUI操作で簡単にデザインができるのでとても便利。
毎月指定した日に実行させるトリガーを作成する
締め切りは10日なので、毎月前日の9日の朝9時~10時に投稿させよう。
ちょっと見た目が際立つ感じで投稿されました
注意点
- 残念なことにチーム全体やチャネル全体へのメンションがまだできない。(みんな気付いてくれるだろうか...)
※ユーザー個人にはメンションできるみたいです。