Compartir a través de


Trabajar con las API de mensajería de Microsoft Teams en Microsoft Graph

Microsoft Graph proporciona un conjunto completo de API de Microsoft Teams que le permiten realizar operaciones en mensajes de Teams. En este artículo se describen los elementos de esquema de api de Teams principales y se proporciona información general sobre las API que se van a usar en función de escenarios de alto nivel. Para obtener más información sobre las API de Teams en Microsoft Graph, consulte Uso de microsoft Graph API para trabajar con Teams.

esquema chatMessage

El tipo de recurso chatMessage representa mensajes en chats y canales de Teams. En esta sección se describen los elementos del esquema chatMessage .

Nota: Los ejemplos de esta sección muestran solo los elementos de esquema pertinentes y no toda la carga del mensaje.

datos adjuntos

El tipo de recurso chatMessageAttachment representa entidades a las que se puede hacer referencia desde un chatMessage. Estas entidades incluyen archivos, pestañas, tarjetas, reuniones u otros mensajes. Los propios elementos pueden encontrarse en otro lugar. Por ejemplo, los archivos pueden almacenarse en SharePoint. En las secciones siguientes se describen los posibles tipos de datos adjuntos en un objeto chatMessage .

datos adjuntos de tarjeta

Las tarjetas representan elementos visuales respaldados por un esquema predefinido. Teams admite las tarjetas definidas por Bot Framework además de los siguientes tipos de tarjetas:

  • Fragmento de código o soporte de posición: establezca contentType en application/vnd.microsoft.card.codesnippet
  • Tarjeta de anuncio: establezca contentType en application/vnd.microsoft.card.announcement
  • Microsoft Loop tarjeta de componente: establezca contentType enapplication/vnd.microsoft.card.fluidEmbedCard

En el caso de las tarjetas, la propiedad contentType se establece en el tipo de tarjeta y la propiedad content contiene el json serializado para la tarjeta.

Nota: Los aspectos de las tarjetas, como las imágenes, pueden hacer referencia a recursos externos o recursos hospedados por Teams como chatMessageHostedContent.

En el ejemplo siguiente se muestra el esquema de los datos adjuntos de una tarjeta adaptable. Esta tarjeta tiene imágenes hospedadas por Teams.

    "attachments": [
        {
            "id": "74d20c7f34aa4a7fb74e2b30004247c5",
            "contentType": "application/vnd.microsoft.card.adaptive",
            "contentUrl": null,
            "content": "{  \"type\": \"AdaptiveCard\",  \"body\": [    {      \"items\": [        {          \"columns\": [            {              \"width\": \"auto\",              \"items\": [                {                  \"size\": \"medium\",                  \"url\": \"https://graph.microsoft.com/beta/teams/68a3e365-f7d9-4a56-b499-24332a9cc572/channels/19:0b50940236084d258c97b21bd01917b0@thread.skype/messages/1596694346004/hostedContents/aWQ9LHR5cGU9MSx1cmw9aHR0cHM6Ly91cy1hcGkuYXNtLnNreXBlLmNvbS92MS9vYmplY3RzLzAtd3VzLWQyLTUxZDYxNGE5MDQ5ZTU4MjFlMTRmMGI2NmExNmVlNzhlL3ZpZXdzL2ltZ28=/$value\",                  \"height\": \"auto\",                  \"type\": \"Image\"                },                {                  \"horizontalAlignment\": \"center\",                  \"text\": \"SHADES\",                  \"weight\": \"bolder\",                  \"type\": \"TextBlock\"                }              ],              \"type\": \"Column\"            },            {              \"width\": \"stretch\",              \"items\": [                {                  \"horizontalAlignment\": \"center\",                  \"text\": \"08/31/2019 19:30:00\",                  \"type\": \"TextBlock\"                },                {                  \"horizontalAlignment\": \"center\",                  \"text\": \"Final\",                  \"spacing\": \"None\",                  \"type\": \"TextBlock\"                },                {                  \"horizontalAlignment\": \"center\",                  \"size\": \"extraLarge\",                  \"text\": \"40 - 7\",                  \"type\": \"TextBlock\"                }              ],              \"spacing\": \"Medium\",              \"separator\": true,              \"type\": \"Column\"            },            {              \"width\": \"auto\",              \"items\": [                {                  \"horizontalAlignment\": \"center\",                  \"size\": \"medium\",                  \"url\": \"https://graph.microsoft.com/beta/teams/68a3e365-f7d9-4a56-b499-24332a9cc572/channels/19:0b50940236084d258c97b21bd01917b0@thread.skype/messages/1596694346004/hostedContents/aWQ9LHR5cGU9MSx1cmw9aHR0cHM6Ly91cy1hcGkuYXNtLnNreXBlLmNvbS92MS9vYmplY3RzLzAtd3VzLWQyLWM4NjgwMjMzMzcyMzc2MmQ0MWEyY2QxMGVhMWI4ZGRhL3ZpZXdzL2ltZ28=/$value\",                  \"height\": \"auto\",                  \"type\": \"Image\"                },                {                  \"horizontalAlignment\": \"center\",                  \"text\": \"SKINS\",                  \"weight\": \"bolder\",                  \"type\": \"TextBlock\"                }              ],              \"spacing\": \"Medium\",              \"separator\": true,              \"type\": \"Column\"            }          ],          \"type\": \"ColumnSet\"        }      ],      \"type\": \"Container\"    }  ],  \"speak\": \"The Seattle Seahawks beat the Carolina Panthers 40-7\",  \"$schema\": \"http://adaptivecards.io/schemas/adaptive-card.json\",  \"version\": \"1.2\"}",
            "name": null,
            "thumbnailUrl": null,
            "teamsAppId": null
        }
    ]

Para los mensajes creados por una aplicación de Teams, por ejemplo, a través de extensiones de mensajería, la propiedad teamsAppId contiene el identificador de la aplicación que envió el mensaje.

En el ejemplo siguiente se muestra el esquema de los datos adjuntos de una tarjeta adaptable cuando una aplicación de Teams envió el mensaje.

    "attachments": [
        {
            "id": "f60e7358497741f5bdb5fa7f101fe425",
            "contentType": "application/vnd.microsoft.card.adaptive",
            "contentUrl": null,
            "content": "{  \"type\": \"AdaptiveCard\",  \"body\": [    {      \"items\": [        {          \"items\": [],          \"type\": \"Container\"        },        {          \"altText\": \"Awesome\",          \"horizontalAlignment\": \"center\",          \"url\": \"https://dev.praise.myanalytics.cdn.office.net/2024.1.31.2/assets/emojis/Trophy_Icon.png\",          \"width\": \"82px\",          \"height\": \"auto\",          \"spacing\": \"small\",          \"type\": \"Image\"        },        {          \"size\": \"large\",          \"text\": \"Awesome\",          \"weight\": \"lighter\",          \"wrap\": true,          \"spacing\": \"large\",          \"type\": \"TextBlock\"        },        {          \"size\": \"large\",          \"text\": \"Test User 1\",          \"weight\": \"bolder\",          \"wrap\": true,          \"spacing\": \"none\",          \"type\": \"TextBlock\"        },        {          \"size\": \"small\",          \"text\": \"From Test User 2\",          \"wrap\": true,          \"spacing\": \"extraLarge\",          \"type\": \"TextBlock\"        },        {          \"items\": [],          \"spacing\": \"small\",          \"type\": \"Container\"        }      ],      \"backgroundImage\": {        \"url\": \"https://dev.praise.myanalytics.cdn.office.net/2024.1.31.2/assets/themes/CornflowerGradient.png\"      },      \"type\": \"Container\"    },    {      \"columns\": [        {          \"width\": \"stretch\",          \"items\": [            {              \"text\": \"**[Review your praise history](https://teams.microsoft.com/l/entity/57e078b5-6c0e-44a1-a83f-45f75b030d4a)**\",              \"wrap\": true,              \"spacing\": \"small\",              \"type\": \"TextBlock\"            }          ],          \"type\": \"Column\"        },        {          \"width\": \"auto\",          \"items\": [            {              \"horizontalAlignment\": \"right\",              \"text\": \"**[Send praise](https://teams.microsoft.com/l/task/d832a33f-28c2-4969-8ad0-4fee681dc5b4)**\",              \"spacing\": \"small\",              \"type\": \"TextBlock\"            }          ],          \"type\": \"Column\"        }      ],      \"spacing\": \"small\",      \"type\": \"ColumnSet\"    }  ],  \"speak\": \"Praise card sent from Test User 2 to Test User 1. Awesome, with message \",  \"version\": \"1.2\"}",
            "name": null,
            "thumbnailUrl": null,
            "teamsAppId": "d832a33f-28c2-4969-8ad0-4fee681dc5b4"
        }
    ]

Nota: Microsoft Graph solo admite tarjetas que tengan establecida la acción OpenUrl . No se admiten otras acciones como ShowCard . Microsoft Graph permite leer los mensajes publicados por los bots que tienen otras acciones en ellos.

En el ejemplo siguiente se muestra el esquema de un componente de Loop como dos datos adjuntos.

    "attachments": [
        {
            "id": "b21e256a-8581-45cf-ae05-8bb998360bcc",
            "contentType": "application/vnd.microsoft.card.fluidEmbedCard",
            "contentUrl": null,
            "content": "{\r\n  \"componentUrl\": \"https://teamsgraph-my.sharepoint.com/:fl:/g/personal/sumanac_teamsgraph_onmicrosoft_com/EQnofOQM0MpOoDaRIvw-pS8Bfsj_WDFuanBBXnjDAD-w3g?nav=cz0lMkZwZXJzb25hbCUyRnN1bWFuYWNfdGVhbXNncmFwaF9vbm1pY3Jvc29mdF9jb20mZD1iIWVUcmxYX19jN2t5eW9GSFhJdG8yTDI4bmtnV2EtOXhEa244SVBOdGZFYnlxandPblkwdE9TcFVldkh6dWtBV1ImZj0wMUU2TzQ0WFlKNUI2T0lER1FaSkhLQU5VUkVMNkQ1SkpQJmM9JTJGJmZsdWlkPTEmYT1UZWFtcyZwPSU0MGZsdWlkeCUyRmxvb3AtcGFnZS1jb250YWluZXI%3D\",\r\n  \"sourceType\": \"Compose\"\r\n}",
            "name": null,
            "thumbnailUrl": null,
            "teamsAppId": "FluidEmbedCard"
        },
        {
            "id": "placeholderCard",
            "contentType": "application/vnd.microsoft.card.codesnippet",
            "contentUrl": null,
            "content": "{}",
            "name": null,
            "thumbnailUrl": null,
            "teamsAppId": "FLUID_PLACEHOLDER_CARD"
        }
    ],

datos adjuntos de archivo

Cuando un objeto de datos adjuntos hace referencia a un archivo, contiene información sobre el archivo, incluido el vínculo para abrir el archivo. El propio archivo se encuentra en un almacén accesible como SharePoint. Cuando un chatMessage tiene datos adjuntos de archivo de tipo, el valor de la propiedad contentType en el recurso de datos adjuntos se establece referenceen y la propiedad contentUrl contiene la dirección URL del archivo.

Nota: La dirección URL de SharePoint es el vínculo que abre el archivo; no es la dirección URL de Microsoft Graph. Sin embargo, los autores de llamadas pueden usar la API de elementos compartidos de acceso para obtener información sobre el contenido del archivo.

En el ejemplo siguiente se muestra el esquema de los datos adjuntos de un archivo.

    "attachments": [
        {
            "id": "924D1F74-E0D2-4927-8A67-15ECEF455527",
            "contentType": "reference",
            "contentUrl": "https://testing.sharepoint.com/sites/Samples/Shared Documents/General/color.png",
            "content": null,
            "name": "color.png",
            "thumbnailUrl": null,
            "teamsAppId": null
        }
    ],

datos adjuntos del mensaje reenviado

Un objeto de datos adjuntos contiene un mensaje reenviado que se reenvía a un chat. Para los datos adjuntos del mensaje, la propiedad id contiene el identificador del mensaje reenviado. La propiedad content contiene más detalles sobre el mensaje; por ejemplo, el contexto del mensaje original y los detalles originales del remitente. Para los datos adjuntos de mensajes, la propiedad contentType se establece en forwardedMessageReference.

En el ejemplo siguiente se muestra el esquema de los datos adjuntos de un mensaje reenviado.

    "attachments": [
        {
            "id": "1727881360458",
            "contentType": "forwardedMessageReference",
            "contentUrl": null,
            "content": "{\"originalMessageId\":\"1727881360458\",\"originalMessageContent\":\"\\n<p>hello</p>\\n\",\"originalConversationId\":\"19:97641583cf154265a237da28ebbde27a@thread.v2\",\"originalSentDateTime\":\"2024-10-02T15:02:40.458+00:00\",\"originalMessageSender\":{\"application\":null,\"device\":null,\"user\":{\"userIdentityType\":\"aadUser\",\"tenantId\":\"2432b57b-0abd-43db-aa7b-16eadd115d34\",\"id\":\"28c10244-4bad-4fda-993c-f332faef94f0\",\"displayName\":null}}}",
            "name": null,
            "thumbnailUrl": null,
            "teamsAppId": null
        }
    ],

datos adjuntos de reunión

Cuando se programa una reunión en un canal, se publica un mensaje con detalles de reunión en el canal. Los datos adjuntos de una reunión representan este objeto e incluyen los detalles de la reunión. La propiedad id contiene el identificador de la reunión y la propiedad content incluye detalles sobre el organizador de la reunión y el identificador de Exchange de la reunión. Puede usar el identificador de Exchange para buscar la reunión mediante las API de calendario. La propiedad contentType se establece en meetingReference para los datos adjuntos de la reunión.

En el ejemplo siguiente se muestra el esquema de los datos adjuntos de una tarjeta adaptable.

    "attachments": [
        {
            "id": "1628156567881",
            "contentType": "meetingReference",
            "contentUrl": null,
            "content": "{\"exchangeId\":\"AAMkAGU2NzgzNDQ3LWFkMTctNGY2MC05ZjM1LWFkOTYxZWZhYTY2MgBGAAAAAADFwPNVvpzXRqmCO5F6qAKtBwB89fWKTP8MSaPLNsJWtozvAAAAAAENAAB89fWKTP8MSaPLNsJWtozvAAFg-8IoAAA=\",\"organizerId\":\"8ea0e38b-efb3-4757-924a-5f94061cf8c2\"}",
            "name": "Testing channel meeting",
            "thumbnailUrl": null
        }
    ],

datos adjuntos del mensaje

Un objeto de datos adjuntos contiene un mensaje cuando un chat incluye una respuesta a un mensaje específico. Para los datos adjuntos del mensaje, la propiedad id contiene el identificador del mensaje. La propiedad content contiene más detalles sobre el mensaje; por ejemplo, el texto de vista previa del mensaje y el remitente. Para los datos adjuntos de mensajes, la propiedad contentType se establece en messageReference.

En el ejemplo siguiente se muestra el esquema de los datos adjuntos de un mensaje.

    "attachments": [
        {
            "id": "1622853091207",
            "contentType": "messageReference",
            "contentUrl": null,
            "content": "{\"messageId\":\"1622853091207\",\"messagePreview\":\"Testing unread read status\",\"messageSender\":{\"application\":null,\"device\":null,\"user\":{\"userIdentityType\":\"aadUser\",\"id\":\"8ea0e38b-efb3-4757-924a-5f94061cf8c2\",\"displayName\":\"Alex\"}}}",
            "name": null,
            "thumbnailUrl": null
        }
    ],

tabulación de datos adjuntos

Cuando un objeto de datos adjuntos hace referencia a una pestaña hospedada en el contexto actual, la propiedad contentType se establece tabReferenceen , la propiedad id se establece en el identificador de la pestaña y la propiedad name se establece en el nombre de la pestaña. Este escenario a menudo se aplica cuando se agregan pestañas recientemente.

En el ejemplo siguiente se muestra el esquema de los datos adjuntos de una pestaña.

"attachments": [
        {
            "id": "tab::d64ea8d0-8b63-4f53-9bf6-806648176968",
            "contentType": "tabReference",
            "contentUrl": null,
            "content": null,
            "name": "Bing",
            "thumbnailUrl": null,
            "teamsAppId": null
        }
    ],

body

La propiedad body de un objeto chatMessage representa el cuerpo del mensaje. La propiedad body puede hacer referencia a otros elementos del esquema, como menciones o datos adjuntos. El contenido puede ser text o html, según lo especificado por la propiedad contentType del tipo de recurso itemBody .

El esquema chatMessage admite los siguientes elementos no HTML que Teams también admite:

  • at: referencia a un chatMessageMention que representa los detalles de un usuario, aplicación, canal, equipo o etiqueta que es @mentioned.
  • attachment: representa la posición de una referencia de datos adjuntos.
  • systemEventMessage: cuando la propiedad de contenido del recurso itemBody se establece en <systemEventMessage/>, el mensaje representa un evento especial. Para obtener más información, consulte Obtención de mensajes del sistema.
  • emoji: cuando el cuerpo del mensaje contiene un emoji, el $"<emoji id="IdOfTheEmoji" alt="AlternateRepresentationOfEmoji" title="TitleOfEmoji"></emoji>" elemento representa las propiedades de un emoji:
    • id: el identificador del emoji.
    • alt: representación alternativa para el emoji; por ejemplo, Unicode.
    • title: un título para el emoji.
  • customemoji: cuando el cuerpo del mensaje contiene un emoji personalizado, el $"<customemoji id="IdOfTheCustomEmoji" alt="AlternateRepresentationOfCustomEmoji" source="HostedContentOfCustomEmoji"></customemoji>" elemento representa las propiedades de un customemoji:
    • id: el identificador del emoji personalizado.
    • alt: representación alternativa para el emoji personalizado; por ejemplo, el nombre del emoji personalizado.
    • source: el contenido hospedado del emoji personalizado asociado al mensaje.
  • codeblock: cuando el cuerpo del mensaje contiene un bloque de código, el "<codeblock class=\"Json\"><code>Hello world</code></codeblock>" elemento representa las propiedades de un bloque de código.

Ejemplo: mensaje que indica que @mentions un equipo

    "body": {
        "contentType": "html",
        "content": "<div><div><at id=\"0\">WebhookTesting</at>&nbsp;Hello team</div></div>"
    },
    "mentions": [
        {
            "id": 0,
            "mentionText": "WebhookTesting",
            "mentioned": {
                "application": null,
                "device": null,
                "user": null,
                "tag": null,
                "conversation": {
                    "id": "68a3e365-f7d9-4a56-b499-24332a9cc572",
                    "displayName": "WebhookTesting",
                    "conversationIdentityType": "team"
                }
            }
        }
    ],

Ejemplo: Mensaje con datos adjuntos

    "body": {
        "contentType": "html",
        "content": "Scheduled a meeting<attachment id=\"1628156567881\"></attachment>"
    },
    "attachments": [
        {
            "id": "1628156567881",
            "contentType": "meetingReference",
            "contentUrl": null,
            "content": "{\"exchangeId\":\"AAMkAGU2NzgzNDQ3LWFkMTctNGY2MC05ZjM1LWFkOTYxZWZhYTY2MgBGAAAAAADFwPNVvpzXRqmCO5F6qAKtBwB89fWKTP8MSaPLNsJWtozvAAAAAAENAAB89fWKTP8MSaPLNsJWtozvAAFg-8IoAAA=\",\"organizerId\":\"8ea0e38b-efb3-4757-924a-5f94061cf8c2\"}",
            "name": "Testing channel meeting",
            "thumbnailUrl": null
        }
    ],

Ejemplo: mensaje con un evento del sistema

    "body": {
        "contentType": "html",
        "content": "<systemEventMessage/>"
    },
    "channelIdentity": {
        "teamId": "68a3e365-f7d9-4a56-b499-24332a9cc572",
        "channelId": "19:0b50940236084d258c97b21bd01917b0@thread.skype"
    },
    "attachments": [],
    "mentions": [],
    "reactions": [],
    "eventDetail": {
        "@odata.type": "#microsoft.graph.conversationMemberRoleUpdatedEventMessageDetail",
        "conversationMemberRoles": [],
        "conversationMemberUser": {
            "id": "c4aefc8e-f890-4aa6-b586-6cce899ff7f8",
            "displayName": null,
            "userIdentityType": "aadUser"
        },
        "initiator": {
            "application": null,
            "device": null,
            "user": {
                "id": "8ea0e38b-efb3-4757-924a-5f94061cf8c2",
                "displayName": null,
                "userIdentityType": "aadUser"
            }
        }
    }

Ejemplo: Un mensaje con un emoji

{
    "body": {
        "contentType": "html",
        "content": "<p><emoji id=\"smile\" alt=\"🙂\" title=\"Smile\"></emoji></p>"
    }
}

Ejemplo: Un mensaje con un emoji personalizado

{
    "body": {
        "contentType": "html",
        "content": "<p><customemoji id=\"dGVzdHNjOzAtd3VzLWQyLTdiNWRkZGQ2ZGVjMDNkYzIwNTgxY2NkYTE1MmEyZTM4\" alt=\"testsc\" source=\"https://graph.microsoft.com/beta/chats/19:bcf84b15c2994a909770f7d05bc4fe16@thread.v2/messages/1706638496169/hostedContents/aWQ9LHR5cGU9MSx1cmw9aHR0cHM6Ly91cy1jYW5hcnkuYXN5bmNndy50ZWFtcy5taWNyb3NvZnQuY29tL3YxL29iamVjdHMvMC13dXMtZDItN2I1ZGRkZDZkZWMwM2RjMjA1ODFjY2RhMTUyYTJlMzgvdmlld3MvaW1ndDJfYW5pbQ==/$value\"></customemoji></p>"
    }
}

Ejemplo: Mensaje con un bloque de código

Nota: Los bloques de código resaltados no se admiten cuando se envía un mensaje con un bloque de código mediante microsoft Graph API.

{
    "body": {
        "contentType": "html",
        "content": "\n<codeblock class=\"\"><code>Hello world</code></codeblock>"
    }
}

Ejemplo: Mensaje con un bloque de código que tiene resaltado específico del idioma

{
    "body": {
        "contentType": "html",
        "content": "<p>&nbsp;</p>\n\n<codeblock class=\"Json\"><code>{<br> &nbsp;&nbsp; <span class=\"hljs-function\">\"body\"</span>:&nbsp;{<br> &nbsp;&nbsp; <span class=\"hljs-function\">\"contentType\"</span>:&nbsp;<span class=\"hljs-string\">\"html\"</span>,<br> &nbsp;&nbsp; <span class=\"hljs-function\">\"content\"</span>:&nbsp;<span class=\"hljs-string\">\"&lt;codeblock&gt;&lt;code&gt;Hello&nbsp;world&lt;/code&gt;&lt;/codeblock&gt;\"</span><br> &nbsp;&nbsp; }<br>}</code></codeblock>\n<p>&nbsp;</p>"
    }
}

channelIdentity

Si se envía un chatMessage en un canal, la propiedad channelIdentity contiene detalles sobre el canal. Esto incluye el identificador del canal y del equipo. Esta propiedad es de sólo lectura.

En el ejemplo siguiente se muestra el esquema de un channelIdentity en un mensaje.

    "channelIdentity": {
        "teamId": "68a3e365-f7d9-4a56-b499-24332a9cc572",
        "channelId": "19:0b50940236084d258c97b21bd01917b0@thread.skype"
    },

chatId

Si se envía un chatMessage en un chat, la propiedad chatId contiene el identificador del chat. Esta propiedad es de sólo lectura.

En el ejemplo siguiente se muestra el esquema de un chatId.

"chatId": "19:8ea0e38b-efb3-4757-924a-5f94061cf8c2_976f4b31-fd01-4e0b-9178-29cc40c14438@unq.gbl.spaces",

createdDateTime

La propiedad createdDateTime representa la hora en que se creó el mensaje en el servidor. Esta marca de tiempo puede ser diferente de la hora en que el autor de la llamada envió el mensaje. El servidor solo registra la marca de tiempo del lado servidor. Esta propiedad es de solo lectura; sin embargo, se puede escribir al importar mensajes de un sistema externo.

deletedDateTime

Si se elimina un chatMessage , la propiedad deletedDateTime contiene la hora en que se eliminó el mensaje. Esta propiedad es de sólo lectura.

Nota: Todas las API no siempre devuelven los mensajes eliminados. Las notificaciones de cambio siempre devuelven notificaciones de mensajes eliminadas si changeType de la suscripción incluye deleted.

etag

La propiedad etag representa la versión del mensaje. Cualquier cambio en el mensaje (incluidas las reacciones y las modificaciones) cambia el valor de etag del mensaje. Esta propiedad es de sólo lectura.

eventDetail

Si está presente, la propiedad eventDetails representa los detalles de un evento que se produjo en un chat, un canal o un equipo; por ejemplo, la adición de nuevos miembros. Para los mensajes de evento, la propiedad messageType del chatMessage se establece en systemEventMessage. Para obtener más información, consulte Obtención de mensajes del sistema.

from

La propiedad from representa el remitente del mensaje. Microsoft Teams admite los siguientes tipos de remitente.

  • Usuarios de id. de entra: usuarios que tienen un id. de Entra válido. Esto incluye entra Id. externa invitados y usuarios de acceso externo.

    En el ejemplo siguiente se muestra la propiedad from de un mensaje enviado por un usuario de Entra ID.

    "from": {
        "application": null,
        "device": null,
        "user": {
            "id": "8ea0e38b-efb3-4757-924a-5f94061cf8c2",
            "displayName": "Alex Wilber",
            "userIdentityType": "aadUser"
        }
    },
    
  • Invitados anónimos: usuarios que se unen a una reunión mediante un vínculo de unión. Estos usuarios proporcionan un nombre para mostrar cuando se unen a la reunión. No tienen ninguna identidad persistente en Microsoft 365.

    En el ejemplo siguiente se muestra la propiedad from de un mensaje enviado por un invitado anónimo.

    "from": {
        "application": null,
        "device": null,
        "user": {
            "id": "8578568e393e4ffe8763e0b7c3da01fe",
            "displayName": "Anon (Guest)",
            "userIdentityType": "anonymousGuest"
        }
    },
    
  • Usuarios de cuentas personales de Microsoft: usuarios que usan su cuenta personal de Microsoft para iniciar sesión en Teams.

    En el ejemplo siguiente se muestra la propiedad from de un mensaje enviado por un invitado anónimo.

    "from": {
        "application": null,
        "device": null,
        "user": {
            "id": "d78f5bc88c39f6b8",
            "displayName": "TFL 1017",
            "userIdentityType": "personalMicrosoftAccountUser"
        }
    },
    
  • Usuarios de Skype: usuarios de Skype (para consumidores). Para obtener más información, consulte Interoperabilidad de Teams y Skype.

    En el ejemplo siguiente se muestra la propiedad from de un mensaje enviado por un usuario de Skype.

    "from": {
        "application": null,
        "device": null,
        "user": {
            "id": "alex1122",
            "displayName": "Alex",
            "userIdentityType": "skypeUser"
        }
    },
    
  • Usuarios locales de Skype Empresarial: usuarios que usan la oferta local de Skype Empresarial. Para obtener más información, consulte Teams y Skype Empresarial coexistencia e interoperabilidad.

    En el ejemplo siguiente se muestra la propiedad from de un mensaje enviado por un usuario local de Skype Empresarial.

    "from": {
        "application": null,
        "device": null,
        "user": {
            "id": "b0eddfe2-659b-437d-b289-cf55c8b3bb1d",
            "displayName": "Alex",
            "userIdentityType": "onPremiseAadUser"
        }
    },
    
  • Bots: bots conversacionales creados a través de la Microsoft Bot Framework.

    En el ejemplo siguiente se muestra la propiedad from de un mensaje enviado por un bot.

    "from": {
        "device": null,
        "user": null,
        "application": {
            "id": "358f0194-6b0e-4dd3-af35-c24fe8a9ec87",
            "displayName": "Flow",
            "applicationIdentityType": "bot"
        }
    }
    
  • Webhooks salientes: los webhooks salientes permiten a los desarrolladores crear una solución de bajo costo similar a los bots. Para obtener más información, consulte Creación de webhooks salientes.

    En el ejemplo siguiente se muestra la propiedad from de un mensaje enviado por un bot.

    "from": {
        "device": null,
        "user": null,
        "application": {
            "id": "22e50a9b-80cc-4eab-a092-ce64796d28d7",
            "displayName": "Custom bot",
            "applicationIdentityType": "outgoingWebhook"
        }
    }
    
  • Conectores para grupos de Microsoft 365: los conectores permiten publicar mensajes unidireccionales en Teams. Para obtener más información, consulte Creación de conectores para Grupos de Microsoft 365.

    En el ejemplo siguiente se muestra la propiedad from de un mensaje de un conector de Office 365.

    "from": {
        "device": null,
        "user": null,
        "application": {
            "id": "4c6cfc6e-cf78-44e8-87fd-bbb0efcad6a2",
            "displayName": "Bing News",
            "applicationIdentityType": "office365Connector"
        }
    }
    
  • Email: Teams permite enviar correos electrónicos a canales. Cuando no se conoce al usuario, la identidad del remitente se muestra como un usuario de correo electrónico con los detalles del correo electrónico usado para enviar el mensaje.

    En el ejemplo siguiente se muestra la propiedad from de un mensaje enviado desde un usuario de correo electrónico.

    "from": {
            "application": null,
            "device": null,
            "user": {
                "@odata.type": "#microsoft.graph.teamworkUserIdentity",
                "id": "testemailuser@outlook.com",
                "displayName": "Test User",
                "userIdentityType": "emailUser"
            }
        }
    
  • Azure Communication Services usuario: si un usuario Azure Communication Services envía un mensaje, los detalles de identidad del remitente se representan en el campo from.

    En el ejemplo siguiente se muestra la propiedad from de un correo electrónico enviado desde un usuario Azure Communication Services.

    "from": {
        "application": null,
        "device": null,
        "user": {
            "@odata.type": "#microsoft.graph.teamworkUserIdentity",
            "id": "8:acs:a04d09ad-aaa9-4e25-90de-475594b0fb52_00000006-96d3-711c-6a0b-343a0d000eb4",
            "displayName": null,
            "userIdentityType": "azureCommunicationServicesUser"
        }
    }
    

Esta propiedad es de solo lectura; sin embargo, puede escribir en él al importar mensajes de un sistema externo.

Nota: El nombre para mostrar no siempre está presente.

id

La propiedad id contiene un identificador único que representa el mensaje. Esta propiedad es de sólo lectura.

Nota: El identificador solo es único dentro de un ámbito específico, como un chat o canal. Los distintos mensajes entre chats y canales pueden tener el mismo identificador.

importance

La propiedad importance representa la importancia del mensaje. Los valores posibles son los siguientes:

  • normal
  • Alto
  • urgente

En el ejemplo siguiente se muestra un mensaje con la importancia establecida en alta.

"importance": "high",

lastEditedDateTime

La propiedad lastEditedDateTime representa la marca de tiempo cuando el usuario editó el mensaje. Esto se representa en la interfaz de usuario de Teams con la Edited marca . Se establece en null si el mensaje nunca se ha editado.

lastModifiedDateTime

La propiedad lastModifiedDateTime representa la marca de tiempo cuando se modificó por última vez el mensaje. Esto incluye cambios como reacciones. Las propiedades eTag y lastModifiedDateTime cuando se modifica un mensaje.

mentions

La propiedad mentions representa usuarios, aplicaciones (bots, webhooks), canales, equipos o etiquetas que son @mentioned.

Ejemplo: mensaje que indica que @mentions otro usuario

    "body": {
        "contentType": "html",
        "content": "<div><div><div><div><at id=\"0\">Alex</at>&nbsp;Test123</div></div></div></div>"
    },
    "mentions": [
        {
            "id": 0,
            "mentionText": "Alex",
            "mentioned": {
                "application": null,
                "device": null,
                "conversation": null,
                "tag": null,
                "user": {
                    "id": "c27c1b19-3904-4822-9813-4f6bdaab2eae",
                    "displayName": "Alex",
                    "userIdentityType": "aadUser"
                }
            }
        }
    ],

Ejemplo: mensaje que indica que @mentions un bot

    "body": {
        "contentType": "html",
        "content": "<div><div><at id=\"0\">Power Automate</at> Learn more&nbsp;</div></div>"
    },
    "mentions": [
        {
            "id": 0,
            "mentionText": "Power Automate",
            "mentioned": {
                "device": null,
                "user": null,
                "conversation": null,
                "tag": null,
                "application": {
                    "id": "358f0194-6b0e-4dd3-af35-c24fe8a9ec87",
                    "displayName": "Power Automate",
                    "applicationIdentityType": "bot"
                }
            }
        }
    ],

Ejemplo: mensaje que indica que @mentions un equipo

    "body": {
        "contentType": "html",
        "content": "<div><div><at id=\"0\">WebhookTesting</at>&nbsp;Hello team</div></div>"
    },
    "mentions": [
        {
            "id": 0,
            "mentionText": "WebhookTesting",
            "mentioned": {
                "application": null,
                "device": null,
                "user": null,
                "tag": null,
                "conversation": {
                    "id": "68a3e365-f7d9-4a56-b499-24332a9cc572",
                    "displayName": "WebhookTesting",
                    "conversationIdentityType": "team"
                }
            }
        }
    ],

Nota:@mentions también puede aparecer dentro de las tarjetas.

messageType

La propiedad messageType representa el tipo de mensaje. Los valores posibles son los siguientes:

  • message: representa los mensajes enviados por usuarios y aplicaciones.
  • systemEventMessage: representa los mensajes enviados por Teams con detalles sobre varios eventos, como agregar miembros o eliminar canales. Para obtener más información, consulte Obtención de mensajes del sistema.

Los siguientes valores no están actualmente en uso:

  • Mecanografía
  • chatEvent

onBehalfOf

La propiedad onBehalfOf representa la atribución del usuario para los mensajes enviados por un bot en nombre de un usuario. Para obtener más información, consulte Atribución de usuarios para mensajes de bots.

En el ejemplo siguiente se muestra un mensaje enviado por un bot en nombre de un usuario.

"from": {
        "device": null,
        "user": null,
        "application": {
            "id": "8a34cb8d-65dc-44e2-8375-a2261d1f2a4b",
            "displayName": "PolicyMaker",
            "applicationIdentityType": "bot"
        }
    },
    "onBehalfOf": {
        "application": null,
        "device": null,
        "user": {
            "id": "8ea0e38b-efb3-4757-924a-5f94061cf8c2",
            "displayName": "Alex Wilber",
            "userIdentityType": "aadUser"
        }
    },

policyViolation

Si un mensaje infringe las directivas de prevención de pérdida de datos (DLP) establecidas por el inquilino, se puede invocar un mensaje PATCH con los detalles de la directiva que se infringió. Esto oculta el mensaje de la interfaz de usuario de Teams. La propiedad policyViolation representa los detalles de la directiva que se infringió, junto con la acción .

En el ejemplo siguiente se muestra un mensaje que se bloqueó debido a la directiva.

    "body": {
        "contentType": "text",
        "content": ""
    },
    "policyViolation": {
        "dlpAction": "blockAccess",
        "justificationText": null,
        "userAction": "none",
        "verdictDetails": "none",
        "policyTip": null
    },

reactions

La propiedad reactions representa las reacciones de otros usuarios en el mensaje, como me gusta. Cada elemento representa información sobre la reacción y el usuario que reaccionó.

En el ejemplo siguiente se muestra un mensaje con reacciones.

Nota: El nombre para mostrar no siempre está presente en la propiedad de usuario .

{
    "reactions": [
        {
            "reactionType": "💯",
            "displayName": "Hundred points",
            "createdDateTime": "2022-01-18T23:41:57.573Z",
            "user": {
                "application": null,
                "device": null,
                "user": {
                    "id": "8ea0e38b-efb3-4757-924a-5f94061cf8c2",
                    "displayName": null,
                    "userIdentityType": "aadUser"
                }
            }
        }
    ]
}

En el ejemplo siguiente se muestra un mensaje con una reacción personalizada.

Nota:

  • Las reacciones personalizadas solo están disponibles en el punto de /beta conexión.
  • El nombre para mostrar no siempre está presente para el usuario.
{
    "reactions": [
        {
            "reactionType": "custom",
            "displayName": "microsoft_teams",
            "reactionContentUrl": "https://graph.microsoft.com/beta/chats/19:bcf84b15c2994a909770f7d05bc4fe16@thread.v2/messages/1706763669648/hostedContents/aWQ9MC13dXMtZDExLTc3ZmI2NmY4MTMwMGI2OGEzYzRkOWUyNmU1YTc5ZmMyLHR5cGU9MSx1cmw9/$value",
            "createdDateTime": "2024-02-14T22:07:02.288Z",
            "user": {
                "application": null,
                "device": null,
                "user": {
                    "@odata.type": "#microsoft.graph.teamworkUserIdentity",
                    "id": "28c10244-4bad-4fda-993c-f332faef94f0",
                    "displayName": null,
                    "userIdentityType": "aadUser"
                }
            }
        }
    ]
}

replyToId

La propiedad replyToId representa el identificador del mensaje al que un mensaje es una respuesta en una cadena de respuesta. Esta propiedad solo se establece para los mensajes de canal. Esta propiedad es de sólo lectura.

Nota: Para responder a los mensajes de un chat, se usa la referencia de mensajes.

subject

La propiedad subject contiene el asunto del mensaje. Esto solo es válido para los mensajes enviados en un canal.

webUrl

La propiedad webUrl contiene una dirección URL que apunta al mensaje en la interfaz de usuario de Teams. Esta dirección URL abre el mensaje directamente en la interfaz de usuario de Teams en un explorador.

Elección de la API adecuada para el escenario

Elegir la API adecuada es esencial para crear la mejor experiencia posible. El uso del conjunto correcto de API también garantiza que se capturan datos sin alcanzar la limitación.

Las API de mensajería de Microsoft Graph se dividen en tres:

  • API que se asignan a la interfaz de usuario de Teams. Los cambios se ven inmediatamente.
  • API que exportan datos centrados en usuarios y equipos. Cualquier cambio puede tardar hasta 24 horas en estar disponible.
  • Cambie las API basadas en notificaciones para recibir notificaciones en tiempo real.

API alineadas con la interfaz de usuario de Teams

Las API que se alinean con la interfaz de usuario de Teams funcionan de forma similar a cómo funciona la interfaz de usuario de Teams. Estas API se crean durante una sincronización de vez en cuando para obtener mensajes en un contexto específico. Estas API tienen un alto rendimiento y los cambios (mensajes enviados, editados o eliminados) son visibles inmediatamente.

A continuación se muestran las API alineadas con la interfaz de usuario de Teams:

Además, las siguientes API actúan junto con estas API para atender escenarios específicos, como capturar instancias específicas o cambiar el orden del recorrido.

API para exportar datos de Teams

Las API que exportan datos suelen funcionar con una granularidad mayor que las API alineadas con la interfaz de usuario. Estas API se centran en permitir la captura de una gran cantidad de datos. Los datos pueden tardar un tiempo (hasta 24 horas en determinados casos) en sincronizarse y estar disponibles a través de estas API.

Las siguientes API se dividen en esta categoría:

API en tiempo real

Las API en tiempo real permiten que un llamador reciba una notificación en cuanto se realice un cambio (mensaje enviado, editado, eliminado, etc.). Estas API son adecuadas para aplicaciones en tiempo real, como la representación de mensajes fuera de la interfaz de usuario de Teams. Además, estas API permiten la creación de suscripciones y, por tanto, la recepción de una gran cantidad de datos sin alcanzar la limitación. Para obtener más información, vea Cambiar notificaciones para channles y chats.