Skip to main content
POST
Enviar Botões
Auth: TokenAccount ou TokenInstanceRate-limit: Global (100/min) • Idempotente: não

Descrição

Envia uma mensagem com até 3 botões interativos (limite do WhatsApp). Os botões aceitam quatro tipos: REPLY (padrão, retorna o ID quando clicado), URL (abre link), CALL (disca número) e COPY (copia código). O header pode ser texto (headerText) ou mídia (mediaUrl + mediaType). Se mediaUrl for enviado, mediaType é obrigatório e deve ser maiúsculo: IMAGE, VIDEO ou DOCUMENT. Quando há mídia, headerText é ignorado (a mídia substitui o título).

Exemplos

3 botões REPLY

O botão REPLY serve para responder uma mensagem específica dentro da conversa: quando o cliente toca, o WhatsApp envia uma resposta citando a mensagem original com o texto do botão (displayText), é isso que aparece no chat. Já no webhook/websocket, o que chega para sua aplicação é o id do botão clicado, permitindo identificar a opção sem depender do texto exibido.
Quando REPLY é misturado com outros tipos (URL, CALL, COPY) na mesma mensagem, o botão REPLY não aparece no WhatsApp Web/Desktop, só fica visível no app do smartphone. O ideal é usar apenas botões REPLY ou apenas combinações de URL/CALL/COPY, sem misturar.
Caso clássico de menu rápido. Cada botão retorna seu id no webhook quando clicado.

Com header de imagem

Quando mediaUrl está presente, mediaType é obrigatório e deve ser maiúsculo (IMAGE, VIDEO, DOCUMENT). headerText é ignorado neste caso.

Mix de URL + CALL + COPY

Combina três tipos diferentes de botão em uma só mensagem. O id carrega valores semânticos distintos por tipo.

Resposta de sucesso

O content retorna o contentText enviado, e o messageType é fixo em buttons. A definição dos botões em si não vem na resposta, guarde o messageId para correlacionar os cliques que chegam via webhook.
200 OK
Quando o usuário toca em um botão REPLY, a resposta chega no webhook com message.type igual a template_button_reply e o id do botão clicado em message.content (e também em message.interactive.selectedButtonId). Capture isso pelo webhook para encadear o fluxo.

Parâmetros de rota

string
obrigatório
Nome da instância (ex.: $Instance_Name).

Headers

string
obrigatório
TokenAccount ou TokenInstance.
string
obrigatório
application/json

Request body

string
obrigatório
Destino: telefone (5511999999999) ou JID (@s.whatsapp.net, @lid, @g.us, @newsletter).
string
obrigatório
Texto principal do corpo da mensagem (entre header e botões).
ButtonOption[]
obrigatório
Lista de botões. Mínimo 1, máximo 3 (limite do WhatsApp). Cada botão tem:
  • id (string, obrigatório), semântica varia por type: REPLY retorna esse ID; URL abre essa URL; CALL disca esse número; COPY copia esse código.
  • displayText (string, obrigatório), texto visível no botão.
  • type (string), REPLY (padrão), URL, CALL ou COPY. Outro valor retorna 400 Button N: Type must be one of: REPLY, URL, CALL, COPY.
string
Título exibido no topo da mensagem. Ignorado se mediaUrl for fornecido (a mídia substitui o header).
Texto opcional exibido abaixo dos botões.
string
URL de uma mídia (imagem, vídeo ou documento) para usar como header. Quando enviado, mediaType torna-se obrigatório.
string
Tipo da mídia em mediaUrl. Obrigatório se mediaUrl estiver presente. Aceita apenas IMAGE, VIDEO ou DOCUMENT (maiúsculo). Outro valor retorna 400 MediaType must be one of: IMAGE, VIDEO, DOCUMENT.
int
padrão:"0"
Tempo em segundos para aguardar antes de enviar. Durante o intervalo, o servidor envia o indicador de “digitando…” e dispara o “paused” antes do envio real.
string
ID da mensagem a ser citada (reply). A mensagem original precisa pertencer à mesma instância e ter sido salva no banco.
boolean
padrão:"false"
Quando true e replyTo aponta para uma mensagem originária de um grupo, a mensagem é redirecionada para o privado do autor original (mantendo a citação).
string
padrão:"api"
Identificador de origem para rastreabilidade (ex.: crm, bot-suporte, n8n). Salvo no registro da mensagem e propagado para webhooks.

Notas

  • delay é em segundos (não milissegundos).
  • O WhatsApp aceita no máximo 3 botões por mensagem. Quatro ou mais retornam 400 Maximum of 3 buttons allowed.
  • Se mediaUrl é enviado, headerText é silenciosamente ignorado.
  • mediaType é normalizado para maiúsculo internamente, envie sempre IMAGE, VIDEO ou DOCUMENT.
  • Para botões URL, garanta que o link comece com https:// para evitar bloqueio pelo cliente.
  • Para botões CALL, use formato internacional (+5511...).
  • Aparelhos antigos podem cair em fallback de texto e exibir os botões como mensagem comum.

Erros

Envelope de erro: