Exportar contenido con las API de exportación de Microsoft Teams

Las API de exportación de Teams le permiten exportar mensajes individuales, chats grupales, chats de reuniones y mensajes de canal de Microsoft Teams. Si su organización necesita exportar mensajes de Microsoft Teams, podrá extraerlos con las API de exportación de Teams. Mensaje de chat representa un mensaje de chat individual dentro de un canal o chat. El mensaje de chat puede ser un mensaje de chat raíz o parte de una conversación de respuesta definida por la propiedad replyToId del mensaje de chat.

Estos son algunos ejemplos sobre cómo puede usar estas API de exportación:

  • Ejemplo 1: Si ha habilitado Microsoft Teams en su organización y desea exportar todos los mensajes de Microsoft Teams a la fecha mediante programación pasando el intervalo de fechas para un usuario o equipo determinado.

  • Ejemplo 2: Si desea exportar todos los mensajes de usuario o equipo a diario mediante programación proporcionando un intervalo de fechas. Las API de exportación pueden recuperar todos los mensajes creados o actualizados durante el intervalo de fechas especificado.

  • (Beta) Ejemplo 3: Si desea exportar mediante programación los vínculos a las grabaciones de reuniones de Teams para un organizador de reunión determinado y, a continuación, descargar las grabaciones reales.

  • (Beta) Ejemplo 4: Si desea exportar mediante programación los vínculos a las transcripciones de la reunión de Teams para un organizador de reunión determinado y, a continuación, descargar las transcripciones reales.

¿Qué es compatible con las API de exportación de Teams?

  • Mensaje de exportación masiva de Teams: Las API de exportación de Teams admiten hasta 200 RPS por aplicación por inquilino y 600 RPS para una aplicación, con estos límites debería poder exportar en masa mensajes de Teams.

  • Contexto de la aplicación: para llamar a Microsoft Graph, la aplicación debe adquirir un token de acceso de la Plataforma de identidad de Microsoft. El token de acceso contiene información sobre la aplicación y los permisos que tiene para los recursos y API disponibles a través de Microsoft Graph. Para obtener un token de acceso, la aplicación debe estar registrada con el Plataforma de identidad de Microsoft y estar autorizada por un usuario o un administrador para obtener acceso a los recursos de Microsoft Graph que necesita.

    Si ya está familiarizado con la integración de una aplicación con la Plataforma de identidad de Microsoft para obtener tokens, consulte la sección Pasos siguientes para obtener información y muestras específicas de Microsoft Graph.

  • Entorno híbrido: Las API de exportación admiten los mensajes enviados por usuarios aprovisionados en un entorno híbrido (exchange local y teams). Los mensajes enviados por los usuarios configurados para un entorno híbrido serán accesibles mediante exportar API.

  • Mensajes eliminados por el usuario: Se puede acceder a los mensajes eliminados por los usuarios del cliente de Teams mediante las API de exportación hasta 21 días a partir del momento de la eliminación.

  • Datos adjuntos de mensajes: Las API de exportación incluyen los vínculos a los datos adjuntos que se envían como parte de los mensajes. Con Exportar API puede recuperar los archivos adjuntos en los mensajes.

  • Reacciones: Las API de exportación admiten reacciones iniciadas por un usuario en un mensaje de Teams. Las reacciones admitidas actualmente son de corazón, enojado, como, triste, sorprendido y risas. Además de Reacciones, Export API también admite el Historial de edición de reacciones, que incluye cambios y actualizaciones realizadas a una reacción en un mensaje.

  • Mensajes de canal compartido: Las API de exportación permiten capturar mensajes de un canal compartido.

  • Equipos eliminados: La API de exportación permite capturar mensajes de equipos eliminados y canales estándar, privados y compartidos eliminados.

  • Propiedades del mensaje de chat: Consulte la lista completa de propiedades que admiten las API de exportación de Teams.

  • Mensajes de control: La API de exportación permite capturar mensajes de control, además de los mensajes generados por el usuario. Los mensajes de control son mensajes generados por el sistema que aparecen en el cliente de Teams y contienen información importante, como "El usuario A agregó el usuario B al chat y compartió todo el historial de chats" junto con la marca de tiempo. Los mensajes del sistema permiten que el autor de la llamada tenga información sobre los eventos que ocurrieron en un equipo, un canal o un chat. Actualmente, la API de exportación es compatible con el evento Agregar miembro y Quitar miembro para chats, equipos y canales estándar.

¿Qué no se admite en las API de exportación de Teams?

  • Interacciones de Copilot de Teams & Microsoft 365 Chat: La API de exportación no admite los mensajes de interacción de los usuarios de Copilot y los mensajes de chat de Microsoft 365 enviados por el bot.

Cómo acceder a las API de exportación de Teams

  • El ejemplo 1 es una consulta sencilla para recuperar todos los mensajes de un usuario o equipo sin filtros:

    GET https://graph.microsoft.com/v1.0/users/{id}/chats/getAllMessages
    
    GET https://graph.microsoft.com/v1.0/teams/{id}/channels/getAllMessages
    
  • El ejemplo 2 es una consulta de ejemplo para recuperar todos los mensajes de un usuario o equipo especificando filtros de fecha y hora y los 50 mensajes principales:

    GET https://graph.microsoft.com/v1.0/users/{id}/chats/getAllMessages?$top=50&$filter=lastModifiedDateTime gt 2020-06-04T18:03:11.591Z and lastModifiedDateTime lt 2020-06-05T21:00:09.413Z
    
    GET https://graph.microsoft.com/v1.0/teams/{id}/channels/getAllMessages?$top=50&$filter=lastModifiedDateTime gt 2020-06-04T18:03:11.591Z and lastModifiedDateTime lt 2020-06-05T21:00:09.413Z
    
  • (Beta) Ejemplo 3 es una consulta de ejemplo para recuperar los vínculos a todas las grabaciones de reuniones de Teams disponibles de un usuario. Top n filter es compatible de forma similar a los mensajes de chat:

    GET https://graph.microsoft.com/beta/users/{id}/onlineMeetings/getAllRecordings?$filter=MeetingOrganizerId eq ‘{id}’
    
  • (Beta) Ejemplo 4 es una consulta de ejemplo para recuperar los vínculos a todas las transcripciones de reuniones de Teams disponibles de un usuario. Top n filter es compatible de forma similar a los mensajes de chat:

    GET https://graph.microsoft.com/beta/users/{id}/onlineMeetings/getAllTranscripts?$filter=MeetingOrganizerId eq ‘{id}’
    

Nota

La API devuelve la respuesta con el vínculo de página siguiente en caso de varios resultados. Para obtener el siguiente conjunto de resultados, simplemente llame a GET en la dirección URL desde @odata.nextlink. Si @odata.nextlink no está presente o es nulo, se recuperan todos los mensajes.

Requisitos previos para acceder a las API de exportación de Teams

  • Las API de Microsoft Teams en Microsoft Graph que acceden a datos confidenciales se consideran API protegidas. Puede llamar a estas API siempre que se cumplan los requisitos para acceder sin un usuario .

  • Los permisos de aplicación los usan las aplicaciones que se ejecutan sin un usuario con sesión iniciada presente; permisos de aplicación solo puede ser aprobado por un administrador. Son necesarios los siguientes permisos:

    • Chat.Read.All: permite el acceso a todos los mensajes de chat individuales, grupales y de reunión

    • ChannelMessage.Read.All: permite el acceso a todos los mensajes del canal

    • User.Read.All: permite el acceso a la lista de usuarios de un inquilino.

    • OnlineMeetingTranscript.Read.All: permite el acceso a las transcripciones de todas las reuniones de Teams programadas por 1:n

    • OnlineMeetingRecording.Read.All: permite el acceso a grabaciones para todas las reuniones de Teams programadas por 1:n

Requisitos de licencia para las API de exportación de Teams

La API de exportación admite seguridad y cumplimiento (S+C) y escenarios de uso general a través de un parámetro de consulta de modelo. Los escenarios de S+C (modelo A) incluyen capacidad de semillas y requieren una suscripción al plan E5 y los escenarios de uso general (modelo B) están disponibles para todas las suscripciones y solo son de consumo. Para obtener más información sobre la capacidad de semillas y las tarifas de consumo, consulte Requisitos de licencias y pago para las API de Microsoft Graph Teams.

En el caso de las API beta, actualmente no hay ninguna licencia ni obligatoriedad de uso del modelo A ni del modelo B. Sin embargo, esto está sujeto a cambios en el futuro.

Escenarios de S+C/Modelo A

Restringido a las aplicaciones que realizan funciones de seguridad o cumplimiento, los usuarios deben tener licencias E5 específicas para usar esta funcionalidad y recibir capacidad de semillas. La capacidad de semillas es por usuario y se calcula por mes y se agrega en el nivel de inquilino. Para el uso que supere la capacidad de semillas, se factura a los propietarios de aplicaciones el consumo de API. El modelo A solo puede tener acceso a los mensajes de los usuarios con una licencia E5 asignada.

Nombre del partner Solución de partner
logotipo de casarse Archivado y cumplimiento de Microsoft Teams
Captura de pantalla del logotipo de Proofpoint. Captura de contenido de Proofpoint para Microsoft Teams

Escenarios generales de uso/modelo B

Disponible para todos los escenarios relacionados que no sean S+C, no hay requisitos de licencia ni capacidad de semillas. Cuando los contadores de consumo estén disponibles, se cobrará a los propietarios de las aplicaciones todas las llamadas mensuales a la API.

Los siguientes partners están certificados. Su empresa puede elegir trabajar con cualquier combinación de estos partners dentro de su empresa.

Nombre del partner Solución de partner
logotipo de rubrik Copia de seguridad y recuperación de Microsoft Teams
logotipo de veeam Copia de seguridad y recuperación de Microsoft Teams

Pasos siguientes

Si es un proveedor que busca unirse al programa de certificación, rellene este formulario como el siguiente paso. Si necesita proporcionar contexto y detalles adicionales, envíe un correo electrónico al equipo del ecosistema de MS Teams (TeamsCategoryPartner@microsoft.com).

Modo de evaluación (predeterminado)

Ninguna declaración de modelo permite el acceso a las API con uso limitado por cada aplicación solicitante con fines de evaluación.

Representación JSON

  1. El ejemplo siguiente es una representación JSON del recurso de chat:

    Espacio de nombres: microsoft.graph

    {
     "id": "string (identifier)",
     "replyToId": "string (identifier)",
     "from": {"@odata.type": "microsoft.graph.identitySet"},
     "etag": "string",
     "messageType": "string",
     "createdDateTime": "string (timestamp)",
     "lastModifiedDateTime": "string (timestamp)",
     "deletedDateTime": "string (timestamp)",
     "subject": "string",
     "from": {
                 "application": null,
                 "device": null,
                 "conversation": null,
                 "user": {
    
                     "id": \[{"@odata.type": "microsoft.graph.user"}\],
                     "displayName": "User Name",
    
                     "userIdentityType": "aadUser"                }
             },
     "body": {"@odata.type": "microsoft.graph.itemBody"},
     "summary": "string",
    
     "chatId": \[{"@odata.type": "microsoft.graph.chat"}\]
    
     "attachments": \[{"@odata.type": "microsoft.graph.chatMessageAttachment"}\],
     "mentions": \[{"@odata.type": "microsoft.graph.chatMessageMention"}\],
     "importance": "string",
     "locale": "string",
     }
    

    Nota

    Para obtener más información sobre el recurso chatMessage, vea el artículo tipo de recurso chatMessage .

  2. El ejemplo siguiente es una representación JSON del recurso de grabación:

    Espacio de nombres: microsoft.graph

    {
     "@odata.context": "https://graph.microsoft.com/beta/$metadata#Collection(meetingRecording)", 
     "@odata.count": 2, 
     "@odata.nextLink": "https://graph.microsoft.com/beta/users('{userId}')/onlineMeetings/getAllRecordings?$filter=MeetingOrganizerId+eq+%27{userId}%27&$skiptoken=MSMjMCMjTkNaYVNIQjVVbXRPYWxaV1dscGFWVGg1V2pOb1IxUXpRWGxrUm1oTFVrWmtTV1ZyYkhwUlZVWm9UMWR3VEdWWGRFTlJWVVpDVVZFOVBRPT0%3d", 
     "value":
       [ 
         { 
          "@odata.type": "#microsoft.graph.meetingRecording", 
          "id": "6263af16-b660-41d0-a17b-83fbd15a39c7", 
          "meetingId": "MSoxMjczYTAxNi0yMDFkRLTmOTUtODA5My0xYjdmOTliM2VkZWIqMCoqMTk6bWVldGluZ19aR1F3WTJZNE9XTXROekppWlMwME1XWTRMVGc0TWpBdE1BBXdOV1kzWlRsak9UTXlAdGhyZWFkLnYy", 
          "meetingOrganizerId": "{userId}", 
          "createdDateTime": "2022-08-03T20:43:36.2573447Z", 
          "recordingContentUrl":    "https://graph.microsoft.com/beta/users/{userId}/onlineMeetings/MSoxMjczYTAxNi0yMDFkLTRmOTUtODA4My0xYjdmOTliM2VkZWIqMCoqMTk6bWVldGluZ19aR1F3WTJZNE9XTXROekppWlMwME1XWTRMVGc0TWpBdE1ERXdOV1kzWlRsak9UTXlAdGhyZWFkLnYy/recordings/MSMjMCMjMGFjNmUwZTgtYmZjYy00NDQxLTk2MGYtZjllNjVhNjI0NzBh/content" 
         }, 
         { 
          "@odata.type": "#microsoft.graph.meetingRecording", 
          "id": "{recordingId}", 
          "meetingId": "{meetingId}", 
          "meetingOrganizerId": "{userId}", 
          "createdDateTime": "2022-08-03T20:44:11.2635254Z", 
          "recordingContentUrl": " https://graph.microsoft.com/beta/users/{userId}/onlineMeetings/{meetingId}/recordings/{recordingId}/content" 
          },
        ] 
       }
    

    Donde:

    • <id> representa una sola grabación.

    • <meetingId> representa un identificador de llamada o reunión.

    • <meetingOrganizerId> representa al organizador de la reunión.

    • <createdDateTime> indica la hora de inicio de la reunión.

    • <recordingContentUrl> indica la dirección URL del contenido de la grabación.

    • Las grabaciones están en formato MP4.

    • El tamaño medio del contenido de grabación en sí es de aproximadamente 350 MB en disco, en función de los promedios que vemos para las reuniones que están en un intervalo de 30 minutos – 60 minutos.

    • No se garantiza que los resultados se ordene por createdDateTime. Sin embargo, en el caso de que haya varias grabaciones para una sola reunión, compartirán el mismo meetingId valor. Además, las entradas de las varias grabaciones se secuencian correctamente para la reunión en cuestión.

    • Se garantiza que los resultados solo estén presentes después de que las grabaciones de la reunión asociadas estén disponibles. En otras palabras, el autor de la llamada no necesita ningún sondeo adicional para disponibilidad.

    • Paginar a través de los resultados será compatible según los patrones actuales en la API de exportación de Teams. La paginación se admitirá mediante la presencia de @oData.nextLink propiedad en la respuesta. La propiedad nextLink contiene un skipToken valor, como se indica a continuación. Si no skipToken está presente, significa que no hay ningún resultado más que recuperar en el lote actual:

      Solicitud Respuesta @nextLink Comentarios
      /getAllRecordings Recuento: 10 ?skipToken=ABC Solicitud inicial sin skipToken
      /getAllRecordings?skipToken=ABC Recuento: 10 ?skipToken=DEF SkipToken devuelto, solicitud para obtener la siguiente página
      /getAllRecordings?skipToken=DEF Recuento: 7 No skipToken, no hay más datos disponibles
    • $top también se admitirá según los patrones actuales en la API de exportación de Teams.

    • DeltaToken para habilitar escenarios de seguimiento y sincronización de cambios es compatible. Para obtener información general y ejemplos de consultas diferenciales existentes, vea Usar una consulta diferencial para realizar un seguimiento de los cambios en los datos de Microsoft Graph.

    • La siguiente API se puede utilizar para obtener el contenido de grabación real de la seleccionada userIdy recordingIdmeetingId que se obtuvo en la respuesta de la API GETgetAllRecordings. Devuelve el contenido de la grabación:

    GET users('{userId}')/onlineMeetings('{meetingId}')/recordings('{recordingId}')/content 
    
  3. El ejemplo siguiente es una representación JSON del recurso de transcripción:

    Espacio de nombres: microsoft.graph

    {
      "@odata.context": "https://graph.microsoft.com/beta/$metadata#Collection(callTranscript)",  
      "@odata.count": 2, 
      "@odata.nextLink": "https://graph.microsoft.com/beta/users('{userId}')/onlineMeetings/getAllTranscripts?$filter=MeetingOrganizerId+eq+%27{userId}%27&$skiptoken=MSMjMCMjTkNaYVNIQjVVbXRPYWxaV1dscGFWVGg1V2pOb1IxUXpRWGxrUm1oTFVrWmtTV1ZyYkhwUlZVWm9UMWR3VEdWWGRFTlJWVVpDVVZFOVBRPT0%3d",  
      "value":
        [ 
          { 
           "@odata.type": "#microsoft.graph.callTranscript", 
           "id": "MSMjMCMjMGFjNmUwZTgtYmZjYy00NDQxLTk2MGYtZjllNjVhNjI0NzBh", 
           "meetingId": "MSoxMjczYTAxNi0yMDFkLTRmOTUtODA4My0xYjdmOTliM2VkZWIqMCoqMTk6bWVldGluZ19aR1F3WTJZNE9XTXROekppWlMwME1XWTRMVGc0TWpBdE1ERXdOV1kzWlRsak9UTXlAdGhyZWFkLnYy", 
           "meetingOrganizerId": "{userId}", 
           "transcriptContentUrl": "https://graph.microsoft.com/beta/users/{userId}/onlineMeetings/MSoxMjczYTAxNi0yMDFkLTRmOTUtODA4My0xYjdmOTliM2VkZWIqMCoqMTk6bWVldGluZ19aR1F3WTJZNE9XTXROekppWlMwME1XWTRMVGc0TWpBdE1ERXdOV1kzWlRsak9UTXlAdGhyZWFkLnYy/transcripts/MSMjMCMjMGFjNmUwZTgtYmZjYy00NDQxLTk2MGYtZjllNjVhNjI0NzBh/content", 
          "createdDateTime": "2022-08-03T20:43:36.6248355Z" 
          }, 
          { 
           "@odata.type": "#microsoft.graph.callTranscript", 
           "id": "{transcriptId}", 
           "meetingId": "{meetingId}", 
           "meetingOrganizerId": "{userId}", 
           "transcriptContentUrl": "https://graph.microsoft.com/beta/users/{userId}/onlineMeetings/{meetingId}/transcripts/{transcriptId}/content",   
           },
         ] 
        }
    

    Donde:

    • <id> representa una sola grabación.

    • <meetingId> representa un identificador de llamada o reunión.

    • <meetingOrganizerId> representa al organizador de la reunión.

    • <createdDateTime> indica la hora de inicio de la reunión.

    • <transcriptContentUrl> indica la dirección URL del contenido de la transcripción.

    • El contenido de la transcripción, de forma predeterminada, estará en formato VTT. Sin embargo, también se puede obtener un valor de encabezado Accept de application/vnd.openxmlformats-officedocument.wordprocessingml.document, formato DOCX.

    • El tamaño medio del contenido de la transcripción en formato JSON/VTT es de aproximadamente 300 KB, según los promedios que vemos para las reuniones que están en un intervalo de 30 minutos a 60 minutos.

    • No se garantiza que los resultados se ordene por createdDateTime. Sin embargo, en el caso de que haya varias grabaciones para una sola reunión, compartirán el mismo meetingId valor. Además, las entradas de las varias grabaciones se secuenciarán correctamente para la reunión en cuestión.

    • Se garantiza que los resultados solo estén presentes después de que las grabaciones de la reunión asociadas estén disponibles. En otras palabras, el autor de la llamada no necesita ningún sondeo adicional para disponibilidad.

    • Paginar a través de los resultados será compatible según los patrones actuales en la API de exportación de Teams. La paginación se admitirá mediante la presencia de @oData.nextLink propiedad en la respuesta. La nextLink propiedad contendrá un skipToken valor, como se indica a continuación. Si no skipToken está presente, significa que no hay ningún resultado más que recuperar en el lote actual:

      Solicitud Respuesta @nextLink Comentarios
      /getAllTranscripts Recuento: 10 ?skipToken=ABC Solicitud inicial sin skipToken
      /getAllTranscripts?skipToken=ABC Recuento: 10 ?skipToken=DEF SkipToken devuelto, solicitud para obtener la siguiente página
      /getAllTranscripts?skipToken=DEF Recuento: 7 No skipToken, no hay más datos disponibles
    • $top también se admitirá según los patrones actuales en la API de exportación de Teams.

    • DeltaToken para habilitar escenarios de seguimiento y sincronización de cambios es compatible. Para obtener información general y ejemplos de consultas diferenciales existentes, vea Usar una consulta diferencial para realizar un seguimiento de los cambios en los datos de Microsoft Graph

    • La API siguiente se puede usar para obtener el contenido de la transcripción real del userId, meetingId y transcriptId seleccionados que se obtuvo en la respuesta de la API getAllTranscripts. Devuelve el contenido de la grabación.

    GET users('{userId}')/onlineMeetings('{meetingId}')/transcripts('{transcriptId}')/content
    

Para obtener más información, vea Usar las API de Graph para capturar transcripción.

Exportar filtros de API

Export API hosted on the Teams Graph Service gets all user messages from the Substrate user mailbox using users/{userId}/chats/getAllMessages. Export API retrieves both sent and received messages for a user which leads to export of duplicate messages when calling the API for all users in the chat thread.

La API de exportación tiene parámetros de filtro que ayudan a optimizar los mensajes devueltos para una conversación de chat. La API GET admite nuevos parámetros de filtro que permiten extraer mensajes basados en los mensajes de eventos de usuario, bot, aplicación y sistema enviados. El parámetro filter admite los mensajes enviados mediante los siguientes elementos:

  • usuarios (varios id. de usuario admitidos en la misma solicitud)

  • aplicaciones (bots, conectores, etc.)

  • usuarios anónimos

  • usuarios federados (usuarios de acceso externo)

  • mensajes de eventos del sistema (mensajes de control)

Estos parámetros forman parte de la solicitud $filter. Si ninguno de estos parámetros está presente en la solicitud, se devolverán los mensajes de todos los usuarios presentes en los chats de usuario especificados.

Los escenarios de filtrado que son compatibles son los siguientes:

$filter=from/application/applicationIdentityType eq '<appType>' (bots/tenantBots/connectors, etc.)  
  
$filter=from/user/id eq '<oid>' (any number of id filters)  
  
$filter=from/user/userIdentityType eq 'anonymousGuest'  
  
$filter=from/user/userIdentityType eq 'federatedUser' (guest/external)  
  
$filter=from/application/applicationIdentityType eq '<appType>' or from/user/id eq '<oid>' (sent by app or userid)  
  
$filter=from/application/applicationIdentityType eq '<appType>' or from/user/userIdentityType eq 'anonymousGuest' (sent by app or anonymous)  

$filter=from/application/applicationIdentityType eq '<appType>' or from/user/userIdentityType eq 'federatedUser' (sent by app or federated)  
  
$filter=from/application/applicationIdentityType eq '<appType>' or from/user/userIdentityType eq 'anonymousGuest' or from/user/userIdentityType eq 'federatedUser' (sent by app, anonymous or federated)  
  
$filter=from/user/id eq '<oid>' or from/user/userIdentityType eq 'anonymousGuest' (sent by any number of userid or anonymous)  
  
$filter=from/user/id eq '<oid>' or from/user/userIdentityType eq 'federatedUser' (sent by any number of userid or federated)  

$filter=from/application/applicationIdentityType eq '<appType>' or from/user/id eq '<oid>' or from/user/userIdentityType eq 'anonymousGuest' or from/user/userIdentityType eq 'federatedUser' (sent by any number of userid or federated or anonymous)
 
$filter=from/application/applicationIdentityType eq '<appType>' or from/user/id eq '<oid>' or from/user/userIdentityType eq 'anonymousGuest' or from/user/userIdentityType eq 'federatedUser' (sent by any number of userid or federated or anonymous) or messsageType eq 'systemEventMessage'

(<any of the previous filters>) and (lastModifiedDateTime+gt+<date>+and+lastModifiedDateTime+lt+<date>)  
  • La consulta devuelve los mensajes enviados por el usuario especificado si from/user/id eq ‘{oid}’ está presente.

  • La consulta devuelve los mensajes enviados por los usuarios federados que forman parte de los chats de usuario, si from/user/userIdentityType eq ‘federatedUser’ están presentes.

  • la consulta devuelve los mensajes enviados por el tipo de aplicación especificado si from/application/applicationIdenitytyType eq '{appType}' está presente.

  • la consulta devuelve los mensajes enviados por el sistema si messageType eq 'systemEventMessage' está presente

Estos parámetros se pueden combinar entre ellos mediante los operadores OR, así como combinando con el lastModifiedDateTime$filter parámetro.