Skip to content

Slack app based on new Slack platform that notifies Google Calendar events

License

Notifications You must be signed in to change notification settings

htsuruo/google-calendar-event-notifier-app

Repository files navigation

Google Calendar Event Notifier App

DailyEvents UpcomingEvents
SCR-20230506-tpht-2 SCR-20230506-tpve-2

これはnew Slack platformGoogle 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があるので、IFTTTZapierCloud Schedularなどを使って外部で15分クローンを作成しWebhookとして叩くのが現実的です
      • ちなみにIFTTTやZapierを使えば15分前きっちりに通知の受信およびイベント取得ができるらしいので、カレンダー内容を上記のSaaSに渡しても問題ないポリシーであれば利用すると楽に済みます。

Setup

Env

❯ slack --version
Using slack v2.1.0

Local Development

Create .env on root directory

  • Local Developmentでは.envを自動で読み込んでくれるので特別なセットアップは不要(デプロイ時にはaddが必要)
  • ref. Environment variables | Slack
❯ touch .env

# CALENDAR_ID="[YOUR_CALENDAR_ID]"
# SLACK_CHANNEL_ID="[YOUR_POST_CHANNEL]"

Replace client_id in manifest.ts

https://github.com/HTsuruo/google-calendar-event-notifier-app/blob/c5f73c9b11e87659108631596647ec9aa5f12fac/manifest.ts#L12

Store OAuth secret key to Slack platform

  • Slackプラットフォームに保存することで露呈することなくセキュアに取り扱うことができる
❯ slack external-auth add-secret --provider google --secret "GOCSPX-abc123..."
❯ slack external-auth add

Crate Trigger

# 本日のイベントを全て通知する用トリガー
❯ slack trigger create --trigger-def triggers/daily_morining_trigger.ts

# イベントの開始直前に通知される用のトリガー
❯ slack trigger create --trigger-def triggers/upcoming_minutes_trigger.ts

How to Run

❯ slack run

Deploy Setup

# 環境変数を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

About

Slack app based on new Slack platform that notifies Google Calendar events

Topics

Resources

License

Stars

Watchers

Forks