何をしたいのか?
Bot(Incoming Webhook)に掃除する日を決めてもらい、指定する時間に通知をしてほしい。
きっかけ
- 複数人で利用している事務所がある
- 定期的に掃除する日がない
- 掃除のために定期的に集まるのは難しい
→ Botから通知で居合わせた人たちで掃除しよう
と考えた
使うアプリケーション
-
Slack
業務でよく使うため -
Incoming Webhook
常時稼働が不要とサーバーを立てる必要がない -
Google Apps Script(GASと略す)
定期的にコードを実行する設定がしやすい
具体的な進め方
- SlackのチャンネルとIncoming Webhookを連携させる
- Incoming Webhookから1/30の確率でSlackへ通知するように、GASにコードを書く
- GASのnotifyトリガーで決まった時間帯にコードを実行するように設定する
1. SlackのチャンネルとIncoming Webhookを連携させる
https://slack.com/apps/A0F7XDUAZ--incoming-webhook-?next_id=0 にアクセスして、Slackに追加を押す
チャンネルへの投稿で導入したいチャンネルを選択する
2. Incoming Webhookから1/30の確率でSlackへ通知するように、GASにコードを書く
https://drive.google.com/drive/u/0/my-drive にアクセスし、左上から新規→その他→Google Apps Scriptを押す
コードは以下のように書いた
Incoming Webhookからのメッセージは自由に変えられる
function main(){
var result;
// 1/30の確率で通知させたい
//Math.random()は0~1未満までをランダムに生成
//Math.floor()は小数点以下を切り捨て整数を返す
//0~29のうち29以上であればIncomigWebhookから通知が来る
result = Math.floor(Math.random()*30);
if(result >= 29){
Do_notify();
}
}
function Do_notify() {
var options =
{ // 以下のテキストはJSONの様式にそって書くと変更できる
"method" : "post",
"contentType" : "application/json",
"payload" : JSON.stringify(
{
"attachments":[
{
"fallback":"今日は掃除の日です",
"pretext":"<!channel> 今日は掃除の日です",
"color":"#D00000",
"fields":[
{
"title":"掃除内容は以下の通りです ",
"value":"*_掃除機かける_* \n *_デスクのアルコール除菌_* \n *_ホワイトボード消し_*",
"short":false,
"mrkdwn_in": ["value"]
}
]
}
]
}
)
};
UrlFetchApp.fetch("https://hooks.slack.com/services/XXXXXXX/XXXXXX/XXXXXXXXXXXXXX", options);
}
3. GASのnotifyトリガーで決まった時間帯にコードを実行するように設定する
以下のボタンを押してトリガーを設定する
トリガーを追加を押すと分ベースや時間ベースで定期的に実行できるように設定できる
1日毎の17時から18時の間で実行するようにセットし、保存を押せば完成