- (あらためて)今回のフローで実現できること
- 1.フロー全体図
- 2.フロー解説
- 2-1.[Office 365 Outlook] 新しいイベントが作成されたとき(V3) トリガー
- 2-2.[Office 365 Outlook] HTTP 要求を送信します-イベント詳細を取得
- 2-3.[Data Control]作成-会議URL
- 2-4.[Control]条件-Teams会議でないorひとり会議だったら終了
- 2-5.[カスタムコネクタ]会議URLでTeams会議オプションを取得する
- 2-6.[Control]条件-会議オプションが取得できなかったら終了
- 2-7.[Control]スコープ-参加者を抽出し選定
- 2-8.[カスタムコネクタ]会議URLでTeams会議オプションを更新する
- 気になっている点・改善したい点
- 参考にしたページ
- さいごに
「Teams会議を作成した時に会議オプションを自動で設定するPower Automateクラウドフロー(2) - カスタムフロー編💎」の続きです。作成したカスタムコネクタを利用したフローを作成します。
(あらためて)今回のフローで実現できること
自分でTeams会議を新規登録した時に会議オプションを自動設定する。
会議オプションにはいろんな設定がありますので、今回はその中から共同開催者の自動設定を行います。共同開催者に誰を選定するかの条件は今回は"ランダム"です。実際運用する場合は、特定の誰かを指名できた方が使いやすいですね。
1.フロー全体図
2.フロー解説
2-1.[Office 365 Outlook] 新しいイベントが作成されたとき(V3) トリガー
- パラメーター
- 予定表ID
- 主となるカレンダーを選ぶ
- 予定表ID
- 設定
- トリガーの条件
-
@equals(triggerOutputs()?['body/organizer'], 'xxxxxxxxx@xxxxxxxxx.com')
- 予定の主催者が自分自身の場合のみフローが動作するように実行者のメールアドレスを指定します。
-
@equals(triggerOutputs()?['body/recurrence'], 'none')
- 繰り返しの予定には対応しないため、繰り返しなし='none'の場合のみ起動するよう指定します。
-
- トリガーの条件
2-2.[Office 365 Outlook] HTTP 要求を送信します-イベント詳細を取得
トリガーの出力にはTeams会議としての情報はさほど含まれていません。Office 365 Outlook コネクタの「HTTP要求を送信する」アクションでGraph APIを利用してイベントの詳細を取得すると、会議のURLを取得することができます。
※トリガー出力の"body"にTeams会議URLが含まれていますが、ここに含まれている会議URLが予定のTeams会議でない可能性(他社から招待されたTeams会議のURLを予定に張り付けたケースなど)も考慮してあえてAPIで確実な会議URLを取得しています。
- パラメーター
- URI
- https://graph.microsoft.com/v1.0/me/events/@{triggerOutputs()?['body/id']}
- メソッド
- GET
- コンテンツの種類
- application/json
- URI
2-3.[Data Control]作成-会議URL
2-2.で取得したイベントがTeams会議の場合は赤枠の部分でTeams会議URLが取得できます。
- パラメーター
- 入力
-
body('HTTP_要求を送信します-イベント詳細を取得')?['onlineMeeting/joinUrl']
-
- 入力
2-4.[Control]条件-Teams会議でないorひとり会議だったら終了
いずれかの条件に該当する場合は処理を終了しています。
- イベントがTeams会議ではない
- ひとり会議
- パラーメーター
- Condition Expression
- OR
- 式1
-
empty(body('HTTP_要求を送信します-イベント詳細を取得')?['onlineMeeting/joinUrl'])
- is equal to
-
false
-
- 式2
-
empty(body('HTTP_要求を送信します-イベント詳細を取得')?['atendees'])
- is equals to
-
false
-
- Condition Expression
[False]→[Control]終了
2-5.[カスタムコネクタ]会議URLでTeams会議オプションを取得する
作成したカスタムコネクタのアクションを使って、会議URLで会議オプションを取得します。
- パラメーター
- フィルター式
-
JoinWebUrl eq '@{outputs('作成-会議URL')}'
-
- フィルター式
このような形式で会議オプションが取得できます。
2-6.[Control]条件-会議オプションが取得できなかったら終了
何らかの要因で会議オプションが取得できない場合を想定してエラー判定を行います。
- パラメーター
-
length(outputs('会議URLでTeams会議オプションを取得する')?['body/value'])
- is greater than
- 0
-
会議URLでTeams会議オプションを取得するアクションのbody/valueはアレイで返されますので件数が1件以上で判定しています。
[False]→[Control]終了
2-7.[Control]スコープ-参加者を抽出し選定
共同責任者に設定できない外部ゲストなどを除外した参加者の中からランダムで選択しています。
2-7-1.[Data Control]アレイのフィルター処理-identityProviderがAADのユーザーのみ
共同開催者に指定できないユーザーを除外するために下記フィルターを行います。
- パラメーター
- From
-
first(outputs('会議URLでTeams会議オプションを取得する')?['body/value'])?['participants/attendees']
-
- Filter Query
- @{item()?['identity/user/identityProvider']}
- is equal to
- AAD
- From
2-7-2.[Data Control]作成-共同開催者upn
2-7-1で抽出したユーザーのリストからランダムで抽出します。
- パラメーター
- 入力
-
body('アレイのフィルター処理-identityProviderがAADのユーザーのみ')[rand(0,length(body('アレイのフィルター処理-identityProviderがAADのユーザーのみ')))]?['upn']
-
- 入力
2-7-3.[Data Control]選択-attendees
出席者のjson配列を作成します。
会議オプションを更新するエンドポイントの仕様として「会議への出席者の追加や削除など、participants プロパティの出席者フィールドを調整するには、常に要求本文の出席者の完全な一覧が必要」という条件があります。
onlineMeeting を更新する - Microsoft Graph v1.0 | Microsoft Learn
この為、2-5で取得した出席者(atendees)の情報をも基に構成しています。
- パラメーター
- From
-
first(outputs('会議URLでTeams会議オプションを取得する')?['body/value'])?['participants/attendees']
-
- Map
- 1行目
- upn
- @{item()?['upn']}
- 2行目
- role
-
if( equals( item()?['upn'], outputs('作成-共同開催者upn') ), 'coorganizer', item()?['role'] )
- 1行目
- From
2-8.[カスタムコネクタ]会議URLでTeams会議オプションを更新する
最後にカスタムコネクタのアクションで会議オプションを更新します。
- パラメーター
- 会議Id
-
first(outputs('会議URLでTeams会議オプションを取得する')?['body/value'])?['id']
-
- Body/Participants/Attendees
- ※アレイ全体の入力に切り替える
-
body('選択-attendees')
- ※アレイ全体の入力に切り替える
- 会議Id
気になっている点・改善したい点
カスタムコネクタの会議オプションを取得するアクションのパラメーターを式ではなく会議URLのみを指定する形にしたかったけれど断念しました。カスタムコネクタのアクションと利用するAPIのエンドポイントのパラメータを異なる形で設定できるのだろうか🤔
参考にしたページ
attendeeのJSON配列を作る方法に活用させていただきました!
さいごに
会議オプションを更新することは実現できたもののずいぶん大掛かりになってしまいました。