Power Automate x MSGraphでTeamsのチームにメンバーを追加する
必要なアクセス許可
今回必要なアクセス許可の種類は以下です。
GroupMember.ReadWrite.All
事前にアクセス許可を設定しておきましょう。
Teamsのチームに追加する
下記のサンプルのようにするとチームに追加することができます。
チームへ追加 サンプル
{
"requests": [
{
"id": 1,
"url": "/groups/{GroupId}/members/$ref",
"method": "POST",
"headers": {
"Content-Type": "application/json"
},
"body": {
"@@odata.id": "https://graph.microsoft.com/v1.0/directoryObjects/{UserId}"
}
}
]
}
チームへ追加 パラメータの解説
url内のid:GroupIdを指定します。{}は不要です。
body内のid:UserIdを指定します。{}は不要です。
ここまででチームへ追加することができます。が・・・
Docs参考にしてもできない?
Docsを参考にしてもうまくいきません。@付きパラメータがエラーを吐いてしまうためです。
@@にすると解決します。(サンプルでは解決済み)
実行するとOffice365Groupに追加される
上記を実行すると、Azure ADでグループに追加できたのを確認できます。
Teams反映には時間がかかる
ただ、すぐにはTeamsには反映されません。反映には最大2時間かかるようです。
ご注意ください。
参考URL
グループにメンバーを追加する リファレンス
https://docs.microsoft.com/ja-jp/graph/api/group-post-members?view=graph-rest-1.0&tabs=http
Office 365 グループおよび Microsoft Teams
https://docs.microsoft.com/ja-jp/microsoftteams/office-365-groups#group-membership
MS Flow doesn't allow adding @ sign in the body of HTTP Action
http://www.suhail.cloud/2018/03/ms-flow-doesnt-allow-adding-sign-in.html
Power Automate x MSGraphでメンバーとしてユーザーを招待する
必要なアクセス許可
今回必要なアクセス許可の種類は以下の2つです。
User.Invite.All
Directory.AccessAsUser.All(ゲストで招待する場合は不要)
事前にAzureADでアクセス許可を設定しておきましょう。
ユーザーをメンバーとして招待する
以下のような感じで実行するとユーザーを招待することができます。
ユーザーの招待 サンプル
{
"requests": [
{
"id": 1,
"url": "/invitations",
"method": "POST",
"headers": {
"Content-Type": "application/json"
},
"body": {
"invitedUserEmailAddress": "abc@gmail.com",
"inviteRedirectUrl": "https://www.office.com/?auth=2",
"invitedUserType": "Member",
"sendInvitationMessage": true
}
}
]
}
ユーザーの招待 パラメータの解説
invitedUserEmailAddress:必須
→招待するユーザーのメールアドレスを指定します。必須です。
inviteRedirectUrl:必須
→招待後リダイレクトする先を指定できます。任意のページを指定できますが、空にすることはできません。
invitedUserType
→招待ユーザーの種類を指定できます。初期値はGuestです。ゲストでよければ指定する必要はありません。
sendInvitationMessage
→招待時にメールを送るか否かの設定です。初期値はfalseです。メールを送る必要がなければ指定する必要はありません。
上記パラメータをカスタマイズして使用してください。
他にも必要に応じてパラメータを設定することができます。
メンバーとして招待するために必要な権限
ゲストではなくメンバーとして追加するには、実行ユーザーにグローバル管理者権限が必要になります。
加えて、AzureADのアプリケーションのアクセス許可ではDirectory.AccessAsUser.Allも追加します。
これはアプリにユーザーと同様のアクセス権をもたせるものです。
権限がない場合はゲストでのみ招待することができます。
ここまででユーザーの招待をすることができます。
招待したユーザーID
応答のinvitedUserのidから招待するユーザーのIDを取得することができます。
Power Automateで続けて処理をする場合はこのユーザーIDを使うことができますね。
招待後の動作について
実行すると、ユーザーへ招待メールが送られます。リンクからアクセスすることでテナントに参加できます。
処理後、リダイレクト設定した任意のURLへ移動します。
参考URL
外部ユーザを招待する リファレンス
https://docs.microsoft.com/ja-jp/graph/api/invitation-post?view=graph-rest-1.0&tabs=http
Company Administratorについて
ディレクトリのアクセス許可
https://docs.microsoft.com/ja-jp/graph/permissions-reference#directory-permissions
Power Automate フローがソリューションに入っていると外部テナント用MSGraphのアクションが失敗する
外部テナントをMSGraphを使用して操作しようとした際に、どうもうまく動かなかった。
カスタムコネクタ作成時のテストではうまくいっていたのに。
下記のようにソリューションに入っていると失敗する。
試しにマイフローから作成すると、問題なく動作した。
感想
今回はMSGraphのことだったが、他のことでフローが失敗する場合でもソリューションから出して試してみるといいかもしれない。
ちなみに自テナントの場合はソリューションでもちゃんと動作していた。
原因は・・・不明です。
Power Automate x MSGraphで外部テナント操作用カスタムコネクタを作成する
外部テナントをMSGraphで操作するカスタムコネクタ作成について書きます。
Power AutomateとMSGraphを組み合わせると、外部テナントと連動するフローなんかもつくれてしまいます。
ざっくり手順
ざっくり、以下のような流れで作成していきます。
・AzureADでアプリの登録を行う。
・管理者の同意をもらう。
・カスタムコネクタを作成する。
・各自、自由にMSGraphを使用したPower Automateを作成する。
カスタムコネクタを作成するまでの手順はほぼ自テナントでMSGraphのカスタムコネクタを作成する手順と同様です。
下記のリンクにわかりやすい手順が乗っているので、参考にしてください。
https://docs.microsoft.com/ja-jp/graph/tutorials/flow
いくつか注意点がありますのでここに書いておきます。
管理者の同意について
アクセス許可を設定して利用するには、管理者の同意が必要になります。
設定までしても自動で管理者にメールが行ったりはしないのでとりあえずご安心ください。
管理者に同意を求める際には、ページのURLを送ればそのままダイレクトで管理者の方も開けるのでリンクを共有するのがいいと思います。
テナントIDは自分で設定する必要がある
自テナントの場合は必要ありませんが、外部テナントにつなげる場合はテナントIDを設定する必要があります。ここだけ自テナントの場合と異なるので注意してください。
テナントIDは下記の画面で設定します。
カスタムコネクタ テスト用body
テスト用のbodyを置いておくので良ければご利用ください。
{
"requests": [
{
"id": 1,
"url": "/me",
"method": "GET",
"headers": {
"Content-Type": "application/json"
},
"body": {}
}
]
}
カスタムコネクタ作成までの手順を行って、無事テストが通れば作成成功です。
一応取得した内容が外部テナントのものか、テナントIDを設定したか確認してください。
手順の通りだと自テナントを参照してしまいます。
外部テナントを対象にする場合はテナントIDを設定してください。