使用 Microsoft Graph 获取聊天的更改通知
更改通知使你能够订阅聊天的更改(创建和更新)。 每当创建或更新 聊天 时,你都可以收到通知。 你还可以在通知中获取资源数据,因此避免调用 API 来获取有效负载。
继续阅读有关 聊天 资源方案的文章。 或者,了解 其他 Microsoft Teams 资源的更改通知。
注意
如果请求的订阅 expirationDateTime 在未来超过 1 小时,则必须通过在订阅请求中包含 lifecycleNotificationUrl 属性来订阅生命周期通知。 否则,订阅请求将失败并显示以下错误消息: 当 expirationDateTime 值设置为大于 1 小时时,lifecycleNotificationUrl 是在此资源上创建订阅所需的属性。
在租户级别订阅任何聊天中的更改
要获取与租户中任何聊天相关的所有更改(创建、更新和删除)的更改通知,请订阅 /chats
。 此资源支持在通知中包括资源数据。
权限
权限类型 | 权限(从最低特权到最高特权) |
---|---|
委派(工作或学校帐户) | 不支持。 |
委派(个人 Microsoft 帐户) | 不支持。 |
Application | Chat.ReadBasic.All, Chat.Read.All, Chat.ReadWrite.All |
示例
POST https://graph.microsoft.com/v1.0/subscriptions
Content-Type: application/json
{
"changeType": "created,updated",
"notificationUrl": "https://webhook.azurewebsites.net/api/resourceNotifications",
"resource": "/chats",
"includeResourceData": true,
"encryptionCertificate": "{base64encodedCertificate}",
"encryptionCertificateId": "{customId}",
"expirationDateTime": "2019-09-19T11:00:00.0000000Z",
"clientState": "{secretClientState}"
}
订阅特定聊天中的更改
要获取特定聊天相关的所有更改的更改通知,请订阅 /chats/{id}
。 此资源支持在通知中包括资源数据。
权限
权限类型 | 权限(从最低特权到最高特权) |
---|---|
委派(工作或学校帐户) | Chat.ReadBasic, Chat.Read, Chat.ReadWrite |
委派(个人 Microsoft 帐户) | 不支持。 |
应用程序 | ChatSettings.Read.Chat*、ChatSettings.ReadWrite.Chat*、Chat.Manage.Chat*、Chat.ReadBasic.All、Chat.Read.All、Chat.ReadWrite.All |
注意:标有 * 的权限用于特定于资源的同意。
示例
POST https://graph.microsoft.com/v1.0/subscriptions
Content-Type: application/json
{
"changeType": "updated",
"notificationUrl": "https://webhook.azurewebsites.net/api/resourceNotifications",
"resource": "/chats/{id}",
"includeResourceData": true,
"encryptionCertificate": "{base64encodedCertificate}",
"encryptionCertificateId": "{customId}",
"expirationDateTime": "2019-09-19T11:00:00.0000000Z",
"clientState": "{secretClientState}"
}
包含资源数据的通知
对于包含资源数据的通知,负载如下所示。 此有效负载用于聊天中的属性更改。
{
"value": [{
"subscriptionId": "352887e3-9be0-4b6f-a4e6-dec118d857db",
"changeType": "Created",
"clientState": "<<--SpecifiedClientState-->>",
"subscriptionExpirationDateTime": "2021-06-03T09:50:37.719033+00:00",
"resource": "chats('19:1273a016-201d-4f95-8083-1b7f99b3edeb_976f4b31-fd01-4e0b-9178-29cc40c14438@unq.gbl.spaces')",
"resourceData": {
"id": "19:1273a016-201d-4f95-8083-1b7f99b3edeb_976f4b31-fd01-4e0b-9178-29cc40c14438@unq.gbl.spaces",
"@odata.type": "#microsoft.graph.chat",
"@odata.id": "chats('19:1273a016-201d-4f95-8083-1b7f99b3edeb_976f4b31-fd01-4e0b-9178-29cc40c14438@unq.gbl.spaces')"
},
"EncryptedContent": {
"data": "<<--EncryptedContent-->>",
"dataKey": "<<--EnryptedDataKeyUsedForEncryptingContent-->>",
"encryptionCertificateId": "<<--IdOfTheCertificateUsedForEncryptingDataKey-->>",
"encryptionCertificateThumbprint": "<<--ThumbprintOfTheCertificateUsedForEncryptingDataKey-->>"
}
"tenantId": "<<--TenantForWhichNotificationWasSent-->>"
}],
"validationTokens": ["<<--ValidationTokens-->>"]
}
有关如何验证令牌和解密负载的详细信息,请参阅设置包含资源数据的更改通知。
解密的通知负载如下所示。 有效负载符合 聊天 架构。 该负载类似于 GET 操作返回的负载。
{
"id": "19:1273a016-201d-4f95-8083-1b7f99b3edeb_976f4b31-fd01-4e0b-9178-29cc40c14438@unq.gbl.spaces",
"topic": null,
"createdDateTime": "2021-06-03T14:25:04+05:30",
"lastUpdatedDateTime": "2021-06-03T14:25:04.387Z",
"chatType": "oneOnOne",
"members": [
{
"userId": "976f4b31-fd01-4e0b-9178-29cc40c14438",
"email": null,
"tenantId": "2432b57b-0abd-43db-aa7b-16eadd115d34",
"id": "MCMjMjQzMmI1N2ItMGFiZC00M2RiLWFhN2ItMTZlYWRkMTE1ZDM0IyMxOToxMjczYTAxNi0yMDFkLTRmOTUtODA4My0xYjdmOTliM2VkZWJfOTc2ZjRiMzEtZmQwMS00ZTBiLTkxNzgtMjljYzQwYzE0NDM4QHVucS5nYmwuc3BhY2VzIyM5NzZmNGIzMS1mZDAxLTRlMGItOTE3OC0yOWNjNDBjMTQ0Mzg=",
"roles": [],
"displayName": null,
"visibleHistoryStartDateTime": "1970-01-01T00:00:00Z",
"user": null
},
{
"userId": "ee723d3d-22d0-4394-9c32-5764d68f4672",
"email": null,
"tenantId": "2432b57b-0abd-43db-aa7b-16eadd115d34",
"id": "MCMjMjQzMmI1N2ItMGFiZC00M2RiLWFhN2ItMTZlYWRkMTE1ZDM0IyMxOToxMjczYTAxNi0yMDFkLTRmOTUtODA4My0xYjdmOTliM2VkZWJfOTc2ZjRiMzEtZmQwMS00ZTBiLTkxNzgtMjljYzQwYzE0NDM4QHVucS5nYmwuc3BhY2VzIyNlZTcyM2QzZC0yMmQwLTQzOTQtOWMzMi01NzY0ZDY4ZjQ2NzI=",
"roles": [],
"displayName": null,
"visibleHistoryStartDateTime": "1970-01-01T00:00:00Z",
"user": null
}
],
"messages": [],
"installedApps": [],
"tabs": [],
"permissionGrants": [],
"operations": []
}
订阅安装了 Teams 应用的租户中任何聊天中的更改
若要获取与安装了特定 Teams 应用的租户中的任何聊天相关的所有更改通知,请 /appCatalogs/teamsApps/{teams-app-id}/installedToChats
订阅 。 此资源支持在通知中包括资源数据。
权限
权限类型 | 权限(从最低特权到最高特权) |
---|---|
委派(工作或学校帐户) | 不支持。 |
委派(个人 Microsoft 帐户) | 不支持。 |
应用程序 | Chat.ReadBasic.WhereInstalled、Chat.Read.WhereInstalled、Chat.ReadWrite.WhereInstalled |
示例
POST https://graph.microsoft.com/v1.0/subscriptions
Content-Type: application/json
{
"changeType": "created,updated",
"notificationUrl": "https://webhook.azurewebsites.net/api/resourceNotifications",
"resource": "/appCatalogs/teamsApps/386bbcdb-1e1c-4f3f-b7d0-ad7b9ea6cf7c/installedToChats",
"includeResourceData": true,
"encryptionCertificate": "{base64encodedCertificate}",
"encryptionCertificateId": "{customId}",
"expirationDateTime": "2019-09-19T11:00:00.0000000Z",
"clientState": "{secretClientState}"
}
不含资源数据的通知
以下有效负载描述在请求中发送的信息,以获取不含资源数据的通知。 此特定有效负载表示已创建新的聊天。
{
"subscriptionId": "8d85051d-779d-45bc-be92-e433f0a5d8ac",
"changeType": "Created",
"tenantId": "<<--TenantForWhichNotificationWasSent-->>",
"clientState": "<<--SpecifiedClientState-->>",
"subscriptionExpirationDateTime": "2021-06-03T10:26:09.8959595+00:00",
"resource": "chats('19:1273a016-201d-4f95-8083-1b7f99b3edeb_976f4b31-fd01-4e0b-9178-29cc40c14438@unq.gbl.spaces')",
"resourceData": {
"id": "19:1273a016-201d-4f95-8083-1b7f99b3edeb_976f4b31-fd01-4e0b-9178-29cc40c14438@unq.gbl.spaces",
"@odata.type": "#microsoft.graph.chat",
"@odata.id": "chats('19:1273a016-201d-4f95-8083-1b7f99b3edeb_976f4b31-fd01-4e0b-9178-29cc40c14438@unq.gbl.spaces')"
}
}
resource 和 @odata.id 属性可用于对 Microsoft Graph 进行调用以获取消息详细信息负载。 GET 调用始终返回聊天详细信息的当前状态。 如果在发送通知和检索聊天详细信息之间更新了聊天详细信息,则操作将返回更新的聊天详细信息。
相关内容
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈