DailyEvents | UpcomingEvents |
---|---|
![]() |
![]() |
これはnew Slack platformとGoogle Calendar APIを利用し、カレンダーイベントを取得しSlackチャンネルに通知するSlackアプリです。
元々、チームの共有カレンダーをSlackの任意チャンネルに通知するアプリとしてSlack 向け Google Calendar for Team Eventsが存在していましたが、近々廃止予定のため、new Slack platformで代替アプリとして作ってみたのが背景です。ちなみに、上記アプリを既にインストールしている場合はそのまま使えますが、新規での追加はできません(いずれにしてもメンテナンス外なので利用は非推奨)。
Features:
- 特定の時間(デフォルト 9:00 AM)に1日のイベントのサマリーを特定チャンネルに通知する
today_events_function.ts
- Scheduled Triggerを利用して平日の午前9:00に毎日発火する
- イベントの開始直前(デフォルト 15分前)にイベントを特定チャンネルに通知する
- new Slack PlatformのScheduled Triggerは、最も短くて1時間単位のためバッチでの処理はできない
- 代わりにWebhook Triggerがあるので、IFTTTやZapier、Cloud Schedularなどを使って外部で15分クローンを作成しWebhookとして叩くのが現実的です
- ちなみにIFTTTやZapierを使えば15分前きっちりに通知の受信およびイベント取得ができるらしいので、カレンダー内容を上記のSaaSに渡しても問題ないポリシーであれば利用すると楽に済みます。
- Set up Slack CLI
- Google Cloud にて OAuthウェブクライアントを作成する
❯ slack --version
Using slack v2.1.0
- Local Developmentでは
.env
を自動で読み込んでくれるので特別なセットアップは不要(デプロイ時にはadd
が必要) - ref. Environment variables | Slack
❯ touch .env
# CALENDAR_ID="[YOUR_CALENDAR_ID]"
# SLACK_CHANNEL_ID="[YOUR_POST_CHANNEL]"
- Slackプラットフォームに保存することで露呈することなくセキュアに取り扱うことができる
- OAuthの認証もプラットフォーム側で完結するので、一度認証を済ませればアクセストークンが取得できた状態で開発できる
- ref. https://api.slack.com/automation/external-auth#client-secret
❯ slack external-auth add-secret --provider google --secret "GOCSPX-abc123..."
❯ slack external-auth add
# 本日のイベントを全て通知する用トリガー
❯ slack trigger create --trigger-def triggers/daily_morining_trigger.ts
# イベントの開始直前に通知される用のトリガー
❯ slack trigger create --trigger-def triggers/upcoming_minutes_trigger.ts
❯ slack run
# 環境変数をSlackプラットフォームに設定する(.envはデプロイ環境では読み込まれない)
❯ slack env add MY_ENV_VAR "asdf-1234"`
# デプロイ環境でも同様にシークレットキーを保存する(環境ごとに設定が必要)
❯ slack external-auth add-secret --provider google --secret "GOCSPX-abc123..."
❯ slack external-auth add
# トリガーの設定も環境ごとに必要
❯ slack trigger create --trigger-def triggers/daily_morining_trigger.ts
❯ slack trigger create --trigger-def triggers/upcoming_minutes_trigger.ts
# デプロイ
❯ slack deploy