0
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?

Copilotなどライセンスを与えたユーザを特定のコミュニティチームのメンバーとして自動で追加する

Last updated at Posted at 2024-08-13

こんな人向けの記事です

最近はCopilot fo Micorosoft 365や、Teams Premiumなど、Microsoft365 E3ライセンスなどに加えてライセンスを与えることでプラスアルファの機能を付与するようなものが増えてきましたね。有償ライセンスをユーザーに与えるからには、活用してほしいもの。とはいっても、周りに同じサービスを使っているユーザーがいないと、なかなか活用までのハードルは高かったりします。

そこで、ライセンスを与えたユーザーをTeamsのチームに招待してユーザーコミュニティに参加してもらうというのはどうでしょう? 

例えばCopilotコミュニティなら「私はこんな感じで使っているという体験談」や「こんな時に使えるプロンプトはない?」 など。

ユーザー同士横のつながりで盛り上がってくれる仕組みを作れるとよいですよね。

チームへ自動追加しよう

せっかくなので、ライセンスが与えられているユーザーを、チームへ招待する活動について自動化したいと思います。基本的には以下のような工程を用意します。

  1. Power Automate(クラウドフロー)で定期的にGraph APIを用いてライセンスが付与されているユーザーの一覧を取得する
  2. 参加させたいチームのMicrosoft365グループのメンバー一覧を取得する
  3. ライセンスを持つユーザーと、グループのメンバーを比較し、グループには参加していないユーザー一覧を取得する
  4. チームに追加する
  5. ウェルカムチャットを追加したユーザーに送信する
  6. チームへの追加処理に失敗した場合は、管理者へ通知する

Graph APIでライセンスを持つユーザーを取得

この方法は以下のQiita記事へ以前に投稿しましたので詳しくはこちらを参考にしてください。

調べたいライセンスのSKUIDが必要です。上の記事のようにMicrosoft 365 管理センターの[課金情報]>[ライセンス]から調べてもよいですし、以下の Microsoft Learnのページからダウンロードできる CSVファイルを使って知らべることもできます。

ちなみに、今回のような取り組みには、このあたりのSKUIDが使うと有用そうです。

  • Microsoft Copilot for Microsoft 365
    • 639dec6b-bb19-468b-871c-c5c441c4b0cb
  • Teams Premium (for Departments)
    • 52ea0e27-ae73-4983-a08f-13561ebdb823
  • SharePoint Syntex
    • f61d4aba-134f-44e9-a2a0-f81a5adb26e4
  • Power BI Pro
    • E3/E5などライセンスに紐づいたものなどいろいろあるので、自テナントでメインに使っているライセンスは管理センターから調べたほうがよさそうです

というわけで、記事に従って Power AutomateからOffice 365 Usersコネクタの「HTTPを要求を送信します」アクションに以下のように記述してみます。

image.png

フィルター
&$filter=assignedLicenses/any(x:x/skuId eq c42b9cae-ea4f-4ab7-9717-81576235ccac)

※上の例では c43.... と記述しているところに、取得したいライセンスのSKUIDを差し替えてください。

エンドポイントURL
https://graph.microsoft.com/v1.0/users?$select=id,mail,displayname,assignedLicenses@{variables('フィルター')}

HTTP要求でライセンスに紐づいているユーザーを取得できたら、ユーザーのメールアドレスだけを配列にしましょう。これには「選択」アクションを使います。「開始」にはHTTP要求アクションのvalueを指定します。

それから、ここがポイントなのですが、選択アクションの右下のほうにあるアイコンをクリックして「マップ」モードに切り替えます。その中に item()?['mail'] のように式で指定します。この形は Apply to eachなどでJSONの取得したい箇所を指定するのと同じ書き方ですね。
image.png

テスト実行してみると、ライセンスを持っているユーザーが配列の形で取得できているのがわかります。
image.png

チームを用意してグループIDを確認する

あらかじめTeamsにチームを用意しておきます。今回はCopilotに興味がある人ならば誰でも入ってほしいのでチームの種類をパブリックにしましたが、会社によっては制限されていることもあると思うので、プライベートチームでも構いません。

image.png

目当てのチームを管理している Microsoft 365グループを確認するには、Microsoft 365管理センター  の[チームとグループ]>[アクティブなチームとグループポリシー] を開き、チーム名と同名のMicrosoft365グループを探します。Microsoft365グループの名称はチームの名称と連動するので、チーム名が変更されると自動的にグループの名前も変わっています。

image.png

グループを開いたときのURLの最後のほうにある文字列がグループIDです。
image.png

グループのIDは、もちろん [portal.azure.com] からも確認することができます。ここではオブジェクトIDとして表示されています。(https://portal.azure.com/#view/Microsoft_AAD_IAM/GroupsManagementMenuBlade/~/AllGroups)
)

image.png

自分自身が参加しているグループであれば、マイアカウントを開いて、参加しているグループを開くことで確認できます。ここでも、グループ名をクリックした際にブラウザに表示されるURLの中にグループIDが表示されます。

image.png

Office 365 Groupsコネクタの「グループメンバーの一覧表示」アクションを選択します。
image.png

アクションを選択したらチームのグループIDを指定するのですが・・・。そうか。自分が参加しているチームならここに勝手にチーム名が表示されるので、グループIDをいちいち調べる必要もありませんでしたね。

ちなみにこのアクションで取得できるユーザーの上限は規定で100、手動設定で999です。大きなグループに成長してほしいので999を設定しておきましょう。

image.png

ちなみに、それ以上のメンバーを取得する場合には、アクションの設定から「改ページ」設定を行い、ページング処理は手動で作成する必要があります。このあたりはまたいずれ。

グループのメンバーも、「選択」アクションのマップモードを使ってメールアドレスだけの配列にしましょう。

image.png

テスト実行してみました。チームにはまだ私しか参加していませんので、私のメールアドレスだけが配列として取得できました。
image.png

配列の差集合を取る

これで、「選択」にはライセンスをもつユーザーの配列、「選択 2」にはチームに参加済みのメンバーの配列が入っていることになります。

さて、みんな大好き「集合」のお時間です。ベン図にかいて今回ほしい条件をどのように取得すればよいかチェックします。ライセンスは持っているけれど、グループには参加していないユーザーなので、図のようにグループ参加済みのユーザーで型抜きしたような形になります。

image.png

クッキーの型抜きをイメージしましょう。この形は「差集合」です。
image.png

差集合って、Power Automateでどうすれば取得できるかは、こちらの記事で紹介されてました。なるほど、Contains関数を使うみたいです。

クッキー生地がライセンスを持つユーザー(選択)。クッキーの型がグループに参加済みのユーザー(選択 2)です。

「アレイのフィルター処理」アクションを使って、まずは「差出人」に「選択」の出力を指定します。

image.png

左辺には以下のように式を指定します。Contains関数は第1引数の中に第2引数の値が含まれていればTrueを返します。つまり、この場合はチームに参加済みのユーザーの中に、ライセンスを持つユーザーが含まれているか、1人ずつitem() で与えて比較しているんですね。

image.png

さらに、右辺には式で「true」を指定します。中央は「次の値に等しくない」を指定しています。これでチームに参加済みのユーザーの中にまだ含まれていないライセンスを持つユーザーをこうやって抽出できるんですね。

image.png

差集合の取得によって、既にチームに参加している私以外のライセンスを持つユーザーが配列として取得できました!

image.png

チームに追加させる

あとはチームへの参加をApply to eachを使って順番に行えばOKですね。ついでに追加した人達にチャットでメッセージを送ってみます。

Apply to each の最初の欄には「アレイのフィルター処理」の本文「body('アレイのフィルター処理')」を設定します。

「アレイのフィルター処理」の中身はJSONではなくてシンプルな配列ですので、Apply to eachの中に設定したチームへの追加やメッセージの投稿の宛先には item() だけを設定すれば大丈夫です。これで配列から1つずつのメールアドレスを取得できます。

チームへのメンバー追加の後にはユーザーへの招待メッセージを送る処理と、メンバー追加に失敗した場合の管理者への通知処理を加えました。

image.png

このように並列で処理を並べて、片方は上位の処理が失敗した時の条件を構成しておくと、簡単にエラー補足ができるので便利です。

image.png

image.png

テスト実行する際には注意してくださいね。。。

さて、これで追加するべきユーザーを集めてチームに追加し、さらにはご招待メッセージまで送信できるようになったわけですが。実行には注意してくださいね。Apply to eachの部分まで作りこんだあとで実行すると、実際にたくさんの人がチームへ追加されます。ちゃんと準備しないまま実行してしまうと大騒ぎになったりしますので、実行は計画的に。

次回の投稿では、チームに追加させないユーザーをExcelで管理しようと思います。これに追加対象と判定されたユーザーを全員指定しておけば少しずつリストから外して実稼働に持っていくことができそうです。

実行する際には慎重に! 私の場合はテストテナントなので、テスト実行してみました。

17回ループが回っていずれもチームへの追加とメッセージ送信が成功したようです!

image.png

チームを確認すると、ライセンスを持つユーザーさんたちがメンバーとして追加されています。

image.png

チームに参加したメンバーの一人に届いていたメッセージはこんな感じです。ボットとして投稿したけれど、ユーザーとしてメッセージを送信したほうが親近感があったかな? チームへのURLを一緒に投稿しておいたほうが良かったかもしれません。実際に動作させるといろいろ発見があります。

image.png

まとめ

ライセンスを与えられているユーザーの取得と、まだチームに参加していないユーザーをMicrosoft365グループとの「差集合」による比較でフィルターし、チームへの追加をすることができました。

今回はライセンスとグループを比較しましたが、2つのチームのメンバーを同期させたり、何かのメール送信の条件に差集合をつかったりといろいろ応用できそうです。何かアイディアがあったらぜひ試してみたいのでコメントで教えてください。

0
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
0
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?