事例6_Slackチャンネルにメンションメッセージを飛ばした後、スレッドへの返信有無を判別して、リマインドする

■事前準備
・Slackとのマイアプリ登録を事前に行います。
※設定についてはこちらをご参照ください。 https://intercom.help/yoom/ja/articles/5483092
・メンションされたユーザーと返信者を判定するため関数を用います。そのためのスプレッドシートを用意します。

■実際のスプレッドシート(閲覧権限のみとなります。使用する場合はコピーしてご自身の環境で使えるように設定してください)
・加工用のシート▼
https://docs.google.com/spreadsheets/d/18gQr0LvOzW2zFaj5Sjhe8LptjhBTcsBMWAnpAuIld5A/edit#gid=2126034600
・フィルターを使って未返答ユーザーを羅列するシート▼
https://docs.google.com/spreadsheets/d/18gQr0LvOzW2zFaj5Sjhe8LptjhBTcsBMWAnpAuIld5A/edit#gid=288054127
※少し複雑な関数の組み合わせになるので、まずはこのシートの関数を見ながら作成してください。
※対象のシートは一度全範囲書式なし設定としてください。
※以下スプレッドシートの対象セルなどはすべてこのシート上のセルの位置で合わせています。

■作成方法
①アプリトリガーからSlackを選択し、以下の設定を行いテスト・保存します。
・トリガーアクション:新しいメッセージがチャンネルに投稿されたら
・トリガー起動間隔:選択できる最短時間に設定します。
・チャンネルID:起動させたいチャンネルのIDを候補から選択します。
・テスト:実際にメンションを行ってメッセージを投稿後、テストしレスポンス結果の中のts(タイムスタンプ)とelements下にあるuser_id(メンションされた対象者)の+マークを押し、JSONPATHにてアウトプットを追加します。
また、user_idについては以下のようにJSONPATHを変更し、すべてのメンションユーザーを取得します。

blocks[0].elements[0].elements[*].user_id

※JSONPATHでアウトプットを取得する方法はこちら。 https://intercom.help/yoom/ja/articles/5404443

②トリガー下の+マークを押し、アプリと連携するオペレーションからスプレッドシートを選択して、以下設定を行い、テスト・保存します。
・アクション:シート(タブ)をコピーする
・スプレッドシートID(コピー元):事前に用意した加工用のスプレッドシートを候補から選択します。
・シートID:加工用で使用しているシートを候補から選択します。
・スプレッドシートID(コピー先):同じスプレッドシートを候補から選択します。
このようにスプレッドシート上に加工用のシートタブをコピーすることで、処理がバッティングすることを防止します。

③+マークを押し、アプリと連携するオペレーションからスプレッドシートを選択して、以下設定を行い、テスト・保存します。
・アクション:セルに値を入力
・スプレッドシートID:事前に用意した加工用のスプレッドシートを候補から選択します。
・シート名:②でコピーしたシートから取得したシート名を{{シート名}}のように埋め込みます。
・対象のセル:B1と設定します。
・値:①でJSONPATHで取得したuser_idを{{user_id}}のように埋め込みます。
※アウトプットを埋め込む設定についてはこちらをご参照ください。 https://intercom.help/yoom/ja/articles/8223528

④+マークを押し、待機するオペレーションを選択して以下設定を行い、保存します。
・設定方法:指定の時間を待機
・設定単位:任意の単位を選択します。
・時間:任意の時間を入力します。
例では、6時間待機としています。

⑤+マークを押し、アプリと連携するオペレーションからSlackを選択し、以下設定を行ってテスト・保存します。
・アクション:会話のスレッド内容を取得
・チャンネルID:①と同じチャンネルIDを候補から選択します。
・タイムスタンプ:①でJSONPATHで取得したタイムスタンプを{{ts}}のように埋め込みます。
・テスト:一度スレッドに返答したあとテストし、①と同様レスポンス結果の中の2項目にあたる箇所のuser横の+マークを押し、返信者のIDをJSONPATHで取得します。また、このとき以下のように一部JSONPATHの内容を変更して、すべての返信ユーザーを取得します。

messages[1:].user

⑥+マークを押し、アプリと連携するオペレーションからスプレッドシートを選択して、以下設定を行い、テスト・保存します。
・アクション:セルに値を入力
・スプレッドシートID:事前に用意した加工用のスプレッドシートを候補から選択します。
・シート名:②でコピーしたシートから取得したシート名を{{シート名}}のように埋め込みます。
・対象のセル:B2と設定します。
・値:⑤でJSONPATHで取得したuserを埋め込みます。※{{設定した項目名}}のように埋め込みます。

⑦トリガー下の+マークを押し、アプリと連携するオペレーションからスプレッドシートを選択して、以下設定を行い、テスト・保存します。
・アクション:シート(タブ)をコピーする
・スプレッドシートID(コピー元):事前に用意した加工用のスプレッドシートを候補から選択します。
・シートID:フィルターで使用しているシートを候補から選択します。
・スプレッドシートID(コピー先):同じスプレッドシートを候補から選択します。
このようにスプレッドシート上に加工用のシートタブをコピーすることで、処理がバッティングすることを防止します。

⑧トリガー下の+マークを押し、アプリと連携するオペレーションからスプレッドシートを選択して、以下設定を行い、テスト・保存します。
・アクション:数式を繰り返す
・スプレッドシートID:事前に用意した加工用のスプレッドシートを候補から選択します。
・シートID:⑦のコピーで取得したシートIDを埋め込みます。
・数式:=FILTER('{{シート名}}'!A7:B,'{{シート名}}'!B7:B="") このような関数を入れ込みます。
・開始行番号:1と入力します。
・終了行番号:2と入力します。
・開始列番号:0と入力します。
・終了列番号:1と入力します。
このようにすることで、コピーしたシートにフィルター関数を反映させます。

⑨+マークを押し、データベースを操作するオペレーションからスプレッドシートを選択して、以下設定を行い、テスト・保存します。
・実行アクション:複数のレコードを取得する(最大10件)
・スプレッドシートID:事前に用意した加工用のスプレッドシートを候補から選択します。
・スプレッドシートのタブ名:⑦でコピーしたシートから取得したシート名を{{シート名_〇〇}}のように埋め込みます。
・テーブル範囲:A1:Bと設定します。
・取得したいレコードの値:列をIDとし、値が空でないにして対象レコードをすべて取得します。
こうすることで、返答していないユーザーのIDを最大10名まで一括取得できます。

⑩+マークを押し、同じ処理を繰り返すオペレーションを選択して、以下設定を行い保存します。
・オペレーション:⑨のオペレーションを選択します。
・アウトプット:⑨で取得した送信対象者IDを選択します。

⑪ループ方面の+マークを押し、アプリと連携するオペレーションからSlackを選択して以下設定し、テスト・保存します。
・アクション:スレッドにメッセージを送る
・投稿先のチャンネルID:①と同じチャンネルを選択します。
・タイムスタンプ:①でJSONPATHで取得したタイムスタンプを{{ts}}のように埋め込みます。
・メッセージ:⑩で取得したループ変数を用いてメンションし、任意のメッセージを送ります。メンションイメージは以下です。
<@{{送信対象者IDのループ変数}}>
※Slackでメンション付きメッセージを送る方法はこちら。 https://intercom.help/yoom/ja/articles/5544202

⑫その他のルートの+マークを押し、アプリと連携するオペレーションからスプレッドシートを選択して、以下設定を行い、テスト・保存します。
・アクション:シート(タブ)を削除する
・スプレッドシートID:事前に用意した加工用のスプレッドシートを候補から選択します。
・シートID:②でコピーしたシートから取得したシートIDを{{シートID}}のように埋め込みます。
このようにすることで、すべてのリマインドが終わったらコピーした不要なシートを削除し、シートが無限にコピーされるのを防ぎます。

⑬その他のルートの+マークを押し、アプリと連携するオペレーションからスプレッドシートを選択して、以下設定を行い、テスト・保存します。
・アクション:シート(タブ)を削除する
・スプレッドシートID:事前に用意した加工用のスプレッドシートを候補から選択します。
・シートID:⑦でコピーしたシートから取得したシートIDを{{シートID}}のように埋め込みます。
このようにすることで、すべてのリマインドが終わったらコピーした不要なシートを削除し、シートが無限にコピーされるのを防ぎます。

プロセス詳細

アプリトリガー 新しいメッセージがチャンネルに投稿されたら
アプリと連携する シート(タブ)をコピーする
アプリと連携する セルに値を入力
待機する 6時間待機
アプリと連携する 会話のスレッド内容を取得
アプリと連携する セルに値を入力
アプリと連携する シート(タブ)をコピーする
アプリと連携する 数式を繰り返す
データベースを操作する 複数のレコードを取得する(最大10件)
コマンドオペレーション 同じ処理を繰り返す
アプリと連携する スレッドにメッセージを送る
↑「同じ処理を繰り返す」にループバックします
アプリと連携する シート(タブ)を削除する
アプリと連携する シート(タブ)を削除する