はじめに
Power Automate で Office365 Outlookコネクタのアクションで会議イベントを取得しても、Teams会議に関する情報は含まれていません。
作成中のクラウドフローで、会議イベントの開始トリガーで動作して会議チャットにメッセージを送りたかったので、会議チャットのIDを取得する方法を調べてみました。
具体的な手段としてはMicrosoft Graph APIを使用しますが、今回はプレミアムコネクタは不要です。
考え方
Outlook Office 365 コネクタのアクションで取得できる値には、会議イベントの情報は含まれていません。しかし、Graph API で会議イベントの情報を取得した場合には会議のURLが含まれています。
//今回使用する Graph API
GET /me/onlineMeetings/{meetingId}
このAPIが返す値に"joinURL"として会議の参加URLが含まれています。会議参加URLには会議のチャットIDが含まれていますのでチャットIDを抽出してしまえばOKというアプローチです。
フロー全体
フロー解説
GraphAPIを呼び出す
使用する Graph API では、詳細を取得するイベントのIDが必要となります。
今回はOffice365 Outlookコネクタ「予定しているイベントが間もなく開始するとき(V3)」アクションの出力から、idを取得しています。
Office365 Outlook コネクタの「HTTP要求を送信します(プレビュー)」でGraph API を読んでいます。このコネクタで呼ぶことができていますのでプレミアムコネクタは必要ないのがポイントです。
Teams会議か?で分岐する
会議URLはイベントがTeams会議の場合のみ存在します。
イベントがTeams会議の場合は"isOnlineMeeting"がtrue になりますので、この値で判断し、Teams会議でない場合はフローを終了しています。
会議URLを解析する
Teams会議のイベントの場合は
body('HTTP_要求を送信します-イベント詳細を取得')?['onlineMeeting/joinUrl']
で会議参加URLが取得できます。会議URL中の下図選択部分がチャットIDになっています。
ですが、URLの一部のためエンコードされていますのでデコードする必要があります。
@{decodeUriComponent( body('HTTP_要求を送信します-イベント詳細を取得')?['onlineMeeting/joinUrl'] )}
デコードすると、チャットIDとして利用可能な文字列になります。
URL文字列からのチャットID部分の取り出しはSplit関数で行っています。
"/"を区切り文字としてURLを分割すると下記のようになります。
Splitで作成されるアレイの5番目の要素にチャットIDが収まっていますので、下図のように5番目の要素を取り出しています。
split( outputs('作成-会議URL'), '/' )[5]
いい感じにチャットidを取り出すことができました!
チャットidさえ取得できれば、会議チャットにメッセージ送り放題です。
さいごに
今回使用したOffice365 Outlook コネクタの「HTTP要求を送信します(プレビュー)」アクションは2023年6月時点ではプレビュー機能です。プレビューは今後廃止されたり仕様が変わる可能性がありますので、本番運用には向いていません。利用の際はそのようなリスクがあることを承知の上ご利用ください。
参考にしたページ