はじめに
この記事は「Microsoft Power Automate Advent Calendar 2025」に参加しています。
シリーズ2 - 16日目の記事です。
このフローの目的
Microsoft Teams でチャットを使っている際の不便を軽減することを目的としたフローです。
今開いているチャットのメンバー情報をコピーして新規チャットを作成します。
気ままに勉強会 #131でお話しさせていただいたフローの詳細記事です。
sasami-axis.hatenablog.com

動作イメージ
フロー全体

フロー解説

1.[Microsoft Teams] 作成ボックスから(V2)
チャットの入力ボックスからフローを実行するためにこのトリガーを使用します。

{
"type": "AdaptiveCard",
"body": [
{
"type": "Input.Text",
"placeholder": "チャットの名前を入力",
"label": "チャット名",
"isRequired": true,
"id": "name",
"errorMessage": "チャット名は必須です。"
}
],
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"version": "1.3"
}

2.[変数]変数を初期化する - メンバーリスト
現在のチャットのメンバーリストを格納する変数を初期化します。

3.[コントロール]スコープ-メンバーリストを作成
3-1.[コントロール]条件-呼び出し元がチャットかチャネルかで分岐
呼び出し元がチャットかチャネルかで処理を分岐します。teamsFlowRunContext/ChannelData/Team/AadGroupId の値が無ければチャットからの呼び出しと判断しています。

- パラメーター
- Condition expression
- かつ
empty(triggerBody()?['teamsFlowRunContext']?['channelData']?['team']?['aadGroupId'])
- 等しい
true
3-1-1. true:チャットの場合
3-1-1-1. [Microsoft Teams]メンバーリストを作成
チャットのメンバーリストを取得します。

- パラメーター
- スレッドの種類
- グループチャット
- @{triggerBody()?['teamsFlowRunContext']?['conversation']?['id']}
3-1-1-2.[変数]変数の設定 - メンバーリスト
メンバーリストを変数に格納します。

- パラメーター
- 名前
- 値
- @{outputs('メンバーリストを作成-_chat')?['body/value']}
3-1-2. false:チャネルの場合
3-1-2-1.[Microsoft Teams]メンバーリストを作成 - channel
チャネルのメンバーリストを取得します。

- パラメーター
- スレッドの種類
- チーム
- @{triggerBody()?['teamsFlowRunContext']?['channelData']?['team']?['aadGroupId']}
- チャネル
- @{triggerBody()?['teamsFlowRunContext']?['channelData']?['channel']?['id']}
3-1-1-2.[変数]変数の設定 - メンバーリスト2
メンバーリストを変数に格納します。

- パラメーター
- 名前
- 値
- @{outputs('メンバーリストを作成-_channel')?['body/value']}
4.[コントロール]スコープ-チャットを作成
4-1.[Office 365 ユーザー]マイ プロフィールの取得 (V2)
フロー実行ユーザーのプロフィールを取得します。

4-2.[データ操作]アレイのフィルター処理-自分以外
メンバーリストからフロー実行ユーザーを除外します。

- パラメーター
- From
- Filter Query
- @{item()?['userId']}
- 異なる
- @{outputs('マイプロフィールの取得(V2)')?['body/id']}
4-3.[データ操作]選択
ユーザーIdのみの配列を作成します。

- パラメーター
- 元
-@{body('アレイのフィルター処理-自分以外')}
-マップ
-@{item()?['userId']}
4-4.[データ操作]結合
4-3の配列の要素を結合し、セミコロン区切りのユーザーId文字列を作成します。

4-5.[コントロール]スイッチ - メンバー数
メンバー数で処理を分岐します。

- パラメーター
- オン
Length(variables('メンバーリスト'))
4-5-1.Case - 1人
メンバーが1人の場合=自分1人チャット・自分1人チーム
4-5-1-1.[Microsoft Teams]Teams のタスク モジュールで応答 - メンバーが自分一人
メンバー1人のチャットは作成できないためメッセージを表示して終了します。

{
"type": "AdaptiveCard",
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"version": "1.4",
"body": [
{
"type": "TextBlock",
"text": "現在のチャット/チャネルのメンバーが2人以上である必要があります。",
"wrap": true,
"weight": "Bolder"
}
],
"targetWidth": "Wide"
}
4-5-2.Case - 2人
メンバーが2人の場合=1対1チャット・2人チーム
2名+ダミーユーザーでグループチャットを作成します
4-5-2-1.[Office 365 ユーザー]ユーザー プロフィールの取得 (V2) - ダミーユーザー
ダミーユーザーのプロフィールを取得します。

- パラメーター
- ユーザー(UPN)
- 追加するユーザーのUPN
- リソースなど通常追加しないユーザーを追加します。
4-5-2-2.[Microsoft Teams]チャットの作成 - 1対1チャットがソース?
チャットを作成します。

- パラメーター
- 追加するメンバー
- @{body('結合')};@{outputs('ユーザープロフィールの取得(V2)-ダミーユーザー')?['body/id']}
- タイトル
- @{triggerBody()?['cardOutputs']?['name']}
4-5-2-3.[Microsoft Teams]Teams のタスク モジュールで応答 - 1対1チャットがソース
メッセージを表示します。

{
"type": "AdaptiveCard",
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"version": "1.4",
"body": [
{
"type": "TextBlock",
"text": "新しいチャットを作成しました。",
"wrap": true,
"weight": "Bolder"
},
{
"type": "TextBlock",
"wrap": true,
"text": "@{triggerBody()?['cardOutputs']?['name']}"
},
{
"type": "TextBlock",
"wrap": true,
"text": "【重要】新規チャットにはダミーユーザー「xxxx@xxxxxxx.com」がメンバー追加されています。\n利用開始する前にダミーユーザーを削除してください。"
},
{
"type": "ActionSet",
"actions": [
{
"type": "Action.OpenUrl",
"title": "開く",
"url": "https://teams.microsoft.com/l/chat/@{outputs('チャットの作成_-_1対1チャットがソース?')?['body/id']}/conversations"
}
]
}
],
"targetWidth": "Wide"
}

4-5-3.既定
メンバーが3人以上の場合
4-5-3-1.[Microsoft Teams]チャットの作成
チャットを作成します。

- パラメーター
- 追加するメンバー
- タイトル
- @{triggerBody()?['cardOutputs']?['name']}
4-5-3-2.[Microsoft Teams]Teams のタスク モジュールで応答 - 1対1チャットがソース
メッセージを表示します。

{
"type": "AdaptiveCard",
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"version": "1.4",
"body": [
{
"type": "TextBlock",
"text": "新しいチャットを作成しました。",
"wrap": true,
"weight": "Bolder"
},
{
"type": "TextBlock",
"wrap": true,
"text": "@{triggerBody()?['cardOutputs']?['name']}"
},
{
"type": "ActionSet",
"actions": [
{
"type": "Action.OpenUrl",
"title": "開く",
"url": "https://teams.microsoft.com/l/chat/@{outputs('チャットの作成')?['body/id']}/conversations"
}
]
}
],
"targetWidth": "Wide"
}

課題・制限事項
メンバー最大20人まで
今回のフローでは、Microsoft Teams コネクタの チャットを作成するアクションを使ってチャットを作成しています。
このアクションには、メンバー最大20人までしかチャットを作成できないという制限があります。

実際に21人以上のチャットを作成しようとすると下記エラーが発生します。

この制限への対処方法は検討中です。
コピー元に指定できない
下記のものは作成ボックスからワークフローを表示することができないため、今回のフローを呼び出すことができません。
さいごに
今回のフローは、以前作成した「Teamsで今開いているチャットと同じメンバーで新規チャットを開始するPower Automate クラウドフロー【暫定版】」の改良版でもあります。
主な改良点は下記の3点です。
- チャットだけでなくチャネルをソースにできるように変更
- メンバーが3人以上の場合はダミーユーザーを追加しないように変更
- メンバーが1人の場合にエラー処理を追加