LoginSignup
5
4

Power Automate でプライベートチャネルを作成する

Posted at

はじめに

Teamsのコネクタに「Microsoft Graph HTTP 要求を送信する」が追加され、用意されていないアクションになくてもできることが増えました。

image.png

リアクションを追加することもできます
チャネルのすべての投稿にイイネするフロー

この記事では、標準のアクションではできなかった、プライベートチャネルの作成に挑戦します。

「チャンネルを作成します」アクションでは、チャネルの種類を指定することができず、標準チャネルのみが作成できます。
image.png

Microsoft Graph APIを使用する

Microsoft Graph HTTP 要求を使用するために、まずはリファレンスページを確認しましょう。

このページの左側のナビゲーションを辿って、チャネルを作成する方法を確認します。
image.png

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

検証準備

動作検証用にチームを作成しました。
現在は、デフォルトで作成される標準チャネルのみの状態です。

自分以外に、チームの所有者であるAさんと、メンバーであるBさんを追加しています。
また、後ほどチームに参加していないCさんにも出てきてもらう予定です。

2024-04-06_19h52_12.png

実行例

例1:自分が所有者となるプライベートチャネル

まずは、リファレンスページの例2の通りにやってみましょう。
membershipTypeprivateにすることでプライベートチャネルが作成できるようです。

チャネル名(displayName)やチャネルの説明(description)の他に、チャネルを作成する親となるチームのIDや、チャネルの所有者として追加するユーザーのIDが必要です。
image.png

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

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

URL
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

結果は以下の通り、指定したチームに自分が所有者であるプライベートチャネルを作成することができました。
2024-04-06_21h57_44.png

チャネルの説明も設定できていますね。
image.png

例2:自分の他にもう1人所有者を追加する

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

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

本文
{
  "@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人のプライベートチャネルが作成できました。
image.png

例3:自分以外にメンバーを追加する

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

本文
{
  "@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":[]
        }
     ]
}

実行すると、メンバーが追加されたプライベートチャネルが作成されました。
image.png

例4:自分の代わりの所有者を設定する

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

本文
{
  "@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"]
        }
     ]
}

実行してみると、フローが成功しています。
image.png

自分の画面からはチャネルの存在が確認できませんが・・・
image.png

Aさんのアカウントで確認すると、確かに作成できています。
image.png

自分が参加していなくても、ユーザーの代わりにプライベートチャネルを作成できることがわかりました。

例5:メンバー0人で作成(エラー)

所有者の指定が少しややこしかったので、試しに所有者なしで登録できるか確認してみます。
image.png
membersを空の配列にしてメンバー無しで設定してみます。

本文
{
  "@odata.type": "#Microsoft.Graph.channel",
  "membershipType": "private",
  "displayName": "@{variables('チャネル名')}",
  "description": "@{variables('チャネルの説明')}",
  "members":[]
}

結果は以下のようにエラーになってしまいました。
プライベートチャネルには少なくとも1人の参加者が必要なようです。

エラーの詳細

conversationMembers cannot be empty.
(conversationMembersを空にすることはできません。)

image.png

例6:所有者無しでメンバーのみ(エラー)

今度は1人のメンバーを追加しますが、所有者権限なしで追加できるかを確認してみます。
rolesを空の配列にすることで、特権なしのメンバーとして追加してみます。
image.png

本文
{
  "@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人の参加者が必要なだけでなく、所有者が必要なようです。

エラーの詳細

CreateChannel_Private: Cannot create private channel, at least one member should be an owner.
(少なくとも一人のメンバが所有者でなければなりません。)

image.png

例7:チームに参加していないユーザーを追加(エラー)

次に、チームに参加していないCさんを追加してみます。
例3のフローから、追加するメンバーをCさんに変更するだけですね。
image.png

結果は以下のようにエラーになってしまいました。
当たり前ですが、チームに参加していないユーザーをプライベートチャネルに追加することはできないようです。

エラーの詳細

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}のメンバーではありません。(注意 : チームがマイグレーションモードで作成された場合、プライベートチャネルを作成する前にチームを確定し、このユーザをチームに追加してください))

image.png

例8:プライベートチャネルを作り続ける

最後にプライベートチャネルの作成上限を超えるまで、プライベートチャネルを作成し続けてみます。
プライベートチャネルは30までしか作成できないので、途中でエラーになる見込みです。

新たに、一般チャネル以外に存在しない、まっさらなチームを作成しておきました。
image.png

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

正確には、デフォルトの制限回数の60回まで実行するようにしています。
image.png

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

?????????
image.png

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

フローの方でも、予想通り30回を超えたところでエラーになっています。

エラーの詳細

An unexpected error(Type = MaxPrivateChannelLimitExceeded) occurred. Please try again.
(予期しないエラー(Type = MaxPrivateChannelLimitExceeded)が発生しました。再試行してください。)

image.png

おわりに

Teamsのコネクタに「Microsoft Graph HTTP 要求を送信する」が追加されたことを記念して、今までできなかったプライベートチャネルの作成ができるようになりました。
ただし、プライベートチャネルの乱立は避けた方がよいとされていますので、使用する場面は考えた方がいいでしょう。

今回はゲストユーザーの追加や共有チャネルの作成については触れられませんでしたが、同じようにMicrosoft Graph リファレンスページを確認して真似すればPower Automate でも実行できます。

標準アクションでできないことがあれば、一度APIを確認してみるのもよいのではないでしょうか?(実運用として導入するかはともかく😇)

5
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4