【Power Automate】Teamsチャネルの投稿にリアクションがなければリマインド

Power Automate
この記事は約11分で読めます。
チームリーダー
チームリーダー

重要なTeamsメッセージは必ず確認してほしいのに、
リアクションがないと読んだか読んでないかわからないよ

もちぱん
もちぱん

Power Automateを使って、リアクションなしのメンバーに
リマインドの自動送付ができますよ

本記事では、チャネルに投稿があった際に〇日リアクションがなかったらリマインドを送付するフローを紹介します。

この記事でわかること
  • チームメンバーとリアクションしたメンバーを比較する方法
  • 遅延アクションを利用して〇日待機する方法
  • リアクションのないユーザーにリマインドを送付する方法



作成するフローの内容

本記事では、下記のフローを作成します。


  

フロー全体のショット

トリガー ~ チームメンバーの取得


リアクションをしていないメンバーの抽出


メンバーへリマインド


  

自動化したクラウドフローの作成

フローの作成に入ります。
作成画面で「自動化したクラウドフロー」を選択します。



下記画面でフロー名とトリガーを設定します。
トリガーは「チャネルに新しいメッセージが追加されたとき」です。


  

「新しいメールが届いたとき」の設定

リマインド対象のチームとチャネルを選択します。


 

「変数を初期化する」アクション追加

「変数を初期化する」アクションを4つ追加します。

  1. Teamメンバー全員のIDを格納する変数
  2. リアクションしたメンバーのIDを格納する変数
  3. リアクションをしていないメンバーのIDを格納する変数
  4. リアクションをしていないメンバーの名前を格納する変数(任意)


 

Teamメンバー全員のIDを格納する変数

メンバー全体のIDを格納するための変数を用意します。

NameなんでもOKですが、ここでは「teamMember」としました。
TypeArray
Value空白


 

リアクションしたメンバーのIDを格納する変数

投稿に対し、リアクションしたメンバーのIDを格納する変数を用意します。

Nameここでは「reactionMember」としました。
TypeArray
Value空白

TeamMember」と「reactionMember」を比較することで、リアクションをしていないメンバーを抽出できます。


 

リアクションをしていないメンバーのIDを格納する変数

投稿に対し、リアクションをしていないメンバーを格納するための変数を用意します。

Nameここでは「nonReactionMember」とします。
TypeArray
Value空白


 

リアクションをしていないメンバーの名前を格納する変数(任意)

リアクションをしていないメンバーの名前を格納するための変数を用意します。
投稿に対し、誰がリアクションしていなかったかを自分に通知したい場合この変数を追加してください。

Nameここでは「nonReactionName」としました。
TypeString
Value空白


   

チームメンバーを取得

リマインド対象(件名に「重要」が入っている)の投稿がされた場合、Teamメンバーを取得します。

 

「条件」アクションの追加

Teams投稿の件名に「重要」と記載されている場合、リマインドの対象にします。




そのため、条件アクションで「重要」が含まれているかを判定します。

左辺動的なコンテンツより「メッセージ 件名」を選択します
演算子contains
右辺重要


  

【Trueの場合】Teamメンバーを取得

件名に「重要」という文字が含まれたら、対象のTeamメンバーの一覧を取得します。
これにより、リマインド対象のメンバーを取得できます。


Trueの直下に「Office 365 グループ」より「グループメンバーの一覧表示」を追加します。

グループIDドロップダウンより対象のTeamを選択します。



続いて、TeamメンバーのID情報を、「配列変数に追加」アクションで取り出します。

Nameチームメンバーを格納するために作成した「teamMember」変数を選択します。
value動的なコンテンツより「ユーザーID」を選択します。


 
※この作業を行うことで、自動的に「For each」アクションが追加されます。


 

自分のユーザー情報を取得

自分のユーザーを取得するアクションを追加することで、下記の対応につなげることができます。

  1. リアクションをしていないユーザーが自分の場合は、リマインド対象から外す
  2. リアクションをしていないチームメンバー一覧を、自分に通知する



「Office 365ユーザー」より「マイプロフィールの取得」アクションを追加します。



これで、リマインド対象のメッセージが追加された際にTeamメンバーを取得する作業は完了です。
フローのスクリーンショットはこちらを確認ください。

  

リアクションをしていないメンバーの抽出

リマインド対象の投稿にリアクションをしていないメンバーを抽出する作業を行います。


全員がリマインドするまで繰り返しこの作業を行うため、これ以降の作業はすべて「Do until」内に設置します

「Control」より「Do until」を追加します。

Loop UntilnonReactionMemberの変数の値が空になるまで繰り返し作業を続けます。
length(variables('nonReactionMember'))


「変数の設定」アクションの追加

このフローでは、全員のリアクションをもらうまでループを続けます。
そこで2週目以降のループの際、「reactionMember」と「nonReationMember」と「nonReactionName」変数内に、前回のループの情報が入ったままになります。


その情報をリセットするために、この3つの変数をリセットします。

NamereactionMember
Value[]



NamenonReactionMember
Value[]


NamenonReactionName
Valueこの変数は文字列変数のため、文字列を空白にして初期化します。
string('')


「遅延」アクションの追加

指定間隔でリマインドを行うため、「遅延」アクションを追加します。

Count1
UnitDay

本フローでは1日待機します。適当なリマインド間隔にセットしてください。


 

リアクションしたメンバーの抽出

投稿メッセージに対し、リアクションをしたメンバーを抽出します。
「Microsoft Teams」コネクタより「メッセージ詳細を取得する」アクションを追加します。

メッセージ動的なコンテンツより「チャネルに新しいメッセージが追加されたとき」内の「メッセージID」を選択します
チャネルの種類チャネル
Team対象チームを選択
Channel対象チャネルを選択


 
続いて、リアクションをしたメンバーのID情報を、「variable」の「配列変数に追加」アクションで取り出します。

Nameチームメンバーを格納するために作成した「teamMember」アレイを選択します。
valuefxより下記式を入力します。
item()?['user']?['user']?['id']

※この式になる理由は、フローの実行結果を見るとわかります。


リアクションしたユーザーのIDは reactions>user>user>id の中に格納されるためです。



※この作業を行うことで、自動的に「For each」アクションが追加されます。


 

リアクションしていないメンバーの抽出

Teamメンバーとリアクションしたメンバーを比較することで、リアクションしていないメンバーを抽出します。
「Data Operation」より「アレイのフィルター処理」アクションを追加します。

Fromどのアレイに対してフィルター処理を行うか選択します。
動的なコンテンツよりチームメンバーを格納するために作成した「teamMember」アレイを選択します。
Filter QueryteamMemberアレイから、reactionMemberアレイ(リアクションしたメンバー)に含まれていないメンバーのIDを抽出します。

左辺:
contains(variables('reactionMember'),item())

演算子:
is not equal to

右辺:
true



リアクションしていないメンバーが自分の場合は、nonReactionMemberアレイに追加しないようにするため、「Control」より「条件」アクションを追加します。

左辺動的なコンテンツより、「アレイのフィルター処理」の「Body 項目」を選択します。
演算子is not equal to
右辺動的なコンテンツより「マイプロフィールの取得」の「ID」を選択します。



※この作業を行うことで、自動的に「For each」アクションが追加されます。



条件が合致する場合(リアクションしていないメンバーのIDが自分のIDではない場合)、nonReactionMemberアレイにメンバーIDを追加していきます。
True直下に「variable」の「配列変数に追加」アクションを追加します。

NamenonReactionMemberアレイを選択します。
Value動的なコンテンツより「For each2」直下の「Current item」を選択します。
条件アクション直上のFor eachを選択してください



これで、リアクションしていないメンバーの抽出作業は完了です。
フローのスクリーンショットはこちらを確認ください。

 

リアクションしていないメンバーへリマインド

リアクションしていないメンバーへリマインドします。
ここで追加するアクションも引き続きすべて「Do until」内に設置します


nonReactionアレイ内のリアクションしていないメンバーID一つ一つに後続のアクションを適応するため、「Control」の「それぞれに適用する」(For each)アクションを追加します。

Select An Output動的なコンテンツより「nonReactionMember」を選択します。



「それぞれに適用する」内の「+」よりアクションを追加していきます。
「Office 365ユーザー」の「ユーザープロフィールの取得」アクションを追加します。

ユーザー(UPN)動的なコンテンツより「それぞれに適用する」直下の「Current item」を選択します。



続いて、「Microsoft Teams」の「チャットまたはチャネルでメッセージを投稿する」アクションを追加します。

投稿者リアクションしていないメンバーに個別でチャットを送るため、「フローボット」を選択します。
※個別チャットは「フローボット」のみ可能。
投稿先Chat with Flow bot
Recipientリアクションしていないメンバーのメールアドレスを出力するため、動的なコンテンツより「ユーザープロフィールの取得」の「メール」を選択します。
Message適切なメッセージを入力します。

対象メッセージへのリンクを挿入する場合、
動的なコンテンツより「メッセージ詳細を取得する」の「Message Link」を選択し…


「Message Link」のラベルを切り取り、本文内にリンクとして貼り付けることでハイパーリンクを作成できます。


※「チャットまたはチャネルでメッセージを投稿する」の設定方法の詳細は、下記を参照ください。



続いてリマインド対象者が誰だったのか、一覧を自分に通知したい場合、任意で作成した「nonReactionName」アレイに対象者の名前を追加していきます。
「Variable」の「文字列変数に追加」アクションを追加します。

NamenonReactionName
Value動的なコンテンツより「ユーザープロフィールの取得」の「表示名」を追加します。
「<br>」と手入力することで、対象者が複数名いる場合でも改行され、見やすくなります。


 

リマインド対象者を自分に通知(任意)

誰がどのメッセージにリマインドしていないかを確認したい場合、任意で下記アクションを追加します。
この作業は、「それぞれに適用する」のスコープ外の「+」アイコンよりアクションを追加してください



nonReactionName」アレイが空白(リマインド対象者)の場合は通知不要のため、まずは「Control」より「条件」アクションを追加します。

左辺動的なコンテンツより「nonReactionName」を選択します。
演算子is not equal to
右辺fxより以下の式を入力します。
string('')



条件に合致する場合(nonReactionNameアレイが空白でない場合)、リマインド対象者を自分に通知します。
「Microsoft Teams」の「チャットまたはチャネルでメッセージを投稿する」を追加します。

投稿者個別チャットを受信するため、「フローボット」を選択します。
投稿先Chat with Flow bot
Recipient動的なコンテンツより「マイプロフィールの取得」直下の「メール」を選択します。
Message任意のメッセージを入力します。
ここでは、対象メッセージへのリンクと、対象者の名前を表示させるための「nonReactionName」を追加しました。



これで、リアクションしていないメンバーへのリマインド作業は完了です。
フローのスクリーンショットはこちらを確認ください。

 

フローの保存とテスト

保存をし、テストを実行してみてください。
対象者へチャットが届いていたら成功です。



自分へリマインド対象者を通知した場合、下記のような形でチャットが届きます。

コメント