Mensagens ricas
Botões, lista, link e carrossel num formato só. O BoaVoz converte para o WhatsApp, o Instagram e o chat do site, e cai para texto numerado onde o canal não mostra o recurso.
Quem usa
- A IA, sozinha, em todo chatbot com IA: mostra opções quando a pessoa precisa escolher e um botão de link quando a resposta é abrir uma página da base.
- As suas ações, no campo
componentsdo retorno (veja Ações). - A API, no
POST /v1/messages, junto de um texto.
Um componente por mensagem.
Formatos
buttons
De 1 a 3 botões, título até 20 caracteres.
{
"type": "buttons",
"buttons": [
{ "title": "Pedir calabresa", "action": { "name": "adicionar_ao_carrinho", "params": { "item": "101" } } },
{ "title": "Ver cardápio", "id": "ver_cardapio" }
]
}list
De 1 a 10 itens: título até 24 caracteres e description opcional até 72. button (opcional, até 20) é o rótulo do botão que abre a lista no WhatsApp.
{
"type": "list",
"button": "Ver sabores",
"items": [
{ "title": "Pizza Calabresa", "description": "R$ 49,90", "action": { "name": "adicionar_ao_carrinho", "params": { "item": "101" } } },
{ "title": "Pizza Marguerita", "description": "R$ 45,90", "action": { "name": "adicionar_ao_carrinho", "params": { "item": "102" } } },
{ "title": "Falar com a loja", "id": "falar_loja" }
]
}link
Título até 20 caracteres e um endereço HTTPS (link de WhatsApp ou de DM não vale: a conversa já é por ali).
{ "type": "link", "title": "Ver pedido", "url": "https://seu-sistema.com/pedidos/1234" }carousel
De 1 a 10 cards. Cada card tem image ou video (HTTPS), title (até 80) e/ou text (até 300), e os botões: buttons com 1 ou 2 de resposta, ou link com um botão de link ({title, url}). Todos os cards precisam ter o mesmo tipo e a mesma quantidade de botões: é regra do WhatsApp.
{
"type": "carousel",
"cards": [
{
"image": "https://seu-sistema.com/fotos/calabresa.jpg",
"title": "Pizza Calabresa",
"text": "R$ 49,90. Calabresa, cebola e azeitona.",
"buttons": [{ "title": "Pedir este", "action": { "name": "adicionar_ao_carrinho", "params": { "item": "101" } } }]
},
{
"image": "https://seu-sistema.com/fotos/marguerita.jpg",
"title": "Pizza Marguerita",
"text": "R$ 45,90. Tomate, muçarela e manjericão.",
"buttons": [{ "title": "Pedir este", "action": { "name": "adicionar_ao_carrinho", "params": { "item": "102" } } }]
}
]
}Como fica em cada canal
| Site | |||
|---|---|---|---|
| buttons | Botões de resposta | Respostas rápidas e o resumo numerado | Botões |
| list | Lista que abre pelo botão | Respostas rápidas (até 13) e o resumo numerado | Botões |
| link | Botão que abre o link | O link no texto | Botão |
| carousel | Carrossel de mídia; com 1 card, mensagem com a imagem em cima | Cards com foto (só no app) e o resumo numerado | Cards que rolam para o lado |
- WhatsApp, carrossel: o texto do card leva o título no começo e é cortado em 160 caracteres (no fim de uma palavra), com até 2 quebras de linha.
- Instagram pelo computador: respostas rápidas e cards não aparecem no instagram.com. Por isso o resumo numerado das opções vai sempre numa mensagem própria, e a pessoa pode responder com o número.
- Site: só a última mensagem aceita toque, e o primeiro toque desativa os botões dela.
O que acontece no toque
| Botão | Efeito |
|---|---|
| Sem action | O toque volta para a IA como mensagem do contato, com o título do botão (no carrossel, com o nome do card: “Pedir este: Pizza Calabresa”). O seu id volta no webhook message.received, em interactive.id. |
| Com action | Chama a ação direto, sem passar pela IA, com os parâmetros fixos do botão. O toque vale como confirmação, mesmo numa executa. Os parâmetros ficam guardados no BoaVoz e o canal recebe só uma referência, que ninguém consegue forjar. |
- Botão com ação vale por 24 horas. Uso único só nas ações executa ou de pedido: assim o segundo toque em “adicionar” coloca a segunda pizza.
- A ação precisa existir no chatbot, estar ativa e receber parâmetros válidos para o schema dela.
buttons (até 3, numa mensagem com texto). Em list e carousel, ela é recusada. O caminho é o card ou o item chamar uma ação que adiciona ao carrinho, e o reply dela trazer o resumo com o botão “Finalizar pedido”.WhatsApp e Instagram: o portão
- Opção, item ou card com produto proibido pela Meta sai.
- Com bebida alcoólica ou remédio, sai para quem não confirmou 18 anos, e entra o botão “Ver opções 18+” (no carrossel, numa mensagem logo depois).
- Pela API, o BoaVoz nunca edita: o envio é recusado com 422
prohibited_content, apontando o campo.
Pela API
No POST /v1/messages, components vai com "type": "text" e o texto até 1.024 caracteres. Formato fora das regras: 400 invalid_request, com o field do problema (por exemplo, components.cards[1].buttons).
curl https://boavoz.com/api/v1/messages \
-H "Authorization: Bearer bv_live_…" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 6f1d…" \
-d '{
"bot_id": "bot_…",
"to": "phone:5511999990000",
"type": "text",
"text": "Quer receber o cardápio do dia?",
"components": {
"type": "buttons",
"buttons": [{ "title": "Sim, quero", "id": "quero_cardapio" }, { "title": "Agora não", "id": "agora_nao" }]
}
}'