⏰
特定のreactionを付けると時間に応じてリマインドするSlack Bot [Google Apps Script]
Later Bot
:later-: prefixのリアクションがついた時に、以下のタイミングでリアクションをつけた人にメンションを飛ばすSlack BotをGASで実装しました
- リアクションを付けた時
- リアクションの種類に応じたリマインドタイミング (e.g. :later-5min:なら5分後)


手順
Slack APIに登録するresponse urlが二つ欲しいので、Spreadsheet(と対応するGAS project)を二つ用意
- get_and_post
- reactionの追加を監視する
- reactionを追加したユーザに通知する
- reactionの内容に応じて投稿予約する
- delete
- Mark As Completedボタンが押されたかを監視する
- reactionの投稿予約をキャンセルする
スクリプト
GitHubのget_and_postとdeleteのスクリプトを、それぞれ対応するプロジェクトに追加する(コピペOK)
Slack App
Add features and functionality

Event Subscriptions
- reactionが追加された時のイベントを受け取るresponse urlを追加
- GitHubの
get_and_postに対応するGAS projectをデプロイした時のurl(後述)
- GitHubの
-
reaction_addedを設定
Interactivity
- Mark As Completedボタンが押された時のイベントを受け取るresponse urlを追加
- GitHubの
deleteに対応するGAS projectをデプロイした時のurl(後述)
- GitHubの
OAuth & Permissions
- Scopesに
chat:writeを追加 -
reactions:readはEvent Subscriptionsを追加した際に自動で追加されている - User TokenとBot User Tokenをそれぞれ取得
API Token
取得したAPI tokenをScript Propertyに設定
- SLACK_BOT_USER_TOKEN
- SLACK_USER_TOKEN
Deploy
- デプロイ>webアプリurlを取得
- 初回は「新しいデプロイ」
- 二回目以降は、URLを変えずにデプロイを更新
-
get_and_postのurlはEvent Subscriptionsに、deleteはInteractivityに設定
ログをSpreadsheetに蓄積
- コード内の
sheet.appendRow([~~~]);で追加
To Be Improved
- :later-: reactionパースのswitch文がハードコーディングすぎる
-
Mark As Completedボタンを押された時にボタンUIをアップデートしたい - ログはGCP Cloud loggingに蓄積した方がいいっぽい

Discussion