Receber notificações de alteração para atualizações de eventos virtuais do Microsoft Teams

As notificações de alteração no Microsoft Graph dão suporte a assinaturas de eventos virtuais. As notificações de alteração fornecem um modelo de baixa latência, permitindo que você mantenha um webhook para eventos virtuais do Microsoft Teams. As assinaturas de eventos virtuais têm um período máximo de um dia. Para estender a vida útil de uma assinatura, ela deve ser renovada antes do período de expiração. Como alternativa, um usuário pode decidir criar uma nova assinatura para o recurso após a expiração de uma assinatura existente. Para obter mais informações, consulte Usar a API do Graph Microsoft para obter notificações de alteração.

Permissões

Tipo de permissão Permissões (da com menos para a com mais privilégios) Versões com suporte
Delegado (conta corporativa ou de estudante) VirtualEvent.Read, VirtualEvent.ReadWrite v1.0, Beta
Delegado (conta pessoal da Microsoft) Sem suporte. Sem suporte.
Application VirtualEvent.Read.All v1.0, Beta

Eventos virtuais assináveis

A tabela a seguir fornece um resumo dos tipos de eventos virtuais subscritores, as URLs de recursos usadas no conteúdo da assinatura e os tipos de alteração com suporte para a assinatura de notificação.

Tipos de eventos virtuais URL do recurso Tipos de alteração com suporte Tipos de permissão com suporte
Todos os eventos (nível do locatário) solutions/virtualEvents/events criadas Application
Todos os eventos (nível de locatário por IDs de organizador/coorganizador) solutions/virtualEvents/events/getEventsFromOrganizers(organizerIds=['id1', 'id2']) criadas Application
Os eventos de um webinar específico solutions/virtualEvents/webinars/{webinarId} atualizado Aplicativo, delegado
Relatório de presença pronto Eventos para um webinar solutions/virtualEvents/webinars/{webinarId}/getAttendanceReports criadas Aplicativo, delegado
Os eventos da sessão de um **webinar** solutions/virtualEvents/webinars/{webinarId}/sessions criado, atualizado Aplicativo, delegado
Os eventos de registro de um webinar solutions/virtualEvents/webinars/{webinarId}/registrations criado, atualizado Aplicativo, delegado
Os eventos de uma prefeitura específica solutions/virtualEvents/townhalls/{townhallId} atualizado Aplicativo, delegado
Relatório de presença Eventos prontos para uma reunião municipal solutions/virtualEvents/townhalls/{townhallId}/getAttendanceReports criadas Aplicativo, delegado
Os eventos de sessão de uma reunião municipal específica solutions/virtualEvents/townhalls/{townhallId}/sessions criado, atualizado Aplicativo, delegado
Publicação pronta para vídeo sob demanda solutions/virtualEvents/{eventType}/{eventId}/getVideoOnDemandPublication atualizado Aplicativo, delegado

Assinar todos os eventos criados em um locatário

Você pode especificar assinaturas para todos os eventos de um aplicativo e locatário exclusivos no conteúdo da assinatura usando a seguinte sintaxe: solutions/virtualEvents/events. A assinatura designa a URL de notificação para receber todas as notificações criadas por eventos em um locatário para eventos virtuais. Só há suporte para notificações criadas por eventos para essa assinatura. Um locatário só pode ter um tipo de assinatura por aplicativo. As permissões de evento virtual delegadas pelo usuário são restritas para criar esse tipo de assinatura.

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"
}

Assinar todos os eventos criados em um locatário com organizadores relevantes

Você pode se inscrever em todos os eventos que incluem membros de um conjunto de organizadores ou coorganizadores usando o seguinte recurso: solutions/virtualEvents/events/getEventsFromOrganizers(organizerIds=['id1', 'id2']). Essas assinaturas recebem todas as notificações criadas para todos os eventos virtuais para um conjunto de IDs de organizador ou coorganizador. Essa assinatura é considerada uma assinatura para todos os eventos criados em um locatário. As permissões de evento virtual delegadas pelo usuário são restritas para criar esse tipo de assinatura.

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"
}

Inscrever-se em eventos atualizados de um webinar específico

Para receber notificações atualizadas para um webinar específico, você precisa criar uma assinatura para esse webinar exclusivo usando o seguinte recurso: solutions/virtualEvents/webinars/{webinarId}.

Um aplicativo pode ter apenas uma assinatura por webinar dentro de um locatário. Um token delegado pelo usuário permite que você configure uma assinatura para receber notificações de atualização do webinar em um locatário. Essa assinatura só está disponível para usuários que organizaram ou coorganizaram webinars no mesmo locatário que o host do evento.

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"
}

Assinar eventos de relatório de presença para todas as sessões em um webinar

Para receber notificações quando os relatórios de presença forem disponibilizados para sessões em um webinar de evento virtual, é necessário criar uma assinatura com o seguinte recurso: solutions/virtualEvents/webinars/{webinarId}/getAttendanceReports.

Um aplicativo pode ter apenas uma assinatura para relatórios de presença de um webinar dentro de um locatário. Um token delegado pelo usuário permite que você configure uma assinatura para receber notificações de atualização do webinar em um locatário. Essa assinatura só está disponível para usuários que organizaram ou coorganizaram webinars no mesmo locatário que o host do evento.

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/webinars/{webinarId}/getAttendanceReports",
  "expirationDateTime": "2021-02-01T11:00:00.0000000Z",
  "clientState": "secretClientState"
}

Inscrever-se para receber notificações de eventos de sessão de um webinar

Para assinar notificações de sessões criadas ou atualizadas em um webinar, especifique o recurso como solutions/virtualEvents/webinars/{webinarId}/sessions.

Um aplicativo só pode ter uma única assinatura de nível de sessão por webinar em um locatário. Um token delegado pelo usuário permite que você configure uma assinatura para receber notificações de atualização do webinar em um locatário. Essa assinatura só está disponível para usuários que organizaram ou coorganizaram webinars no mesmo locatário que o host do evento.

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"
}

Assinar a publicação de vídeo sob demanda para todas as sessões em um webinar

Para assinar notificações quando ocorrer a publicação de vídeo sob demanda de uma sessão, especifique o recurso como solutions/virtualEvents/{eventType}/{eventId}/getVideoOnDemandPublication.

Um aplicativo só pode ter uma assinatura por evento virtual em um locatário para publicações de vídeo sob demanda. Um token delegado pelo usuário permite que você configure uma assinatura por evento virtual em um locatário. A assinatura só está disponível para usuários que são o organizador ou listados como coorganizadores no mesmo locatário que o host do evento.

POST https://graph.microsoft.com/beta/subscriptions

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

Inscrever-se em eventos de chamada de reunião de uma sessão específica

Para obter informações sobre como assinar eventos de chamada de reunião de uma sessão específica, consulte Obter notificações de alteração para atualizações de chamada de reunião do Microsoft Teams.

Inscreva-se em eventos de registro para um webinar

Para assinar notificações de eventos de registro de um webinar, especifique o recurso como solutions/virtualEvents/webinars/{webinarId}/registrations.

Um aplicativo só pode ter uma única assinatura de nível de registro por webinar dentro de um locatário. Um token delegado pelo usuário permite que você configure uma assinatura para receber notificações de atualização do webinar em um locatário. No entanto, a assinatura só está disponível para usuários que organizaram ou coorganizaram webinars no mesmo locatário que o host do evento.

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"
}

Assinar eventos atualizados de uma reunião geral específica

Para receber notificações atualizadas para uma reunião geral específica, você precisa criar uma assinatura para essa reunião geral exclusiva usando o seguinte recurso: solutions/virtualEvents/townhalls/{townhall_id}.

Um aplicativo só pode ter uma assinatura por reunião geral dentro de um locatário. Um token delegado pelo usuário permite que você configure uma assinatura para receber notificações de atualização da reunião geral em um locatário. Essa assinatura só está disponível para usuários que organizaram ou coorganizaram reuniões gerais no mesmo locatário que o organizador do evento.

POST https://graph.microsoft.com/beta/subscriptions
{
    "changeType": "updated",
    "notificationUrl": "https://contonso.com",
    "lifecycleNotificationUrl": "https://contonso.com",
    "resource": "solutions/virtualevents/townhalls/{townhall_id},
    "expirationDateTime": "2026-01-31T12:00:00.0000000Z",
    "clientState": "virtualevent-townhall-subscription",
}

Recebendo notificações de eventos

As notificações incluem a URL do recurso alterado. Você pode enviar uma solicitação separada para a URL do recurso para obter informações sobre um recurso criado ou atualizado.

Tipos de notificação

A tabela a seguir indica os tipos de notificação e alteração com suporte para o recurso de eventos virtuais.

Tipo de notificação ID do recurso Alterar tipos
Webinar solutions/virtualEvents/webinars/{webinarId} criado, atualizado
Sessão solutions/virtualEvents/webinars/{webinarId}/sessions/{sessionId} criado, atualizado
Registro solutions/virtualEvents/webinars/{webinarId}/registrations/{registrationId} criado, atualizado
Relatório de participação da reunião solutions/virtualEvents/webinars/{webinarId}/getAttendanceReports criadas
Câmara Municipal solutions/virtualEvents/townhalls/{townhallId} criado, atualizado
Sessão solutions/virtualEvents/townhalls/{townhallId}/sessions/{sessionId} criado, atualizado
Relatório de participação da reunião solutions/virtualEvents/townhalls/{webinarId}/getAttendanceReports criadas
Sessão de vídeo sob demanda publicada solutions/virtualEvents/{eventType}/{eventId}/sessions/{sessionId} atualizado

Exemplos de notificação de eventos

Os exemplos de JSON a seguir mostram as respostas para cada tipo de alteração compatível de um evento.

Evento criado

{
  "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}/"
      }
    }
  ]
}

Webinar atualizado

{
  "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}/"
      }
    }
  ]
}

Exemplos de notificação de sessão

Os exemplos JSON a seguir mostram as respostas para cada tipo de alteração compatível de uma sessão.

Sessão criada

{
  "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}"
      }
    }
  ]
}

Sessão atualizada

{
  "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}"
      }
    }
  ]
}

Vídeo sob demanda publicado

Eventos criados quando o vídeo sob demanda é publicado para uma sessão de evento virtual. O aplicativo ou usuário pode usar **resourceData.@odata.id** para descobrir qual sessão de evento virtual o vídeo sob demanda está disponível.

Quando uma notificação é recebida para sessões de webinar de evento virtual, a notificação informa apenas ao aplicativo ou usuário que a URL de vídeo sob demanda para o webinar de evento virtual foi publicada. A URL de vídeo sob demanda para a sessão de evento virtual pode ser nula ou utilizável somente pelo organizador. O aplicativo ou usuário deve determinar quais URLs exclusivas de vídeo sob demanda devem ser fornecidas aos diferentes participantes, já que uma única URL de vídeo sob demanda não funciona para todos os usuários.

Para sessões de reunião geral de evento virtual, uma URL universal de vídeo sob demanda está disponível no objeto de sessão de evento virtual, que pode ser usado por todos os participantes.

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

Eventos atualizados de chamada de reunião de sessão

Para obter informações sobre os tipos de notificações recebidas para atualizações de chamadas de reunião, consulte Tipos de notificações de eventos.

Exemplos de notificações de registro

Os exemplos JSON a seguir mostram as respostas para cada tipo de alteração compatível de um registro.

Registro criado

{
  "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}"
      }
    }
  ]
}

Registro atualizado

{
  "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}"
      }
    }
  ]
}

Relatório de presença criado

Os eventos criados por um relatório de presença retornam o ponto de extremidade do objeto meetingAttendanceReport . Os usuários podem usar esse ponto de extremidade no **resourceData.@odata.id** propriedade para consultar os detalhes no objeto meetingAttendanceReport .

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

Reunião geral criada

{
  "value": [
    {
      "subscriptionId": "eb1226bf-be92-0a00-04c5-43d87ee913c6",
      "clientState": "virtualevent-townhall-subscription",
      "changeType": "created",
      "resource": "solutions/virtualevents/townhalls/{townhallId}",
      "subscriptionExpirationDateTime": "2026-01-28T00:00:00.0000000Z",
      "resourceData": {
        "@odata.type": "#microsoft.graph.virtualEventTownhall",
        "@odata.id": "solutions/virtualevents/townhalls/{townhallId}",
        "id": "solutions/virtualevents/townhalls/{townhallId}"
      }
    }
  ]
}