O Ações de conversa vai ser descontinuado em 13 de junho de 2023. Para mais informações, consulte Desativação do recurso Ações de conversa.

Respostas avançadas

As respostas avançadas adicionam elementos visuais para melhorar as interações do usuário com sua ação. É possível usar os seguintes tipos de resposta avançada como parte de um prompt:

  • Cartão básico
  • Card de imagem
  • Cartão de tabela

Ao definir uma resposta avançada, use um candidato com o recurso de superfície RICH_RESPONSE para que o Google Assistente retorne apenas a resposta aprimorada nos dispositivos compatíveis. Só é possível usar uma resposta avançada por objeto content em uma solicitação.

Cartão básico

Os cartões básicos são projetados para ser concisos, apresentar informações importantes (ou resumidas) aos usuários e permitir que eles saibam mais, se você quiser (usando um link da Web).

Use cards básicos principalmente para fins de exibição, já que eles não têm recursos de interação sem um botão. Para vincular um botão à Web, uma superfície também precisa ter o recurso WEB_LINK.

Exemplo de um card básico em um smart display

Propriedades

O tipo básico de resposta do cartão tem as seguintes propriedades:

Propriedade Tipo Requisito Descrição
title string Opcional Título do texto sem formatação do cartão. Os títulos são de fontes e tamanhos fixos, e os caracteres após a primeira linha são truncados. A altura do card será recolhida se nenhum título for especificado.
subtitle string Opcional Subtítulo de texto simples do cartão. Os títulos são de fontes e tamanhos fixos, e os caracteres depois da primeira linha são truncados. A altura do card será recolhida se nenhuma legenda for especificada.
text string Condicional

Conteúdo de texto simples do cartão. Textos muito longos aparecem truncados na última quebra de palavra com reticências. Essa propriedade é obrigatória, a menos que image esteja presente.

Essa propriedade tem as seguintes restrições:

  • Máximo de 15 linhas sem imagem ou 10 com image. São aproximadamente 750 (sem imagem) ou 500 (com imagem). Os dispositivos móveis truncam o texto antes das superfícies com telas maiores.
  • O texto não pode conter um link.

Um subconjunto limitado de Markdown é compatível:

  • Nova linha com espaço duplo seguido por \n
  • **bold**
  • *italics*
image Image Opcional Imagem exibida no card. As imagens podem ser JPG, PNG e GIF (animadas e não animadas).
image_fill ImageFill Opcional Borda entre o card e o contêiner de imagem a ser usado quando a proporção não corresponder à do contêiner de imagem.
button Link Opcional Botão que vincula o usuário a um URL ao ser tocado. O botão precisa ter uma propriedade name que contenha o texto do botão e uma propriedade url que contenha o URL do link. O texto do botão pode não ser enganoso e é verificado durante o processo de revisão.

Exemplo de código

YAML

candidates:
  - first_simple:
      variants:
        - speech: This is a card.
          text: This is a card.
    content:
      card:
        title: Card Title
        subtitle: Card Subtitle
        text: Card Content
        image:
          url: 'https://developers.google.com/assistant/assistant_96.png'
          alt: Google Assistant logo

JSON

{
  "candidates": [
    {
      "first_simple": {
        "variants": [
          {
            "speech": "This is a card.",
            "text": "This is a card."
          }
        ]
      },
      "content": {
        "card": {
          "title": "Card Title",
          "subtitle": "Card Subtitle",
          "text": "Card Content",
          "image": {
            "url": "https://developers.google.com/assistant/assistant_96.png",
            "alt": "Google Assistant logo"
          }
        }
      }
    }
  ]
}

Node.js (link em inglês)

app.handle('Card', conv => {
  conv.add('This is a card.');
  conv.add(new Card({
    "title": "Card Title",
    "subtitle": "Card Subtitle",
    "text": "Card Content",
    "image": new Image({
      url: 'https://developers.google.com/assistant/assistant_96.png',
      alt: 'Google Assistant logo'
    })
  }));
});

JSON

{
  "responseJson": {
    "session": {
      "id": "session_id",
      "params": {}
    },
    "prompt": {
      "override": false,
      "content": {
        "card": {
          "title": "Card Title",
          "subtitle": "Card Subtitle",
          "text": "Card Content",
          "image": {
            "alt": "Google Assistant logo",
            "height": 0,
            "url": "https://developers.google.com/assistant/assistant_96.png",
            "width": 0
          }
        }
      },
      "firstSimple": {
        "speech": "This is a card.",
        "text": "This is a card."
      }
    }
  }
}

Cards de imagem

Os cartões de imagem foram criados para ser uma alternativa mais simples a um cartão básico que também contém uma imagem. Use um cartão de imagem quando quiser apresentar uma imagem e não precisar oferecer compatibilidade com texto ou componentes interativos.

Propriedades

O tipo de resposta do cartão de imagem tem as seguintes propriedades:

Propriedade Tipo Requisito Descrição
url string Obrigatório URL de origem da imagem. As imagens podem estar nos formatos JPG, PNG ou GIF (animado e não animado).
alt string Obrigatório Descrição do texto da imagem a ser usada para acessibilidade.
height int32 Opcional Altura da imagem em pixels.
width int32 Opcional Largura da imagem, em pixels.

Exemplo de código

YAML

candidates:
  - first_simple:
      variants:
        - speech: This is an image prompt.
          text: This is an image prompt.
    content:
      image:
        alt: Google Assistant logo
        url: 'https://developers.google.com/assistant/assistant_96.png'

JSON

{
  "candidates": [
    {
      "first_simple": {
        "variants": [
          {
            "speech": "This is an image prompt.",
            "text": "This is an image prompt."
          }
        ]
      },
      "content": {
        "image": {
          "alt": "Google Assistant logo",
          "url": "https://developers.google.com/assistant/assistant_96.png"
        }
      }
    }
  ]
}

Node.js (link em inglês)

app.handle('Image', conv => {
  conv.add("This is an image prompt!");
  conv.add(new Image({
      url: 'https://developers.google.com/assistant/assistant_96.png',
      alt: 'Google Assistant logo'
  }));
});

JSON

{
  "responseJson": {
    "session": {
      "id": "session_id",
      "params": {}
    },
    "prompt": {
      "override": false,
      "content": {
        "image": {
          "alt": "Google Assistant logo",
          "height": 0,
          "url": "https://developers.google.com/assistant/assistant_96.png",
          "width": 0
        }
      },
      "firstSimple": {
        "speech": "This is an image prompt.",
        "text": "This is an image prompt."
      }
    }
  }
}

Cards de tabela

Com eles, é possível exibir dados tabulares na resposta, como classificações esportivas, resultados eleitorais e voos. Você pode definir colunas e linhas (até três cada) que o Google Assistente mostra no card da tabela. Também é possível definir colunas e linhas adicionais, além da priorização.

Exemplo de um card de tabela no Smart Display

As tabelas exibem dados estáticos e não são interativas. Para respostas interativas de seleção, use uma resposta visual de seleção.

Propriedades

O tipo de resposta do cartão de tabela tem as seguintes propriedades:

Propriedade Tipo Requisito Descrição
title string Condicional Título do texto simples da tabela. Essa propriedade será obrigatória se subtitle for definido.
subtitle string Opcional Subtítulo de texto simples da tabela. As legendas nos cards de tabela não são afetadas pela personalização do tema.
columns matriz de TableColumn Obrigatório Cabeçalhos e alinhamento de colunas. Cada objeto TableColumn descreve o cabeçalho e o alinhamento de uma coluna diferente na mesma tabela.
rows matriz de TableRow Obrigatório

Dados de linha da tabela. As três primeiras linhas são garantidas, mas outras podem não aparecer em determinadas plataformas. Você pode testar com o simulador para ver quais linhas são mostradas para uma determinada superfície.

Cada objeto TableRow descreve as células de uma linha diferente na mesma tabela.

image Image Opcional Imagem associada à tabela.
button Link Opcional Botão que vincula o usuário a um URL ao ser tocado. O botão precisa ter uma propriedade name que contenha o texto do botão e uma propriedade url que contenha o URL do link. O texto do botão pode não ser enganoso e é verificado durante o processo de revisão.

Exemplo de código

Os snippets a seguir mostram como implementar um cartão de tabela:

YAML

candidates:
  - first_simple:
      variants:
        - speech: This is a table.
          text: This is a table.
    content:
      table:
        title: Table Title
        subtitle: Table Subtitle
        columns:
          - header: Column A
          - header: Column B
          - header: Column C
        rows:
          - cells:
              - text: A1
              - text: B1
              - text: C1
          - cells:
              - text: A2
              - text: B2
              - text: C2
          - cells:
              - text: A3
              - text: B3
              - text: C3
        image:
          alt: Google Assistant logo
          url: 'https://developers.google.com/assistant/assistant_96.png'

JSON

{
  "candidates": [
    {
      "first_simple": {
        "variants": [
          {
            "speech": "This is a table.",
            "text": "This is a table."
          }
        ]
      },
      "content": {
        "table": {
          "title": "Table Title",
          "subtitle": "Table Subtitle",
          "columns": [
            {
              "header": "Column A"
            },
            {
              "header": "Column B"
            },
            {
              "header": "Column C"
            }
          ],
          "rows": [
            {
              "cells": [
                {
                  "text": "A1"
                },
                {
                  "text": "B1"
                },
                {
                  "text": "C1"
                }
              ]
            },
            {
              "cells": [
                {
                  "text": "A2"
                },
                {
                  "text": "B2"
                },
                {
                  "text": "C2"
                }
              ]
            },
            {
              "cells": [
                {
                  "text": "A3"
                },
                {
                  "text": "B3"
                },
                {
                  "text": "C3"
                }
              ]
            }
          ],
          "image": {
            "alt": "Google Assistant logo",
            "url": "https://developers.google.com/assistant/assistant_96.png"
          }
        }
      }
    }
  ]
}

Node.js (link em inglês)

app.handle('Table', conv => {
  conv.add('This is a table.');
  conv.add(new Table({
    "title": "Table Title",
    "subtitle": "Table Subtitle",
    "image": new Image({
      url: 'https://developers.google.com/assistant/assistant_96.png',
      alt: 'Google Assistant logo'
    }),
    "columns": [{
      "header": "Column A"
    }, {
      "header": "Column B"
    }, {
      "header": "Column C"
    }],
    "rows": [{
      "cells": [{
        "text": "A1"
      }, {
        "text": "B1"
      }, {
        "text": "C1"
      }]
    }, {
      "cells": [{
        "text": "A2"
      }, {
        "text": "B2"
      }, {
        "text": "C2"
      }]
    }, {
      "cells": [{
        "text": "A3"
      }, {
        "text": "B3"
      }, {
        "text": "C3"
      }]
    }]
  }));
});

JSON

{
  "responseJson": {
    "session": {
      "id": "session_id",
      "params": {}
    },
    "prompt": {
      "override": false,
      "content": {
        "table": {
          "button": {},
          "columns": [
            {
              "header": "Column A"
            },
            {
              "header": "Column B"
            },
            {
              "header": "Column C"
            }
          ],
          "image": {
            "alt": "Google Assistant logo",
            "height": 0,
            "url": "https://developers.google.com/assistant/assistant_96.png",
            "width": 0
          },
          "rows": [
            {
              "cells": [
                {
                  "text": "A1"
                },
                {
                  "text": "B1"
                },
                {
                  "text": "C1"
                }
              ]
            },
            {
              "cells": [
                {
                  "text": "A2"
                },
                {
                  "text": "B2"
                },
                {
                  "text": "C2"
                }
              ]
            },
            {
              "cells": [
                {
                  "text": "A3"
                },
                {
                  "text": "B3"
                },
                {
                  "text": "C3"
                }
              ]
            }
          ],
          "subtitle": "Table Subtitle",
          "title": "Table Title"
        }
      },
      "firstSimple": {
        "speech": "This is a table.",
        "text": "This is a table."
      }
    }
  }
}

Como personalizar suas respostas

É possível alterar a aparência das suas respostas avançadas criando um tema personalizado para o projeto do Actions. Essa personalização pode ser útil para definir uma aparência exclusiva para a conversa quando os usuários invocam suas ações em uma superfície com uma tela.

Para definir um tema de resposta personalizado, faça o seguinte:

  1. No Console do Actions, acesse Desenvolver > Personalização do tema.
  2. Defina uma ou todas as opções a seguir:
    • Cor do plano de fundo: usada como o plano de fundo dos seus cartões. Em geral, use uma cor clara para o plano de fundo para facilitar a leitura do conteúdo do cartão.
    • Cor principal: é a cor principal do texto do cabeçalho e dos elementos da interface dos cartões. Em geral, use uma cor principal mais escura para contrastar melhor com a cor do plano de fundo.
    • Família de fontes: descreve o tipo de fonte usado para títulos e outros elementos de texto em destaque.
    • Estilo do canto da imagem: altera a aparência dos cantos dos seus cartões.
    • Imagem de plano de fundo: imagem personalizada a ser usada no lugar da cor de fundo. Forneça duas imagens diferentes para quando o dispositivo de superfície estiver no modo paisagem ou retrato. Se você usar uma imagem de plano de fundo, a cor principal será definida como branco.
  3. Clique em Salvar.
Como personalizar o tema no Console do Actions