11
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Microsoft Power AutomateAdvent Calendar 2024

Day 18

Power Automate で共有チャネルを作成する

Last updated at Posted at 2024-12-17

本記事はMicrosoft Power Automate Advent Calendar 2024 シリーズ1の18日目担当記事になります。

はじめに

この記事は、Power Automate を使って共有チャネルを作成する方法をまとめた記事です。
image.png

この記事で扱うのは、自分のテナント内の操作のみとなります。
他テナントのチームやゲストメンバーとの共有については、確認ができていませんのでご了承ください。

共有チャネルの作成方法

まず、説明のために、作成元となるチームの情報を取得しておきます。
このチームをホストチームとして共有チャネルを作成します。
image.png

共有チャネルの作成にはMicrosoft Graph APIを使用しますので、基本的にはこちらのアクションを使用します。
image.png

詳しい使用は、公式のリファレンスページをご参照ください。

似たような方法でプライベートチャネルを作成する記事もありますので、良ければそちらもどうぞ!

①もっとも単純な例

他の誰とも共有しない状態で作成します。
手動で作成する場合の、このチェックを入れずに作成するのと同等の結果です。
image.png

Microsoft Graph HTTP 要求を送信するアクションを使用し、以下のように設定します。
image.png

URI
https://graph.microsoft.com/v1.0/teams/@{outputs('チームの取得')?['body/id']}/channels
本文
{
  "displayName": "チャネル名①",
  "description": "チャネルの説明",
  "membershipType": "shared"
}

結果はこのようになります。
image.png
メンバーは特に指定しませんでしたが、自分が所有者に設定され、他に共有されるメンバーやチームはありません。
image.png

②チームの全員と共有する

手動で作成する際に、このチェックを入れた状態と同じ方法でチャネルを作成します。
image.png

Microsoft Graph HTTP 要求を送信するアクションを使用し、以下のように設定します。
image.png

本文
{
  "displayName": "チャネル名②",
  "description": "チャネルの説明",
  "membershipType": "shared",
  "sharedWithTeams":[
    {
      "id": "@{outputs('チームの取得')?['body/id']}"
    }
  ]
}

結果はこのようになります。
チームに追加され、作成元のチーム全員と共有される状態になりました。
ちなみに、メンバー数の横に表示されている家のアイコンがホストチームを表すアイコンになっています。
image.png

③自分以外の所有者を追加する

先に、所有者に追加したいユーザー情報を取得しておきます。
image.png

ユーザー情報が取得できたら、Microsoft Graph HTTP 要求を送信するアクションを使用し、以下のように設定します。
image.png

本文
{
  "displayName": "チャネル名③",
  "description": "チャネルの説明",
  "membershipType": "shared",
  "members": [
    {
      "@odata.type": "#microsoft.graph.aadUserConversationMember",
      "user@odata.bind": "https://graph.microsoft.com/v1.0/users('@{outputs('ユーザー_プロフィールの取得_(V2)')?['body/id']}')",
      "roles": [
        "owner"
      ]
    }
  ]
}

結果はこのようになります。
自分以外に指定したユーザーも、所有者に設定されました。
image.png

失敗例

ここからは、できそうでできない方法です。
どうもうまくいかないのですが、メモとして残しておきます。

④メンバーを設定する

所有者ではなく、メンバーとしてユーザーを追加できるかを試してみました。
Microsoft Graph HTTP 要求を送信するアクションを使用し、以下のように設定しました。
image.png

本文
{
  "displayName": "チャネル名④",
  "description": "チャネルの説明",
  "membershipType": "shared",
  "members": [
    {
      "@odata.type": "#microsoft.graph.aadUserConversationMember",
      "user@odata.bind": "https://graph.microsoft.com/v1.0/users('@{outputs('ユーザー_プロフィールの取得_(V2)')?['body/id']}')",
      "roles": []
    }
  ]
}

メンバーロールを空にしているのは、メンバーの追加方法のページや、プライベートチャネルではうまくいった方法を参考にしています。

しかし、結果は以下の通りエラーとなりました。
エラーメッセージを読むと、どうもメンバー権限が認識されておらず、所有者として設定しようとして失敗しているような感じがします。
image.png

ちなみに、ロールを空[]ではなく、ダメもとで["member"]にもしてみましたが、同様にエラーとなりました。
image.png

共有チャネルの作成時に、初めからメンバーを設定することはできないようです。

⑤自分以外の所有者を複数設定する

成功例では1人の自分以外のユーザーを所有者に設定しましたが、今度はそれが複数人でも設定できるか試してみました。
追加するメンバーは、適当なチームのメンバーを取得し、選択アクションを使って必要なJSON配列を作成していきます。
image.png
@マークを直接入力しようとすると、数式と誤認識されてしまいうまくフローが保存できないので、変数を使うのがちょっとしたポイントです。
image.png

準備ができたので、Microsoft Graph HTTP 要求を送信するアクションを使用し、以下のように設定しました。
image.png

本文
{
  "displayName": "チャネル名⑤",
  "description": "チャネルの説明",
  "membershipType": "shared",
  "members": @{outputs('選択')['body']}
}

結果は④と同様のエラーとなりました。
image.png

エラーメッセージを読むと、所有者を複数指定して共有チャネルを作成できないように解釈できます。

In admin context, Users property must contain exactly one owner if it exists.
管理者コンテキストでは、Users プロパティに所有者が存在する場合は、その所有者を 1 つだけ含める必要があります。

⑥作成元のチーム以外のチーム全員と共有する

共有チャネルは、ホストチーム以外のチームとも共有することができます。
これができるかどうかも試しておきます。
image.png

共有先のチームとして、ホストチームとは別のチームの情報を取得しておきます。
image.png

準備ができたので、Microsoft Graph HTTP 要求を送信するアクションを使用し、以下のように設定しました。
image.png

本文
{
  "displayName": "チャネル名⑥",
  "description": "チャネルの説明",
  "membershipType": "shared",
  "sharedWithTeams":[
    {
      "id": "@{outputs('チームの取得:共有先')?['body/id']}"
    }
  ]
}

これもエラーになりました。
image.png

Channel can only be shared with host team {$作成元チームのID}.
チャネルはホストチーム{$作成元チームのID}としか共有できない。

後から手動で設定はできるはずですが、少なくとも作成時には他のチームと共有することができないようです。

ちなみに、作成元のチームと一緒に設定しても、結果は同じくエラーとなりました。
image.png

本文
{
  "displayName": "チャネル名⑥-2",
  "description": "チャネルの説明",
  "membershipType": "shared",
  "sharedWithTeams":[
    {
      "id": "@{outputs('チームの取得')?['body/id']}"
    },
    {
      "id": "@{outputs('チームの取得:共有先')?['body/id']}"
    }
  ]
}

注意点

成功した場合でも、作成できた共有チャネルの情報を取得することができません。
出力を見てもbodyに何も存在せず、動的なコンテンツでも作成完了したチャネルのIDなどを参照できません。
image.png

この原因はステータスコードを見るとわかります。
image.png

"statusCode": 202は「リクエストを受け取ったが処理はされていない」ことを示す番号です。
つまり、**「共有チャネルの作成依頼は受理されたが、まだ作成できてないので、作成後の情報は渡せませんよ」**ということになります。

もし作成後に情報を取得したい場合は、作成を受理された後に、作成が完了したことを確認して取得する必要があります。
具体的には、チャネルの一覧を取得し、作成されるチャネル名などでフィルタ、見つからなければ少し待機してもう一度一覧から探す・・・という繰り返しを行う方法があります。

image.png
2024-12-16_01h11_40.png
2024-12-16_01h11_48.png
2024-12-16_01h12_00.png
image.png
image.png
image.png

おわりに

初心者向けの方法ではないですが、標準チャネル以外にも、プライベートチャネル・共有チャネルの作成が、Power Automate 通常ライセンス(プレミアムなし)でも可能です。
どうしても必要になった場合はご参考にいただけますと幸いです。

11
1
0

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
11
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?