获取 Microsoft Teams 虚拟事件更新的更改通知

Microsoft Graph 中的更改通知支持对虚拟事件的订阅。 更改通知通过允许你维护 Microsoft Teams 虚拟事件的 Webhook 来提供低延迟模型。 虚拟事件订阅的最长期限为一天。 若要延长订阅的生存期,必须在到期前续订订阅。 或者,用户可能决定在现有订阅到期后为资源创建新订阅。 有关详细信息,请参阅使用 Microsoft 图形 API获取更改通知

权限

权限类型 权限(从最低特权到最高特权) 支持的版本
委派(工作或学校帐户) VirtualEvent.Read、VirtualEvent.ReadWrite v1.0、Beta
委派(个人 Microsoft 帐户) 不支持。 不支持。
应用程序 VirtualEvent.Read.All v1.0、Beta

可订阅的虚拟事件

下表汇总了可订阅的虚拟事件类型、订阅有效负载中使用的资源 URL 以及通知订阅支持的更改类型。

虚拟事件类型 资源 URL 支持的更改类型 支持的权限类型
租户级别) (所有事件 solutions/virtualEvents/events 已创建 应用程序
所有事件 (租户级别的组织者/共同组织者 ID) solutions/virtualEvents/events/getEventsFromOrganizers(organizerIds=['id1', 'id2']) 已创建 应用程序
特定网络研讨会的事件 solutions/virtualEvents/webinars/{webinarId} 更新 委托的应用程序
网络研讨会的会话事件 solutions/virtualEvents/webinars/{webinarId}/sessions 已创建、更新 委托的应用程序
网络研讨会的注册事件 solutions/virtualEvents/webinars/{webinarId}/registrations 已创建、更新 委托的应用程序

注意: 将 中的值替换为实际值。

订阅租户中创建的所有事件

可以使用以下语法为订阅有效负载中唯一应用和租户的所有事件指定订阅: solutions/virtualEvents/events。 订阅指定通知 URL,以接收租户中针对虚拟事件创建的所有事件创建通知。 此订阅仅支持事件创建的通知。 租户每个应用程序只能有一种类型的订阅。 用户委托的虚拟事件权限受到限制,无法创建此类订阅。

POST https://graph.microsoft.com/v1.0/subscriptions
Content-Type: application/json

{
  "changeType": "created",
  "notificationUrl": "https://webhook.contoso.com/api",
  "lifecycleNotificationUrl": "https://webhook.contoso.com/api",
  "resource": "solutions/virtualEvents/events",
  "expirationDateTime": "2021-02-01T11:00:00.0000000Z",
  "clientState": "secretClientState"
}

订阅使用相关组织者在租户中创建的所有事件

可以使用以下资源订阅包含一组组织者或共同组织者的任何成员的所有事件: solutions/virtualEvents/events/getEventsFromOrganizers(organizerIds=['id1', 'id2'])。 这些订阅接收针对一组组织者或共同组织者 ID 的所有虚拟事件创建的任何通知。 此订阅被视为租户中创建的所有事件的订阅。 用户委托的虚拟事件权限受到限制,无法创建此类订阅。

POST https://graph.microsoft.com/v1.0/subscriptions
Content-Type: application/json

{
  "changeType": "created",
  "notificationUrl": "https://webhook.contoso.com/api",
  "lifecycleNotificationUrl": "https://webhook.contoso.com/api",
  "resource": "solutions/virtualEvents/events/getEventsFromOrganizers(organizerIds=['id1', 'id2'])",
  "expirationDateTime": "2021-02-01T11:00:00.0000000Z",
  "clientState": "secretClientState"
}

订阅特定网络研讨会的更新事件

若要接收特定网络研讨会的更新通知,需要使用以下资源为该唯一网络研讨会创建订阅: solutions/virtualEvents/webinars/{webinarId}

一个应用程序在租户内每个网络研讨会只能有一个订阅。 用户委托的令牌允许设置一个订阅以在租户中接收网络研讨会更新通知,但该订阅仅适用于与事件主机在同一租户中组织或共同组织网络研讨会的用户。

POST https://graph.microsoft.com/v1.0/subscriptions
Content-Type: application/json

{
  "changeType": "updated",
  "notificationUrl": "https://webhook.contoso.com/api",
  "lifecycleNotificationUrl": "https://webhook.contoso.com/api",
  "resource": "solutions/virtualEvents/webinars/{webinarId}",
  "expirationDateTime": "2021-02-01T11:00:00.0000000Z",
  "clientState": "secretClientState"
}

订阅网络研讨会的会话事件通知

若要订阅在网络研讨会中创建或更新的会话的通知,请将资源指定为 solutions/virtualEvents/webinars/{webinarId}/sessions

租户中每个网络研讨会只能有一个会话级别的应用程序订阅。 用户委托的令牌允许设置一个订阅以在租户中接收网络研讨会更新通知,但该订阅仅适用于与事件主机在同一租户中组织或共同组织网络研讨会的用户。

POST https://graph.microsoft.com/v1.0/subscriptions
Content-Type: application/json

{
  "changeType": "created, updated",
  "notificationUrl": "https://webhook.contoso.com/api",
  "lifecycleNotificationUrl": "https://webhook.contoso.com/api",
  "resource": "solutions/virtualEvents/webinars/{webinarId}/sessions",
  "expirationDateTime": "2021-02-01T11:00:00.0000000Z",
  "clientState": "secretClientState"
}

订阅特定会话的会议呼叫事件

有关如何订阅特定会话的会议呼叫事件的信息,请参阅 获取 Microsoft Teams 会议呼叫更新的更改通知

订阅网络研讨会的注册事件

若要订阅网络研讨会注册事件的通知,请将资源指定为 solutions/virtualEvents/webinars/{webinarId}/registrations

应用程序在租户内每个网络研讨会只能有一个注册级别订阅。 用户委托的令牌允许你设置一个订阅以在租户中接收网络研讨会更新通知,但该订阅仅适用于与事件主持人在同一租户中组织或共同组织网络研讨会的用户。

POST https://graph.microsoft.com/v1.0/subscriptions
Content-Type: application/json

{
  "changeType": "created, updated",
  "notificationUrl": "https://webhook.contoso.com/api",
  "lifecycleNotificationUrl": "https://webhook.contoso.com/api",
  "resource": "solutions/virtualEvents/webinars/{webinarId}/registrations",
  "expirationDateTime": "2021-02-01T11:00:00.0000000Z",
  "clientState": "secretClientState"
}

接收事件通知

通知包括已更改的资源的资源 URL。 可以向资源 URL 发送单独的请求,以获取有关已创建或更新的资源的信息。

通知类型

下表指示虚拟事件资源支持的通知和更改类型。

通知类型 资源 ID 更改类型
网络研讨会 solutions/virtualEvents/webinars/{webinarId} 已创建、更新
Session solutions/virtualEvents/webinars/{webinarId}/sessions/{sessionId} 已创建、更新
注册 solutions/virtualEvents/webinars/{webinarId}/registrations/{registrationId} 已创建、更新

事件通知示例

以下 JSON 示例显示了事件的每种受支持的更改类型的响应。

已创建事件

{
  "value": [
    {
      "subscriptionId": "7015b436-a8b8-4260-af80-5af8cba32e62",
      "clientState": "secret client state",
      "changeType": "created",
      "tenantId": "f5b076c8-b508-4ba3-a1a7-19d1c0bcef03",
      "resource": "solutions/virtualEvents/events/",
      "subscriptionExpirationDateTime": "2023-01-28T00:00:00.0000000Z",
      "resourceData": {
        "@odata.id": "solutions/virtualEvents/webinars/{webinarId}/",
        "@odata.type": "#microsoft.graph.virtualEvent",
        "id": "solutions/virtualEvents/webinars/{webinarId}/"
      }
    }
  ]
}

事件已更新

{
  "value": [
    {
      "subscriptionId": "7015b436-a8b8-4260-af80-5af8cba32e62",
      "clientState": "secret client state",
      "changeType": "updated",
      "tenantId": "f5b076c8-b508-4ba3-a1a7-19d1c0bcef03",
      "resource": "solutions/virtualEvents/webinars/{webinarId}/",
      "subscriptionExpirationDateTime": "2023-01-28T00:00:00.0000000Z",
      "resourceData": {
        "@odata.id": "solutions/virtualEvents/webinars/{webinarId}/",
        "@odata.type": "#microsoft.graph.virtualEvent",
        "id": "solutions/virtualEvents/webinars/{webinarId}/"
      }
    }
  ]
}

会话通知示例

以下 JSON 示例显示了会话每种受支持的更改类型的响应。

已创建会话

{
  "value": [
    {
      "subscriptionId": "7015b436-a8b8-4260-af80-5af8cba32e62",
      "clientState": "secret client state",
      "changeType": "created",
      "tenantId": "f5b076c8-b508-4ba3-a1a7-19d1c0bcef03",
      "resource": "solutions/virtualEvents/webinars/{webinarId}/sessions",
      "subscriptionExpirationDateTime": "2023-01-28T00:00:00.0000000Z",
      "resourceData": {
        "@odata.id": "solutions/virtualEvents/webinars/{webinarId}/sessions/{sessionId}",
        "@odata.type": "#microsoft.graph.virtualEventSession",
        "id": "solutions/virtualEvents/webinars/{webinarId}/sessions/{sessionId}"
      }
    }
  ]
}

已更新会话

{
  "value": [
    {
      "subscriptionId": "7015b436-a8b8-4260-af80-5af8cba32e62",
      "clientState": "secret client state",
      "changeType": "updated",
      "tenantId": "f5b076c8-b508-4ba3-a1a7-19d1c0bcef03",
      "resource": "solutions/virtualEvents/webinars/{webinarId}/sessions",
      "subscriptionExpirationDateTime": "2023-01-28T00:00:00.0000000Z",
      "resourceData": {
        "@odata.id": "solutions/virtualEvents/webinars/{webinarId}/sessions/{sessionId}",
        "@odata.type": "#microsoft.graph.virtualEventSession",
        "id": "solutions/virtualEvents/webinars/{webinarId}/sessions/{sessionId}"
      }
    }
  ]
}

会话会议呼叫更新事件

有关会议呼叫更新收到的通知类型的信息,请参阅 事件通知类型

注册通知示例

以下 JSON 示例显示了注册的每个受支持的更改类型的响应。

已创建注册

{
  "value": [
    {
      "subscriptionId": "7015b436-a8b8-4260-af80-5af8cba32e62",
      "clientState": "secret client state",
      "changeType": "created",
      "tenantId": "f5b076c8-b508-4ba3-a1a7-19d1c0bcef03",
      "resource": "solutions/virtualEvents/webinars/{webinarId}/registrations",
      "subscriptionExpirationDateTime": "2023-01-28T00:00:00.0000000Z",
      "resourceData": {
        "@odata.id": "solutions/virtualEvents/webinars/{webinarId}/registrations/{registrationId}",
        "@odata.type": "#microsoft.graph.virtualEventRegistration",
        "id": "solutions/virtualEvents/webinars/{webinarId}/registrations/{registrationId}"
      }
    }
  ]
}

注册已更新

{
  "value": [
    {
      "subscriptionId": "7015b436-a8b8-4260-af80-5af8cba32e62",
      "clientState": "secret client state",
      "changeType": "updated",
      "tenantId": "f5b076c8-b508-4ba3-a1a7-19d1c0bcef03",
      "resource": "solutions/virtualEvents/webinars/{webinarId}/registrations",
      "subscriptionExpirationDateTime": "2023-01-28T00:00:00.0000000Z",
      "resourceData": {
        "@odata.id": "solutions/virtualEvents/webinars/{webinarId}/registrations/{registrationId}",
        "@odata.type": "#microsoft.graph.virtualEventRegistration",
        "id": "solutions/virtualEvents/webinars/{webinarId}/registrations/{registrationId}"
      }
    }
  ]
}