ささみ学習帳 - sasami's study book

ささみ学習帳

Microsoft365 や Power Platform について学んだこと・アイデアのメモ

Teams会議を作成した時に会議オプションを自動で設定するPower Automateクラウドフロー(3) - クラウドフロー編💎

 

Teams会議を作成した時に会議オプションを自動で設定するPower Automateクラウドフロー(2) - カスタムフロー編💎」の続きです。作成したカスタムコネクタを利用したフローを作成します。

 

(あらためて)今回のフローで実現できること

自分でTeams会議を新規登録した時に会議オプションを自動設定する。
会議オプションにはいろんな設定がありますので、今回はその中から共同開催者の自動設定を行います。共同開催者に誰を選定するかの条件は今回は"ランダム"です。実際運用する場合は、特定の誰かを指名できた方が使いやすいですね。

 

1.フロー全体図

 

2.フロー解説

2-1.[Office 365 Outlook] 新しいイベントが作成されたとき(V3) トリガー

  • パラメーター
    • 予定表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を取得しています。

learn.microsoft.com

 

 

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

[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

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']
          )

 

 

2-8.[カスタムコネクタ]会議URLでTeams会議オプションを更新する

最後にカスタムコネクタのアクションで会議オプションを更新します。

  • パラメーター
    • 会議Id
      • first(outputs('会議URLでTeams会議オプションを取得する')?['body/value'])?['id']
    • Body/Participants/Attendees
      • ※アレイ全体の入力に切り替える
        •  
      • body('選択-attendees')

 

 

 

気になっている点・改善したい点

カスタムコネクタの会議オプションを取得するアクションのパラメーターを式ではなく会議URLのみを指定する形にしたかったけれど断念しました。カスタムコネクタのアクションと利用するAPIのエンドポイントのパラメータを異なる形で設定できるのだろうか🤔

 

参考にしたページ

attendeeのJSON配列を作る方法に活用させていただきました!

mofumofupower.hatenablog.com

 

 

さいごに

会議オプションを更新することは実現できたもののずいぶん大掛かりになってしまいました。