Compartilhar via


Adicionar anexos de cartão avançados a mensagens com a API do Bot Connector

Alguns canais permitem que seu bot envie cartões avançados aos usuários. Um cartão avançado é um anexo que contém elementos interativos, como botões, texto, imagens, áudio, vídeo e assim por diante.

Este artigo descreve como criar cartões avançados que podem ser anexados a uma mensagem. Consulte como adicionar anexos de mídia a mensagens para obter instruções específicas sobre como adicionar um anexo a uma mensagem.

Tipos de cartões avançados

Um cartão avançado é formado por um título, descrição, link e imagens. Uma mensagem pode conter vários cartões avançados, exibidos em formato de carrossel ou de lista. Atualmente, o Bot Framework dá suporte a oito tipos de cartões avançados:

Tipo de cartão Descrição
AdaptiveCard Um cartão personalizável que pode conter qualquer combinação de texto, fala, imagens, botões e campos de entrada. Confira suporte por canal.
AnimationCard Um cartão que pode reproduzir GIFs animados ou vídeos curtos.
AudioCard Um cartão que pode reproduzir um arquivo de áudio.
HeroCard Um cartão que geralmente contém uma única imagem grande, um ou mais botões e um texto.
ThumbnailCard Um cartão que geralmente contém uma única imagem em miniatura, um ou mais botões e um texto.
ReceiptCard Um cartão que permite a um bot fornecer um recibo para o usuário. Normalmente, contém a lista de itens a serem incluídos no recibo, informações fiscais e de totais e outros textos.
SignInCard Um cartão que permite a um bot solicitar a entrada do usuário. Normalmente, contém um texto e um ou mais botões nos quais o usuário pode clicar para iniciar o processo de entrada.
VideoCard Um cartão que pode reproduzir vídeos.

Dica

Para obter mais informações sobre quais recursos são compatíveis com cada canal, confira o artigo referência de canais.

Processar eventos em cartões avançados

Para processar eventos em cartões avançados, use objetos CardAction para especificar o que deve acontecer quando o usuário clica em um botão ou toca em uma seção do cartão. Cada objeto CardAction contém estas propriedades:

Propriedade Type Descrição
channelData string dados específicos do canal associados a esta ação
displayText string texto a ser exibido no feed do chat se o botão receber um clique
text string texto da ação
tipo string tipo de ação (um dos valores especificados na tabela a seguir)
title string título do botão
imagem string URL da imagem do botão
value string valor necessário para executar o tipo de ação especificado

Observação

Botões dentro de Cartões Adaptáveis não são criados usando objetos CardAction, mas usando o esquema definido pelos Cartões Adaptáveis. Consulte Adicionar um Cartão Adaptável a uma mensagem para obter um exemplo que mostra como adicionar botões a um Cartão Adaptável.

Para funcionar corretamente, atribua um tipo de ação para cada item clicável em um cartão de destaque. Esta tabela lista e descreve os tipos de ação disponíveis e quais devem estar na propriedade de valor associada.

A ação do cartão messageBack tem um significado mais generalizado do que as outras ações do cartão. Confira a seção Ação de cartão do Esquema de atividade para obter mais informações sobre o messageBack e outros tipos de ação de cartão.

Tipo Descrição Valor
call Inicia uma chamada telefônica. Destino de uma chamada telefônica nesse formato: tel:123123123123.
downloadFile Baixa um arquivo. A URL do arquivo para download.
imBack Envia uma mensagem para o bot e posta uma resposta visível no bate-papo. Texto da mensagem a ser enviada.
messageBack Representa uma resposta de texto a ser enviado por meio do sistema de chat. Um valor programático opcional a ser incluído nas mensagens geradas.
openUrl Abre uma URL no navegador interno. A URL para abrir.
playAudio Reproduz áudio. A URL do áudio para reproduzir.
playVideo Reproduz um vídeo. A URL do vídeo para reproduzir.
postBack Envia uma mensagem para o bot e não pode postar uma resposta visível no bate-papo. Texto da mensagem a ser enviada.
showImage Exibe uma imagem. A URL da imagem para exibir.
signin Inicia um processo de entrada do OAuth. A URL do fluxo de OAuth para iniciar.

Adicionar um cartão Hero a uma mensagem

Para adicionar um anexo de cartão avançado a uma mensagem:

  1. Crie um objeto que represente o tipo de cartão que você deseja adicionar à mensagem.
  2. Crie um objeto Attachment :
    • Defina sua contentType propriedade como o tipo de mídia do cartão.
    • Defina sua content propriedade como o objeto que você criou para representar o cartão.
  3. Adicione o Attachment objeto à attachments matriz da mensagem.

Dica

As mensagens que contêm anexos de cartão avançados normalmente não especificam text.

Alguns canais permitem que você adicione vários cartões avançados à matriz attachments dentro de uma mensagem. Esse recurso pode ser útil em situações nas quais você deseja apresentar várias opções ao usuário. Por exemplo, se o seu bot permitir que os usuários reservem quartos de hotel, ele poderia apresentar uma lista de cartões avançados com os tipos de quartos disponíveis. Cada cartão pode conter uma imagem e uma lista de comodidades correspondentes ao tipo de quarto, e o usuário pode selecionar um tipo de quarto tocando um cartão ou clicando em um botão.

Dica

Para exibir vários cartões avançados em formato de lista, defina a propriedade attachmentLayout do objeto Activity como "lista". Para exibir vários cartões avançados em formato de carrossel, defina a propriedade Activity do objeto attachmentLayout como "carrossel". Se o canal não der suporte ao formato carrossel, ele exibirá os rich cards no formato de lista, mesmo que a attachmentLayout propriedade especifique "carrossel".

O exemplo a seguir mostra uma mensagem completa que contém um único anexo de cartão Hero. Nessa solicitação de exemplo, https://smba.trafficmanager.net/teams representa o URI base; o URI base das solicitações emitidas pelo bot pode ser diferente. Para obter detalhes sobre como definir o URI base, confira Referência de API.

POST https://smba.trafficmanager.net/teams/v3/conversations/abcd1234/activities/5d5cdc723
Authorization: Bearer ACCESS_TOKEN
Content-Type: application/json
{
    "type": "message",
    "from": {
        "id": "12345678",
        "name": "sender's name"
    },
    "conversation": {
        "id": "abcd1234",
        "name": "conversation's name"
    },
    "recipient": {
        "id": "1234abcd",
        "name": "recipient's name"
    },
    "attachments": [
        {
            "contentType": "application/vnd.microsoft.card.hero",
            "content": {
                "title": "title goes here",
                "subtitle": "subtitle goes here",
                "text": "descriptive text goes here",
                "images": [
                    {
                        "url": "https://www.publicdomainpictures.net/pictures/30000/t2/duck-on-a-rock.jpg",
                        "alt": "picture of a duck",
                        "tap": {
                            "type": "playAudio",
                            "value": "url to an audio track of a duck call goes here"
                        }
                    }
                ],
                "buttons": [
                    {
                        "type": "playAudio",
                        "title": "Duck Call",
                        "value": "url to an audio track of a duck call goes here"
                    },
                    {
                        "type": "openUrl",
                        "title": "Watch Video",
                        "image": "https://www.publicdomainpictures.net/pictures/30000/t2/duck-on-a-rock.jpg",
                        "value": "url goes here of the duck in flight"
                    }
                ]
            }
        }
    ],
    "replyToId": "5d5cdc723"
}

Adicionar um cartão adaptável a uma mensagem

O Cartão Adaptável pode conter qualquer combinação de texto, fala, imagens, botões e campos de entrada. Os Cartões Adaptáveis são criados usando o formato JSON especificado em Cartões Adaptáveis, o que fornece a você controle total sobre o conteúdo e o formato do cartão.

Aproveite as informações dentro do site Cartões Adaptáveis para compreender o esquema de Cartão Adaptável, explore os elementos do Cartão Adaptável e veja exemplos de JSON que podem ser usados para criar cartões de composição e complexidade variadas. Além disso, você pode usar o Visualizador Interativo para criar o conteúdo de Cartão Adaptável e visualizar a saída do cartão.

O exemplo a seguir mostra um único objeto de anexo de Cartão Adaptável, representando uma atribuição de trabalho. Para enviar isso a um usuário, você precisaria adicioná-lo como um anexo em uma mensagem.

{
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "type": "AdaptiveCard",
  "version": "1.0",
  "body": [
    {
      "type": "Container",
      "items": [
        {
          "type": "TextBlock",
          "text": "Publish Adaptive Card schema",
          "weight": "bolder",
          "size": "medium"
        },
        {
          "type": "ColumnSet",
          "columns": [
            {
              "type": "Column",
              "width": "auto",
              "items": [
                {
                  "type": "Image",
                  "url": "https://pbs.twimg.com/profile_images/3647943215/d7f12830b3c17a5a9e4afcc370e3a37e_400x400.jpeg",
                  "size": "small",
                  "style": "person"
                }
              ]
            },
            {
              "type": "Column",
              "width": "stretch",
              "items": [
                {
                  "type": "TextBlock",
                  "text": "Matt Hidinger",
                  "weight": "bolder",
                  "wrap": true
                },
                {
                  "type": "TextBlock",
                  "spacing": "none",
                  "text": "Created {{DATE(2017-02-14T06:08:39Z, SHORT)}}",
                  "isSubtle": true,
                  "wrap": true
                }
              ]
            }
          ]
        }
      ]
    },
    {
      "type": "Container",
      "items": [
        {
          "type": "TextBlock",
          "text": "Now that we have defined the main rules and features of the format, we need to produce a schema and publish it to GitHub. The schema will be the starting point of our reference documentation.",
          "wrap": true
        },
        {
          "type": "FactSet",
          "facts": [
            {
              "title": "Board:",
              "value": "Adaptive Card"
            },
            {
              "title": "List:",
              "value": "Backlog"
            },
            {
              "title": "Assigned to:",
              "value": "Matt Hidinger"
            },
            {
              "title": "Due date:",
              "value": "Not set"
            }
          ]
        }
      ]
    }
  ],
  "actions": [
    {
      "type": "Action.ShowCard",
      "title": "Comment",
      "card": {
        "type": "AdaptiveCard",
        "body": [
          {
            "type": "Input.Text",
            "id": "comment",
            "isMultiline": true,
            "placeholder": "Enter your comment"
          }
        ],
        "actions": [
          {
            "type": "Action.Submit",
            "title": "OK"
          }
        ]
      }
    },
    {
      "type": "Action.OpenUrl",
      "title": "View",
      "url": "https://adaptivecards.io"
    }
  ]
}

O cartão resultante contém um título, informações sobre quem criou o cartão (seu nome e avatar), quando o cartão foi criado, uma descrição das atribuições de trabalho e informações relacionadas à atribuição. Há também botões que podem ser clicados para comentar sobre a atribuição de trabalho ou visualizá-la:

Exemplo de lembrete de calendário como um Cartão Adaptável.

Recursos adicionais