ルドルフもわたるふもいろいろあってな

Microsoft 365、Power Platform、PowerShellについて調べたことや検証したことなどを投稿します。技術の話は面白い。

【Power Automate】【解説編その3】チェックボックスを使ってメンション先を指定する

掲題のフローの解説編その3です。

このフローをGitHubで公開しました。下記リンク先からダウンロードしてください。

github.com

 

解説の経緯

今回の投稿は概要編解説編その1解説編その2の続きです。

フローの使用イメージ

フローの使用イメージについては概要編に記載しています。概要編を未読のかたはそちらを先に参照ください。

 

フロー図

「解説編その3」で解説する範囲

「解説編その3」解説する範囲は黄色マーカーをひいている1つです。

  1. チームのタグを一覧取得
  2. チームのメンバーを一覧取得
  3. フローbotを使ってフロー実行者からメンション先の指定を受け付ける
  4. 指定されたメンション先のメンショントークンを取得して文字列変数に格納
  5. メンションを含む返信を投稿
  6. 実行ユーザーにフローの完了通知を送信

 


開いた状態のフロー図における今回の解説範囲は下図の赤枠で囲まれた箇所です。

 

「解説編その3」の入力と出力

入力

今回の範囲における入力情報は「解説編その2」の出力である「メンショントーク」です。

  • タグのメンショントークン (HTMLの AtTag 要素)
  • ユーザーのメンショントークン(HTMLの at 要素 )

メンショントークンの実体はHTMLの要素です。このHTMLをTeamsの会話タブ内の含めて投稿を行うことでメンションが実行されます。

<atTag><tagId>ODFhZWYzY2ItMmNmYy00NGQzLWFjNTktMWJiNDVkNjZmOTEwIyNmYmRjYmM5Ni0xZDQ0LTRmYWUtODJhZC04NDA2NjkyMmJkZmMjI3RObWN3bEpXVg%3D%3D</tagId><groupId>fbdcbc96-1d44-4fae-82ad-84066922bdfc</groupId></atTag> <atTag><tagId>ODFhZWYzY2ItMmNmYy00NGQzLWFjNTktMWJiNDVkNjZmOTEwIyNmYmRjYmM5Ni0xZDQ0LTRmYWUtODJhZC04NDA2NjkyMmJkZmMjI3Rid3cweUZZZg%3D%3D</tagId><groupId>fbdcbc96-1d44-4fae-82ad-84066922bdfc</groupId></atTag> <at>MeganB@XXXXXX.OnMicrosoft.com</at> <at>LynneR@XXXXXX.OnMicrosoft.com</at>

出力

「解説編その3」の出力は下記の2つです。

  • 指定したスレッドに対してメンションを含んだ返信を投稿

  • フロー実行者に対してチャットでフローの完了を通知

 

ステップごとの解説

「変数を初期化する-返信先ID」アクション

このアクションは「変数」>「変数を初期化する」です。後続のアクション先で返信先のIDを取得するために使用します。この時点では中身は空の状態です。

プロパティ

"inputs": {
    "variables": [
        {
            "name": "返信先ID",
            "type": "string"
        }
    ]
},

 

「スコープ-メンションを含む返信を投稿する」アクション

このアクションは「コントロール」>「スコープ」です。このフローでは意味のある単位で複数のアクションを束ねる目的でスコープを使用しています。つまり、フロー図の可読性を保つためにスコープを使用しています。

このスコープに含まれるアクション(= メンションを含む返信の取得に関わるアクション)は下図のふたつです。

  • 「条件-対象が親の投稿である」アクション
  • 「チャネル内のメッセージで応答します」アクション

「条件-対象が親の投稿である」アクション

このアクションは「コントロール」>「条件」です

条件文

  • empty(triggerBody()?['teamsFlowRunContext']?['messagePayload']?['replyToId'])
  • 次の値に等しい
  • true

この条件文は、フローの起点になった投稿に返信先IDが無い(= その投稿が親の投稿である)場合はtrue と判定されます。この場合は「はいの場合」に進みます。
フローの起点になった投稿に返信先IDがある(= その投稿が"返信"である)場合は false と判定されます。この場合は「いいえの場合」に進みます。

「はいの場合」に実行する処理

この分岐で実行されるアクションは下記の通りです。

「変数の設定-返信先ID」アクション

このアクションは「Microsoft Teams」>「変数の設定」です。この分岐を通るということは起点の投稿が”親の投稿”であることあらわすため、メンションを含む返信の宛先がこの投稿自身になります。そのため「返信先ID」変数に起点の投稿のIDを設定します。

プロパティ

"inputs": {
    "name": "返信先ID",
    "value": "@triggerBody()?['teamsFlowRunContext']?['messagePayload']?['id']"
},
「いいえの場合」に実行する処理

この分岐で実行されるアクションは下記の通りです。

「変数の設定-返信先ID 2」アクション

このアクションは「Microsoft Teams」>「変数の設定」です。この分岐を通るということは起点の投稿が”返信”であることあらわすため、メンションを含む返信の宛先が"起点の投稿の返信先"になります。そのため「返信先ID」変数に起点の投稿の返信先IDを設定します。

プロパティ

"inputs": {
    "name": "返信先ID",
    "value": "@triggerBody()?['teamsFlowRunContext']?['messagePayload']?['replyToId']"
},

「チャネル内のメッセージで応答します」アクション

このアクションは「Microsoft Teams」>「チャネル内のメッセージで応答します」です。メンション付きの返信を指定したスレッドに投稿します。このアクションがこのフローの主目的です。

プロパティ

"parameters": {
    "poster": "User",
    "location": "Channel",
    "body/parentMessageId": "@variables('返信先ID')",
    "body/recipient/groupId": "@triggerBody()?['teamsFlowRunContext']?['channelData']?['team']?['aadGroupId']",
    "body/recipient/channelId": "@triggerBody()?['teamsFlowRunContext']?['channelData']?['channel']?['id']",
    "body/messageBody": "<p>@{variables('メンショントークン')}</p>"
},

 

このアクションが実行されることで、メンションが行われます。

「スコープ-実行ユーザーにフローの完了通知を送る」アクション

このアクションは「コントロール」>「スコープ」です。このスコープもフロー図の可読性を保つために使用しています。

このスコープに含まれるアクション(= 完了通知に関わるアクション)は下図のふたつです。

  • 「作成-チャットの本文」アクション
  • 「チャットまたはチャネルでメッセージを投稿する」アクション

 

「作成-チャットの本文」アクション

このアクションは「データ操作」>「作成」です。フロー実行者に送るチャットの本文を定義します。

プロパティ

"inputs": "タグおよびメンバーへのメンションを含めた返信をスレッドに投稿しました。\n\n【フローによって投稿した返信のリンク】\n<a href=\"@{outputs('チャネル内のメッセージで応答します')?['body/messageLink']}\">返信を開く</a>",

「チャットまたはチャネルでメッセージを投稿する」アクション

このアクションは「Microsoft Teams」>「チャットまたはチャネルでメッセージを投稿する」です。先ほどのアクションで作成した本文をフロー実行者に送信します。

プロパティ

"inputs": {
    "host": {
        "connectionName": "shared_teams",
        "operationId": "PostMessageToConversation",
        "apiId": "/providers/Microsoft.PowerApps/apis/shared_teams"
    },
    "parameters": {
        "poster": "Flow bot",
        "location": "Chat with Flow bot",
        "body/recipient": "@triggerBody()?['teamsFlowRunContext']?['from']?['aadObjectId']",
        "body/messageBody": "<p>@{replace(outputs('作成-チャットの本文'), decodeUriComponent('%0A'), '<br/>')}</p>"
    },

このアクションが実行されることで、フロー実行者にフローの完了が通知されます。

 

今回のフローについての解説はこれで以上です。

('ω')ノシ