Compartir a través de


Obtención de notificaciones de cambio para las actualizaciones de eventos de llamada a reunión de Microsoft Teams

Las notificaciones de cambio de Microsoft Graph le permiten suscribirse a llamadas iniciadas, llamadas finalizadas y lista actualizada para las reuniones en línea de Microsoft Teams. Las notificaciones de cambio proporcionan un modelo de latencia baja ya que le permiten mantener una suscripción. También puede obtener los datos de recursos en las notificaciones y, por lo tanto, evitar llamar a la API para obtener la carga.

Una suscripción tiene un período de expiración máximo de tres días. Para conservar la suscripción durante más de este período, se debe realizar una solicitud de renovación de suscripción. Para obtener más información, vea Actualizar suscripción. Como alternativa, un usuario puede esperar a que expire la suscripción y crear una nueva suscripción con el mismo recurso de reunión.

Este recurso admite notificaciones con datos de recursos. Para obtener más información sobre cómo configurar notificaciones con datos de recursos, consulte Configuración de notificaciones de cambios que incluyen datos de recursos.

Nota:

A partir del 30 de junio de 2024, para obtener los cambios que se produjeron en una llamada de reunión activa, se recomienda suscribirse a notificaciones enriquecidas.

Permisos

Tipo de permiso Permisos (de menos a más privilegiados) Versiones compatibles
Delegado (cuenta profesional o educativa) No admitida. No admitida.
Delegado (cuenta personal de Microsoft) No admitida. No admitida.
Aplicación OnlineMeetings.Read.All, OnlineMeetings.ReadWrite.All* beta

Suscribirse a eventos de llamadas a reuniones en línea

Para obtener notificaciones de cambio de los eventos de llamada de una reunión, suscríbase a , donde joinWebUrl es el valor codificado por dirección URL de la dirección URL de la unión a /communications/onlineMeetings(joinWebUrl='{joinWebUrl}')/meetingCallEventsla reunión.

Por ejemplo, en joinWebUrl la siguiente dirección URL debe adquirirse para una reunión en línea.

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 aparcar una suscripción, el argumento debe estar codificado como dirección URL y usarse como joinWebUrl en la propiedad del recurso, como se muestra en el ejemplo siguiente.

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

Nota:

Reemplace por {JoinWebUrl} el valor codificado en URL real cuando especifique el recurso. JoinWebURL de la reunión se incluye en la propiedad joinWebUrl del recurso onlineMeeting o en el cliente de Teams para una reunión.

true Establezca includeResourceData en y proporcione los valores adecuados para encryptionCertificate y encryptionCertificateId para suscribirse a notificaciones enriquecidas.

Ejemplo de carga de la suscripción a notificaciones enriquecidas

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

Nota:

Las suscripciones a notificaciones básicas están disponibles para las notificaciones de cambio para las llamadas a reuniones. Sin embargo, dado que las notificaciones básicas solo contienen el identificador de recurso y ningún otro detalle, y una API que obtiene datos de llamadas a reuniones con este identificador no está disponible, se recomienda suscribirse a notificaciones enriquecidas para notificaciones de cambio para las llamadas a reuniones. Para obtener más información, consulte la sección Notificaciones enriquecidas .

Notificaciones enriquecidas

Cuando se suscribe a notificaciones enriquecidas para eventos de cambio en una llamada de reunión activa, los detalles de los cambios se cifran en la carga de notificación.

Ejemplo de carga de notificación enriquecida

{
  "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 notificaciones de eventos

Estos son los eventos de reunión admitidos:

  • callStarted: eventos para cuando se inició la llamada a la reunión.
  • callEnded: eventos para cuando finalizó la llamada a la reunión.
  • rosterUpdated: eventos para cuando un participante se une y sale de la llamada o la sala de espera.
    • El evento rosterUpdated contiene una colección de cambios de participantes de la llamada a la reunión en participants@delta. En esta colección se muestran los cambios de los participantes de usuario en la lista de llamadas a reuniones. Los participantes con la propiedad removedState representan a los participantes que han salido de la colección. Para obtener más información, consulte participante.

Ejemplos de carga descifrada

CallStarted

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

CallEnded

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

RosterUpdated: el participante se une a la modalidad de llamada o 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: el participante entra en un estado inactivo (no en la sala de espera ni en la llamada)

{
  "@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: el participante sale de la llamada

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