【Power Automate】複数人を1つのTeams投稿にまとめて@メンションする方法

Power Automateで複数人を1通のTeams投稿にまとめてメンションする流れの図解 Power Automate

Power AutomateからTeamsに通知を送るとき、宛先が1人であれば「ユーザーの@mentionトークンを取得する」を1つ置くだけで済みます。ところが宛先が複数人になると、トークンをどこで作って本文に入れるか考える必要があります。私は7人分のメンションを1通にまとめるところで詰まったので、そのときの手順をまとめます。

この記事でできること

この記事を読むと、Power AutomateからTeamsのチャネルにメッセージを1通だけ投稿し、その本文に複数人分の@メンションを並べられるようになります。

@mentionトークンをループの中で配列変数に貯めておき、ループの外に置いた投稿アクションで、その配列をまとめて本文に差し込みます。

完成イメージ

最初に、Power Automateのフローを確認しておきます。これを動かすと、チャネルに1通だけ投稿され、本文に対象者分のメンションが並びます。

複数人のメンションを行うTeams通知のPower Automateのフローの画面

全体の実装構成

流れは3段階です。

  1. 配列変数を初期化する
  2. Apply to eachで対象者をループし、その中で@mentionトークンを取得して配列に追加する
  3. ループの外で、貯めた配列を本文に差し込んでメッセージを1回投稿する

使うアクションは以下の5つです。置く場所がそのまま設計のポイントになります。

アクション置く場所役割
変数を初期化するフローの先頭メンショントークンを貯める配列変数を用意する
Apply to eachメンション対象者のメールリストを取得した後対象者を1人ずつループする
ユーザーの@mentionトークンを取得するループの中1人分のメンショントークンを取得する
配列変数に追加ループの中取得したトークンを配列に貯める
チャットまたはチャネルでメッセージを投稿するループの外貯めた配列を本文に差し込んで1通投稿する

実装手順

Step1|配列変数varMentionsを初期化する

フローの先頭に「変数を初期化する」を置きます。設定は以下のとおりです。

項目設定値
名前varMentions
種類アレイ
空のまま

ここはメンショントークンを貯めるための器です。値を入れるのは次のステップからなので、この時点では空で問題ありません。

変数を初期化するでアレイ型の配列変数を作っている画面

Step2|対象者をループして@mentionトークンを取得する

対象者の一覧は、SharePointリストの名簿で持っています。「複数の項目の取得」でリストを取得し、その結果をApply to eachでループします。

ループの中に「ユーザーの@mentionトークンを取得する」を置き、ユーザー欄には今ループしている行のメールアドレスを指定します。私は式で item()?[‘Email’] を指定しました。

複数の項目の取得でリストを取得している画面
Apply to eachの前のステップから出力を選択しますを設定している画面
ユーザーの@mentionトークンを取得するのユーザー欄を設定している画面

Step3|取得したトークンを配列変数に追加する

同じループの中、トークンを取得した直後に「配列変数に追加」を置きます。

項目設定値
名前varMentions(Step1で作った配列変数)
動的コンテンツの「@mention(メッセージに挿入できます)」

値の欄は、動的コンテンツの一覧から「@mention(メッセージに挿入できます)」と表示されているプロパティを選びます。

配列変数に追加のValueを入力している画面

これでループが1周するたびに、1人分のトークンが配列に積み上がっていきます。

Step4|ループの外でメッセージ本文に差し込む

ループの外に「チャットまたはチャネルでメッセージを投稿する」を置きます。投稿者はフローボット、投稿先はチャネルを選び、投稿先のチームとチャネルを指定します。

メッセージ本文に入れるのは variables(‘varMentions’) です。これで本文に配列の中身がまとめて入り、1通の投稿に全員分のメンションが並びました。

ハマりポイントまとめ

この実装で私が踏んだのは、次の2点です。

#詰まったこと対処
@mentionトークンの取得が404で失敗するテナント内に実在するM365ユーザーのアドレスに差し替え
複数の項目の取得で得たbody/value選択時に、Apply to eachのループ中にさらにループしてしまった2重ループとなったので1重に直す

①のエラーは、次のような内容でした。

Request_ResourceNotFound
statusCode 404
Resource 'xxx@test.local' does not exist

@mentionトークンは、テナント内に実在するM365ユーザーに対してしか取得できません。私はテストデータとして架空のドメインのメールアドレスを入れていたため、この404が出ていました。名簿のアドレスを実在するものに差し替えて解消しました。

まとめ

今回のポイントは3つです。

  • 配列変数に追加を使用して、ループの中で配列にメンションを貯める
  • メンションを貯めた変数をループの外で1回だけ投稿する
  • @mentionトークンは、テナント内に実在するM365ユーザーでないと取得できない

配列変数に複数の宛先を貯めることで1回の投稿に複数メンションが可能です。Power Platformを触り始めたばかりの方に向けて、こういった詰まりポイントをこれからも発信していきます。よかったらブログをブックマークして、またのぞきに来てください。

あわせて読みたい

同じフローに、失敗したときのエラー通知を後から付け足した手順も記事にしています。投稿の形ができたあとに読むと、フロー全体の組み立てがつながりやすいです。

【Power Automate】Try/Catchでエラー通知を後付けする|スコープと設定
Power AutomateでフローにTry/Catchのエラー通知を後付けする手順を解説します。スコープ2つの組み方、設定での実行条件、resultとcoalesceを使った失敗アクションとエラー内容の取り出し方をステップごとにまとめます。

コメント

タイトルとURLをコピーしました