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.
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 |
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}')/meetingCallEvents
la 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.
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 .
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.
{
"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}"]
}
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.
{
"@odata.type":"#microsoft.graph.callevent",
"@odata.id":"communications/onlineMeetings(joinWebUrl='{joinWebUrl}')/meetingCallEvents",
"id":"{notificationId}'",
"eventType":"callStarted",
"eventDateTime":"2022-02-28T00:00:00.0000000Z",
}
{
"@odata.type":"#microsoft.graph.callevent",
"@odata.id":"communications/onlineMeetings(joinWebUrl='{joinWebUrl}')/meetingCallEvents",
"id":"{notificationId}",
"eventType":"callEnded",
"eventDateTime":"2022-02-28T00:00:00.0000000Z",
}
{
"@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"
}
]
}
{
"@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"
}
]
}