はじめに
Teamsのコネクタに「Microsoft Graph HTTP 要求を送信する」が追加され、用意されていないアクションになくてもできることが増えました。
リアクションを追加することもできます
チャネルのすべての投稿にイイネするフロー
この記事では、標準のアクションではできなかった、プライベートチャネルの作成に挑戦します。
Microsoft Graph APIを使用する
Microsoft Graph HTTP 要求を使用するために、まずはリファレンスページを確認しましょう。
このページの左側のナビゲーションを辿って、チャネルを作成する方法を確認します。

実行例もちゃんと書いてくれているので、こちらの例を参考に進めていきます。

検証準備
動作検証用にチームを作成しました。
現在は、デフォルトで作成される標準チャネルのみの状態です。
自分以外に、チームの所有者であるAさんと、メンバーであるBさんを追加しています。
また、後ほどチームに参加していないCさんにも出てきてもらう予定です。
実行例
例1:自分が所有者となるプライベートチャネル
まずは、リファレンスページの例2の通りにやってみましょう。
membershipTypeをprivateにすることでプライベートチャネルが作成できるようです。
チャネル名(displayName)やチャネルの説明(description)の他に、チャネルを作成する親となるチームのIDや、チャネルの所有者として追加するユーザーのIDが必要です。

チャネル名とチャネルの説明は変数として指定しておきます。
チームのIDとユーザーIDは、あらかじめ調べておいてもよいのですが、Power Automate のアクションを使って以下のように取得することが可能です。

変数としてあらかじめ設定した内容や、取得した情報を使って、リファレンスページの通りにアクションを設定します。

https://graph.microsoft.com/v1.0/teams/@{outputs('チームの取得')?['body/id']}/channels
{
"@odata.type": "#Microsoft.Graph.channel",
"membershipType": "private",
"displayName": "@{variables('チャネル名')}",
"description": "@{variables('チャネルの説明')}",
"members":
[
{
"@odata.type":"#microsoft.graph.aadUserConversationMember",
"user@odata.bind":"https://graph.microsoft.com/v1.0/users('@{outputs('マイ_プロフィールの取得_(V2)')?['body/id']}')",
"roles":["owner"]
}
]
}
application/json
結果は以下の通り、指定したチームに自分が所有者であるプライベートチャネルを作成することができました。

例2:自分の他にもう1人所有者を追加する
所有者をもう1人設定してみます。
まずはIDの確認のため、「ユーザー プロフィールの取得 (V2)」アクションを追加します。

HTTP要求本文のmembersにも同じ形式でもう1人分の情報を追加します。

{
"@odata.type": "#Microsoft.Graph.channel",
"membershipType": "private",
"displayName": "@{variables('チャネル名')}",
"description": "@{variables('チャネルの説明')}",
"members":
[
{
"@odata.type":"#microsoft.graph.aadUserConversationMember",
"user@odata.bind":"https://graph.microsoft.com/v1.0/users('@{outputs('マイ_プロフィールの取得_(V2)')?['body/id']}')",
"roles":["owner"]
},
{
"@odata.type":"#microsoft.graph.aadUserConversationMember",
"user@odata.bind":"https://graph.microsoft.com/v1.0/users('@{outputs('ユーザー_プロフィールの取得_(V2)')?['body/id']}')",
"roles":["owner"]
}
]
}
実行すると、所有者が2人のプライベートチャネルが作成できました。

例3:自分以外にメンバーを追加する
次は、所有者ではなく、メンバーとしてもう1人追加します。
例2のフローからメンバーにしたいユーザーのrolesを空にすればOKです。

{
"@odata.type": "#Microsoft.Graph.channel",
"membershipType": "private",
"displayName": "@{variables('チャネル名')}",
"description": "@{variables('チャネルの説明')}",
"members":
[
{
"@odata.type":"#microsoft.graph.aadUserConversationMember",
"user@odata.bind":"https://graph.microsoft.com/v1.0/users('@{outputs('マイ_プロフィールの取得_(V2)')?['body/id']}')",
"roles":["owner"]
},
{
"@odata.type":"#microsoft.graph.aadUserConversationMember",
"user@odata.bind":"https://graph.microsoft.com/v1.0/users('@{outputs('ユーザー_プロフィールの取得_(V2)')?['body/id']}')",
"roles":[]
}
]
}
実行すると、メンバーが追加されたプライベートチャネルが作成されました。

例4:自分の代わりの所有者を設定する
今度は自分が参加しない状態でも作成できるのかを確認してみます。
Aさんのみを所有者として設定しました。

{
"@odata.type": "#Microsoft.Graph.channel",
"membershipType": "private",
"displayName": "@{variables('チャネル名')}",
"description": "@{variables('チャネルの説明')}",
"members":
[
{
"@odata.type":"#microsoft.graph.aadUserConversationMember",
"user@odata.bind":"https://graph.microsoft.com/v1.0/users('@{outputs('ユーザー_プロフィールの取得_(V2)')?['body/id']}')",
"roles":["owner"]
}
]
}
自分が参加していなくても、ユーザーの代わりにプライベートチャネルを作成できることがわかりました。
例5:メンバー0人で作成(エラー)
所有者の指定が少しややこしかったので、試しに所有者なしで登録できるか確認してみます。

membersを空の配列にしてメンバー無しで設定してみます。
{
"@odata.type": "#Microsoft.Graph.channel",
"membershipType": "private",
"displayName": "@{variables('チャネル名')}",
"description": "@{variables('チャネルの説明')}",
"members":[]
}
結果は以下のようにエラーになってしまいました。
プライベートチャネルには少なくとも1人の参加者が必要なようです。
例6:所有者無しでメンバーのみ(エラー)
今度は1人のメンバーを追加しますが、所有者権限なしで追加できるかを確認してみます。
rolesを空の配列にすることで、特権なしのメンバーとして追加してみます。

{
"@odata.type": "#Microsoft.Graph.channel",
"membershipType": "private",
"displayName": "@{variables('チャネル名')}",
"description": "@{variables('チャネルの説明')}",
"members":
[
{
"@odata.type":"#microsoft.graph.aadUserConversationMember",
"user@odata.bind":"https://graph.microsoft.com/v1.0/users('@{outputs('マイ_プロフィールの取得_(V2)')?['body/id']}')",
"roles":[]
}
]
}
結果は以下のようにエラーになってしまいました。
プライベートチャネルには少なくとも1人の参加者が必要なだけでなく、所有者が必要なようです。
例7:チームに参加していないユーザーを追加(エラー)
次に、チームに参加していないCさんを追加してみます。
例3のフローから、追加するメンバーをCさんに変更するだけですね。

結果は以下のようにエラーになってしまいました。
当たり前ですが、チームに参加していないユーザーをプライベートチャネルに追加することはできないようです。
エラーの詳細
CreateChannel_Private: Cannot create private channel, user 8:orgid:{CさんのID} is not part of team {チームID}. (Note : If the team is created in migration mode then finalize the team and add this user to the team before creating private channel)
(プライベートチャネルを作成できません。ユーザー{CさんのID}はチーム{チームID}のメンバーではありません。(注意 : チームがマイグレーションモードで作成された場合、プライベートチャネルを作成する前にチームを確定し、このユーザをチームに追加してください))
例8:プライベートチャネルを作り続ける
最後にプライベートチャネルの作成上限を超えるまで、プライベートチャネルを作成し続けてみます。
プライベートチャネルは30までしか作成できないので、途中でエラーになる見込みです。
新たに、一般チャネル以外に存在しない、まっさらなチームを作成しておきました。

フローではループを使って、いつまでもプライベートチャネルを作成するように設定します。

フローを実行すると、次々にプライベートチャネルが作成されていき・・・

一瞬、30を超えても実行され続けたように見えましたが、作成されたチャネルにアクセスしようとすると、削除されているようでした。(そもそも削除されていない?)

フローの方でも、予想通り30回を超えたところでエラーになっています。
おわりに
Teamsのコネクタに「Microsoft Graph HTTP 要求を送信する」が追加されたことを記念して、今までできなかったプライベートチャネルの作成ができるようになりました。
ただし、プライベートチャネルの乱立は避けた方がよいとされていますので、使用する場面は考えた方がいいでしょう。
今回はゲストユーザーの追加や共有チャネルの作成については触れられませんでしたが、同じようにMicrosoft Graph リファレンスページを確認して真似すればPower Automate でも実行できます。
標準アクションでできないことがあれば、一度APIを確認してみるのもよいのではないでしょうか?(実運用として導入するかはともかく😇)












