🦔

アダプティブカードでユーザーの回答を取得して Power Automate のフローを条件分岐させる方法

に公開

はじめに

ユーザーの回答に基づいて Power Automate のフローを条件分岐させる方法を探していました。
アダプティブカードで回答してもらう方法が使いやすかったので記録します。
例として、ユーザーにTeamsのチーム名を選択してもらうアダプティブカードを作成します。
この方法を応用して、ユーザーにチャネルやスレッド(投稿)を選択してもらうことも可能です。

準備

例として、以下のカードをテンプレートとして使用します。

カードのイメージ
{
    "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
    "type": "AdaptiveCard",
    "version": "1.3",
    "body": [
        {
            "type": "TextBlock",
            "weight": "Bolder",
            "size": "Medium",
            "text": "チーム名を選択してください。"
        },
        {
            "type": "Input.ChoiceSet",
            "choices": [
                {
                    "title": "チーム名",
                    "value": "aaa"
                }
            ],
            "id": "TeamId",
            "placeholder": "チーム名を選択"
        }
    ],
    "actions": [
        {
            "type": "Action.Submit",
            "title": "送信"
        }
    ]
}

作成手順

手順 内容
1 チームのリストを取得します。
2 カードの選択肢を作成します。
3 カードに回答するユーザーを設定します。
4 カードを作成します。
5 ユーザーの回答を取得します。

1. チームのリストを取得

アクション「チームの一覧表示」を配置し、チームのリストを取得します。

チームの一覧表示

2. カードの選択肢を作成

アクション「変数を初期化する」を配置し、選択肢を入れるアレイ型の変数を作ります。

変数を初期化するアクションのイメージ

アクション「作成」を配置し、入力欄にカードのテンプレートの選択肢("choices":[]の値)をコピーして入力します。

作成のアクションのイメージ

選択肢の title を「チームの一覧表示」で取得したチーム名、value をチームIDに更新します。

アクション「配列変数に追加」を配置し、アレイ型の変数と「作成」の出力をセットします。

配列変数に追加のアクションのイメージ

3. カードに回答するユーザー

アクション「マイ プロフィールの取得 (V2)」を配置します。
今回は、フローを実行したユーザーの情報を取得し、そのユーザーにカードを送信します。

マイプロフィールの取得のアクションのイメージ

4. カードを作成

アクション「アダプティブ カードを投稿して応答を待機する」を配置します。
今回は、投稿者はフローボット、投稿先はチャットを設定します。
Recipient には、直前のアクションで取得したユーザーのメールアドレスを設定します。

アダプティブ カードに係るアクションのイメージ1

メッセージの欄に前出のカードのテンプレートを貼り付けます。

アダプティブ カードに係るアクションのイメージ2

続けて、"choices": の部分に、選択肢として用意したアレイ型の変数を設定します。

アダプティブ カードに係るアクションのイメージ3

以上でカードは完成です。

5. ユーザーの回答を取得

カードに対するユーザーの回答を取得します。
得られた回答は、後続の工程で、条件分岐に使用することを想定しています。
まずは、ここまでのフローをテスト実行し、出力パラメーターを確認します。

テスト実行 画像
Teamsのチャットで、フローボットからカードが届くので、チームを選択して送信します。 フローボットのチャットのイメージ

フローが成功したら、実行結果を確認します。
アクション「アダプティブ カードを投稿して応答を待機する」の出力パラメーターの body を下までスクロールします。
ユーザーの回答は、"data" の中に格納されます。
"TeamId"(カードの "type": "Input.ChoiceSet" に紐づく"id": "TeamId")の値として、ユーザーの回答した "title"(チーム名)に対応する "value"(チームID)が格納されています。

出力パラメーターのdataのイメージ

"TeamId" の値は、任意のアクションにおいて、以下の方法で取り出すことができます。

画像 パラメーター(参考)
回答値の取り出し方のイメージ body('アダプティブ_カードを投稿して応答を待機する')?['data']?['TeamId']

参考

カードの選択肢を変えて、チャネルやスレッド(投稿)を選択してもらうことも可能です。
その際は、カードの "type": "Input.ChoiceSet" に紐づく"id" についても、"ChannelId" や "ThreadId" など、わかりやすい名前に変更します。

参考 画像
チャネルを選択させたいときは、アクション「チャネルの一覧表示」を使い、選択肢を作ります。 チャネルの選択肢の作成イメージ
スレッドを選択させたいときは、アクション「メッセージを取得します」を使い、選択肢を作ります。 スレッドの選択肢の作成イメージ

Discussion