Microsoft Teams会議通話イベントの更新に関する変更通知を取得する
Microsoft Graph の変更通知を使用すると、オンライン会議の通話開始、通話終了、名簿の更新をサブスクライブMicrosoft Teamsできます。 変更通知は、サブスクリプションを維持できるようにすることで、待機時間の短いモデルを提供します。 通知のリソース データを取得することもできます。したがって、API を呼び出してペイロードを取得する必要はありません。
サブスクリプションの有効期限は最大 3 日間です。 この期間を超えてサブスクリプションを保持するには、サブスクリプションの更新要求を行う必要があります。 詳細については、「サブスクリプションの 更新」を参照してください。 または、ユーザーはサブスクリプションの有効期限が切れるのを待ち、同じ会議リソースを使用して新しいサブスクリプションを作成することもできます。
このリソースは、リソース データを使用した通知をサポートします。 リソース データを使用した通知の設定の詳細については、「リソース データを 含む変更通知を設定する」を参照してください。
注:
2024 年 6 月 30 日より、アクティブな会議通話に発生した変更を取得するには、 リッチ通知をサブスクライブすることをお勧めします。
アクセス許可
アクセス許可の種類 | アクセス許可 (特権の小さいものから大きいものへ) | サポートされるバージョン |
---|---|---|
委任 (職場または学校のアカウント) | サポートされていません。 | サポートされていません。 |
委任 (個人用 Microsoft アカウント) | サポートされていません。 | サポートされていません。 |
アプリケーション | OnlineMeetings.Read.All、OnlineMeetings.ReadWrite.All | ベータ版 |
オンライン会議通話イベントをサブスクライブする
会議の通話イベントの変更通知を取得するには、 /communications/onlineMeetings(joinWebUrl='{joinWebUrl}')/meetingCallEvents
をサブスクライブします。ここで、 joinWebUrl
は会議参加 URL の URL でエンコードされた値です。
たとえば、オンライン会議では、次の URL の joinWebUrl
を取得する必要があります。
https://teams.microsoft.com/l/meetup-join/19%3ameeting_ZmYwZTEyYjctZjA5MS00OTkzLWJhNzEtYzFiZDVjNGE0OGFj%40thread.v2/0?context=%7b%22Tid%22%3a%22909c6581-5130-43e9-88f3-fcb3582cde37%22%2c%22Oid%22%3a%22048c94fb-dda6-48b8-9fc8-6740ee418fb9%22%7d
サブスクリプションをパークするには、次の例に示すように、引数は URL でエンコードされ、リソース プロパティの joinWebUrl
として使用される必要があります。
https%3A%2F%2Fteams.microsoft.com%2Fl%2Fmeetup-join%2F19%253ameeting_ZmYwZTEyYjctZjA5MS00OTkzLWJhNzEtYzFiZDVjNGE0OGFj%2540thread.v2%2F0%3Fcontext%3D%257b%2522Tid%2522%253a%2522909c6581-5130-43e9-88f3-fcb3582cde37%2522%252c%2522Oid%2522%253a%2522048c94fb-dda6-48b8-9fc8-6740ee418fb9%2522%257d
注:
リソースを指定するときに、 {JoinWebUrl}
を実際の URL でエンコードされた値に置き換えます。 会議の JoinWebURL は、onlineMeeting リソースの joinWebUrl プロパティ、または会議の Teams クライアントに含まれます。
[ includeResourceData
] を [ true
] に設定し、 encryptionCertificate
と encryptionCertificateId
に適切な値を指定して、リッチ通知をサブスクライブします。
リッチ通知ペイロードへのサブスクリプションのサンプル
POST https://graph.microsoft.com/beta/subscriptions
Content-Type: application/json
{
"changeType": "updated",
"notificationUrl": "https://webhook.azurewebsites.net/api/resourceNotifications",
"resource": "communications/onlineMeetings(joinWebUrl='https%3A%2F%2Fteams.microsoft.com%2Fl%2Fmeetup-join%2F19%253ameeting_ZmYwZTEyYjctZjA5MS00OTkzLWJhNzEtYzFiZDVjNGE0OGFj%2540thread.v2%2F0%3Fcontext%3D%257b%2522Tid%2522%253a%2522909c6581-5130-43e9-88f3-fcb3582cde37%2522%252c%2522Oid%2522%253a%2522048c94fb-dda6-48b8-9fc8-6740ee418fb9%2522%257d')/meetingCallEvents",
"includeResourceData": true,
"encryptionCertificate": "{base64encodedCertificate}",
"encryptionCertificateId": "{customId}",
"expirationDateTime": "2021-02-01T11:00:00.0000000Z",
"clientState": "{secretClientState}"
}
注:
基本的な通知のサブスクリプションは、会議通話の変更通知に使用できます。 ただし、基本的な通知にはリソース ID のみが含まれており、その他の詳細は含まれていないため、この ID を使用して会議通話データを取得する API は使用できないため、会議通話の変更通知に関する豊富な通知をサブスクライブすることをお勧めします。 詳細については、「 リッチ通知 」セクションを参照してください。
多機能な通知
アクティブな会議通話で変更イベントのリッチ通知をサブスクライブすると、変更の詳細が通知ペイロードで暗号化されます。
リッチ通知ペイロードの例
{
"value": [{
"subscriptionId": "{Subscription id}",
"clientState": "{secret client state}",
"changeType": "updated",
"tenantId": "{Organization/Tenant id}",
"resource": "communications/onlineMeetings(joinWebUrl='{joinWebUrl}')/meetingCallEvents",
"subscriptionExpirationDateTime": "2022-02-28T00:00:00.0000000Z",
"resourceData": {
"@odata.id": "communications/onlineMeetings(joinWebUrl='{joinWebUrl}')/meetingCallEvents",
"@odata.type": "#microsoft.graph.callevent",
"id": "{notificationId}'"
},
"organizationId": "{Organization/Tenant id}",
"encryptedContent": {
"data": "{Encrypted content}",
"dataSignature": "{Encrypted data signature}",
"dataKey": "{Encrypted data key for encrypting content}",
"encryptionCertificateId": "{User specified id of encryption certificate}",
"encryptionCertificateThumbprint": "{Encrpytion certification thumbprint}"
}
}],
"validationTokens": ["{Validation Tokens}"]
}
イベント通知の種類
サポートされている会議イベントを次に示します。
- callStarted - 会議通話が開始されたときのイベント。
- callEnded - 会議通話が終了したときのイベント。
- rosterUpdated - 参加者が通話またはロビーに参加して終了するときのイベント。
- rosterUpdated イベントには、participants@deltaでの会議通話参加者の変更のコレクションが含まれています。 このコレクションは、会議通話名簿のユーザー参加者の変更を示しています。 removedState プロパティを持つ参加者は、コレクションを終了した参加者を表します。 詳細については、「 参加者」を参照してください。
暗号化解除されたペイロードの例
CallStarted
{
"@odata.type":"#microsoft.graph.callevent",
"@odata.id":"communications/onlineMeetings(joinWebUrl='{joinWebUrl}')/meetingCallEvents",
"id":"{notificationId}'",
"eventType":"callStarted",
"eventDateTime":"2022-02-28T00:00:00.0000000Z",
}
CallEnded
{
"@odata.type":"#microsoft.graph.callevent",
"@odata.id":"communications/onlineMeetings(joinWebUrl='{joinWebUrl}')/meetingCallEvents",
"id":"{notificationId}",
"eventType":"callEnded",
"eventDateTime":"2022-02-28T00:00:00.0000000Z",
}
RosterUpdated - 参加者が通話またはロビーのモダリティに参加する
{
"@odata.type": "#microsoft.graph.callevent",
"@odata.id": "communications/onlineMeetings(joinWebUrl='{joinWebUrl}')/meetingCallEvents",
"id": "{notificationId}",
"eventType": "rosterUpdated",
"eventDateTime": "2022-02-28T00:00:00.0000000Z",
"participants@delta": [
{
"info": {
"identity": {
"user": {
"id": "f3ce5e01-0724-43c7-ae4d-80ca18703a96",
"displayName": "A user roster update in the call",
"tenantId": "f69f5191-20ae-4093-8dae-3ec09edeb253"
}
}
},
"isInLobby": false,
"id": "e1018298-976a-4956-93e8-f58e43b0016c"
},
{
"info": {
"identity": {
"user": {
"id": "e8bbbe0e-6e3d-42db-9082-213abbe8ee5c",
"displayName": "User roster update in the lobby of the call",
"tenantId": "f69f5191-20ae-4093-8dae-3ec09edeb253"
}
}
},
"isInLobby": true,
"id": "a7cc3ddb-a469-410d-8057-44dba3b0c073"
}
]
}
RosterUpdated - 参加者が非アクティブな状態になります (ロビーや通話ではありません)
{
"@odata.type": "#microsoft.graph.callevent",
"@odata.id": "communications/onlineMeetings(joinWebUrl='{joinWebUrl}')/meetingCallEvents",
"id": "{notificationId}",
"eventType": "rosterUpdated",
"eventDateTime": "2022-02-28T00:00:00.0000000Z",
"participants@delta": [
{
"info": {
"identity": {
"user": {
"id": "f3ce5e01-0724-43c7-ae4d-80ca18703a96",
"displayName": "A user change within the meeting call",
"tenantId": "f69f5191-20ae-4093-8dae-3ec09edeb253"
}
}
},
"isInLobby": false,
"removedState": {
"reason": "Participant has entered an inactive state in the roster."
},
"id": "e1018298-976a-4956-93e8-f58e43b0016c"
}
]
}
RosterUpdated - 参加者が通話を終了する
{
"@odata.type": "#microsoft.graph.callevent",
"@odata.id": "communications/onlineMeetings(joinWebUrl='{joinWebUrl}')/meetingCallEvents",
"id": "{notificationId}",
"eventType": "rosterUpdated",
"eventDateTime": "2022-02-28T00:00:00.0000000Z",
"participants@delta": [
{
"info": {
"identity": {
"user": {
"id": "e98eb11c-8385-445e-8b19-4a2f169ac5bc",
"displayName": "User that is leaving the call",
"tenantId": "f69f5191-20ae-4093-8dae-3ec09edeb253"
}
}
},
"isInLobby": false,
"removedState": {
"reason": "Participant has left the meeting call."
},
"id": "347040dd-aa51-4ada-8a44-510c65a3a2d3"
}
]
}