次の方法で共有

GraphAPIの変更通知をトリガとしてTeams会議の録画データを取得する方法について

Yuki Kimura 20 評価のポイント
2025-08-06T13:57:07.7133333+00:00

現在、「Teams会議の録画データが発生したことをトリガとするGraphAPIの変更通知を受信し、その内容を基に会議データ(MP4)を自動取得する」という機能を開発しようとしています。

そのためにGraphAPIのサブスクリプションを下記のリソースを対象として作成したのですが、いずれもうまくいきませんでした。

①/communications/onlineMeetings/getAllRecordings
→ 受信側のFunctionに変更通知自体が連携されない

②/communications/callRecords

→ 変更通知の受信に成功しましたが、録画データのURLに直結する情報が含まれていないため後続処理でのファイル取得ができない
ーーー受信側(EventGrid→AzureFunction)のログーーーー

Event Grid event received:
{ "subscriptionId": "59fd4ceb-8eaf-4196-a12a-e70b2c6b2150", "clientState": "7e4ea9c5-5f07-4eac-8bfd-98199b9f4fef", "changeType": "created", "resource": "communications/callRecords/b7e77090-912e-4a20-84b0-a5c9477c1d78", "subscriptionExpirationDateTime": "2025-08-07T02:36:25.052593+00:00", "resourceData": { "@odata.type": "#Microsoft.Graph.callRecord", "@odata.id": "communications/callRecords/b7e77090-912e-4a20-84b0-a5c9477c1d78", "id": "b7e77090-912e-4a20-84b0-a5c9477c1d78" }, "tenantId": "92b3be78-b58f-4064-9bff-391f58463af0" }

ーーーーーーー

つきましては、正しいGraphサブスクリプションのリソース設定について助言頂けないでしょうか。何卒宜しくお願い致します。

※なお、ユーザ単位の録画ファイル格納フォルダを指定するのではなく、テナント全体で発生した録画データを都度検知して変更通知を発行する必要があります。

<参考;Graphサブスクリプション作成内容> ※下記内容で登録は成功している

$expirationDateTime = (Get-Date).AddDays(1).ToUniversalTime().ToString("o")

$notificationUrl = "EventGrid:?azuresubscriptionid=$subscriptionId&resourcegroup=$resourceGroupName&partnertopic=$partnerTopicName&location=$region"

$subscriptionBody = @{

changeType               = "created" 

notificationUrl          = $notificationUrl

lifecycleNotificationUrl = $notificationUrl

**resource                 = "/communications/onlineMeetings/getAllRecordings"**  

expirationDateTime       = $expirationDateTime

clientState              = $validationToken

} | ConvertTo-Json -Depth 10

Microsoft Teams | Microsoft Teams for Business | その他
0 件のコメント コメントはありません

1 件の回答

並べ替え方法: 最も役に立つ
  1. atsmin 240 評価のポイント
    2025-08-08T02:41:59.9433333+00:00

    Yuki Kimura さん、こんにちは。

    ①/communications/onlineMeetings/getAllRecordings → 受信側のFunctionに変更通知自体が連携されない

    こちらについて私も手元で試してみたのですが、"今すぐ会議" で会議を開催した場合はレコーディングを開始しても変更通知が行われない動作になりました。カレンダから予定(スケジュール)を登録して開催した会議では通知が行われました。

    会議のレコーディングを取得する Graph API の公開情報を見ると、現時点ではGraph API でレコーディングを取得できるのはカレンダからスケジュールを登録して開催した会議のみでした。そのため変更通知でも同様にカレンダから登録した会議のみが通知される動作になっている可能性が高そうです。

    スケジュールされた onlineMeeting に関連付けられている callRecording オブジェクトを取得します。

    https://learn.microsoft.com/ja-jp/graph/api/callrecording-get?view=graph-rest-1.0&tabs=http

    明確な公開情報は見つからず、さらに調査が必要でしたら M365 管理センターからサポートリクエストを起票してサポート窓口へお問い合わせいただくのが宜しいかと存じます。

    スケジュールされた会議の場合は変更通知に userId, meetingId, recordingId が含まれますので、これらの情報からGraph API でレコーディングの情報を取得することができます。

    ※変更通知に含まれる情報

                "resourceData": {
                    "id": "VjIjIzE1NmVk...",
                    "@odata.type": "#Microsoft.Graph.callRecording",
                    "@odata.id": **"users('c1fe9cb2...')/onlineMeetings('MSpjMWZlOWNi...')/recordings('VjIjIzE1Nm...')"**
                }
    

    任意のユーザーが開始したレコーディングを Graph API で取得するには、アプリケーション許可権限で Graph API を実行する必要があります。また対象ユーザーへのアプリケーションアクセスポリシーの割り当てが必要です。
    ※ Graph API でレコーディングを取得する PowerShell スクリプトの例

    # ※ 事前以下の準備が必要です
    # 1. Entra ID アプリケーションに "OnlineMeetingRecording.Read.All" アプリケーション許可権限を付与する
    # 2. 対象のユーザーにアプリケーションアクセスポリシーを割り当て、1のアプリケーションにレコーディングの取得を許可する
    # 3. 1のアプリケーションを指定して Connect-MgGraphコマンドで認証する
    
    # 対象のユーザーID
    $UserId = "c1fe9cb2..."
    # 対象の会議ID
    $MeetingId = "MSpjMWZlOWNi..."
    # 対象のレコーディングID
    $RecordingId = "VjIjIzE1Nm..."
    # Get callRecording API でレコーディングを取得
    $Uri = "/v1.0/users/$UserId/onlineMeetings/$MeetingId/recordings/$RecordingId"
    $response = Invoke-MgGraphRequest -Method GET -Uri $Uri -OutputType PSObject
    # 取得したレコーディングを MP4 ファイルに出力
    $OutputDir = "C:\Temp"
    # レコーディングをダウンロードして保存します
    $OutputFilePath = $OutputDir + "/recording.mp4"
    Invoke-MgGraphRequest -Uri $response.value.recordingContentUrl -OutputFilePath $OutputFilePath
    

    アプリケーション許可権限でレコーディングを取得する方法についての詳細は以下の記事がご参考になれば幸いです。

    https://qiita.com/atsmin77/items/7360b077efd4f6220bd1#%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E8%A8%B1%E5%8F%AF%E6%A8%A9%E9%99%90%E3%81%A7%E4%BC%9A%E8%AD%B0%E6%83%85%E5%A0%B1%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%AA%E8%A8%AD%E5%AE%9A

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません

お客様の回答

質問作成者は回答に "承認済み"、モデレーターは "おすすめ" とマークできます。これにより、ユーザーは作成者の問題が回答によって解決したことを把握できます。