Cambiar las notificaciones de los recursos de Microsoft Teams

Las notificaciones de cambio de los recursos de Microsoft Teams mediante Microsoft Graph le permiten suscribirse a los cambios de un recurso (crear, actualizar y eliminar). Las notificaciones de cambio proporcionan un modelo de baja latencia, lo que le permite mantener una suscripción. También puede obtener los datos de recursos en las notificaciones y evitar llamar a la API para obtener la carga.

Nota:

El tiempo máximo que puede durar una suscripción es de 60 minutos; sin embargo, las suscripciones se pueden renovar hasta que el autor de la llamada tenga permiso para acceder al recurso.

Tipos de notificación de cambio

Microsoft Teams admite dos tipos de notificaciones de cambio:

  • Notificación de cambio para hacer seguimiento de todos los cambios relacionados con un recurso en el espacio empresarial: Por ejemplo, puede suscribirse a los cambios en los mensajes de cualquier canal del espacio empresarial y recibir notificaciones cada vez que se cree, actualice o elimine un mensaje en cualquiera de los canales de ese espacio empresarial. Estas notificaciones pueden tener requisitos de licencia y pago, como notificaciones de cambio para mensajes y pertenencia.

  • Notificación de cambios para realizar un seguimiento de todos los cambios de un recurso específico: Por ejemplo, puede suscribirse a los cambios en los mensajes de un canal determinado y recibir notificaciones cada vez que se crea, actualiza o elimina un mensaje.

Para obtener más información sobre qué recursos admiten los tipos de notificaciones de cambio, consulte Notificaciones de cambio Microsoft Graph.

Recursos admitidos

En la tabla siguiente se enumeran los recursos de Microsoft Teams que admiten notificaciones de cambios y sus rutas de acceso de recursos correspondientes. Aplique la ruta de acceso del recurso para el escenario tal y como se especifica al crear una suscripción. El tipo de carga de la ruta de acceso del recurso es el tipo de la columna "Recurso" o una colección de ese tipo.

Nota:

Las suscripciones a recursos marcadas con un asterisco (*) solo están disponibles en el punto de /beta conexión.

Recurso Rutas de acceso de recursos compatibles Los datos de los recursos se pueden incluir en las notificaciones
Llamada de TeamsRegistro Todas las grabaciones de una organización: communications/onlineMeetings/getAllRecordings
Todas las grabaciones de una reunión específica: communications/onlineMeetings/{onlineMeetingId}/recordings
Una grabación de llamadas que está disponible en una reunión organizada por un usuario específico: users/{userId}/onlineMeetings/getAllRecordings
Grabación de llamadas que está disponible en una reunión en la que se instala una aplicación de Teams determinada: appCatalogs/teamsApps/{id}/installedToOnlineMeetings/getAllRecordings *
Llamada de TeamsTranscript Todas las transcripciones de una organización: communications/onlineMeetings/getAllTranscripts
Todas las transcripciones de una reunión específica: communications/onlineMeetings/{onlineMeetingId}/transcripts
Transcripción de llamadas que está disponible en una reunión organizada por un usuario específico: users/{userId}/onlineMeetings/getAllTranscripts
Transcripción de llamadas que está disponible en una reunión en la que se instala una aplicación de Teams determinada: appCatalogs/teamsApps/{id}/installedToOnlineMeetings/getAllTrancripts *
Canal de Teams Cambios en los canales de todos los equipos:
/teams/getAllChannels
Cambios en el canal en un equipo específico:
/teams/{id}/channels
Chat de Teams Cambios en cualquier chat del inquilino:
/chats
Cambios en un chat específico:
/chats/{id}
Cambios en cualquier chat del inquilino donde esté instalada una aplicación de Teams determinada:
/appCatalogs/teamsApps/{id}/installedToChats
chatmessage de Teams Cambios en mensajes de chat de todos los canales de todos los equipos:
/teams/getAllMessages
Cambios en mensajes de chat en un canal específico:
/teams/{id}/channels/{id}/messages
Cambios en mensajes de chat de todos los chats:
/chats/getAllMessages
Cambios en mensajes de chat en un chat específico:
/chats/{id}/messages
Cambios en los mensajes de chat en todos los chats de los que forma parte un usuario determinado:
/users/{id}/chats/getAllMessages
Cambios en los mensajes de chat en todos los chats del inquilino donde está instalada una aplicación de Teams determinada:
/appCatalogs/teamsApps/{id}/installedToChats/getAllMessages
conversationMember de Teams Cambios en la pertenencia a un equipo específico:
/teams/{id}/members
Cambios en la pertenencia a un chat específico:
/chats/{id}/members
Cambios en la pertenencia en todos los chats:
/chats/getAllMembers
Cambios en la pertenencia a todos los canales de un equipo específico:
teams/{id}/channels/getAllMembers
Cambios en la pertenencia a todos los chats del inquilino donde está instalada una aplicación de Teams determinada:
/appCatalogs/teamsApps/{id}/installedToChats/getAllMembers
Cambios en la pertenencia a todos los canales del inquilino:
teams/getAllChannels/getAllMembers
Equipo de Teams Cambios en cualquier equipo del inquilino:
/teams
Cambios en un equipo específico:
/teams/{id}

Cargas de notificaciones

Puede obtener la notificación con o sin datos de recursos, en función de su suscripción. Suscribirse con datos de recursos le permite obtener la carga del mensaje y la notificación, lo que elimina la necesidad de volver a llamar y obtener el contenido.

Notificaciones con datos de recursos

Para las notificaciones con datos de recursos, la carga es similar a la siguiente. Esta carga es para una notificación correspondiente al recurso de mensaje de chat. La notificación real incluye las propiedades resource y resourceData, que representan el recurso que ha desencadenado la notificación.

{
    "value": [{
        "subscriptionId": "10493aa0-4d29-4df5-bc0c-ef742cc6cd7f",
        "changeType": "created",
        "clientState": "<<--SpecifiedClientState-->>",
        "subscriptionExpirationDateTime": "2021-02-02T10:30:34.9097561-08:00",
        "resource": "chats('19:8ea0e38b-efb3-4757-924a-5f94061cf8c2_97f62344-57dc-409c-88ad-c4af14158ff5@unq.gbl.spaces')/messages('1612289765949')",
        "resourceData": {
            "id": "1612289765949",
            "@odata.type": "#Microsoft.Graph.chatMessage",
            "@odata.id": "chats('19:8ea0e38b-efb3-4757-924a-5f94061cf8c2_97f62344-57dc-409c-88ad-c4af14158ff5@unq.gbl.spaces')/messages('1612289765949')"
        },
        "encryptedContent": {
            "data": "<<--EncryptedContent-->",
            "dataKey": "<<--EnryptedDataKeyUsedForEncryptingContent-->>",
            "encryptionCertificateId": "<<--IdOfTheCertificateUsedForEncryptingDataKey-->>",
            "encryptionCertificateThumbprint": "<<--ThumbprintOfTheCertificateUsedForEncryptingDataKey-->>"
        },
        "tenantId": "<<--TenantForWhichNotificationWasSent-->>"
    }],
    "validationTokens": ["<<--ValidationTokens-->>"]
}

Para obtener más información sobre cómo validar tokens y descifrar la carga, consulte Configuración de notificaciones de cambios que incluyen datos de recursos.

La carga de notificación descifrada es similar a la siguiente. La carga descifrada del ejemplo anterior se ajusta al esquema chatMessage. La carga es similar a la devuelta por las operaciones GET.

{
  "id": "1612289992105",
  "replyToId": null,
  "etag": "1612289992105",
  "messageType": "message",
  "createdDateTime": "2021-02-02T18:19:52Z",
  "lastModifiedDateTime": "2021-02-02T18:19:52.105Z",
  "lastEditedDateTime": null,
  "deletedDateTime": null,
  "subject": null,
  "summary": null,
  "chatId": "19:8ea0e38b-efb3-4757-924a-5f94061cf8c2_97f62344-57dc-409c-88ad-c4af14158ff5@unq.gbl.spaces",
  "importance": "normal",
  "locale": "en-us",
  "webUrl": null,
  "from": {
    "application": null,
    "device": null,
    "user": {
      "id": "8ea0e38b-efb3-4757-924a-5f94061cf8c2",
      "displayName": "Ramjot Singh",
      "userIdentityType": "aadUser"
    },
    "conversation": null
  },
  "body": {
    "contentType": "text",
    "content": "test"
  },
  "channelIdentity": null,
  "attachments": [],
  "mentions": [],
  "policyViolation": null,
  "reactions": [],
  "replies": [],
  "hostedContents": []
}

Notificaciones con datos de recursos

Las notificaciones sin datos de recursos le proporcionarán suficiente información para realizar llamadas GET para obtener el recurso. Las suscripciones para notificaciones sin datos de recursos no requieren un certificado de cifrado (porque los datos de recursos reales no se envían).

La carga es similar a la siguiente. Esta carga es para un mensaje enviado en un chat.

{
  "subscriptionId": "9f9d1ed0-c9cc-42e7-8d80-a7fc4b0cda3c",
  "changeType": "created",
  "tenantId": "<<--TenantForWhichNotificationWasSent-->>",  
  "clientState": "<<--SpecifiedClientState-->>",
  "subscriptionExpirationDateTime": "2021-02-02T11:26:41.0537895-08:00",
  "resource": "teams('fbe2bf47-16c8-47cf-b4a5-4b9b187c508b')/channels('19:4a95f7d8db4c4e7fae857bcebe0623e6@thread.tacv2')/messages('1612293113399')",
  "resourceData": {
    "id": "1612293113399",
    "@odata.type": "#Microsoft.Graph.chatMessage",
    "@odata.id": "teams('fbe2bf47-16c8-47cf-b4a5-4b9b187c508b')/channels('19:4a95f7d8db4c4e7fae857bcebe0623e6@thread.tacv2')/messages('1612293113399')"
  }
}

En el ejemplo anterior se muestra una notificación correspondiente a un recurso de mensaje de chat. La notificación real incluye las propiedades resource y resourceData, que representan el recurso que ha desencadenado la notificación. Las propiedades recurso y @odata.id pueden usarse para realizar llamadas a Microsoft Graph y obtener la carga del recurso.

Nota:

Las llamadas GET siempre devuelven el estado actual del recurso. Si el recurso se cambia entre el momento en que se envía la notificación y cuando se recupera el recurso, la operación devolverá el recurso actualizado.