Além de mensagens de texto, os apps de chat podem enviar mensagens de card em espaços e usuários. Os cards oferecem suporte a layouts definidos, elementos interativos da IU, como botões, e rich media, como imagens.
Use as mensagens do cartão para:
- Apresentar informações detalhadas
- Coletar informações dos usuários
- Oriente os usuários a seguir para uma próxima etapa
Este guia descreve como enviar mensagens de cartão de forma síncrona (uma resposta em tempo real para um evento do Chat, como receber uma mensagem de um usuário ou ser adicionada a um espaço) e de forma assíncrona (enviar uma mensagem do app para um espaço ou usuário sem uma solicitação usando a API REST do Chat).
Pré-requisitos
Para enviar as mensagens do cartão neste guia, você precisa do seguinte:
Node.js
- Uma conta do Google Workspace com acesso ao Google Chat.
- Um app do Chat. Para criar um, siga este guia de início rápido.
Observação: as amostras de código Node.js neste guia foram escritas para serem executadas como uma função do Google Cloud.
Python
- Uma conta do Google Workspace com acesso ao Google Chat.
- Um app do Chat. Para criar um, siga este guia de início rápido.
Observação: as amostras de código Python neste guia são escritas para serem executadas como uma função do Google Cloud usando o Python 3.9.
Apps Script
- Uma conta do Google Workspace com acesso ao Google Chat.
- Um app do Chat. Para criar um, siga este guia de início rápido.
Anatomia da mensagem de um cartão
Cada card, seja uma caixa de diálogo ou uma mensagem, é um objeto JSON no recurso spaces.messages
na API Chat.
O objeto JSON do cartão consiste no seguinte:
- Uma matriz chamada
cardsV2[]
, que contém um ou mais objetosCardWithId
. - Um
cardId
, usado para identificar o cartão e o escopo de uma determinada mensagem. Os cartões em mensagens diferentes podem ter o mesmo ID. Um objeto
card
, que consiste no seguinte:- Um objeto
header
que especifica itens como título, subtítulo e imagem no estilo avatar. - Um ou mais objetos
section
, cada um contendo pelo menos um widget. Um ou mais objetos
widget
Cada widget é um objeto composto que pode representar textos, imagens, botões e outros tipos de objetos.Os seguintes widgets têm suporte em mensagens e caixas de diálogo de cards:
TextParagraph
: exibe um parágrafo de texto com a formatação HTML simples opcional.Image
: mostra uma imagem.PNG
ou.JPG
clicável ou estática hospedada em um URL HTTPS.DecoratedText
: mostra texto com recursos opcionais de layout e funcionalidade, como ícones e botões.ButtonList
: mostra um conjunto de botões.
Os seguintes widgets são compatíveis em caixas de diálogo (em breve, mensagens no cartão serão aceitas):
TextInput
: campo em que os usuários podem inserir texto.SelectionInput
: mostra um conjunto de itens selecionáveis, como uma lista de caixas de seleção, botões de opção, interruptores ou um menu suspenso.Divider
: mostra uma linha horizontal que abrange a largura de um card entre widgets empilhados, agindo como um divisor visual.Grid
: mostra um conjunto de itens em uma grade simples.
O suporte para o seguinte widget será disponibilizado em breve:
DateTimePicker
: permite especificar a data, a hora ou ambas.
- Um objeto
Por exemplo, observe os objetos header
, section
e widget
na seguinte mensagem do cartão:
O código a seguir representa o JSON da mensagem do cartão:
JSON
{
"cardsV2": [
{
"cardId": "unique-card-id",
"card": {
"header": {
"title": "Sasha",
"subtitle": "Software Engineer",
"imageUrl":
"https://developers.google.com/chat/images/quickstart-app-avatar.png",
"imageType": "CIRCLE",
"imageAltText": "Avatar for Sasha",
},
"sections": [
{
"header": "Contact Info",
"collapsible": true,
"uncollapsibleWidgetsCount": 1,
"widgets": [
{
"decoratedText": {
"startIcon": {
"knownIcon": "EMAIL",
},
"text": "sasha@example.com",
}
},
{
"decoratedText": {
"startIcon": {
"knownIcon": "PERSON",
},
"text": "<font color=\"#80e27e\">Online</font>",
},
},
{
"decoratedText": {
"startIcon": {
"knownIcon": "PHONE",
},
"text": "+1 (555) 555-1234",
}
},
{
"buttonList": {
"buttons": [
{
"text": "Share",
"onClick": {
"openLink": {
"url": "https://example.com/share",
}
}
},
{
"text": "Edit",
"onClick": {
"action": {
"function": "goToView",
"parameters": [
{
"key": "viewType",
"value": "EDIT",
}
],
}
}
},
],
}
},
],
},
],
},
}
],
}
Enviar uma mensagem de cartão síncrona
Neste exemplo, um usuário envia uma mensagem no app de chat, e o app responde com uma mensagem simples de cartão síncrono que mostra o nome do remetente e a imagem do avatar:
Nas amostras de código a seguir, os apps Node.js e Python são hospedados no Google Cloud Functions. O exemplo do Apps Script está hospedado no Google Apps Script.
Veja instruções sobre como criar e implantar um app de chat em Criar um app de chat.
Node.js
Python
Apps Script
Enviar uma mensagem de cartão assíncrona com a API Chat
Este exemplo cria uma mensagem de forma assíncrona com a API Chat e a envia para um espaço ao qual o app Chat é adicionado, como mostrado abaixo:

Python
- No diretório de trabalho, crie um arquivo chamado
chat_create_card_message.py
. Inclua o seguinte código em
chat_create_card_message.py
:from httplib2 import Http from oauth2client.service_account import ServiceAccountCredentials from apiclient.discovery import build # Specify required scopes. SCOPES = ['https://www.googleapis.com/auth/chat.bot'] # Specify service account details. CREDENTIALS = ServiceAccountCredentials.from_json_keyfile_name( 'service_account.json', SCOPES) # Build the URI and authenticate with the service account. chat = build('chat', 'v1', http=CREDENTIALS.authorize(Http())) # Create a Chat message. result = chat.spaces().messages().create( # The space to create the message in. # # Replace SPACE with a space name. # Obtain the space name from the spaces resource of Chat API, # or from a space's URL. parent='spaces/SPACE', # The message to create. body= { 'cardsV2': [{ 'cardId': 'createCardMessage', 'card': { 'header': { 'title': 'A Card Message!', 'subtitle': 'Created with Chat REST API', 'imageUrl': 'https://developers.google.com/chat/images/chat-product-icon.png', 'imageType': 'CIRCLE' }, 'sections': [ { 'widgets': [ { 'buttonList': { 'buttons': [ { 'text': 'Read the docs!', 'onClick': { 'openLink': { 'url': 'https://developers.google.com/chat' } } } ] } } ] } ] } }] } ).execute() print(result)
No código, substitua
SPACE
por um nome de espaço, que pode ser acessado no métodospaces.list()
na API Chat ou no URL de um espaço.No diretório de trabalho, crie e execute o exemplo:
python3 chat_create_card_message.py
Saiba mais sobre como trabalhar com mensagens na API REST do Chat em Criar, ler, atualizar e excluir mensagens.
Abrir uma caixa de diálogo
As caixas de diálogo são interfaces baseadas em janelas que os apps de chat abrem para interagir com os usuários. Para ajudar os usuários a realizar processos de várias etapas, os apps podem abrir caixas de diálogo sequenciais. Os apps podem abrir caixas de diálogo em resposta a um clique no botão em uma mensagem de cartão ou em resposta a um comando de barra.
As caixas de diálogo são úteis para muitos tipos de interação do usuário, incluindo:
- Coleta de informações dos usuários
- Como autenticar usuários com serviços da Web
- Definir as configurações do app Chat
Neste exemplo, um app de chat abre uma caixa de diálogo para ajudar um usuário a criar um novo contato para o catálogo de endereços:
Para implementar caixas de diálogo, consulte Abrir caixas de diálogo.
Formatação de cards
Formatação de texto dos cards
Dentro dos cards, a maioria dos campos de texto é compatível com a formatação básica de texto usando um pequeno subconjunto de tags HTML. As tags compatíveis e a finalidade delas são mostradas na tabela abaixo:
Negrito | <b> | Itálico | <i> | |
Sublinhado | <> | Tachado | <aviso> | |
Cor da fonte | <font color=""> | Hiperlink | <a href=""> | |
Quebra de linha | <br> |
O corpo do texto de uma mensagem básica é analisado com uma sintaxe de marcação diferente, otimizada para usuários humanos. Veja mais detalhes em Enviar uma mensagem de texto.
Ícones integrados
Os widgets
DecoratedText
e
ButtonList
são compatíveis com o elemento icon
usado para especificar um dos ícones integrados disponíveis no Google Chat:
{ . . . "knownIcon": "TRAIN", . . . }
A tabela a seguir lista os ícones integrados disponíveis para mensagens de card:
PLANO DE AR | MARCADORES | ||
Ônibus | CARRO | ||
RELÓGIO | CONFIRMATION_NUMBER_ICON (em inglês) | ||
DESCRIÇÃO | MOEDA | ||
EVENTO_DE_EVENTO | |||
Voo de chegada | VOLTAR_DE_VOZ | ||
HOTEL | HOTEL_ROOM_TYPE | ||
CONVITE | MAP_PIN (em inglês) | ||
ASSINATURA | MULTIPLE_Pessoas | ||
PESSOA | TELEFONE | ||
RESTAURANT_ÍCONE | SHOPPING_CART (em inglês) | ||
ESTRELA | LOJA | ||
INGRESSO | TREINAR | ||
VIDEO_CAMERA (em inglês) | VÍDEO_PLAY |
Ícones personalizados
Os widgets DecoratedText
e ButtonList
permitem usar
os ícones integrados listados acima ou definir seus próprios ícones personalizados. Para especificar um
ícone personalizado, use o elemento iconUrl
, conforme mostrado aqui:
{. . . "iconUrl": "https://developers.google.com/chat/images/quickstart-app-avatar.png" . . . }
Limites e considerações
Ao se preparar para enviar mensagens de cartão, considere esses limites e considerações.
Os widgets a seguir não são compatíveis com mensagens de cartão, mas vão estar disponíveis em breve:
TextInput
, um campo em que os usuários podem inserir texto.SelectionInput
, que fornece um conjunto de itens selecionáveis, como uma lista de caixas de seleção, botões de opção, interruptores ou um menu suspenso.DateTimePicker
, que permite aos usuários especificar uma data, hora ou ambos.Grid
, que mostra um conjunto de itens em uma grade simples.