Получение уведомлений об изменениях для обновлений присутствия в Microsoft Teams
Уведомления об изменениях в Microsoft Graph позволяют подписаться на изменения в сведениях о присутствии пользователей в Microsoft Teams. Уведомления об изменениях предоставляют альтернативу опросу о присутствии с помощью API get presence и POST getPresencesByUserId .
Используйте веб-перехватчики, чтобы подписаться на сведения о присутствии пользователей и получать уведомления об изменениях. Общие сведения о веб-перехватчиках см. в разделе Уведомления об изменениях microsoft API Graph.
Примечание.
Начиная с 30 июня 2024 г. для получения изменений, произошедших в активном вызове собрания, рекомендуется подписаться на расширенные уведомления.
Разрешения
Тип разрешения | Разрешения (в порядке повышения привилегий) | Поддерживаемые версии |
---|---|---|
Делегированные (рабочая или учебная учетная запись) | Presence.Read.All. | Версия 1, бета-версия. |
Делегированные (личная учетная запись Майкрософт) | Не поддерживается. | Не поддерживается. |
Для приложений | Не поддерживается. | Не поддерживается. |
Поддерживаемые ресурсы для присутствия
Один пользователь может создать одну подписку присутствия для каждого уникального приложения с максимальным сроком действия в час. Подписку можно продлить с помощью API обновления подписки до истечения срока ее действия или создать новую подписку для того же ресурса после истечения срока действия. Подписки присутствия поддерживают уведомления с данными ресурсов, позволяя доставлять более подробные сведения вместе с уведомлениями об изменениях. Дополнительные сведения см. в разделе Настройка уведомлений об изменениях с использованием данных ресурсов.
В следующей таблице перечислены типы изменений присутствия, на которые можно подписаться. Дополнительные сведения см. в разделе Создание подписки.
Тип подписки присутствия | URL-адрес ресурса | Поддерживаемые типы изменений |
---|---|---|
Изменения присутствия одного пользователя | communications/presences/{id} |
Обновлено |
Массовое изменение присутствия пользователей (не более 650 идентификаторов пользователей) | communications/presences?$filter=id in ('{id}', '{id}', ...) |
Обновлено |
Подписка на изменения присутствия
Чтобы подписаться на изменения присутствия, можно задать ресурсу в полезных данных communications/presences/{id}
подписки, где поле {id} должно быть заменено идентификатором GUID присутствия пользователя. Эта подписка отправляет уведомления об изменениях при изменении присутствия пользователя.
Задайте значение includeResourceData
true
и укажите соответствующие значения для encryptionCertificateId
encryptionCertificate
и для подписки на расширенные уведомления.
Пример. Полезные данные подписки присутствия одного пользователя
{
"changeType": "updated",
"notificationUrl": "https://webhook.contoso.com/api",
"lifecycleNotificationUrl": "https://webhook.contoso.com/api",
"resource": "communications/presences/{id}",
"expirationDateTime": "2023-09-14T10:00:00.0000000Z",
"includeResourceData": true,
"encryptionCertificate": "{encryption certificate}",
"encryptionCertificateId": "{certificate id}",
"clientState": "{secret client state}"
}
Подписка на присутствие нескольких пользователей
Массовые подписки для присутствия пользователей можно создать, задав для ресурса подписки значение /communications/presences?$filter=id in ('{id}', '{id}',...)
, где {id} представляет идентификатор guid пользователей. В одной подписке можно подписаться не более 650 пользователей. Изменения присутствия для идентификаторов пользователей создают уведомление.
Пример. Полезные данные подписки присутствия нескольких пользователей
{
"changeType": "updated",
"notificationUrl": "https://webhook.contoso.com/api",
"lifecycleNotificationUrl": "https://webhook.contoso.com/api",
"resource": "/communications/presences?$filter=id in ('{id}', '{id}',...)",
"expirationDateTime": "2023-09-14T10:00:00.0000000Z",
"includeResourceData": true,
"encryptionCertificate": "{encryption certificate}",
"encryptionCertificateId": "{certificate id}",
"clientState": "{secret client state}"
}
Получение уведомлений о событиях присутствия
Уведомления об изменениях для событий присутствия активируются при внесении изменений в доступность и действия пользователя.
Основные уведомления о присутствии
Базовые уведомления уведомляют подписчиков об идентификаторе ресурса, который изменился. При получении этих сведений необходимо выполнить отдельный вызов GET, чтобы получить сведения о данных. Для базовых уведомлений о присутствии вы получаете сведения о том, какое присутствие пользователя изменилось, но нет данных о присутствии пользователя. Api присутствия GET можно использовать для обнаружения состояния доступности и активности пользователя.
Пример полезных данных
{
"value": [{
"subscriptionId": "{Subscription id}",
"clientState": "{secret client state}",
"changeType": "updated",
"tenantId": "{Organization/Tenant id}",
"resource": "communications/presences/{id}",
"subscriptionExpirationDateTime": "2023-09-14T10:00:00.0000000Z",
"resourceData": {
"@odata.id": "users/{User Id}/presence",
"@odata.type": "#microsoft.graph.presence",
"id": "{User Id}"
},
"organizationId": "{Organization/Tenant id}",
}]
}
Расширенные уведомления о присутствии
Расширенные уведомления уведомляют подписчиков об изменениях, произошедших с ресурсом. Для расширенных уведомлений о присутствии подписчики получают уведомления о том, что пользователь Availability
и Activity
меняется в encryptedContent.data
. Сведения о подписке на расширенные уведомления и расшифровке данных см. в статье Настройка уведомлений об изменениях, включающих данные ресурсов.
Примечание.
Доступность и действие могут иметь одно и то же значение.
Дополнительные сведения о возможных сочетаниях доступности и действий см. в разделе Свойства присутствия.
Пример полезных данных
{
"value": [{
"subscriptionId": "{Subscription id}",
"clientState": "{secret client state}",
"changeType": "updated",
"tenantId": "{Organization/Tenant id}",
"resource": "communications/presences/{id}",
"subscriptionExpirationDateTime": "2023-09-14T10:00:00.0000000Z",
"resourceData": {
"@odata.id": "users/{User Id}/presence",
"@odata.type": "#microsoft.graph.presence",
"id": "{User Id}"
},
"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}"]
}
Пример. Расшифрованные уведомления с данными ресурса
{
"@odata.id": "users/{User Id}/presence",
"@odata.type": "#microsoft.graph.presence",
"id": "{User Id}",
"availability": "{Availability}",
"activity": "{Activity}"
}