marukot-chの日記

弱小SEの雑記です

Googleカレンダーの予定をチャットツールに通知する(Slack編)

目的

  • 前手順でGoogle Apps Scriptの作成(カレンダーIDの設定含め)が完了しています
  • この手順ではGoogleカレンダーの情報を1日分、Slackに書き込むGoogle Apps Scriptを作成する方法について説明します
  • 必要なもの: Slackの該当サーバーのWebhook作成権限(アプリ作成権限)

目次

作業内容

WebhookのURLを取得する方法について
  • Slackにリクエストして投稿するWebhookのことをIncoming Webhookといいます
  • Incoming Webhookは、Slack Appとして作成する新方式とカスタムインテグレーションから設定できる旧方式の2パターンあります
  • どちらかの方法でURLを取得してください

    • (1)新方式 *こちらの方が難しいですが、長く使えます
    • slack api - Your Appsを開きます
      slack api - Your Apps
    • Create New Appをクリックします
      • From scratchをクリック
      • App Name: 表示させたい名前
      • ワークスペースを選択
    • Incoming Webhooksを選択

      Incoming Webhooks

      • Activate Incoming WebhooksをONにします
        Incoming Webhooks - ON
      • Add New Webhook to Workspaceをクリックし、投稿先を選択します
        Add New Webhook to Workspace
        Webhook の投稿先を選択
      • 正常にWebhookが作成されたら、Webhook URLをコピーします(あとで使うのでメモしておいてください)
        Webhook URL
    • (2)旧方式 *こちらの方が簡単ですが、今後使えなくなるかもしれません

    • slack app directoryを開き、カスタムインテグレーションを選択します
      • ワークスペースの選択が必要かもしれません
    • Incoming Webhook
      Custom Integration - Incoming Webhook
      を選択
    • Slackに追加し、通知したいチャンネルを選択します
      Slack に追加
      aaaaaaaaa
    • Webhook URLをコピーします(後で使うのでどこかにメモっておいてください)
      • URLを全部選択してコピーするようにしてください
        Copy Webhook URL
    • なお、過去作ったWebhookでいい場合、設定タブからWebhook URLを取得できます
      Incoming Webhook - 設定
  • この手順でわかりづらい場合、下記の記事など参照してください

zenn.dev

プロジェクト設定(Slack用の設定)
  • Google Apps Scriptの画面に戻ります
    • 歯車(プロジェクトの設定)をクリックします
  • 「スクリプト プロパティを追加」をクリックします
    • 表示されていなければ、「スクリプト プロパティを編集」を一度クリックしてください
  • プロパティと値が入力できるようになるので、以下のように入力し、「スクリプト プロパティを保存」をクリックしてください
    • プロパティ: SLACK_WEBHOOK_URL
    • 値: 前手順でコピーしたウェブフックURLを貼り付けてください
  • Slackの場合、名前とアイコン画像は新方式と旧方式で異なります(たぶん)
    • 新方式の場合、アプリで設定している名前とアイコン画像が使用されます(たぶん)
    • 旧方式の場合、デフォルトの名前とアイコン画像が使用されます(たぶん)
動作確認
  • ここまでで、カレンダーをSlackに通知することができる状態となりました
  • 左の<>マーク(エディタ)をクリックし、想定通り通知されるか確認してみます
  • 確認のため、Googleカレンダーで翌日に適当な予定をいくつか作成しておいてください
    • 翌日予定が存在しない場合、何も起こらないため、正常に設定できているか確認ができません
  • デバッグの右にあるプルダウンメニューから、「notifyTaskSlack」を選択し、「実行」をクリックしてください
  • 承認ダイアログが表示されるので、「権限を確認」をクリックしてください
    • Google Apps Scriptではデータをアクセスする際、あらかじめ承認が必要です
      権限の確認
  • アカウントを選択し、次のページでは目立たない「詳細」をクリックします(安全なページに戻るはダメです)
    • 今回作成したGoogle Apps ScriptはGoogleが作ったものではないので、詳細を開き、続行します
      Google で確認されてないダイアログ
  • 左下のリンク(安全ではないページって書いてあるやつ)を押下します
    安全ではないページ
  • このGoogle Apps Scriptが使用するデータの使用許可を行います
    • Googleカレンダーをへのアクセスと、外部サービスへの接続(WebhookのURLを使った投稿)
      Google Apps Scriptの許可
  • 実行できてない場合は、再度「実行」をクリックしてください
    • こういうログのが出て、何も起きない場合
      再試行して、許可してねログ
  • これまでの設定が正常に動作した場合、Slackに投稿されます
  • (1)新方式パターン
    新方式(アプリ作成しWebhook)
  • (2)旧方式パターン
    • 新方式と書いてあることが違いますが、備考の記載有無です。こちらは入れてない状態で実行しています
      旧方式(Webhook)
トリガーの設定(通知するタイミング)
  • この手順で、いつSlackに通知するかを指定します
  • 左の時計マーク(トリガー)をクリックしてください
    • 現在、なにもトリガーが存在しない状態です
      Google Apps Script - トリガー
  • 右にある「トリガーを追加」をクリックします

    • 実行する関数を選択: notifyTaskSlack
      • もし、Slack,Discord両方投稿したい場合、両方Webhookを設定した状態で「notifyTaskDiscordAndSlack」を選択してください
    • 実行するデプロイを選択: Head(デフォルト)
    • イベントのソースを選択: 時間手動型(デフォルト)
    • 時間ベースのトリガーのタイプを選択: 日付ベースのタイマー
    • 時刻を選択: 通知したい時間
    • エラー通知設定: エラーが発生したとき、通知されるメールのタイミング(なんでもOK)
      NotifyTaskSlack のトリガーを追加
  • トリガーが設定されます

    トリガー設定完了