PowerAutomateを使うと自動化されたワークフローからTeams会議を作成して参加者に会議出席依頼を送信することができます。
そうして送信したTeams会議についてPowerAutomateからさらなるあれこれをしようとしたときに見つけたTIPSです。
Problem
PowerAutomateを使って、Teams会議のチャットにメッセージを投稿したい。
すでにあるグループチャットやチャネルではなくて、Teams会議のチャットにメッセージを投稿したい。
Solution
Teams for Business(PowerAutomateの画面表示上は単に「Teams」)コネクターの「チャットまたはチャネルでメッセージを投稿する」アクションを利用する。
まず Teams会議を作成する。
このとき、アクションの出力に含まれる body/onlineMeeting/joinUrl
を後続アクションで利用する。
この値は以下のような内容になっていて・・・:
https://teams.microsoft.com/l/meetup-join/19%3ameeting_OThh...5MGEw%40thread.v2/0?context=%7b%2...
エンコードされている部分を解除すると・・・:
https://teams.microsoft.com/l/meetup-join/19:meeting_OThh...5MGEw@thread.v2/0?context={"...
この19:meeting_OThh...5MGEw@thread.v2
の部分がTeams会議チャットを特定するために必要なID(Conversation ID)となる。
このIDを切り出しエンコードを解除するために上記のフローでは組み込みの「作成」アクション内で以下のような式を順次実行している:
ステップ名 | 式 |
---|---|
作成 startIndex | add(indexOf(outputs('Teams_会議の作成')?['body/onlineMeeting/joinUrl'], '/19%3ameeting_'), 1) |
作成 endIndex | add(indexOf(outputs('Teams_会議の作成')?['body/onlineMeeting/joinUrl'], '%40thread.v2/'), length('%40thread.v2')) |
作成 encodedConversationIdLength | sub(outputs('作成_endIndex'), outputs('作成_startIndex')) |
作成 encodedConversationId | substring(outputs('Teams_会議の作成')?['body/onlineMeeting/joinUrl'], outputs('作成_startIndex'), outputs('作成_encodedConversationIdLength')) |
作成 conversationId | replace(replace(outputs('作成_encodedConversationId'), '%3a', ':'), '%40', '@') |
この切り出したIDを使用してチャットを特定しメッセージを投稿する:
この例では「Teams会議の作成」アクションから地続きで(同じフローの中で)「チャットまたは~メッセージを投稿する」アクションを実行していますが、「Teams会議の作成」アクションの出力 body/onlineMeeting/joinUrl
をどこかしらに保存できるのであれば、別フロー化も可能です。
この例では説明をしやすくするため、「Teams会議の作成」アクションの出力 body/onlineMeeting/joinUrl
を加工する過程を step by step で組み込みの「作成」アクションで表現しています。実際には式の書き方次第でステップを少なくする(あるいはなくす)ことが可能です。
ちなみに、ここでTeams会議出席者にメンションをすることも可能。
その場合は、以下のような流れになる:
- Office 365 Outlookコネクターの「イベントの取得 (V3)」を利用し、イベント情報とともに出席者の情報も取得
- 出席者の情報をもとにTeams for Businessコネクターの「ユーザーの @mention トークンを取得する」を利用してメンショントークンを作成(宛先が複数ある場合は 配列変数にトークンを格納)
- トークンを「チャットまたは~メッセージを投稿する」アクションのメッセージ(Message)内で利用(宛先が複数ある場合は 配列化したものを
join()
関数などを利用して連結)
残念ながら「皆様」宛になる @all
は利用できない。
Teams会議のチャットでメンション付きメッセージを送信しても、当該のTeams会議が開始されていないとメンションの相手に通知が送信されないことに注意。
ほかに宛先のTeamsユーザーが To(必須参加)か Cc(任意参加)か、承諾済みかそうでないかなども関わるかもしれない。しかし少なくとも会議が一度は開始されていることが必要。2023/12/20現在。
Office 365 Outlookコネクターの「イベントの取得 (V4)」は単一のイベントではなく複数のイベントを取得するためのアクション。ここでは取得したいイベントは1つのため V3 を利用する。2つのアクションの機能はまったく違うのだが、英語→日本語への翻訳の問題か、バージョン表記の違いをもって区別するしかない。2023/12/20現在。