Compartilhar via


Obter notificações de alteração para atualizações de eventos de chamada de reunião do Microsoft Teams

As notificações de alteração no Microsoft Graph permitem-lhe subscrever chamadas iniciadas, chamadas terminadas e listas atualizadas para reuniões online do Microsoft Teams. As notificações de alteração fornecem um modelo de baixa latência, permitindo que você mantenha uma assinatura. Você também pode obter os dados do recurso nas notificações e, portanto, evitar chamar a API para obter o conteúdo.

Uma subscrição tem um período de expiração máximo de três dias. Para manter a subscrição durante mais do que este período, tem de ser feito um pedido de renovação da subscrição. Para obter mais informações, veja Atualizar subscrição. Em alternativa, um utilizador pode esperar que a subscrição expire e crie uma nova subscrição com o mesmo recurso de reunião.

Este recurso suporta notificações com dados de recursos. Para obter mais informações sobre como configurar notificações com dados de recursos, veja Configurar notificações de alteração que incluem dados de recursos.

Observação

A partir de 30 de junho de 2024, para obter as alterações que ocorreram a uma chamada de reunião ativa, recomendamos que subscreva notificações avançadas.

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) Sem suporte. Sem suporte.
Delegado (conta pessoal da Microsoft) Sem suporte. Sem suporte.
Aplicativo OnlineMeetings.Read.All, OnlineMeetings.ReadWrite.All beta

Subscrever eventos de chamada de reunião online

Para obter notificações de alteração para os eventos de chamada para uma reunião, subscreva /communications/onlineMeetings(joinWebUrl='{joinWebUrl}')/meetingCallEvents, em que é o joinWebUrl valor codificado por URL do URL de participação na reunião.

Por exemplo, o joinWebUrl no seguinte URL tem de ser adquirido para uma reunião online.

https://teams.microsoft.com/l/meetup-join/19%3ameeting_ZmYwZTEyYjctZjA5MS00OTkzLWJhNzEtYzFiZDVjNGE0OGFj%40thread.v2/0?context=%7b%22Tid%22%3a%22909c6581-5130-43e9-88f3-fcb3582cde37%22%2c%22Oid%22%3a%22048c94fb-dda6-48b8-9fc8-6740ee418fb9%22%7d

Para estacionar uma subscrição, o argumento tem de ser codificado por URL e utilizado como na joinWebUrl propriedade do recurso, conforme mostrado no exemplo seguinte.

https%3A%2F%2Fteams.microsoft.com%2Fl%2Fmeetup-join%2F19%253ameeting_ZmYwZTEyYjctZjA5MS00OTkzLWJhNzEtYzFiZDVjNGE0OGFj%2540thread.v2%2F0%3Fcontext%3D%257b%2522Tid%2522%253a%2522909c6581-5130-43e9-88f3-fcb3582cde37%2522%252c%2522Oid%2522%253a%2522048c94fb-dda6-48b8-9fc8-6740ee418fb9%2522%257d

Observação

Substitua pelo {JoinWebUrl} valor codificado por URL real quando especificar o recurso. O JoinWebURL para a reunião está incluído na propriedade joinWebUrl do recurso onlineMeeting ou no cliente do Teams para uma reunião.

Defina includeResourceData como true e forneça os valores adequados para encryptionCertificate e encryptionCertificateId para subscrever notificações avançadas.

Exemplo de payload subscrição para notificações avançadas

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

{
  "changeType": "updated",
  "notificationUrl": "https://webhook.azurewebsites.net/api/resourceNotifications",
  "resource": "communications/onlineMeetings(joinWebUrl='https%3A%2F%2Fteams.microsoft.com%2Fl%2Fmeetup-join%2F19%253ameeting_ZmYwZTEyYjctZjA5MS00OTkzLWJhNzEtYzFiZDVjNGE0OGFj%2540thread.v2%2F0%3Fcontext%3D%257b%2522Tid%2522%253a%2522909c6581-5130-43e9-88f3-fcb3582cde37%2522%252c%2522Oid%2522%253a%2522048c94fb-dda6-48b8-9fc8-6740ee418fb9%2522%257d')/meetingCallEvents",
  "includeResourceData": true,
  "encryptionCertificate": "{base64encodedCertificate}",
  "encryptionCertificateId": "{customId}",
  "expirationDateTime": "2021-02-01T11:00:00.0000000Z",
  "clientState": "{secretClientState}"
}

Observação

As subscrições para notificações básicas estão disponíveis para notificações de alteração para chamadas de reunião. No entanto, como as notificações básicas contêm apenas o ID do recurso e nenhum outro detalhe, e uma API que obtém dados de chamadas de reunião com este ID não está disponível, recomendamos que subscreva notificações avançadas para notificações de alteração para chamadas de reunião. Para obter mais informações, veja a secção Notificações avançadas .

Notificações avançadas

Quando subscreve notificações avançadas para eventos de alteração numa chamada de reunião ativa, os detalhes das alterações são encriptados no payload de notificação.

Exemplo de payload de notificação avançada

{
  "value": [{
    "subscriptionId": "{Subscription id}",
    "clientState": "{secret client state}",
    "changeType": "updated",
    "tenantId": "{Organization/Tenant id}",
    "resource": "communications/onlineMeetings(joinWebUrl='{joinWebUrl}')/meetingCallEvents",
    "subscriptionExpirationDateTime": "2022-02-28T00:00:00.0000000Z",
    "resourceData": {
      "@odata.id": "communications/onlineMeetings(joinWebUrl='{joinWebUrl}')/meetingCallEvents",
      "@odata.type": "#microsoft.graph.callevent",
      "id": "{notificationId}'"
    },
    "organizationId": "{Organization/Tenant id}",
    "encryptedContent": {
      "data": "{Encrypted content}",
      "dataSignature": "{Encrypted data signature}",
      "dataKey": "{Encrypted data key for encrypting content}",
      "encryptionCertificateId": "{User specified id of encryption certificate}",
      "encryptionCertificateThumbprint": "{Encrpytion certification thumbprint}"
    }
  }],
  "validationTokens": ["{Validation Tokens}"]
}

Tipos de notificações de eventos

Estes são os eventos de reunião com suporte:

  • callStarted - Eventos para quando a chamada de reunião começou.
  • callEnded - Eventos para quando a chamada da reunião terminou.
  • rosterUpdated - Eventos para quando um participante entra e sai da chamada ou da sala de espera.
    • O evento rosterUpdated contém uma coleção de alterações do participante da chamada de reunião no participants@delta. Esta coleção ilustra as alterações dos participantes do utilizador na lista de chamadas de reunião. Os participantes com a propriedade removedState representam os participantes que saíram da coleção. Para obter mais informações, veja Participante.

Exemplos de conteúdo descriptografado

ChamadaSiniciada

{
  "@odata.type":"#microsoft.graph.callevent",
  "@odata.id":"communications/onlineMeetings(joinWebUrl='{joinWebUrl}')/meetingCallEvents",
  "id":"{notificationId}'",
  "eventType":"callStarted",
  "eventDateTime":"2022-02-28T00:00:00.0000000Z",
}

ChamadaSendidas

{
  "@odata.type":"#microsoft.graph.callevent",
  "@odata.id":"communications/onlineMeetings(joinWebUrl='{joinWebUrl}')/meetingCallEvents",
  "id":"{notificationId}",
  "eventType":"callEnded",
  "eventDateTime":"2022-02-28T00:00:00.0000000Z",
}

RosterUpdated - O participante junta-se à modalidade de chamada ou lobby

{
  "@odata.type": "#microsoft.graph.callevent",
  "@odata.id": "communications/onlineMeetings(joinWebUrl='{joinWebUrl}')/meetingCallEvents",
  "id": "{notificationId}",
  "eventType": "rosterUpdated",
  "eventDateTime": "2022-02-28T00:00:00.0000000Z",
  "participants@delta": [
    {
      "info": {
        "identity": {
          "user": {
            "id": "f3ce5e01-0724-43c7-ae4d-80ca18703a96",
            "displayName": "A user roster update in the call",
            "tenantId": "f69f5191-20ae-4093-8dae-3ec09edeb253"
          }
        }
      },
      "isInLobby": false,
      "id": "e1018298-976a-4956-93e8-f58e43b0016c"
    },
    {
      "info": {
        "identity": {
          "user": {
            "id": "e8bbbe0e-6e3d-42db-9082-213abbe8ee5c",
            "displayName": "User roster update in the lobby of the call",
            "tenantId": "f69f5191-20ae-4093-8dae-3ec09edeb253"
          }
        }
      },
      "isInLobby": true,
      "id": "a7cc3ddb-a469-410d-8057-44dba3b0c073"
    }
  ]
}

RosterUpdated - O participante entra num estado inativo (não na sala de espera ou chamada)

{
  "@odata.type": "#microsoft.graph.callevent",
  "@odata.id": "communications/onlineMeetings(joinWebUrl='{joinWebUrl}')/meetingCallEvents",
  "id": "{notificationId}",
  "eventType": "rosterUpdated",
  "eventDateTime": "2022-02-28T00:00:00.0000000Z",
  "participants@delta": [
    {
      "info": {
        "identity": {
          "user": {
            "id": "f3ce5e01-0724-43c7-ae4d-80ca18703a96",
            "displayName": "A user change within the meeting call",
            "tenantId": "f69f5191-20ae-4093-8dae-3ec09edeb253"
          }
        }
      },
      "isInLobby": false,
      "removedState": {
        "reason": "Participant has entered an inactive state in the roster."
      },
      "id": "e1018298-976a-4956-93e8-f58e43b0016c"
    }
  ]
}

RosterUpdated - O participante sai da chamada

{
  "@odata.type": "#microsoft.graph.callevent",
  "@odata.id": "communications/onlineMeetings(joinWebUrl='{joinWebUrl}')/meetingCallEvents",
  "id": "{notificationId}",
  "eventType": "rosterUpdated",
  "eventDateTime": "2022-02-28T00:00:00.0000000Z",
  "participants@delta": [
    {
      "info": {
        "identity": {
          "user": {
            "id": "e98eb11c-8385-445e-8b19-4a2f169ac5bc",
            "displayName": "User that is leaving the call",
            "tenantId": "f69f5191-20ae-4093-8dae-3ec09edeb253"
          }
        }
      },
      "isInLobby": false,
      "removedState": {
        "reason": "Participant has left the meeting call."
      },
      "id": "347040dd-aa51-4ada-8a44-510c65a3a2d3"
    }
  ]
}