【Googleカレンダー】当日の予定を取得して、チャット等へ通知するフロー

■概要
・毎日起動し、Googleカレンダーから予定を取得してチャット等に通知を行います。
・当日に本日の予定をチームメンバーと共有したり、明日の予定を日時で通知したりすることで、共有漏れや他のメンバーの状況を把握することができます。

■フローの流れ
・スケジュールトリガーで決まった日付・時間にフローボットを起動させます。
・Googleカレンダーから予定の一覧を取得し、スプレッドシートへ予定の詳細を記録します。(予定がない場合はこの時点で終了とします)
・スプレッドシートに記録した予定が単一のものか複数かでルートをわけ、それぞれのルートで予定をチャット等へ通知します。
・最後に、次の起動のためにスプレッドシートへ記録した予定を削除し完了です。

■事前準備
・予定を一時的に記録するスプレッドシートを用意します。
・実際のスプレッドシート例は以下になります。
https://docs.google.com/spreadsheets/d/1B9PS3Rqr-atJ76TUmgrmIHooAqr4d0pTg-5IbeCtoBY/edit#gid=0
※閲覧権限を付与しておりますので、コピーしてお使いください。

■作成方法
①スケジュールトリガーを選択し、指定の日時に設定し保存します。※今回の例では、平日9時に起動としています。

②トリガー下の+マークを押し、アプリと連携するオペレーションからGoogleカレンダーを選択し、以下の設定を行ってテスト・保存します。
・アクション:予定の一覧を取得する
・カレンダーID:取得したい対象のGoogleアカウントメールアドレスを入力します。
・取得する期間の開始日:欄をクリックし表示されるメニューから日付を選択して、今日からyyyy-mm-dd形式の日付を選択します。
・取得する期間の終了日:欄をクリックし表示されるメニューから日付を選択して、今日からyyyy-mm-dd形式の日付を選択します。

③+マークから分岐するオペレーションを選択し、以下の設定を行い保存します。
・オペレーション:②のオペレーションを選択します。
・アウトプット:予定のタイトルの一覧を候補から選択します。
・条件:アウトプットが空になっている を選択します。
・値:空白のままとします。

④+マークから同じ処理を繰り返すオペレーションを選択し、以下の設定を行い保存します。
・オペレーション:②のオペレーションを選択します。
・アウトプット:予定IDの一覧を候補から選択します。

⑤ループと書かれたルートを押し、アプリと連携するオペレーションからGoogleカレンダーを選択し、以下の設定を行ってテスト・保存します。
・アクション:予定の詳細を取得
・カレンダーID:②と同様のメールアドレスを入力します。
・予定ID:④で取得した予定IDの一覧のループ変数を{{予定IDの一覧のループ変数}}のように埋め込みます。

⑥+マークからデータを操作・変換するオペレーションを選択し、以下の設定を行いテスト・保存します。
・変換タイプ:正規表現によるデータの抽出
・抽出対象:⑤で取得した開始時間を{{開始時間}}のように埋め込みます。
・抽出箇所を正規表現で指定:[0-9]{2}:[0-9]{2} と入力します。

⑦+マークからデータを操作・変換するオペレーションを選択し、以下の設定を行いテスト・保存します。
・変換タイプ:正規表現によるデータの抽出
・抽出対象:⑤で取得した終了時間を{{終了時間}}のように埋め込みます。
・抽出箇所を正規表現で指定:[0-9]{2}:[0-9]{2} と入力します。

⑧+マークを押し、データベースを操作するオペレーションからスプレッドシートを選択し、以下の設定を行いテスト・保存します。
・アクション:レコードを追加する
・スプレッドシートID:事前に用意したスプレッドシートのIDを候補から選択します。
・スプレッドシートのタブ名:対象のシート名を候補から選択します。(今回の例の場合「格納用シート」)
・テーブル範囲:列名を含む範囲を指定します。(今回の例の場合「A1:C」)
・追加するレコード値:表示された列名に対応する値を⑤、⑥、⑦で取得したアウトプットを用いて埋め込みます。

⑨ループではない方向の+マークを押し、データベースを操作するオペレーションからスプレッドシートを選択し、以下の設定を行いテスト・保存します。
・アクション:レコードを複数取得する(最大10件)
・スプレッドシートID:事前に用意したスプレッドシートのIDを候補から選択します。
・スプレッドシートのタブ名:対象のシート名を候補から選択します。(今回の例の場合「取得用シート※触らない」)
・テーブル範囲:列名を含む範囲を指定します。(今回の例の場合「A1:D」)
・取得したいレコードの条件:列名を開始時間に併せ、値が空でないで検索します。

⑩+マークからリスト型のアウトプットを個々のアウトプットに分割するオペレーションを選択し、以下の設定を行い保存します。
・分割対象のアウトプット:⑨で取得したSlack通知形式を選択します。

⑪+マークから分岐するオペレーションを選択し、以下の設定を行い保存します。
・オペレーション:⑩のオペレーションを選択します。
・アウトプット:Slack通知形式_分割数を候補から選択します。
・条件:値に等しくないを選択します。
・値:1 を入力します。

⑫値を含む方向の+マークを押し、データを操作・変換するオペレーションを選択し、以下の設定を行いテスト・保存します。
・変換タイプ:正規表現によるデータの置換
・置換対象:⑨で取得したSlack通知形式を{{Slack通知形式}}のように埋め込みます。
・置換箇所を正規表現で指定:, と入力します。
・置換後の文字列:\n と入力します。

⑬+マークを押し、アプリと連携するオペレーションからSlackを選択し、以下の設定を行いテスト・保存します。
・アクション:チャンネルにメッセージを送る
・投稿先のチャンネルID:指定のチャンネルIDを候補から選択します。
・メッセージ内容:⑪で置換した予定一覧を埋め込みます。

⑭+マークを押し、待機するオペレーションを選択して、以下の設定を行い保存します。
・設定方法:指定の時間を待機
・設定単位:時間
・時間:任意の時間
※この設定はあってもなくてもどちらでも構いません。

⑮+マークを押し、データベースを操作するオペレーションからスプレッドシートを選択し、以下の設定を行いテスト・保存します。
・アクション:レコードを削除する
・スプレッドシートID:事前に用意したスプレッドシートのIDを候補から選択します。
・スプレッドシートのタブ名:対象のシート名を候補から選択します。(今回の例の場合「格納用シート」)
・テーブル範囲:列名を含む範囲を指定します。(今回の例の場合「A1:C」)
・削除したいレコードの条件:列名を開始時間に併せ、値が空でないでヒットしたレコードを削除します。

⑯値を含むではない方向の+マークを押し、アプリと連携するオペレーションからSlackを選択し、以下の設定を行いテスト・保存します。
・アクション:チャンネルにメッセージを送る
・投稿先のチャンネルID:指定のチャンネルIDを候補から選択します。
・メッセージ内容:⑨で取得したSlack通知形式を{{Slack通知形式}}のように埋め込みます。

⑰+マークを押し、待機するオペレーションを選択して、以下の設定を行い保存します。
・設定方法:指定の時間を待機
・設定単位:時間
・時間:任意の時間
※この設定はあってもなくてもどちらでも構いません。

⑱+マークを押し、データベースを操作するオペレーションからスプレッドシートを選択し、以下の設定を行いテスト・保存します。
・アクション:レコードを削除する
・スプレッドシートID:事前に用意したスプレッドシートのIDを候補から選択します。
・スプレッドシートのタブ名:対象のシート名を候補から選択します。(今回の例の場合「格納用シート」)
・テーブル範囲:列名を含む範囲を指定します。(今回の例の場合「A1:C」)
・削除したいレコードの条件:列名を開始時間に併せ、値が空でないでヒットしたレコードを削除します。


■注意事項
・スプレッドシートの仕様上、1日に予定が10件以上ある場合はできかねます。

プロセス詳細

スケジュールトリガー 平日9時に起動
アプリと連携する 予定の一覧を取得する
コマンドオペレーション コマンドオペレーション
コマンドオペレーション 予定IDの一覧から繰り返し1つずつ処理する
アプリと連携する 予定の詳細を取得
データを操作・変換する 開始時間の抽出
データを操作・変換する 終了時間の抽出
データベースを操作する 格納用シートへレコードを追加
データベースを操作する 取得用シートからSlackに通知する予定を取得(最大10件)
データを操作・変換する リスト型のアウトプットを個々のアウトプットに分割
コマンドオペレーション 予定が複数あるかで分岐
データを操作・変換する カンマを改行へ置換
アプリと連携する Slackに当日の予定を通知(複数予定)
待機する 削除まで3時間待機(複数予定)
データベースを操作する 格納したデータを削除
アプリと連携する Slackに当日の予定を通知(単一予定)
待機する 削除まで3時間待機(単一予定)
データベースを操作する 格納したデータを削除(単一予定)