PowerAutomateを使ってTeamsの投稿に対してリマインダーする（アンケートなど）～ 詳細編 ～

# はじめに
概要については以下の記事で記載しているので
今回はアクションの詳細について記載
https://qiita.com/ctc-m-yomo/items/d5d7eac9b8c9b2b2d2ce


# 目次
1. [リマインドさせたいメッセ―ジを選択してアダプティブカードにて期限日を指定する](#C1)
1. [時間の加工](#C2)
1. [メンバー一覧を配列変数に格納](#C3)
1. [遅延設定](#C4)
1. [リアクションしたメンバーの抽出](#C5)
1. [リアクションしていないメンバーの抽出](#C6)
1. [リアクションしていないメンバーへTeamsでメンション](#C7)
1. [参考文献](#ref)

<a id="#C1"></a>
# 1.リマインドさせたいメッセ―ジを選択してアダプティブカードにて期限日を指定する
トリガーは選択したメッセージの場合を使う
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919986/51adb16b-ae90-96d0-ca1b-4f8ca0c57be2.png)


アダプティブカードの編集を押すと以下のような画面が表示され自由に編集が可能
右ペインにあるIdをその後のフローで利用する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919986/8802e6f6-eca6-5c83-9278-58adf0fd13ee.png)

リマインダーさせたいメッセージをTeams上で選択し、PowerAutomateのフローを実行する
すると以下のようなアダプティブカードが表示されるため期限日を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919986/8b2632d6-45b2-4985-7d2b-4b3b35c6ca50.png)

※補足※
アダプティブカードとは、視覚的にカレンダーなどGUIのようなものを表示させる機能
以下のURLがわかりやすそうだったので参考に記載
https://rpa.bigtreetc.com/column/adaptivecard101/

<a id="#C2"></a>
# 2.時間の加工
・1.で指定した日から3日減算させる(3日前に通知させるため)
・後述の遅延処理で利用するため時間追加させるためにタイムゾーンを協定世界時に変換させる
・始業の9時にリマインドするための時間追加処理
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919986/45464410-d5f0-e97c-c7ee-e1029f97a6eb.png)

<a id="#C3"></a>
# 3.メンバー一覧を配列変数に格納
1.で選択したメッセージのチームIDよりグループメンバー一覧を取得
メンバー一覧を格納する配列(verGroupMember)を定義
グループメンバーの一覧表示から出力されるメンバーデータであるvalueをループで回して、
役職（jobTitle）がある人を配列に入れないように条件式で選別し、
jobTitleの項目がないユーザを変数verGroupMemberへ格納

参考：https://www.teijitaisya.com/powerautomate-mention-multicast/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919986/87882e66-63c3-d9f1-107c-23595adde0aa.png)

<a id="#C4"></a>
# 4.遅延設定
2.で設定した期限の3日前に移行のアクションを実施するように遅延を設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919986/8cea35b7-6208-8dcb-02ce-97344d552f77.png)

<a id="#C5"></a>
# 5.リアクションしたメンバーの抽出
・リアクションしたメンバーを格納するための配列(varReaction)を定義
・1.で選択したメッセージの詳細情報を取得する
・JSONの解析でメッセージの詳細情報
参考：https://note.com/loto0704/n/n0b9138ac9692

・JSONの解析からの出力reactionsでループを回して、リアクションしたメンバーのidをvarReactionへ格納
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919986/5cbf95b5-94c9-be4f-12bc-2a22406bd286.png)

<a id="#C6"></a>
# 6.リアクションしていないメンバーの抽出
・リアクションしていないメンバーを格納するための配列(varNonReaction)を定義
・グループメンバーと5.で定義したリアクションしたメンバーの差分をアレイフィルターを用いてvarNonReactionへ格納
※アレイフィルタのcontains()の式
　contains(variables('varReaction'), item())
参考：https://qiita.com/k_oshima23/items/cbf66ae53734a9fbc905

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919986/813e625c-a2b4-b446-58c8-a59649d018c3.png)

<a id="#C7"></a>
# 7.リアクションしていないメンバーへTeamsでメンション
・未リアクションメンバーの洗い出しからの本文をループで回してリアクションしていないメンバーからメンショントークンを作成
・1.で選択したメッセージに対してメッセージを投稿する
　※メンションは現状Teamsの仕様上20人までしか指定できないため
　　それ以上メンションをする必要がある場合は考慮が必要
　　代替手段としては、@allなどチャネルへメンションするなど

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919986/50f022c0-a9ea-533c-a407-052707cb4dc9.png)



本当はこの後に前日や当日での遅延設定を行い
同様にリアクションしていないメンバーへのメンションフローを実施したいが未作成
処理が同じのためループによって作成したい
というところで実装検討中・・・

以下、作る際に参考にしたサイト

<a id="#ref"></a>
# 8.参考文献
- 5.のJSONの解析の参考
　[PowerAutomateで配列の差集合を求める
](https://note.com/loto0704/n/n0b9138ac9692)

- 6.の配列の差分抽出析の参考
　[Teamsでリアクションした人をPowerAutomateで一覧作成し取得する](https://qiita.com/k_oshima23/items/cbf66ae53734a9fbc905)

- 8.の複数人へのメンションメッセージ投稿の参考
　[【Power Automate】Teamsで複数人へメンション付きメッセージを送る](https://www.teijitaisya.com/powerautomate-mention-multicast/)