Microsoft Teams 资源的更改通知
使用 Microsoft Graph Microsoft Teams 资源的更改通知,可以订阅资源的更改, (创建、更新和删除) 。 更改通知提供低延迟模型,允许你维护 订阅。 还可以在通知中获取资源数据,并避免调用 API 来获取有效负载。
注意
订阅可以持续的最长时间为 60 分钟;但是,可以续订订阅,直到调用方有权访问资源。
更改通知类型
Microsoft Teams 支持两种类型的更改通知:
更改通知以跟踪与租户中的资源相关的所有更改: 例如,你可以订阅租户中任何通道中的消息更改,并在租户中的任何通道中创建、更新或删除消息时收到通知。 这些通知可能有 许可和付款要求,例如 消息 和 成员身份的更改通知。
用于跟踪特定资源的所有更改的更改通知: 例如,可以订阅特定通道中消息中的更改,并在创建、更新或删除消息时收到通知。
有关哪些资源支持哪些类型的更改通知的详细信息,请参阅 Microsoft Graph 更改通知。
支持的资源
下表列出了支持更改通知的Microsoft Teams 资源及其相应的资源路径。 根据 创建订阅时指定的方案应用资源路径。 资源路径有效负载的类型是“资源”列下的类型或该类型的集合。
注意
对标有星号 () *
的资源的订阅仅在终结点上 /beta
可用。
资源 | 支持的资源路径 | 可包含在通知中的资源数据 |
---|---|---|
Teams callRecording | 组织中的所有录制内容: communications/onlineMeetings/getAllRecordings 特定会议的所有录制内容: communications/onlineMeetings/{onlineMeetingId}/recordings 在由特定用户组织的会议中可用的通话记录: users/{userId}/onlineMeetings/getAllRecordings 在安装了特定 Teams 应用的会议中可用的通话记录: appCatalogs/teamsApps/{id}/installedToOnlineMeetings/getAllRecordings * |
是 |
Teams callTranscript | 组织中的所有脚本: communications/onlineMeetings/getAllTranscripts 特定会议的所有脚本: communications/onlineMeetings/{onlineMeetingId}/transcripts 在由特定用户组织的会议中可用的通话记录: users/{userId}/onlineMeetings/getAllTranscripts 在安装了特定 Teams 应用的会议中可用的通话记录: appCatalogs/teamsApps/{id}/installedToOnlineMeetings/getAllTrancripts * |
是 |
Teams 频道 | 对所有团队中频道的更改:/teams/getAllChannels 对特定团队中频道的更改: /teams/{id}/channels |
是 |
Teams 聊天 | 对租户中任何聊天的更改:/chats 对特定聊天的更改: /chats/{id} 对安装了特定 Teams 应用的租户中任何聊天的更改: /appCatalogs/teamsApps/{id}/installedToChats |
是 |
Teams chatMessage | 对所有团队中所有频道聊天消息更改:/teams/getAllMessages 对特定频道中的聊天消息更改: /teams/{id}/channels/{id}/messages 对所有聊天的消息更改: /chats/getAllMessages 对特定聊天中的消息更改: /chats/{id}/messages 特定用户在所有聊天中对聊天消息所做的更改是以下内容的一部分: /users/{id}/chats/getAllMessages 对安装了特定 Teams 应用的租户中所有聊天中聊天消息的更改: /appCatalogs/teamsApps/{id}/installedToChats/getAllMessages |
是 |
Teams conversationMember | 对特定团队中成员身份的更改:/teams/{id}/members 对特定聊天中成员身份的更改: /chats/{id}/members 对所有聊天中成员身份的更改: /chats/getAllMembers 对特定团队下所有频道中的成员身份的更改: teams/{id}/channels/getAllMembers 对安装了特定 Teams 应用的租户中所有聊天的成员身份的更改: /appCatalogs/teamsApps/{id}/installedToChats/getAllMembers 对租户中所有通道的成员身份的更改: teams/getAllChannels/getAllMembers |
是 |
Teams 团队 | 对租户中任何团队的更改:/teams 对特定团队的更改: /teams/{id} |
是 |
Teams teamsAppInstallation | 安装、升级或删除特定 Teams 应用时的更改:/appCatalogs/teamsApps/{teams-app-id}/installations |
是 |
通知有效负载
可以获取包含或不带资源数据的通知,具体取决于订阅。 使用资源数据订阅可让你获取消息有效负载和通知,无需回叫和获取内容。
包含资源数据的通知
对于包含资源数据的通知,负载如下所示。 此有效负载用于对应于聊天消息资源的通知。 实际通知包括 资源 和表示已触发该通知的 resourceData 属性。
{
"value": [{
"subscriptionId": "10493aa0-4d29-4df5-bc0c-ef742cc6cd7f",
"changeType": "created",
"clientState": "<<--SpecifiedClientState-->>",
"subscriptionExpirationDateTime": "2021-02-02T10:30:34.9097561-08:00",
"resource": "chats('19:8ea0e38b-efb3-4757-924a-5f94061cf8c2_97f62344-57dc-409c-88ad-c4af14158ff5@unq.gbl.spaces')/messages('1612289765949')",
"resourceData": {
"id": "1612289765949",
"@odata.type": "#Microsoft.Graph.chatMessage",
"@odata.id": "chats('19:8ea0e38b-efb3-4757-924a-5f94061cf8c2_97f62344-57dc-409c-88ad-c4af14158ff5@unq.gbl.spaces')/messages('1612289765949')"
},
"encryptedContent": {
"data": "<<--EncryptedContent-->",
"dataKey": "<<--EnryptedDataKeyUsedForEncryptingContent-->>",
"encryptionCertificateId": "<<--IdOfTheCertificateUsedForEncryptingDataKey-->>",
"encryptionCertificateThumbprint": "<<--ThumbprintOfTheCertificateUsedForEncryptingDataKey-->>"
},
"tenantId": "<<--TenantForWhichNotificationWasSent-->>"
}],
"validationTokens": ["<<--ValidationTokens-->>"]
}
有关验证令牌和解密有效负载的详细信息,请参阅 设置包含资源数据的更改通知。
解密的通知负载如下所示。 上一示例的已解密有效负载符合 chatMessage 架构。 该负载类似于 GET 操作返回的负载。
{
"id": "1612289992105",
"replyToId": null,
"etag": "1612289992105",
"messageType": "message",
"createdDateTime": "2021-02-02T18:19:52Z",
"lastModifiedDateTime": "2021-02-02T18:19:52.105Z",
"lastEditedDateTime": null,
"deletedDateTime": null,
"subject": null,
"summary": null,
"chatId": "19:8ea0e38b-efb3-4757-924a-5f94061cf8c2_97f62344-57dc-409c-88ad-c4af14158ff5@unq.gbl.spaces",
"importance": "normal",
"locale": "en-us",
"webUrl": null,
"from": {
"application": null,
"device": null,
"user": {
"id": "8ea0e38b-efb3-4757-924a-5f94061cf8c2",
"displayName": "Ramjot Singh",
"userIdentityType": "aadUser"
},
"conversation": null
},
"body": {
"contentType": "text",
"content": "test"
},
"channelIdentity": null,
"attachments": [],
"mentions": [],
"policyViolation": null,
"reactions": [],
"replies": [],
"hostedContents": []
}
不含资源数据的通知
不含资源数据的通知为你提供了足够的信息来进行 GET 调用以获取资源。 没有资源数据的通知订阅不需要加密证书 (,因为实际资源数据不会通过) 发送。
该负载如下所示。 此负载适用于在频道中发送的消息。
{
"subscriptionId": "9f9d1ed0-c9cc-42e7-8d80-a7fc4b0cda3c",
"changeType": "created",
"tenantId": "<<--TenantForWhichNotificationWasSent-->>",
"clientState": "<<--SpecifiedClientState-->>",
"subscriptionExpirationDateTime": "2021-02-02T11:26:41.0537895-08:00",
"resource": "teams('fbe2bf47-16c8-47cf-b4a5-4b9b187c508b')/channels('19:4a95f7d8db4c4e7fae857bcebe0623e6@thread.tacv2')/messages('1612293113399')",
"resourceData": {
"id": "1612293113399",
"@odata.type": "#Microsoft.Graph.chatMessage",
"@odata.id": "teams('fbe2bf47-16c8-47cf-b4a5-4b9b187c508b')/channels('19:4a95f7d8db4c4e7fae857bcebe0623e6@thread.tacv2')/messages('1612293113399')"
}
}
上一个示例显示了与聊天消息资源对应的通知。 实际通知包括 资源 和表示已触发该通知的 resourceData 属性。 资源 和 @odata.id 属性可用于对 Microsoft Graph 进行调用以获取资源的有效负载。
注意
GET 调用始终返回资源的当前状态。 如果在发送通知和检索资源之间更改了资源,则操作将返回更新的资源。