marukot-chの日記

弱小SEの雑記です

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

目的

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

目次

作業内容

WebhookのURLを取得
  • 通知したいチャンネルの「チャンネルを編集」します

チャンネルの編集

  • 連携サービスの「ウェブフック」で「ウェブフックを作成」をクリックします

    連携サービスの「ウェブフック」

  • 作成されたウェブフックをクリックし、「ウェブフックURLをコピー」をクリックします

    • クリップボードにURLがコピーされるので、どこかにメモっておいてください
      ウェブフックをコピー
プロジェクト設定(Discord用の設定)
  • Google Apps Scriptの画面に戻ります
    • 歯車(プロジェクトの設定)をクリックします
  • 「スクリプト プロパティを追加」をクリックします
    • 表示されていなければ、「スクリプト プロパティを編集」を一度クリックしてください
  • プロパティと値が入力できるようになるので、以下のように入力し、「スクリプト プロパティを保存」をクリックしてください
    • プロパティ: DISCORD_WEBHOOK_URL
    • 値: 前手順でコピーしたウェブフックURLを貼り付けてください
  • 名前とアイコン画像の設定(オプション/設定しない場合デフォルトの名前、画像が使われます)
  • オプション1)名前
    • プロパティ: USER_NAME
    • 値: 好きな名前を入力してください
  • オプション2)アイコン画像
    • プロパティ: AVATAR_URL
    • 値: 好きなアイコン画像のURLを入力してください(ブラウザでアクセスできる画像のURLである必要があります)
動作確認
  • ここまでで、カレンダーをDiscordに通知することができる状態となりました
  • 左の<>マーク(エディタ)をクリックし、想定通り通知されるか確認してみます
  • 確認のため、Googleカレンダーで翌日に適当な予定をいくつか作成しておいてください
    • 翌日予定が存在しない場合、何も起こらないため、正常に設定できているか確認ができません
  • デバッグの右にあるプルダウンメニューに「notifyTaskDiscord」が表示されていることを確認し、「実行」をクリックしてください
  • 承認ダイアログが表示されるので、「権限を確認」をクリックしてください
    • Google Apps Scriptではデータをアクセスする際、あらかじめ承認が必要です
      権限の確認
  • アカウントを選択し、次のページでは目立たない「詳細」をクリックします(安全なページに戻るはダメです)
    • 今回作成したGoogle Apps ScriptはGoogleが作ったものではないので、詳細を開き、続行します
      Google で確認されてないダイアログ
  • 左下のリンク(安全ではないページって書いてあるやつ)を押下します
    安全ではないページ
  • このGoogle Apps Scriptが使用するデータの使用許可を行います
    • Googleカレンダーをへのアクセスと、外部サービスへの接続(WebhookのURLを使った投稿)
      Google Apps Scriptの許可
  • 実行できてない場合は、再度「実行」をクリックしてください
    • こういうログのが出て、何も起きない場合
      再試行して、許可してねログ
  • これまでの設定が正常に動作した場合、Discordに投稿されます
    Discord投稿(成功)
トリガーの設定(通知するタイミング)
  • この手順で、いつDiscordに通知するかを指定します
  • 左の時計マーク(トリガー)をクリックしてください
    • 現在、なにもトリガーが存在しない状態です
      Google Apps Script - トリガー
  • 右にある「トリガーを追加」をクリックします
    • 実行する関数を選択: notifyTaskDiscord
    • 実行するデプロイを選択: Head(デフォルト)
    • イベントのソースを選択: 時間手動型(デフォルト)
    • 時間ベースのトリガーのタイプを選択: 日付ベースのタイマー
    • 時刻を選択: 通知したい時間
    • エラー通知設定: エラーが発生したとき、通知されるメールのタイミング(なんでもOK)
      NotifyTaskDiscord のトリガーを追加
  • トリガーが設定されます
    トリガー設定完了

補足

  • Google Apps Scriptの実行数のところで、処理にかかった時間やステータスが確認できます

失敗例

カレンダーの予定が見れない
  • カレンダーの予定の有無まで見れない場合は、時間のみしか取得できません
    • カレンダーの予定が見れるよう設定を変更してください
    • Google Apps Scriptを実行しているアカウントとカレンダーのアカウントが一致してれば問題ないはず...
      「予定あり」としか表示されないカレンダーの場合