💻

Microsoft Graph の OnlineMeeting API が無理ゲー

2023/06/14に公開

Microsoft Teams アプリの会議タブから会議の情報を取りたいと思ったのですが、Microsoft Teams の会議アプリ API では Microsoft Bot Framework SDK のみの対応で、Microsoft Teams JavaScript SDK (teams-js) からは取得できません。[1]

https://learn.microsoft.com/ja-jp/microsoftteams/platform/apps-in-teams-meetings/meeting-apps-apis?WT.mc_id=M365-MVP-5002941

Microsoft Graph には OnlineMeeting API があって会議の情報が取得できそうです。

https://learn.microsoft.com/ja-jp/graph/api/onlinemeeting-get?WT.mc_id=M365-MVP-5002941

ただ、会議を取得するためには ビデオ電話会議 ID会議 ID会議参加 URL会議参加 ID のいずれかが必要です。会議 ID で取得できそうに見えるのですが Microsoft Teams JavaScript SDK のコンテキストに入っている meeting.id とは別のようです。

OnlineMeeting API の 会議 ID は Base64 エンコードされているようなので戻してみると 1*{{user-id}}*0**{{chat-id}} の形式の文字列が得られます。{{user-id}} は開催者のオブジェクト ID です。

1*ab6e7d...*0**19:meeting_NDY1Mm...@thread.v2

Microsoft Teams JavaScript SDKの meeting.id も Base64 エンコードされているので戻してみると 0#{{chat-id}}#0 の形式です。

0#19:meeting_NDY1Mm...@thread.v2#0

自身が開催者であれば自身のオブジェクト ID が取れるので取得できるかもしれませんが、それ以外の人は取得できないですし、内部仕様なので意図せず仕様変更されると詰む可能性があります。

会議参加 URL も以下の形式なので状況は同じです。

https://teams.microsoft.com/l/meetup-join/{{chat-id}}/0?context={"Tid":"{{tenant-id}}","Oid":"{{user-id}}"}

現実的なのは、Microsoft Graph の Chat API を呼び出すことでしょうか。コンテキストから chat.id を取り出せるので、そこから 会議参加 URL を取得することで、OnlineMeeting API を呼び出せるようになります。結果としては解決ですが、もう少し何とかしてほしい気がします。

脚注
  1. サーバー側で TeamsConnectorClient を使ってプロキシすることもできそうですがあまり情報がないためできるかどうかはわかりません。 ↩︎

Discussion