Получение уведомлений об изменениях для обновлений событий звонков в Microsoft Teams
Уведомления об изменениях в Microsoft Graph позволяют подписаться на запуск, окончание звонка и обновление списка для онлайн-собраний Microsoft Teams. Уведомления об изменениях обеспечивают модель с низкой задержкой, позволяя управлять подпиской. Кроме того, вы можете получать данные ресурсов в уведомлениях и, следовательно, избегать вызова API, чтобы получить полезные данные.
Срок действия подписки составляет три дня. Чтобы сохранить подписку более этого периода, необходимо выполнить запрос на продление подписки. Дополнительные сведения см. в разделе Обновление подписки. Кроме того, пользователь может дождаться истечения срока действия подписки и создать новую подписку с тем же ресурсом собрания.
Этот ресурс поддерживает уведомления с данными ресурса. Дополнительные сведения о настройке уведомлений с данными ресурсов см. в статье Настройка уведомлений об изменениях, включающих данные ресурсов.
Примечание.
Начиная с 30 июня 2024 г. для получения изменений, произошедших в активном вызове собрания, рекомендуется подписаться на расширенные уведомления.
Разрешения
Тип разрешения | Разрешения (в порядке повышения привилегий) | Поддерживаемые версии |
---|---|---|
Делегированные (рабочая или учебная учетная запись) | Не поддерживается. | Не поддерживается. |
Делегированные (личная учетная запись Майкрософт) | Не поддерживается. | Не поддерживается. |
Для приложений | OnlineMeetings.Read.All, OnlineMeetings.ReadWrite.All | бета |
Подписка на события звонков по сети
Чтобы получать уведомления об изменениях событий звонков для собрания, подпишитесь на /communications/onlineMeetings(joinWebUrl='{joinWebUrl}')/meetingCallEvents
, где joinWebUrl
— это значение URL-адреса присоединения к собранию.
Например, joinWebUrl
для собрания по сети необходимо получить в следующем URL-адресе.
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 для собрания включается в свойство joinWebUrl ресурса onlineMeeting или в клиент Teams для собрания.
Задайте значение includeResourceData
true
и укажите соответствующие значения для encryptionCertificateId
encryptionCertificate
и для подписки на расширенные уведомления.
Пример полезных данных подписки на расширенные уведомления
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}"
}
Примечание.
Подписки на базовые уведомления доступны для уведомлений об изменениях для звонков на собрания. Тем не менее, так как базовые уведомления содержат только идентификатор ресурса и никаких других сведений, а 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 — события, связанные с присоединением участника и выходом из звонка или лобби.
- Событие реестраUpdated содержит коллекцию изменений участников вызова собрания в 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"
}
]
}
ListterUpdated — участник переходит в неактивное состояние (не в вестибюле или вызове)
{
"@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"
}
]
}
Списокupdated — участник выходит из вызова
{
"@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"
}
]
}