Power AutomateにはTeamsコネクタには、「チャネルにメンバーを追加する」アクションがありません。
通常のチャネルであればチーム内のメンバーは自由にアクセスできるため特に問題ありませんが、プライベートチャネルと共有チャネルはメンバーの管理が必要です。
今回はMicrosoft Graph APIとPower Automateを組み合わせて、共有チャネルにメンバーを追加する方法をご紹介します。
この記事で紹介するフローではプレミアム コネクタを使用するため、実装にはPower Automate プレミアムライセンスが必要です。
Graph APIからの共有チャネル操作
共有チャネルにメンバーを追加する方法
Graph APIにはプライベートチャネルや共有チャネルにメンバーを追加するエンドポイントが用意されています。
POST https://graph.microsoft.com/teams/{team-id}/channels/{channel-id}/members
{
"@odata.type": "#microsoft.graph.aadUserConversationMember",
"roles": ["owner"],
"user@odata.bind": "https://graph.microsoft.com/v1.0/users('xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx')"
}
user@odata.bind
のIDには、Entra IDのObject IDを指定します。
共有チャネル作成時にはアクセスした本人のみ追加可能
ちなみにGraph APIから共有チャネルを作成することもできます。
POST https://graph.microsoft.com/teams/{team-id}/channels
{
"displayName": "共有チャネル名",
"description": "",
"membershipType": "shared",
"members": [
{
"@odata.type": "#microsoft.graph.aadUserConversationMember",
"user@odata.bind": "https://graph.microsoft.com/v1.0/users('xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx')",
"roles": [
"owner"
]
}
]
}
しかし、このときのメンバー追加には制限があります。
- 要求を送信した本人1人のみ
- 絶対に所有者(owner)に指定
members
が配列になっていることから複数人追加もできそうな雰囲気はありますが、2人以上記述するとエラーになり、メンバー追加のみならずチャネルの作成も行われません。
かつてはmembersに自分を記述せずに、別のユーザー1人のみを指定することで、自分+1人の合計2人までの所有者を追加できたという情報もありましたが、私が試した限りではできませんでした。

Teamsコネクタの「Microsoft Graph HTTP 要求を送信する」では不可
Power AutomateにはTeamsコネクタの「Microsoft Graph HTTP 要求を送信する」アクションがありますが、チャネルのメンバー追加・削除には対応していません。
この「Microsoft Graph HTTP 要求を送信する」アクションはGraph APIのTeamsリソースにアクセスできるものですが、実はTeamsに関係するすべての権限を有しているわけではありません。
POST /teams/{team-id}/channels/{channel-id}/members
にはChannelMember.ReadWrite.GroupまたはChannelMember.ReadWrite.All権限が必要ですが、あらかじめ用意されている「Microsoft Graph HTTP 要求を送信する」はこの権限を有していません。
有していない権限が必要な処理を実行しようとすると、以下のようなエラーが出力されます。
Scopes on the request
のあとに続くのが「Microsoft Graph HTTP 要求を送信する」が有している権限の全てです。ここに書かれていない権限が必要なアクションは、Teams関係であっても実行することができません。

HTTP with Microsoft Entra ID (事前承認)でも不可
もう一つGraph APIにリクエストを送信できるコネクタに、「HTTP with Microsoft Entra ID (事前承認)」がありますが、こちらでも不可です。

「HTTP with Microsoft Entra ID (事前承認)」は、このコネクタに対してMicrosoftがあらかじめ持たせている権限の範囲内でしかGraph APIのアクションを実行できません。
付与されている権限は公開されていないらしいです。とりあえずアクセスして試すほかないって感じですかね…。
【解決法】Entraアプリ+HTTPコネクタ
Microsoftによって用意されたアクションで対応できないGraph APIのエンドポイントにアクセスする場合は、
- Entraに必要な権限を持ったアプリを作成
- HTTPコネクタでアプリのシークレットキーを持たせたリクエストを飛ばす
という対応が必要です。
Entraアプリを登録する
アプリを新規作成する
Entra管理センターでアプリを登録します。
[アプリの登録] → [新規登録]の順にクリックします。

表示名を入力し、サポートされているアカウントの種類は「この組織ディレクトリのみに含まれるアカウント」を選択して登録します。

APIのアクセス許可を追加する
アプリが作成されたら、[APIのアクセス許可]を開きます。

初期状態では「User.Read」が自動で付与されていますが、今回は使用しないため削除します。
削除したら[アクセス許可の追加] をクリックします。

[Microsoft Graph] を選択します。

アプリケーションに必要なアクセス許可の種類は、「アプリケーションの許可」を選択します。

追加する権限にチェックを入れていきます。
今回はChannelMember.ReadWrite.Allが必要なので、検索してチェックを入れ、[アクセス許可の追加] をクリックします。

アクセス許可に管理者の同意を与える
アクセス許可を追加しただけではダメで、実際に機能させるには管理者の同意を与える必要があります。
作成者自身がEntra管理者であれば問題ありませんが、通常ユーザーの場合はアプリケーションの登録自体は許可されていても、Entra管理者による同意は絶対に必要なります。登録が終わったら、Entra管理者に同意を付与してもらうようにお願いしましょう。


シークレットを作成
次にシークレットを作成します。
[証明書とシークレット] を開き、新しいクライアント シークレットを発行します。

シークレットの有効期限は最大で730日(2年)です。仮にカスタムを選択しても、2年以内の期間しか設定できないようになっています。

シークレットを発行したら「値」を控えます。

シークレットの値は、今のセッションが終了する(ブラウザのタブやウィンドウを閉じる)と確認できなくなるので注意です!
最後に概要ページに戻って、「アプリケーション (クライアント) ID」と「ディレクトリ (テナント) ID」も控えます。

Power Automateフローを作成する
必要な準備は揃ったので、Power Automateのクラウドフローを作成しましょう。
フローの全体図は以下のとおりです。

「チームの取得」・「チームの特定チャネルの詳細の取得」・「ユーザー プロフィールの取得 (V2)」はそれぞれのIDを取得するために使用します。
HTTPアクション

HTTPアクションでは、以下のようにパラメータを設定します。
URI | https://graph.microsoft.com/v1.0/teams/@{outputs(‘チームの取得’)?[‘body/id’]}/channels/@{outputs(‘チームの特定チャネルの詳細の取得’)?[‘body/id’]}/members | |
Method | POST | |
Headers | ContentType: application/json | |
Body | “@@odata.type”: “#microsoft.graph.aadUserConversationMember”, “roles”: [ “owner” ], “user@odata.bind”: https://graph.microsoft.com/v1.0/users/@{outputs(‘ユーザープロフィールの取得(V2)’)?[‘body/id’]}” } // rolesは空( [] )を指定すると、一般メンバーになります。 { | |
Authentication | 認証タイプ | Active Directory Auth |
テナント | 「ディレクトリ (テナント) ID」を入力 | |
対象者 | https://graph.microsoft.com | |
クラインアント ID | 「アプリケーション (クライアント) ID」を入力 | |
資格情報の種類 | シークレット | |
シークレット | シークレットの「値」を入力 |
フローの実行結果
フローを実行すると、「ユーザー プロフィールの取得 (V2)」で指定したユーザーが共有チャネルに所有者として追加されました。



【まとめ】事前承認されていない権限を使ったGraph APIの操作は結構めんどくさい
事前に用意されたアクションを封じられると、チャネルにメンバーを追加するだけでこれだけのステップを踏まなくてはならないのが結構面倒くさいですね。
事前承認されたGraph APIの権限は、いずれのコネクタ・アクションにおいても公開されていません。そのため、Graph APIのアクセスはとりあえず試して、401や403などの権限系のエラーが発生したらEntraアプリを登録する、という手探りでやっていく他ないです。
Entraアプリの登録は面倒ですが、自動化するインパクトは大きいと思いますので、Power Automate プレミアムライセンスを持っている方はぜひ試してみてください。
コメント