3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

チャネル会議でも会議イベントから会議チャットのIDを取得する Power Automateクラウドフロー

Posted at

はじめに

ささみさん記事の+αを考えてみました。
チャネル会議の場合も同様に会議のスレッドを取得する方法です。

標準チャネル以外での会議、共有チャネルで作成された会議には対応できておりません。
※プライベートチャネルでは会議のスケジュールがそもそもできません

チャネルのスレッドの位置的構造

この記事で紹介されている方法は、Outlook予定表などから作成した会議のスレッド、Teamsではチャット欄に表示されるのですが、チャネル会議の場合は、開催されるチャネルのスレッドとして作成されます。

チャネルのスレッドは階層構造になっており、下図のうち①~③を特定する情報が揃ってはじめてスレッドを取得することができます。
image.png

会議のチャットの場合は構造がもう少し単純で、①のスレッドIDだけ特定
すれば、スレッドにメッセージを投稿することができます。
image.png

つまり、チャネル会議の場合は特定しないといけない情報が多いということです。

本題に入るまでの事前準備

会議アイテムからjoinUrlを取得するところまではささみさん記事と変わらないため、説明を割愛します。
このjoinUrlから追加で情報を取得する必要があるので、今回は変数に格納しています。
image.png

②チャネルIDを取得する

チームの特定は少し難しいので後ほど説明します。
チャネルIDは先ほど取得しておいたjoinUrlに含まれています。…というか、チャネル会議ではない場合のチャットIDと同じです。
19:meeting_...@thread.v2という形式になっている部分です。

joinUrl/で分割して、6番目(0はじめのインデックスで5)の部分を取り出します。
2025-01-11_12h15_01.png

作成
split(
    variables('joinUrl'), 
    '/'
)

image.png

変数を初期化する:chatId
outputs('作成')?[5]

③スレッドIDを取得する

チャネル会議の場合のスレッドIDは同じくjoinUrlに含まれており、/で分割した7番目(0はじめのインデックスで6)の部分になります。
ただし、末尾に?で始まるクエリストリングがついている場合がありますので、その部分を除去する必要があります。
image.png

変数を初期化する:messageId
split(
  outputs('作成')?[6],
  '?'
)?[0]

①チームIDを取得する

チームのIDはjoinUrlや会議イベントアイテムに含まれておりません。
そのため、追加でなんらかの方法で情報を取得する必要があります。

会議イベントの開催者organizerを見ると、ユーザーではないメールアドレスが設定されています。
image.png

このメールアドレスは、チームの裏にあるMicrosoft 365 グループのメールアドレスとなっています。
チームのIDとこのグループのIDは共通していますので、メールアドレスをもとにグループの情報を調べることができれば、チームを特定することができます。

この開催者organizerが、共有チャネルで作成された会議の場合は、チームのMicrosoft 365 グループとは異なるものになっているようです。
おそらく、共有されてチームに参加していないユーザーが参加している可能性があることから、ホストチームに対する代理送信権限を持っていない可能性があるため、チームを開催者にできないのではないかと推測しています。
この問題は、共有チャネルで作成された会議の可能性に目を瞑ることで解消しています。

メールアドレスからグループを取得するアクションが見当たりませんので、Microsoft Graph APIのfilter条件を使って検索します。

image.png

URI
https://graph.microsoft.com/v1.0/groups?$filter=mail eq '@{triggerOutputs()?['body/organizer']}'

検索結果は複数の可能性があるため配列になっていますので、下記のようにグループIDを取り出します。
image.png

変数の設定
body('HTTP_要求_V2_を送信する')?['value']?[0]?['id']

チャネル会議か否かを判別する

チャネル会議かどうかによって、メッセージを投稿する方法や、そもそもチームの情報を取得する必要の有無が変わるため、会議の種類を判別する必要があります。

image.png

'messageId'が0かどうかで判別できるのですが、単純に以下のように設定すると、0が数値として扱われるため、想定動作となりません。
image.png

文字列型として比較しないといけないので、string関数を使ったり文字列型の変数を用意するなどして、文字列型の0を用意する必要があります。
image.png

おわりに

チャネル会議でもおかんを召喚したかったため工夫してみました。

最近は共有チャネルの仕様に悩まされることが多いので、どなたか解決方法がわかる方がおられましたらご教示いただけますと幸いです。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?