リモートワークで導入して良かったツール詳しく見る

Power Automateからチームメンバー全員にメンションする方法!!

じょじお

Power AutomateからTeamsへメッセージを送信する際に、メンションを使う方法をいくつかお伝えしました。今回はチームメンバー全員にメンションする方法について検証してみました。

目次

Power AutomateのTeamsコネクタのメンションの前提

おさらいになりますが、Power Automateでは、いまのところ(2021年10月28)チャネルメンション(@Channel)やチームメンション(@Team)やタグによるメンションが使えません。

このため、複数人にメンションするには少し工夫する必要があります。

チームメンバ全員にメンションする方法

Power Automateからチャネルメンションやチームメンションを使用する方法として 「HTTP with Azure AD」コネクタを使ってGraphAPI経由でTeamsにメッセージを送信する記事を見つけました。

じょじお

しかし、こちらの方法はPower Automateのプレミアムコネクタが必要なんですよね。

ぽこがみさま

プレミアムコネクタを使わないで頑張る方法はないのかにゃ?

じょじお

チームメンバ一覧情報をもとに「全員分のメンションタグを作成する」という方法なら、一応は全員にメンションすることができるので紹介します。

じょじお

あまりカッコいいものではないですが・・・わかりやすい方法だとは思います!

Power Automate フローの完成図

フロー完成図

じょじお

「グループメンバーの一覧表示」アクションで取得したメンバーリストを基に、「ユーザの@mentionトークンを取得する」アクションで全員分のメンショントークンを作成します。

フローの実行によるTeamsメッセージ

じょじお

図のようにメンバの数だけメンショントークンを作成します。人数が多いと文頭に置くのは邪魔になるので文末に置きました。

Teams

Power Automateフロー作成手順

STEP
Power Automateのホームページを開きます。

Power Automateのホーム画面はこちらです。

STEP
「インスタントクラウドフロー」を作成します。
Power Automate インスタントクラウドフロー

▲①左側メニューの作成をクリックして、②「インスタントクラウドフロー」を選択してフローを作成します。

Power Automate インスタントクラウドフロー

▲①フロー名に任意の名前を入力>②「手動でフローをトリガーします」>③作成をクリックします。

STEP
トリガーの設定をします。
じょじお

今回はメンションのテストなので、ボタンからメッセージを送信できるようにします。ボタンを押した時にTeamsに送信するメッセージ本文を入力できるようにします。

Power Automate

▲「+入力の追加」をクリックします。

Power Automate

▲ユーザー入力の種類の選択に「テキスト」を選択します。

Power Automate

▲入力欄のラベルテキストを入力します。任意のわかりやすいメッセージを入力してください。ここでは「メッセージのタイトル」と入力しました。

Power Automate

▲もうひとつテキスト入力を受け付けるボックスを用意します。こちらは「メッセージの本文」というラベルをつけます(図の赤枠)。

STEP
「Office365 Groups」コネクタの「グループメンバーの一覧表示」アクションを追加します。
Power Automate 新しいステップ

▲「新しいステップ」をクリックします。

Power Automate

▲「Group」というキーワードで検索して、「Office365 Groups」コネクタを探してクリックします。

Power Automate

▲ 「Office365 Groups」コネクタ の中の「グループメンバーの一覧表示」アクションを追加します。

▲メンションを送信するチームを選択します。

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

▲「変数」コネクタの中の「変数を初期化する」アクションを追加します。

  • 名前:任意の変数の名前を入力します。ここでは「arr」としました。
  • 種類:アレイを選択します。
  • 値:(空白)
STEP
「Apply to each」アクションを追加します。
Power Automate

▲「コントロール」コネクタの中の「Apply to each」アクションを追加します。入力値として、「グループメンバーの一覧表示」アクションの動的コンテンツ(動的な値)である「value」を選択します。

STEP
ループの中に「ユーザーの@mentionトークンを取得する」アクションを追加します。
Power Automate

▲Apply to eachループの中に「Teams」コネクタの中の「ユーザーの@mentionトークンを取得する」アクションを追加します。

ユーザー: 「グループメンバーの一覧表示」アクションの動的コンテンツ(動的な値)である 「ユーザープリンシパル名」を入力します。

STEP
ループの中に「作成」アクションを追加します。
Power Automate

▲「データ操作」コネクタの中の「作成」アクションを追加します。

入力:@{decodeUriComponent(outputs(‘ユーザーの@mentionトークンを取得する’)?[‘body/atMention’])}

じょじお

ここでは「ユーザーの@mentionトークンを取得する」アクションの戻り値(動的コンテンツ)をdecodeUriComponent関数でデコードしています。詳しくは次のColumnを見てね。

Column

decodeUriComponent関数でデコードが必要だよ!

「ユーザーの@mentionトークンを取得する」アクションで作成したメンショントークンはURIエンコードされた状態で戻ってきます。通常の組織内ユーザのみのチーム(グループ)であれば恐らく問題ないのですが、組織外の方をゲストユーザとして招待している場合、下記のように「#(シャープ)」が入ったUPN(ユーザープリンシパルネーム)になります。

組織外のゲストユーザのUPNの例 jojio_contoso.onmicrosoft.com#EXT#@tejilabo.onmicrosoft.com

「#(シャープ)」は、URIには使えない文字列なのでエンコード対象となります。試しに上の例のUPNを 「ユーザーの@mentionトークンを取得する」アクション に渡してみると下記のようにエンコードされたメンショントークンが戻ってきました。

<at>jojio_contoso.onmicrosoft.com%23EXT%23@tejilabo.onmicrosoft.com</at>

じょじお

「#」が「%23」にエンコードされていますね。

ぽこがみさま

このままTeamsのアクションに渡してもメンションとして機能しないにゃ・・

じょじお

そうだね。そこで使うのが 「decodeUriComponent関数」 なんだよ!

Power Automateの「decodeUriComponent関数」とは?

じょじお

decodeUriComponent関数は、URIエンコードされた文字列をエンコード前の文字列に戻してくれます(デコード)。

エスケープ文字をデコード バージョンに置き換えた文字列を返します。

式関数のリファレンスガイド – decodeUriComponent関数

使い方の例
decodeUriComponent(<at>jojio_contoso.onmicrosoft.com%23EXT%23@tejilabo.onmicrosoft.com</at>)

結果
<at>jojio_contoso.onmicrosoft.com#EXT#@tejilabo.onmicrosoft.com</at>

STEP
ループの中に「配列変数に追加」アクションを追加します。
Power Automate

▲「変数」コネクタの中の「配列変数に追加」アクションを追加します。

  • 名前:STEP5で作成した変数を選択します。
  • 値:STEP8の「作成」アクションの動的コンテンツである「出力」を入力します。
STEP
「結合」(参加?)アクションを追加します。
Power Automate

▲(Apply to eachループの外側に)「データ操作」コネクタの中の「参加(結合)」アクションを追加します。

  • 結合する配列:arr
  • 次を使用して結合:さん、
じょじお

配列のままだと、Teamsアクションの中で使えないので、一つの文字列にするために結合アクションを使います。”山田さん”のように”さん”を付けて結合しています。

STEP
「チャットまたはチャネルでメッセージを投稿する」アクションを追加します。
Power Automate

▲パラメータを入力します。

**チームメンバ 各位**

# **@{triggerBody()['text']}** @{triggerBody()['text_1']}


@{body('結合')}さん
STEP
完成したフローをテスト実行します。
Power Automate

▲テスト実行してTeamsのメッセージを確認しましょう!

Teams
じょじお

文頭に「メンバー全員宛て」であることを書いたほうが実用的かと思います!

ちなみに、メンションを部分を隠したかったので、アダプティブカードのShowcardの子カードのtextblockに含めたらエラーがでてうまくいきませんでした。非表示領域にメンショントークンを挿入できないような気がしています。

まとめ

じょじお

以上、チームメンバ全員にメンションをつけてTeamsメッセージを送信する方法について解説でした。

ノンプログラマーでも自動化スキルを身につける。

よかったらシェアしてね!
URLをコピーする
URLをコピーしました!
目次
閉じる