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 调用始终返回资源的当前状态。 如果在发送通知和检索资源之间更改了资源,则操作将返回更新的资源。