Dar formato a las tarjetas en Teams

Importante

Esta documentación se considera heredada. Para obtener información completa y recursos relacionados con el formato de texto en tarjetas adaptables, visita el centro de documentación de tarjetas adaptables.

Captura de pantalla que muestra la página de inicio del sitio web de tarjetas adaptables de Microsoft.

El centro de documentación de tarjetas adaptables ofrece documentación de referencia completa y más reciente, un Adaptive Card Designer actualizado, ejemplos de JSON integrados, procedimientos recomendados de diseño y un historial detallado de versiones de las características de la tarjeta adaptable. Para obtener más información, consulte la introducción al centro de documentación de tarjetas adaptables y las nuevas actualizaciones de tarjetas adaptativas.

Las dos formas de agregar formato de texto enriquecido a las tarjetas son:

Las tarjetas solo admiten el formato en la propiedad de texto, no en las propiedades de título o subtítulo. El formato se puede especificar mediante un subconjunto de formato XML, HTML o Markdown, según el tipo de tarjeta. Para el desarrollo actual y futuro de las tarjetas adaptables, se recomienda utilizar el formato Markdown.

La compatibilidad con el formato difiere en función de los tipos de tarjeta. La representación de la tarjeta puede diferir ligeramente entre los clientes de Microsoft Teams de escritorio y móviles y Teams en el explorador de escritorio.

Puede incluir una imagen alineada en cualquier tarjeta de Teams. Los formatos de imagen admitidos son .png, .jpg o .gif. Mantenga las dimensiones dentro de 1024 x 1024 píxeles y el tamaño del archivo menos de 1 MB. No se admiten imágenes .gif animadas. Para obtener más información, consulte tipos de tarjetas.

Puede dar formato a tarjetas adaptables y tarjetas conector para Grupos de Microsoft 365 con Markdown que incluyan ciertos estilos admitidos.

Dar formato a tarjetas mediante Markdown

Los siguientes tipos de tarjeta admiten dar formato mediante Markdown en Teams:

  • Tarjetas adaptativas: Markdown es compatible con el campo Tarjeta Textblock adaptativa, y Fact.Title y .Fact.Value HTML no es compatible con tarjetas adaptables.
  • Tarjetas de conectores para Grupos de Microsoft 365: se admite Markdown y HTML limitado en las tarjetas de conectores para Grupos de Microsoft 365 en los campos de texto.

Nota:

Markdown no es compatible con las tarjetas de inicio de sesión de OAuth en bots.

Puede usar nuevas líneas para Tarjetas adaptables mediante secuencias de escape \r o \npara las nuevas líneas de las listas. El formato es diferente entre las versiones de escritorio y de móvil de Teams para Tarjetas adaptables. Las menciones basadas en tarjetas se admiten en clientes web, de escritorio y móviles. Puede usar la propiedad de enmascaramiento de información para enmascarar información específica, por ejemplo, contraseñas o información confidencial de los usuarios dentro del elemento de entrada Input.Text de la Tarjeta adaptable. Puede expandir el ancho de una Tarjeta adaptable mediante el objeto width. Puede habilitar la compatibilidad con TypeAhead en tarjetas adaptables y filtrar el conjunto de opciones de entrada a medida que el usuario escribe la entrada. Puede usar la msteams propiedad para agregar la capacidad de mostrar imágenes en Stageview de forma selectiva.

El formato es diferente entre las versiones de escritorio y de móvil de Teams para Tarjetas adaptables y tarjetas de conector. En esta sección, puede consultar el ejemplo de formato Markdown para Tarjetas adaptables y tarjetas de conector.

La tabla siguiente proporciona los estilos admitidos para Textblock, Fact.Title y Fact.Value:

Estilo Ejemplo Markdown
Negrita Bold **Bold**
Italic Italic _Italic_
Lista no ordenada
  • text
  • text
- Item 1\r- Item 2\r- Item 3
Lista ordenada
  1. text
  2. text
1. Green\r2. Orange\r3. Blue
Hyperlinks Bing [Title](url)

No se admiten las siguientes etiquetas Markdown:

  • Encabezados
  • Tablas
  • Imágenes
  • Texto con formato previo
  • Blockquotes

Nuevas líneas para Tarjetas adaptables

Puede usar las secuencias de escape \r o \n para las nuevas líneas de las listas. Si se utiliza \n\n en las listas, se aplica sangría al siguiente elemento de la lista. Si necesita nuevas líneas en cualquier otra parte del TextBlock, use \n\n.

Diferencias entre dispositivos móviles y de escritorio en Tarjetas adaptables

En el escritorio, el formato de Markdown de Tarjeta adaptable, aparece como se muestra en la siguiente imagen tanto en los exploradores web como en la aplicación cliente de Teams:

La captura de pantalla muestra un ejemplo del formato Markdown de tarjeta adaptable en el cliente de escritorio de Teams.

En iOS, el formato Markdown de tarjeta adaptable aparece como se muestra en la siguiente imagen: La captura de pantalla muestra un ejemplo de formato Markdown de tarjeta adaptable en la plataforma iOS de Teams.

En Android, el formato de Markdown de Tarjeta adaptable aparece como se muestra en la siguiente imagen:

Captura de pantalla que muestra un ejemplo del formato Markdown de tarjeta adaptable en la plataforma Android de Teams.

Para obtener más información sobre el formato de fecha y hora y la localización en tarjetas adaptables, consulta las características de texto en tarjetas adaptables.

Muestra de formato de Tarjetas adaptables

El siguiente código muestra un ejemplo de formato de Tarjetas adaptables:

{
    "$schema": "https://adaptivecards.io/schemas/adaptive-card.json",
    "type": "AdaptiveCard",
    "version": "1.0",
    "body": [
        {
            "type": "TextBlock",
            "text": "This is some **bold** text"
        },
        {
            "type": "TextBlock",
            "text": "This is some _italic_ text"
        },
        {
            "type": "TextBlock",
            "text": "- Bullet \r- List \r",
            "wrap": true
        },
        {
            "type": "TextBlock",
            "text": "1. Numbered\r2. List\r",
            "wrap": true
        },
        {
            "type": "TextBlock",
            "text": "Check out [Adaptive Cards](https://adaptivecards.microsoft.com/?topic=welcome)"
        }
    ]
}

Las tarjetas adaptables admiten emojis. La siguiente carga de tarjetas muestra una tarjeta adaptable con un emoji:

{
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "type": "AdaptiveCard",
  "version": "1.0",
  "body": [
    {
      "type": "Container",
      "items": [
        {
          "type": "TextBlock",
          "text": "Publish Adaptive Card with emojis 🥰",
          "weight": "bolder",
          "size": "medium"
        }
      ]
    }
  ]
}

Captura de pantalla que muestra una tarjeta adaptable con un emoji.

Nota:

Si usa API de REST, establezca charset=UTF-8 los encabezados de solicitud para agregar emojis en las tarjetas adaptables.

Compatibilidad de las menciones con las Tarjetas adaptables

Puedes agregar @mentions dentro de un cuerpo de tarjeta adaptable para bots y respuestas de extensión de mensaje. Para agregar @mentions tarjetas, siga la misma lógica de notificación y representación que la de las menciones basadas en mensajes en conversaciones de chat grupales y de canal.

Los bots y las extensiones de mensajería pueden incluir menciones en el contenido de la tarjeta en TextBlock y elementos FactSet.

Nota:

  • Las menciones de canal y equipo no se admiten en los mensajes del bot.
  • @mention Puede usar varios usuarios en un único mensaje de tarjeta adaptable, pero asegúrese de que el límite de tamaño del mensaje no supere los 28 KB para los webhooks entrantes y los 100 KB para los mensajes de bot.
  • Las tarjetas adaptables enviadas desde webhooks entrantes solo admiten menciones de usuario y no admiten menciones de bots.

Para incluir una mención en una Tarjeta adaptable, la aplicación debe incluir los siguientes elementos:

  • <at>username</at> en los elementos de Tarjeta adaptable compatibles.
  • El objeto mention dentro de una propiedad msteams en el contenido de la tarjeta incluye el identificador de usuario de Teams del usuario que se menciona.
  • El userId es único para el identificador de bot y un usuario en particular. Se puede usar para @mention un usuario en particular. El userId se puede recuperar mediante una de las opciones mencionadas en obtener el identificador de usuario.

Tarjeta adaptable de ejemplo con una mención

El siguiente código muestra un ejemplo de Tarjeta adaptable con mención:

{
  "contentType": "application/vnd.microsoft.card.adaptive",
  "content": {
    "type": "AdaptiveCard",
    "body": [
      {
        "type": "TextBlock",
        "text": "Hi <at>John Doe</at>"
      }
    ],
    "$schema": "https://adaptivecards.io/schemas/adaptive-card.json",
    "version": "1.0",
    "msteams": {
      "entities": [
        {
          "type": "mention",
          "text": "<at>John Doe</at>",
          "mentioned": {
            "id": "29:123124124124",
            "name": "John Doe"
          }
        }
      ]
    }
  }
}

Id. de objeto de Microsoft Entra y UPN en la mención de usuario

La plataforma Teams permite mencionar a los usuarios con su identificador de objeto de Microsoft Entra y su nombre principal de usuario (UPN), además de los identificadores de mención existentes. Los bots con Tarjetas adaptables y conectores con Webhooks entrantes admiten los dos id. de mención de usuario.

En la tabla siguiente se describen los id. de mención de usuario que se han admitido recientemente:

Identificadores Capacidades de compatibilidad Descripción Ejemplo
Id. de objeto de Microsoft Entra Bot, conector Id. de objeto del usuario de Microsoft Entra 49c4641c-ab91-4248-aebb-6a7de286397b
UPN Bot, conector UPN del usuario de Microsoft Entra john.smith@microsoft.com

Mención de usuario en bots con Tarjetas adaptables

Los bots admiten la mención de usuario con el identificador de objeto de Microsoft Entra y UPN, además de los identificadores existentes. La compatibilidad con dos nuevos id. está disponible en bots para mensajes de texto, cuerpo de Tarjetas adaptables y respuesta de extensión de mensajería. Los bots admiten los id. de mención en escenarios de conversaciones y invoke. El usuario recibe una notificación de la fuente de actividades cuando está @mentioned con los identificadores.

Nota:

La actualización de esquemas y los cambios en la interfaz de usuario/experiencia de usuario no son necesarios para las menciones de usuario con tarjetas adaptables en el bot.

Ejemplo

Ejemplo de mención de usuario en bots con Tarjetas adaptables:

{
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "version": "1.0",
  "type": "AdaptiveCard",
  "body": [
    {
      "type": "TextBlock",
      "text": "Hi <at>Adele UPN</at>, <at>Adele Microsoft Entra ID</at>"
    }
  ],
  "msteams": {
    "entities": [
      {
        "type": "mention",
        "text": "<at>Adele UPN</at>",
        "mentioned": {
          "id": "AdeleV@contoso.onmicrosoft.com",
          "name": "Adele Vance"
        }
      },
      {
        "type": "mention",
        "text": "<at>Adele Microsoft Entra ID</at>",
        "mentioned": {
          "id": "87d349ed-44d7-43e1-9a83-5f2406dee5bd",
          "name": "Adele Vance"
        }
      }
    ]
  }
}

La siguiente imagen ilustra la mención de usuario con la Tarjeta adaptable en bot:

Captura de pantalla que muestra una mención de usuario en un bot con tarjeta adaptable.

Mención de usuario en Webhook entrante con Tarjetas adaptables

Los webhooks entrantes comienzan a admitir la mención de usuarios en tarjetas adaptables con el identificador de objeto de Microsoft Entra y UPN.

Nota:

  • Habilitar la mención de usuario en el esquema para que los webhooks entrantes sean compatibles con el id. de objeto de Microsoft Entra y UPN.
  • Los cambios en UI/UX no son necesarios para las menciones de usuario con Microsoft Entra, Object ID y UPN.
Ejemplo

Ejemplo de mención de usuario en Webhook entrante:

{
    "type": "message",
    "attachments": [
        {
        "contentType": "application/vnd.microsoft.card.adaptive",
        "content": {
            "type": "AdaptiveCard",
            "body": [
                {
                    "type": "TextBlock",
                    "size": "Medium",
                    "weight": "Bolder",
                    "text": "Sample Adaptive Card with User Mention"
                },
                {
                    "type": "TextBlock",
                    "text": "Hi <at>Adele UPN</at>, <at>Adele Microsoft Entra ID</at>"
                }
            ],
            "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
            "version": "1.0",
            "msteams": {
                "entities": [
                    {
                        "type": "mention",
                        "text": "<at>Adele UPN</at>",
                        "mentioned": {
                          "id": "AdeleV@contoso.onmicrosoft.com",
                          "name": "Adele Vance"
                        }
                      },
                      {
                        "type": "mention",
                        "text": "<at>Adele Microsoft Entra ID</at>",
                        "mentioned": {
                          "id": "87d349ed-44d7-43e1-9a83-5f2406dee5bd",
                          "name": "Adele Vance"
                        }
                      }
                ]
            }
        }
    }]
}

La siguiente imagen ilustra la mención de usuario en Webhook entrante:

Captura de pantalla que muestra una mención de usuario en el webhook entrante.

Icono de People en una tarjeta adaptable

El icono de People ayuda a los usuarios a ver las imágenes de los usuarios de una tarjeta adaptable. Puede insertar una imagen y aplicar todas las propiedades admitidas en las imágenes.

Hay dos tipos de iconos de personas que se admiten en una tarjeta adaptable:

  • Persona: Si desea mostrar un solo usuario en una tarjeta adaptable, se muestra el icono de personas y el nombre del usuario.

    El siguiente código JSON es un ejemplo de una tarjeta Persona:

    {
      "$schema": "https://adaptivecards.io/schemas/adaptive-card.json",
      "type": "AdaptiveCard",
      "version": "1.0.0",
      "body": [
    {
          "type": "TextBlock",
          "text": "Persona",
          "weight": "bolder"
        },
        {
          "type": "Component",
          "name": "graph.microsoft.com/user",
          "view": "compact",
          "properties": {
            "id": "65f50003-e15d-434a-9e14-0fcfeb3d7817",
            "displayName": "Daniela Mandera",
            "userPrincipalName": "damandera@microsoft.com"
          }
        }
      ]
    }
    
  • Rol Set: Si desea mostrar varios usuarios en una tarjeta adaptable, solo muestra el icono de personas de los usuarios.

    El siguiente código JSON es un ejemplo de un Conjunto de Personas:

    {
      "$schema": "https://adaptivecards.io/schemas/adaptive-card.json",
      "type": "AdaptiveCard",
      "version": "1.0.0",
      "body": [
        {
          "type": "TextBlock",
          "text": "Persona Set",
          "weight": "bolder"
        },
        {
          "type": "Component",
          "name": "graph.microsoft.com/users",
          "view": "compact",
          "properties": {
            "users": [
              {
                "id": "65f50003-e15d-434a-9e14-0fcfeb3d7817",
                "displayName": "Daniela Mandera",
                "userPrincipalName": "damandera@microsoft.com"
              },
              {
                "id": "65f50003-e15d-434a-9e14-0fcfeb3d7817",
                "displayName": "Daniela Mandera",
                "userPrincipalName": "damandera@microsoft.com"
              }
            ]
          }
        }
      ]
    }
    

    Nota:

    No se puede personalizar el estilo de la Persona y del conjunto de Personas en una tarjeta adaptable.

La imagen siguiente es un ejemplo del icono de personas en una tarjeta adaptable:

La captura de pantalla muestra un ejemplo del icono de personas con un rol y un tipo de rol establecido en una tarjeta adaptable.

Esquema

En la tabla siguiente se enumeran las Component propiedades del elemento:

Nombre de propiedad Description
type component
name Se usa graph.microsoft.com/users para buscar en todos los miembros de la organización
view compact
properties Pasado a la plantilla de componente
id Resonancia magnética del usuario
displayName Nombre del usuario
userPrincipalName El nombre principal del usuario de la cuenta en Microsoft Entra ID

Los componentes adaptables son componentes de alto nivel alimentados por plantillas y elementos de tarjeta adaptativa nativos . El tipo component se puede usar en cualquier lugar dentro del cuerpo de la tarjeta y los datos del componente se definen en el properties atributo. Los datos del componente se properties pasan directamente al componente. La properties propiedad define el formato de Rol y Rol Set y todas las demás propiedades debajo properties se ignoran por component tipo en el esquema de tarjeta adaptable.

El bot puede consultar la lista de miembros y sus perfiles de usuario básicos, incluidos los identificadores de usuario de Teams y la información de Microsoft Entra, como name, idy userPrincipalName. Para obtener más información, vea Capturar la lista o el perfil de usuario.

Las siguientes imágenes muestran el icono de personas en una tarjeta adaptable en clientes móviles y de escritorio de Teams:

Cliente de escritorio:

La captura de pantalla muestra iconos de un rol y un conjunto de roles en una tarjeta adaptable en el cliente de escritorio de Teams.

Cuando un usuario mantiene el puntero sobre un icono de personas, se muestra la tarjeta de personas de ese usuario.

Cliente móvil

Captura de pantalla que muestra un ejemplo del icono de personas en un rol y un rol establecidos en el cliente móvil de Teams.

La captura de pantalla muestra otro ejemplo del icono de personas en un rol y un rol establecido en el cliente móvil de Teams.

Cuando un usuario selecciona un icono de personas, se muestra la tarjeta de personas de ese usuario.

Enmascaramiento de información en Tarjetas adaptables

Use la propiedad de enmascaramiento de información para enmascarar información específica, por ejemplo, contraseñas o información confidencial de los usuarios dentro del elemento de entrada Input.Text de la Tarjeta adaptable.

Nota:

La característica solo admite el enmascaramiento de información del lado cliente. El texto de entrada enmascarado se envía como texto no cifrado a la dirección del punto de conexión HTTPS que se especificó durante la configuración del bot.

Para enmascarar información en tarjetas adaptables, agregue la style propiedad a typeinput.text y establezca su valor en Password.

Tarjeta adaptable de ejemplo con propiedad de enmascaramiento

El código siguiente muestra un ejemplo de Tarjeta adaptable con propiedad de enmascaramiento:

{
    "type": "Input.Text",
    "id": "secretThing",
    "style": "password",
},

La siguiente imagen es un ejemplo de enmascaramiento de la información en Tarjetas adaptables:

Captura de pantalla que muestra la vista de información de enmascaramiento en una tarjeta adaptable.

Tarjeta adaptable de ancho completo

Puedes usar la propiedad para expandir el ancho de una tarjeta adaptativa y aprovechar el msteams espacio adicional del lienzo. En la siguiente sección se proporciona información sobre cómo usar la propiedad.

Nota:

Prueba la tarjeta adaptable de ancho completo en factores de forma estrechos, como paneles laterales móviles y de reuniones, para asegurarte de que el contenido no se trunce.

Crear tarjetas de ancho completo

Para crear una Tarjeta adaptable de ancho completo, el objeto de la propiedad en el contenido de la tarjeta widthmsteams debe establecerse en Full.

Tarjeta adaptable de ejemplo con ancho completo

Para crear una Tarjeta adaptable de ancho completo, la aplicación debe incluir los elementos del siguiente ejemplo de código:

{
    "type": "AdaptiveCard",
    "body": [{
        "type": "Container",
        "items": [{
            "type": "TextBlock",
            "text": "Digest card",
            "size": "Large",
            "weight": "Bolder"
        }]
    }],

    "msteams": {
        "width": "Full"
    },
    "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
    "version": "1.2"
}

La siguiente imagen muestra una Tarjeta adaptable de ancho completo:

Captura de pantalla que muestra una tarjeta adaptativa de ancho completo.

En la imagen siguiente se muestra la vista predeterminada de una tarjeta adaptable cuando no se ha establecido la width propiedad como Completa:

La captura de pantalla muestra una tarjeta adaptativa de ancho pequeño.

Tarjeta adaptativa diseño responsivo

Las tarjetas adaptables adaptan automáticamente su apariencia al estilo de la aplicación host, pero tienen un diseño fijo que sigue siendo el mismo en los clientes móviles y de escritorio de Teams. Debe diseñar las tarjetas adaptables para que tengan un aspecto excelente en cualquier dispositivo a fin de proporcionar una experiencia de usuario mejorada en el chat, los canales y el chat de reunión. En este artículo, aprenderás a diseñar tarjetas adaptables con capacidad de respuesta.

El diseño adaptable de la tarjeta adaptable le ayuda a diseñar tarjetas con diferentes diseños destinados a diferentes anchos de tarjeta.

Tarjetas adaptativas adaptables con capacidad de diseño

Use la targetWidth propiedad en cualquier elemento para:

  • Mostrar u ocultar cualquier elemento según el ancho de la tarjeta.

  • Establezca diferentes anchos de destino en diferentes elementos para crear diferentes diseños.

    En la siguiente tabla se enumeran los valores disponibles targetWidth :

    Valor Description
    veryNarrow El elemento es visible cuando el ancho de la tarjeta adaptable es muy reducido, como en un chat de reunión.
    narrow El elemento es visible cuando el ancho de la tarjeta adaptable es estrecho, como en un teléfono móvil en modo vertical.
    standard El elemento es visible cuando el ancho de la tarjeta adaptable es estándar, como en un teléfono móvil en modo horizontal, en una tableta en modo vertical o en un chat en un escritorio.
    wide El elemento está visible cuando el ancho de la tarjeta adaptable es ancho, como en una tableta en modo horizontal, en un canal o chat en el escritorio cuando se establece la tarjeta para que sea de ancho completo.

    También puede establecer la targetWidth propiedad para que un elemento sea visible para un rango de anchos de tarjeta utilizando los atLeast prefijos and atMost . Por ejemplo, puedes hacer que un elemento sea visible solo cuando el ancho de la tarjeta sea "estándar o superior" o solo cuando el ancho de la tarjeta sea "estrecho o inferior". En la tabla siguiente se proporcionan instrucciones sobre cómo hacer visible un elemento para un rango de anchos de tarjeta:

    Ejemplo Descripción
    "targetWidth": "atLeast:standard" El elemento es visible solo cuando el ancho de la tarjeta adaptable es al menos estándar, lo que significa estándar o ancho.
    "targetWidth": "atMost:narrow" El elemento es visible solo cuando el ancho de la tarjeta adaptable es como máximo estrecho, lo que significa muy estrecho o estrecho.

    Nota:

    No tienes que establecer targetWidth todos los elementos. Si no establece targetWidth un elemento, el elemento siempre está visible independientemente del ancho de la tarjeta.

A continuación se muestran ejemplos de JSON para una tarjeta adaptativa diseñada sin usar targetWidth y modificada para usartargetWidth:

  • Tarjeta adaptativa diseñada sin usar targetWidth:

    {
      "type": "AdaptiveCard",
      "body": [
        {
          "type": "ColumnSet",
          "columns": [
            {
              "type": "Column",
              "items": [
                {
                  "type": "Image",
                  "style": "Person",
                  "url": "https://aka.ms/AAp9xo4",
                  "size": "Small"
                }
              ],
              "width": "auto"
            },
            {
              "type": "Column",
              "spacing": "medium",
              "verticalContentAlignment": "center",
              "items": [
                {
                  "type": "TextBlock",
                  "weight": "Bolder",
                  "text": "David Claux",
                  "wrap": true
                }
              ],
              "width": "auto"
            },
            {
              "type": "Column",
              "spacing": "medium",
              "items": [
                {
                  "type": "TextBlock",
                  "text": "Platform Architect",
                  "isSubtle": true,
                  "wrap": true
                }
              ],
              "width": "stretch",
              "verticalContentAlignment": "center"
            }
          ]
        }
      ],
      "$schema": "https://adaptivecards.io/schemas/adaptive-card.json",
      "version": "1.5"
    }
    
    

    En las imágenes siguientes se muestra la representación de la tarjeta adaptable para diferentes anchos de tarjeta:

    • Cuando el ancho de la tarjeta es ancho, la tarjeta se ve bien.

      Captura de pantalla que muestra cómo se representa una tarjeta adaptable con el ancho de la tarjeta como ancho cuando la tarjeta está diseñada sin usar la propiedad targetWidth.

    • Cuando el ancho de la tarjeta es estándar o estrecho, el rol se comprime.

      Captura de pantalla que muestra cómo se representa una tarjeta adaptable con ancho de tarjeta estándar o estrecho cuando la tarjeta se diseña sin usar la propiedad targetWidth.

    • Cuando el ancho de la tarjeta es muy estrecho, el nombre y la función se reducen significativamente.

      Captura de pantalla que muestra cómo se representa una tarjeta adaptable con ancho de tarjeta muy estrecho cuando la tarjeta se diseña sin usar la propiedad targetWidth.

  • La tarjeta adaptativa se actualizó para que respondiera mediante targetWidth:

      {
        "type": "AdaptiveCard",
        "body": [
          {
            "type": "ColumnSet",
            "columns": [
              {
                "type": "Column",
                "targetWidth": "atLeast:narrow",
                "items": [
                  {
                    "type": "Image",
                    "style": "Person",
                    "url": "https://aka.ms/AAp9xo4",
                    "size": "Small"
                  }
                ],
                "width": "auto"
              },
              {
                "type": "Column",
                "spacing": "medium",
                "verticalContentAlignment": "center",
                "items": [
                  {
                    "type": "TextBlock",
                    "weight": "Bolder",
                    "text": "David Claux",
                    "wrap": true
                  },
                  {
                    "type": "TextBlock",
                    "targetWidth": "atMost:narrow",
                    "spacing": "None",
                    "text": "Platform Architect",
                    "isSubtle": true,
                    "wrap": true
                  }
                ],
                "width": "auto"
              },
              {
                "type": "Column",
                "targetWidth": "atLeast:standard",
                "spacing": "medium",
                "items": [
                  {
                    "type": "TextBlock",
                    "text": "Platform Architect",
                    "isSubtle": true,
                    "wrap": true
                  }
                ],
                "width": "stretch",
                "verticalContentAlignment": "center"
              }
            ]
          }
        ],
        "$schema": "https://adaptivecards.io/schemas/adaptive-card.json",
        "version": "1.5"
      }
    

    Veamos cómo se representa la misma tarjeta adaptable después de usar la targetWidth propiedad para diferentes anchos de tarjeta:

    • Cuando el ancho de la tarjeta es ancho, la tarjeta todavía se ve bien.

      Captura de pantalla que muestra cómo se representa una tarjeta adaptable cuando la propiedad targetWidth es ancha.

    • Cuando el ancho de la tarjeta es estándar o estrecho, el rol se mueve debajo del nombre, ya que no hay espacio horizontal para mostrarlos en paralelo.

      Captura de pantalla que muestra cómo se representa una tarjeta adaptable cuando la propiedad targetWidth es estándar o estrecha.

    • Cuando el ancho de la tarjeta es muy estrecho, podemos ocultar la imagen y solo mantener la información más significativa.

      Captura de pantalla que muestra cómo se representa una tarjeta adaptable cuando la propiedad targetWidth es veryNarrow.

Para obtener más información sobre cómo diseñar una tarjeta adaptable, consulte Diseño de tarjetas adaptables para la aplicación de Teams.

Compatibilidad con TypeAhead

Dentro del elemento de esquema Input.ChoiceSet, pedir a los usuarios que filtren y seleccionen un número considerable de opciones puede ralentizar de manera significativa la finalización de tareas. La compatibilidad con TypeAhead en Tarjetas adaptables puede simplificar la selección de entrada limitando o filtrando el conjunto de opciones de entrada a medida que el usuario escribe la entrada.

Para habilitar TypeAhead en Input.Choiceset, establezca style en filtered y asegúrese de que isMultiSelect está establecido en false.

Tarjeta adaptable de ejemplo con compatibilidad con TypeAhead

En el siguiente código se muestra un ejemplo de Tarjeta adaptable con compatibilidad con TypeAhead:

{
   "type": "Input.ChoiceSet",
   "label": "Select a user",
   "isMultiSelect": false,
   "choices":  [
      { "title": "User 1", "value": "User1" },
      { "title": "User 2", "value": "User2" }
    ],
   "style": "filtered"
}

Vista en pantalla para imágenes en tarjetas adaptables

En una tarjeta adaptable, puede usar la msteams propiedad para agregar la capacidad de mostrar imágenes en Stageview de forma selectiva. Cuando los usuarios mantienen el puntero sobre las imágenes, pueden ver un icono de expandir, para el que el atributo allowExpand está establecido en true. El código siguiente es un ejemplo de la msteams propiedad:

{
    "type": "AdaptiveCard",
     "body": [
          {
            "type": "Image",
            "url": "https://picsum.photos/200/200?image=110",
            "msTeams": {
              "allowExpand": true
            }
          }
     ],
    "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
    "version": "1.2"
}

Cuando los usuarios pasan el ratón por encima de la imagen, aparece un icono de expandir en la esquina superior derecha, tal y como se muestra en la siguiente imagen:

Captura de pantalla que muestra una tarjeta adaptable con una imagen expandible.

La imagen aparece en vista Stageview cuando el usuario selecciona el icono de expandir, como se muestra en la siguiente imagen:

Screesnhots muestra la imagen expandida a Stageview.

En Stageview, los usuarios pueden acercar y alejar la imagen. Puede seleccionar las imágenes de la Tarjeta adaptable que han de llevar esta funcionalidad.

Nota:

  • La funcionalidad de acercar y alejar solo se aplica a los elementos de imagen que son tipo de imagen en una Tarjeta adaptable.
  • Para las aplicaciones móviles de Teams, la funcionalidad Stageview para imágenes de tarjetas adaptables está disponible de forma predeterminada. Los usuarios pueden ver imágenes de tarjetas adaptables en Stageview simplemente tocando la imagen, independientemente de si el allowExpand atributo está presente o no.

CodeBlock en tarjetas adaptables

El CodeBlock elemento permite compartir fragmentos de código como tarjetas adaptables con formato enriquecido en chats, canales y reuniones de Teams. Las tarjetas adaptables con el CodeBlock elemento hacen que el fragmento de código sea fácil de leer, ya que la sangría, la numeración y el resaltado de sintaxis coinciden con el lenguaje de programación. Además, puede agregar botones de acción para ver el código en su origen o editar el código en entornos de desarrollo integrados (IDE), como Microsoft Visual Studio o Microsoft Visual Studio Code.

En la captura de pantalla siguiente se muestra una tarjeta adaptable con un fragmento de código:

Captura de pantalla que muestra una tarjeta adaptable con un fragmento de código.

El CodeBlock elemento admite los lenguajes siguientes:

Idioma Compatible Idioma Compatible
Bash ✔️ JSON ✔️
C ✔️ Perl ✔️
C++ ✔️ PHP ✔️
C# ✔️ PowerShell ✔️
CSS ✔️ Python ✔️
DOS ✔️ SQL ✔️
Ir ✔️ TypeScript ✔️
GraphQL ✔️ Visual Basic ✔️
HTML ✔️ Verilog ✔️
Java ✔️ VHDL ✔️
JavaScript ✔️ XML ✔️

Nota:

El CodeBlock elemento reconoce el texto sin formato como un idioma si establece el valor PlainText enumerado en la language propiedad del esquema.

El código siguiente es un ejemplo de una tarjeta adaptativa que muestra un fragmento de código:

{
    "$schema": "https://adaptivecards.io/schemas/adaptive-card.json",
    "type": "AdaptiveCard",
    "version": "1.5",
    "body": [
        {
            "type": "TextBlock",
            "text": "editor.js",
            "style": "heading"
        },
        {
            "type": "TextBlock",
            "text": "Lines 61 - 76"
        },
        {
            "type": "CodeBlock",
            "codeSnippet": "/**\n* @author John Smith <john.smith@example.com>\n*/\npackage l2f.gameserver.model;\n\npublic abstract strictfp class L2Char extends L2Object {\n  public static final Short ERROR = 0x0001;\n\n  public void moveTo(int x, int y, int z) {\n    _ai = null;\n    log(\"Shouldn't be called\");\n    if (1 > 5) { // what!?\n      return;\n    }\n  }\n}",
            "language": "java",
            "startLineNumber": 61
        }
    ],
    "actions": [
        {
            "type": "Action.OpenUrl",
            "title": "View in Azure Repos",
            "url": "https://azure.microsoft.com/en-us/products/devops/repos/"
        },
        {
            "type": "Action.OpenUrl",
            "title": "Edit in vscode.dev",
            "url": "https://vscode.dev/"
        }
    ]
}

El CodeBlock elemento admite las siguientes propiedades:

Propiedad Tipo Obligatorio Descripción
codeSnippet Cadena Sí El fragmento de código que se mostrará en una tarjeta adaptable.
language Enum Sí El idioma del fragmento de código que se va a mostrar en una tarjeta adaptable.
startLineNumber Número No El número de línea del origen donde comienza el fragmento de código. Si se deja en blanco, el valor predeterminado es 1.

Sugerencia

  • Los caracteres especiales tienen funciones específicas en la codeSnippet propiedad. Por ejemplo, el carácter \n de nueva línea desencadena un salto de línea.
  • Para mostrar el carácter \n de nueva línea como parte del fragmento de código en una tarjeta adaptable, asegúrese de que lo escapa como \\n en la codeSnippet propiedad. De lo contrario, Teams representa el código después \n del en la siguiente línea de la tarjeta.

Limitaciones

  • Una tarjeta adaptativa con el CodeBlock elemento solo se admite en clientes web y de escritorio de Teams.
  • El fragmento de código de una tarjeta adaptable es de solo lectura y no se puede editar.
  • Una tarjeta adaptativa solo previsualiza las primeras 10 líneas del fragmento de código. Si hay más de 10 líneas de código, el usuario debe seleccionar Expandir para ver el resto del fragmento de código.

Menú de desbordamiento de tarjetas adaptables

La tarjeta adaptable en Teams admite el menú de desbordamiento. Puedes rellenar un menú de desbordamiento para todas las acciones secundarias en una tarjeta adaptable. Se puede agregar un menú de desbordamiento en una tarjeta adaptable a lo siguiente:

  • Acciones: en las acciones, los botones principales aparecen en la tarjeta adaptable y los botones secundarios están dentro del menú de desbordamiento.

  • Conjunto de acciones: ActionSet es una combinación de varias acciones en una tarjeta adaptable. Cada conjunto de acciones puede tener un menú de desbordamiento.

Nota:

Una tarjeta adaptativa admite hasta seis acciones principales que se pueden ver en la tarjeta. Cualquier acción principal adicional se ve en el menú de desbordamiento.

La representación gráfica muestra la experiencia del menú de desbordamiento en una tarjeta adaptable.

Habilitar menú de desbordamiento

Para habilitar el menú de desbordamiento, configure la mode propiedad con el valor como primary o secondary en el esquema de tarjeta adaptable. En la tabla siguiente se describe la mode propiedad:

Propiedad Tipo Obligatorio Description
mode Enumeración (primaria, secundaria) No Si la acción es o no una acción principal o secundaria. Las acciones secundarias se contraen en un menú de desbordamiento.

En el ejemplo siguiente se muestra la mode propiedad del tipo y del actionsActionSet elemento:

Acciones

En el ejemplo siguiente, hay dos acciones principales y una acción secundaria. La acción secundaria crea un menú de desbordamiento.

{
   "type": "AdaptiveCard",
   "actions": [
        {
            "type": "Action.Submit",
            "title": "Set due date"
        },
        {
            "type": "Action.OpenUrl",
            "title": "View",
            "url": "https://adaptivecards.microsoft.com/?topic=welcome"
        },
        {
            "type": "Action.Submit",
            "title": "Delete",
            "mode": "secondary"
        }
    ]
}

Nota:

El menú de desbordamiento se comporta de forma diferente en una tarjeta enviada por un bot y en una tarjeta de extensión de mensaje para el nivel actions raíz en una tarjeta adaptable. El menú de desbordamiento de una tarjeta enviada por bot aparece como un menú contextual emergente y en la tarjeta de extensión de mensaje aparece en la esquina superior derecha, debajo del icono Más opciones (...). El comportamiento no es aplicable a la ActionSet en una tarjeta adaptable.

La siguiente imagen es un ejemplo de menú de desbordamiento en una tarjeta enviada por un bot y una tarjeta de extensión de mensaje:

La captura de pantalla muestra un ejemplo del comportamiento del menú de desbordamiento en una tarjeta enviada por un bot y una tarjeta de extensión de mensajería.

Conjunto de acciones

En el siguiente ejemplo, todas las acciones están marcadas como secundarias, por lo tanto, aparece un único menú de desbordamiento en la tarjeta.

{
    "type": "ActionSet",
     "actions": [

          {
           
            "type": "Action.Submit",
            "title": "view",
            "mode": "Secondary" 
       {
       },
            "type": "Action.submit",
            "title": "Delete",
            "mode": "secondary"

       },
       {
             "type": "Action.submit",
            "title": "Delete",
            "mode": "secondary"
       }
     ]
}

En el ejemplo siguiente se muestra la experiencia del menú de desbordamiento en clientes móviles y de escritorio de Teams:

Cuando un usuario selecciona el menú de desbordamiento en un escritorio, los botones que están configurados como secundarios aparecen en la tarjeta adaptable.

Captura de pantalla que muestra un ejemplo de botones de una tarjeta adaptable en el cliente de escritorio de Teams.

La captura de pantalla muestra un ejemplo de una tarjeta adaptable con la lista de acciones en un menú de desbordamiento en el cliente de escritorio de Teams.

La captura de pantalla muestra un ejemplo de una tarjeta adaptable con los botones configurados como secundarios como opciones en un menú de desbordamiento en el cliente de escritorio de Teams.

Bordes y esquinas redondeadas en tarjetas adaptables

Las tarjetas adaptables admiten una amplia variedad de elementos, pero tener demasiados elementos entorpece la tarjeta y dificulta la legibilidad. Puedes agregar bordes a varios elementos en una tarjeta adaptable para delinearlos, lo que facilita a los usuarios distinguirlos.

Sin fronteras

La captura de pantalla muestra una tarjeta adaptable sin bordes alrededor de sus elementos.

Con bordes

La captura de pantalla muestra una tarjeta adaptable con bordes alrededor de sus elementos.

Puede usar tarjetas adaptativas en varios hosts. Muchos de estos anfitriones siguen sistemas y marcos de diseño contemporáneos. Las tarjetas adaptables admiten esquinas redondeadas para varios elementos a fin de mantener la coherencia con estos hosts y mantenerse al día con las últimas tendencias de diseño. Las esquinas redondeadas hacen que el diseño de la tarjeta se vea más moderno y visualmente atractivo, creando un flujo visual más suave.

Sin esquinas redondeadas

Captura de pantalla que muestra una tarjeta adaptable sin esquinas redondeadas en sus elementos.

Con esquinas redondeadas

Captura de pantalla que muestra una tarjeta adaptable con esquinas redondeadas en sus elementos.

Puede agregar bordes y esquinas redondeadas solo a los siguientes elementos:

Elemento Borders Esquinas redondeadas
Container ✔️ ✔️
ColumnSet ✔️ ✔️
Column ✔️ ✔️
Table ✔️ ✔️
Image ❌ ✔️

Implementar bordes y esquinas redondeadas en tarjetas adaptables

Para agregar un borde a un Containerelemento o Column , ColumnSetestablece la showBorder propiedad en true para el elemento de la carga de la tarjeta. Para agregar un borde a un Table elemento, establezca la showGridLines propiedad en true. El color del borde coincide con el estilo del elemento, como se define en el HostConfig.jsonarchivo .

Propiedad Tipo Obligatorio Descripción
showBorder Booleano No Agrega un borde a los Containerelementos , ColumnSet, o Column
showGridLines Booleano No Agrega un borde al Table elemento. Valor predeterminado: true

Para agregar esquinas redondeadas a un Containerelemento, , ColumnSet, Columno bien Table , establezca la roundedCorners propiedad en true para el elemento de la carga de la tarjeta. Para agregar esquinas redondeadas al Image elemento, establezca la style propiedad dentro RoundedCorners del elemento.

Propiedad Tipo Obligatorio Descripción
roundedCorners Booleano No Agrega esquinas redondeadas a , ContainerColumnSet, Column, o Table elementos.
style Cadena No Agrega esquinas redondeadas al Image elemento cuando se establece el valor en roundedCorners.

La siguiente carga de JSON muestra una tarjeta adaptable con bordes y esquinas redondeadas alrededor de sus elementos:

{
    "type": "AdaptiveCard",
    "$schema": "https://adaptivecards.io/schemas/adaptive-card.json",
    "version": "1.5",
    "body": [
        {
            "type": "TextBlock",
            "text": "Below is a **ColumnSet** with borders and rounded corners:",
            "wrap": true
        },
        {
            "type": "ColumnSet",
            "showBorder": true,
            "roundedCorners": true,
            "style": "emphasis",
            "columns": [
                {
                    "type": "Column",
                    "width": "stretch",
                    "showBorder": true,
                    "roundedCorners": true,
                    "style": "accent",
                    "items": [
                        {
                            "type": "TextBlock",
                            "text": "This is a **Column** with borders and rounded corners",
                            "wrap": true
                        }
                    ]
                },
                {
                    "type": "Column",
                    "width": "stretch",
                    "showBorder": true,
                    "roundedCorners": true,
                    "style": "good",
                    "items": [
                        {
                            "type": "TextBlock",
                            "text": "This is another **Column** with borders and rounded corners",
                            "wrap": true
                        }
                    ]
                }
            ]
        },
        {
            "type": "Container",
            "style": "attention",
            "showBorder": true,
            "roundedCorners": true,
            "items": [
                {
                    "type": "TextBlock",
                    "text": "This is a **Container** with borders and rounded corners",
                    "wrap": true
                }
            ]
        },
        {
            "type": "Table",
            "roundedCorners": true,
            "columns": [
                {
                    "width": 1
                },
                {
                    "width": 1
                }
            ],
            "rows": [
                {
                    "type": "TableRow",
                    "cells": [
                        {
                            "type": "TableCell",
                            "items": [
                                {
                                    "type": "TextBlock",
                                    "text": "This **Table**...",
                                    "wrap": true
                                }
                            ]
                        },
                        {
                            "type": "TableCell",
                            "items": [
                                {
                                    "type": "TextBlock",
                                    "text": "...has borders and rounded corners",
                                    "wrap": true
                                }
                            ]
                        }
                    ]
                }
            ]
        },
        {
            "type": "TextBlock",
            "text": "The below **Image** has rounded corners:",
            "wrap": true
        },
        {
            "type": "Image",
            "url": "https://media.licdn.com/dms/image/C4E03AQF5uhIghtPzrA/profile-displayphoto-shrink_400_400/0/1517690039090?e=2147483647&v=beta&t=g1DFilNHZhah2fhaTS9ylBxGGGb2XyPA2C7LZptk4QE",
            "width": "100px",
            "style": "RoundedCorners"
        }
    ]
}

Contenedores desplazables en tarjetas adaptables

Un contenedor con muchos elementos puede dar lugar a una tarjeta larga e ilegible. Use la maxHeight propiedad para definir la altura máxima del contenedor. Cuando el contenedor tiene una altura máxima y su contenido supera esa altura, aparece una barra de desplazamiento vertical.

Así es como se define la maxHeight propiedad:

Propiedad Tipo Descripción
maxHeight Cadena Define la altura máxima del contenedor. Esta propiedad está disponible en Container, Column, TableCell, y también en otros contenedores.
Debe definir el valor en el <number>px formato.

La siguiente carga de tarjeta muestra un contenedor con una barra de desplazamiento:

{
    "type": "AdaptiveCard",
    "$schema": "https://adaptivecards.io/schemas/adaptive-card.json",
    "version": "1.5",
    "body": [
        {
            "type": "TextBlock",
            "text": "This is a scrollable container",
            "wrap": true,
            "size": "ExtraLarge",
            "weight": "Bolder"
        },
        {
            "type": "Container",
            "style": "emphasis",
            "showBorder": true,
            "maxHeight": "100px",
            "items": [
                {
                    "type": "TextBlock",
                    "text": "Item 1",
                    "size": "ExtraLarge"
                },
                {
                    "type": "TextBlock",
                    "text": "Item 2",
                    "size": "ExtraLarge"
                },
                {
                    "type": "TextBlock",
                    "text": "Item 3",
                    "size": "ExtraLarge"
                }
            ]
        }
    ]
}

Captura de pantalla que muestra un contenedor desplazable en una tarjeta adaptable en el cliente de escritorio de Teams.

Botón Compuesto en tarjetas adaptables

El botón compuesto es un tipo especial de botón con un icono, un título y una descripción. Puede agregar un botón Compuesto usando el CompoundButton elemento. Este elemento permite replicar la apariencia de los iniciadores de mensajes en una tarjeta adaptable.

Estas son las propiedades del CompoundButton elemento:

Propiedad Obligatorio Tipo Descripción
type ✔️ Cadena Debe ser CompoundButton.
title ✔️ Cadena Título del botón. Markdown no es compatible.
id Cadena Identificador único del elemento o acción.
requires Objeto Una lista de funcionalidades que el elemento requiere que admita la aplicación host. Si la aplicación host no admite al menos una de las funcionalidades enumeradas, el elemento no se representa o se representa su reserva, si se proporciona.
isVisible Booleano Controla la visibilidad del elemento.
separator Booleano Controla si se debe mostrar una línea separadora sobre el elemento para separarlo visualmente del elemento anterior. No se muestra ningún separador para el primer elemento de un contenedor, incluso si esta propiedad se establece en true.
height Cadena Altura del elemento. Cuando se establece en stretch, el elemento utiliza el espacio vertical restante de su contenedor.
Valores permitidos: auto, stretch
horizontalAlignment Cadena Controla cómo se debe alinear horizontalmente el elemento.
Valores permitidos: Left, Center, Right
Spacing Cadena Controla la cantidad de espacio entre este elemento y el anterior. No se agrega espacio para el primer elemento de un contenedor.
Valores permitidos: None, Small, Default, MediumLarge,ExtraLarge
targetWidth Cadena Controla el ancho de la tarjeta para la que se debe mostrar el elemento. Si targetWidth no se especifica, el elemento se representa en todos los anchos de tarjeta. El uso targetWidth permite crear tarjetas responsivas que adaptan su diseño al espacio horizontal disponible. Para obtener más información, consulte Diseño adaptable de tarjeta adaptable.
Valores permitidos: VeryNarrow, Narrow, Standard, Wide
icon Cadena Icono que se muestra en el botón.
badge Cadena Distintivo que se muestra en el botón. Markdown no es compatible.
description Cadena Texto de descripción del botón. Markdown no es compatible.
selectAction Acción que se invoca cuando se selecciona el botón. Se permiten todas las acciones excepto Action.ShowCard.

Estas son las propiedades del icon elemento:

Propiedad Obligatorio Tipo Descripción
name ✔️ Cadena Nombre del icono, según el directorio de iconos de Fluent. Es el mismo que el nombre del nuevo elemento de icono.
size Cadena Tamaño del icono. Valores permitidos: xxSmall, xSmall, Small, StandardMedium, Large, xLarge,xxLarge
style Cadena Estilo del icono. Valores permitidos: Regular, Filled
color Cadena Color del icono. Valores permitidos: Default, Dark, Light, AccentGood, Warning,Attention

Este es un ejemplo de tarjeta adaptable que usa el CompoundButton elemento:

{ 
    "type": "AdaptiveCard", 
    "$schema": "https://adaptivecards.io/schemas/adaptive-card.json", 
    "version": "1.5", 
    "body": [ 
        { 
            "type": "CompoundButton", 
            "title": "Photos", 
            "icon": { 
                "name": "Camera" 
            }, 
            "description": "Add photos", 
            "height": "stretch"
        } 
    ] 
}

Captura de pantalla de la vista de escritorio y móvil de botones compuestos en una tarjeta adaptable.

Iconos de la tarjeta adaptativa

Las tarjetas adaptables admiten la adición de iconos de la biblioteca de iconos de Fluent mediante el Icon elemento. También puedes usar iconos de Fluent en botones de acción estableciendo la propiedad de iconUrl la acción en un valor con el formato de icon:<icon name>[,regular|filled].

Estas son las propiedades del Icon elemento:

Propiedad Description
type Debe ser Icon.
name Nombre del icono que se va a mostrar. Por ejemplo, calendar.
size Tamaño del icono.
Valores permitidos: xxSmall, xSmall, Small, MediumLargexLarge, , y xxLarge
Valor predeterminado:Standard
color Color del icono.
Valores permitidos: Dark, Light, Accent, GoodWarning, y Attention
Valor predeterminado:Default
style Estilo del icono.
Valores permitidos: Filled, Regular
selectAction Acción que se invoca cuando se pulsa o selecciona el icono. Se admiten todos los tipos de acción excepto Action.ShowCard.
Valores permitidos: Action.Execute, Action.OpenUrl, Action.Popover, Action.ResetInputsAction.Submit,Action.ToggleVisibility

Este es un ejemplo de tarjeta adaptable que usa el Icon elemento y la iconUrl propiedad en un botón de acción:

{
  "type": "AdaptiveCard",
  "$schema": "https://adaptivecards.io/schemas/adaptive-card.json",
  "version": "1.5",
  "body": [
    {
      "type": "TextBlock",
      "text": "Here's an Icon element"
    },
    {
  "type": "Icon",
        "name": "Calendar",
        "size": "Medium",
        "style": "Filled",
        "color": "Accent"
    },
    {
      "type": "TextBlock",
      "text": "Here's an Icon element in a button"
    }
 ],
 "actions": [
        {
            "type": "Action.OpenUrl",
            "title": "Filled icon",
            "url": "https://www.microsoft.com",
            "iconUrl": "icon:AccessTime,filled"
        }
    ]
}

Captura de pantalla que muestra una tarjeta adaptable con un icono de Fluent.

Clasificaciones en tarjetas adaptables

Puedes agregar una entrada de clasificación por estrellas a la tarjeta adaptativa mediante el Input.Rating elemento. También puede incluir una clasificación por estrellas de solo lectura con el Rating elemento.

La captura de pantalla muestra una tarjeta adaptable con la clasificación de entrada y las clasificaciones por estrellas de solo lectura.

La siguiente carga muestra una tarjeta adaptable con clasificaciones por estrellas de solo lectura y habilitadas para entrada:

{
    "type": "AdaptiveCard",
    "$schema": "https://adaptivecards.io/schemas/adaptive-card.json",
    "version": "1.5",
    "body": [
        {
            "type": "TextBlock",
            "size": "Large",
            "text": "Rating input"
        },
        {
            "type": "Input.Rating",
            "id": "rating1",
            "label": "Pick a rating",
            "size": "medium",
            "color": "marigold",
            "isRequired": true,
            "errorMessage": "Please pick a rating"
        },
        {
            "type": "TextBlock",
            "size": "large",
            "text": "Read-only rating",
            "separator": true,
            "spacing": "ExtraLarge"
        },
        {
            "type": "Rating",
            "max": 20,
            "value": 3.2,
            "color": "marigold"
        }
    ]
}

Input.Rating

Estas son las propiedades del Input.Rating elemento:

Propiedad Obligatorio Tipo Descripción
type ✔️ Cadena Debe ser Input.Rating.
allowHalfSteps Booleano Controla si el usuario puede seleccionar medias estrellas. Valor predeterminado: false
color Cadena El color de las estrellas.
Valores permitidos: Neutral, Marigold
Valor predeterminado: Neutral
errorMessage Cadena Mensaje de error que se muestra cuando se produce un error en la validación de la entrada.
fallback Uno de objeto o cadena Un elemento alternativo para representar si el tipo de este elemento no se admite o si la aplicación host no admite todas las funcionalidades especificadas en la requires propiedad.
Valores permitidos: Container, ActionSet, ColumnSetMediaRichTextBlockTableTextBlockFactSetImageSetImageInput.TextInput.DateInput.TimeInput.NumberInput.ToggleInput.ChoiceSetInput.RatingRatingCompoundButtonIconChart.DonutChart.PieChart.VerticalBar.GroupedChart.VerticalBarChart.HorizontalBarChart.HorizontalBar.StackedChart.LineChart.GaugeCodeBlockdrop
grid.area Cadena Área de un Layout.AreaGrid diseño en la que se debe mostrar un elemento.
height Cadena Controla la altura del elemento. Cuando se establece en stretch, el elemento utiliza el espacio vertical restante de su contenedor.
Valores permitidos: auto, stretch
Valor predeterminado: auto
id ✔️ Cadena Un identificador único para el elemento o acción.
isRequired Booleano Determina si la entrada es necesaria.
Valor predeterminado: false
isVisible Booleano Determina la visibilidad del elemento.
Valor predeterminado: true
label Cadena Etiqueta de la entrada.
lang Cadena Configuración regional asociada al elemento.
max Número El número de estrellas que se van a mostrar. El número máximo y predeterminado de estrellas admitido es cinco.
requires Objeto Una lista de capacidades que el elemento requiere que la aplicación host admita. Si la aplicación host no admite al menos una de las funcionalidades enumeradas, el elemento no se representa o se representa su reserva, si se proporciona.
Valores permitidos: HostCapabilities
separator Booleano Determina si se debe mostrar una línea separadora sobre el elemento para separarlo visualmente del elemento anterior. No se muestra ningún separador para el primer elemento de un contenedor, incluso si esta propiedad se establece en true.
Valor predeterminado: false
size Cadena El tamaño de las estrellas.
Valores permitidos: Medium, Large
Valor predeterminado: Large
spacing Cadena Controla la cantidad de espacio entre este elemento y el anterior. No se agrega espacio para el primer elemento de un contenedor.
Valores permitidos: None, Small, Default, MediumLarge, ExtraLarge,Padding
Valor predeterminado: Default
targetWidth Cadena Controla el ancho de la tarjeta para la que se debe mostrar el elemento. Si targetWidth no se especifica, el elemento se representa en todos los anchos de tarjeta. El uso targetWidth permite crear tarjetas responsivas que adaptan su diseño al espacio horizontal disponible. Para obtener más información, consulte Diseño adaptable de tarjeta adaptable.
Valores permitidos: VeryNarrow, Narrow, Standard, WideatLeast:VeryNarrowatMost:VeryNarrowatLeast:NarrowatMost:NarrowatLeast:StandardatMost:StandardatLeast:WideatMost:Wide
value Número El valor predeterminado de la entrada. Este valor no puede superar , maxsi max se especifica.
valueChangedAction Acción Acción Action.ResetInputs que se ejecutará cuando cambie el valor de la entrada.
Valor permitido: Action.ResetInputs

Clasificación

Estas son las propiedades del Rating elemento:

Propiedad Obligatorio Tipo Descripción
type ✔️ Cadena Debe ser Rating.
color Cadena El color de las estrellas.
Valores permitidos: Neutral, Marigold
Valor predeterminado: Neutral
count Número El número de "votos" asociados a la clasificación.
fallback Uno de objeto o cadena Un elemento alternativo para representar si este tipo de elemento no se admite o si la aplicación host no admite todas las funcionalidades especificadas en la requires propiedad.
Valores permitidos: Container, ActionSet, ColumnSetMediaRichTextBlockTableTextBlockFactSetImageSetImageInput.TextInput.DateInput.TimeInput.NumberInput.ToggleInput.ChoiceSetInput.RatingRatingCompoundButtonIconChart.DonutChart.PieChart.VerticalBar.GroupedChart.VerticalBarChart.HorizontalBarChart.HorizontalBar.StackedChart.LineChart.GaugeCodeBlockdrop
grid.area Cadena Área de un Layout.AreaGrid diseño en la que se debe mostrar un elemento.
height Cadena La altura del elemento. Cuando se establece en stretch, el elemento utiliza el espacio vertical restante de su contenedor.
Valores permitidos: Auto, Stretch
horizontalAlignment Cadena Controla cómo se debe alinear horizontalmente el elemento.
Valores permitidos: Left, Center, Right
id Cadena Un identificador único para el elemento o acción.
isVisible Booleano Controla la visibilidad del elemento.
Valor predeterminado: true
lang Cadena Configuración regional asociada al elemento.
max Número El número de estrellas que se van a mostrar. El número máximo y predeterminado de estrellas admitido es cinco.
requires Objeto Una lista de capacidades que el elemento requiere que la aplicación host admita. Si la aplicación host no admite al menos una de las funcionalidades enumeradas, el elemento no se representa o se representa su reserva, si se proporciona.
Valor permitido: HostCapabilities
separator Booleano Controla si se debe mostrar una línea separadora sobre el elemento para separarlo visualmente del elemento anterior. No se muestra ningún separador para el primer elemento de un contenedor, incluso si esta propiedad se establece en true.
Valor predeterminado: false
size Cadena El tamaño de las estrellas.
Valores permitidos: Medium, Large
Valor predeterminado: Large
spacing Cadena Controla la cantidad de espacio entre este elemento y el anterior. No se agrega espacio para el primer elemento de un contenedor.
Valores permitidos: None, Small, Default, MediumLarge, ExtraLarge,Padding
Valor predeterminado: Default
style Cadena El estilo de las estrellas. En el modo compacto, solo se muestra una estrella.
Valores permitidos: Default, Compact
Valor predeterminado: Default
targetWidth Cadena Controla el ancho de la tarjeta para la que se debe mostrar el elemento. Si targetWidth no se especifica, el elemento se representa en todos los anchos de tarjeta. El uso targetWidth permite crear tarjetas responsivas que adaptan su diseño al espacio horizontal disponible. Para obtener más información, consulte Diseño adaptable de tarjeta adaptable.
Valores permitidos: VeryNarrow, Narrow, Standard, WideatLeast:VeryNarrowatMost:VeryNarrowatLeast:NarrowatMost:NarrowatLeast:StandardatMost:StandardatLeast:WideatMost:Wide
value Número El valor de la clasificación. Este valor debe estar entre cero y max, si max se especifica.

Dar formato a tarjetas con HTML

Los siguientes tipos de tarjeta admiten el formato HTML en Teams:

  • Tarjetas de conector para Grupos de Microsoft 365: Se admite el formato limitado de Markdown y HTML en la tarjeta de conector para Grupos de Microsoft 365.
  • Tarjetas de miniatura y de elemento principal: las etiquetas HTML son compatibles con tarjetas sencillas, como las tarjetas de miniatura y de elemento principal.

El formato es diferente entre las versiones de escritorio y móvil de Teams para tarjetas de conectores para Grupos de Microsoft 365 y tarjetas simples. En esta sección, puede consultar el ejemplo de formato HTML para tarjetas de conector y tarjetas sencillas.

Las tarjetas de conector admiten formato Markdown y HTML limitado.

Estilo Ejemplo HTML
Negrita text <strong>text</strong>
Italic text <em>text</em>
Encabezado (niveles 1-3) Texto <h3>Text</h3>
Tachado text <strike>text</strike>
Lista no ordenada
  • text
  • text
<ul><li>text</li><li>text</li></ul>
Lista ordenada
  1. text
  2. text
<ol><li>text</li><li>text</li></ol>
Texto con formato previo text <pre>text</pre>
Blockquote
text
<blockquote>text</blockquote>
Hyperlink Bing <a href="https://www.bing.com/">Bing</a>
Vínculo de imagen Pato en una roca <img src="https://aka.ms/Fo983c" alt="Duck on a rock"></img>

En las tarjetas de conector, las líneas nuevas se representan en HTML mediante la etiqueta <p>.

Diferencias entre dispositivos móviles y de escritorio en tarjetas de conector

En el escritorio, el formato HTML para tarjetas de conector aparece como se muestra en la siguiente imagen:

La captura de pantalla muestra el formato HTML de las tarjetas de conectores en el cliente de escritorio.

En iOS, el formato HTML aparece como se muestra en la siguiente imagen:

La captura de pantalla muestra el formato HTML de las tarjetas de conectores en el cliente iOS.

Las tarjetas de conector que usan HTML para iOS muestran los siguientes problemas:

  • Las imágenes en línea no se representan en iOS con Markdown o HTML en tarjetas de conexión.
  • El texto con formato previo se representa, pero no tiene un fondo gris.

En Android, el formato HTML aparece como se muestra en la siguiente imagen:

La captura de pantalla muestra el formato HTML de las tarjetas de conectores en el cliente Android.

Ejemplo de formato para tarjetas de conector HTML

El siguiente código muestra un ejemplo de formato para tarjetas de conector HTML:

{
  "contentType": "application/vnd.microsoft.teams.card.o365connector",
  "content": {
    "@type": "MessageCard",
    "@context": "https://schema.org/extensions",
    "summary": "Summary",
    "title": "Connector Card HTML formatting",
    "sections": [
        {
            "text": "This is some <strong>bold</strong> text"
        },
        {
            "text": "This is some <em>italic</em> text"
        },
        {
            "text": "This is some <strike>strikethrough</strike> text"
        },
        {
            "text": "<h1>Header 1</h1>\r<h2>Header 2</h2>\r <h3>Header 3</h3>"
        },
        {
            "text": "bullet list <ul><li>text</li><li>text</li></ul>"
        },
        {
            "text": "ordered list <ol><li>text</li><li>text</li></ol>"
        },
        {
            "text": "hyperlink <a href=\"https://www.bing.com/\">Bing</a>"
        },
        {
            "text": "embedded image <img src=\"https://aka.ms/Fo983c\" alt=\"Duck on a rock\"></img>"
        },
        {
            "text": "preformatted text <pre>text</pre>"
        },
        {
            "text": "Paragraphs <p>Line a</p><p>Line b</p>"
        },
        {
            "text": "<blockquote>Blockquote text</blockquote>"
        }
     ]
  }
}

Ejemplos de código

S.No. Descripción .NET Node.js Manifiesto
1 En este ejemplo se muestra cómo usar varios estilos de formato en tarjetas adaptables, como menciones, iconos de persona y diseño adaptable. View View Ver

Consulte también