Mensagens
Enviar Formulário
Envia botão que abre Native Flow do WhatsApp para captura estruturada de dados
POST
Enviar Formulário
Auth:
Flow customizado via
Escape hatch para flows próprios (criados no WhatsApp Business Manager). Quando
Envelope de erro:
TokenAccount ou TokenInstance • Rate-limit: Global (100/min) • Idempotente: não
Descrição
Envia uma mensagem com um botão que abre um Native Flow do WhatsApp, um formulário nativo que coleta dados estruturados (nome, telefone, e-mail, CPF/CNPJ, endereço) sem sair da conversa. Suporta dois fluxos prontos:contact_details (Dados do cliente) e registration_offer (Oferta de Cadastro), além de uma escape hatch via buttonParamsJSON para flows totalmente customizados. Ideal para captação de leads, cadastros e ofertas com confirmação rápida.
Exemplos
Oferta de cadastro (registration_offer)
Envia uma oferta com título e descrição. O botão abre o Flow padrão de cadastro com os campos visíveis configuráveis.Captura de dados de contato (contact_details)
Usa o flow oficialcontact_details do WhatsApp. Esconda campos que você não quer pedir via flags *Visible. Aqui pedimos só nome, telefone e e-mail.
Flow customizado via buttonParamsJSON
Escape hatch para flows próprios (criados no WhatsApp Business Manager). Quando buttonParamsJSON é fornecido, o servidor ignora todos os outros campos relacionados ao flow (formType, flowId, visibilidades, offerName, etc.) e usa o JSON literal como params do botão Native Flow.
Criar Flows
Acesse o WhatsApp Business Manager para criar e gerenciar seus Flows customizados (obtenha o
flow_id aqui).Playground de Flows
Teste e prototipe schemas de Flow no playground oficial da Meta antes de publicar em produção.
Resposta de sucesso
OmessageType retornado é interactive (formulário é uma variação de mensagem interativa Native Flow), e o content ecoa o message enviado. Guarde o messageId (e o flowToken, gerado automaticamente quando você não envia) para correlacionar com a resposta do flow no webhook.
200 OK
Quando o usuário preenche e envia o formulário, o WhatsApp envia uma mensagem do tipo
interactive_response carregando o flow_token (UUID que você informou ou o gerado automaticamente) e o JSON com as respostas. Capture via webhook/websocket para correlacionar com o envio.Parâmetros de rota
Nome da instância (ex.:
$Instance_Name).Headers
TokenAccount ou TokenInstance.application/jsonRequest body
Destino: telefone (
5511999999999) ou JID (@s.whatsapp.net, @lid, @g.us).Texto exibido no balão da mensagem, acima do botão que abre o Flow.
Tipo de formulário pré-configurado:
"contact_details" (Dados do cliente) ou "registration_offer" (Oferta de Cadastro). Ignorado se buttonParamsJSON for fornecido.Texto exibido no botão que abre o Flow (
flow_cta).Token para correlacionar a resposta do formulário com o envio. Quando omitido, o servidor gera um UUID automaticamente. Você pode usar esse token para amarrar com um lead/oportunidade no seu CRM.
ID do Flow no WhatsApp Business. Padrões por
formType:contact_details→1889354358373616registration_offer→892701196712475
buttonParamsJSON).Versão do
flow_message_version enviada para o WhatsApp.Versão do
message_version do payload Native Flow.Escape hatch para flows totalmente customizados. Quando fornecido, o servidor envia esse JSON literal como
params do botão Native Flow e ignora formType, flowId, flowToken, flowMessageVersion, messageVersion, todas as flags *Visible, offerName e offerDescription. Útil para integrar com flows que você criou no WhatsApp Business Manager com schemas específicos.Exibe o campo “Nome completo” no formulário. Ignorado se
buttonParamsJSON for fornecido.Exibe o campo “Número de telefone”.
Exibe o campo “E-mail”.
Exibe o campo “CPF/CNPJ”.
Exibe o campo “Endereço de entrega”.
Título da oferta exibido dentro do Flow. Usado quando
formType=registration_offer.Descrição da oferta exibida dentro do Flow. Usado quando
formType=registration_offer.Tempo em segundos para aguardar antes de enviar. Durante o intervalo, o servidor envia o indicador de “digitando…” ao destinatário.
ID da mensagem a ser citada (reply). A mensagem original precisa pertencer à mesma instância e ter sido salva no banco.
Quando
true e replyTo aponta para uma mensagem originária de um grupo, a resposta é redirecionada para o privado do autor original.Identificador de origem para rastreabilidade (ex.:
crm, landing-vendas, n8n).Notas
- Os Flows
contact_detailseregistration_offersão templates do WhatsApp já aprovados e prontos para uso. Se quiser um formulário com campos específicos (perguntas custom, lógicas de tela), usebuttonParamsJSONcom um Flow seu. - O
flowTokené o seu identificador para amarrar a resposta do formulário com o registro de origem (lead, pedido, etc.). Se não enviar, salve o UUID gerado para conseguir correlacionar depois. - Quando
buttonParamsJSONé enviado, todos os outros campos relacionados ao Flow são ignorados, você assume controle total do payload, incluindo oflow_id,flow_action,flow_action_payloadeflow_message_version. - Native Flow só funciona em chats 1-a-1 (
@s.whatsapp.net) e em grupos (@g.us); canais (@newsletter) não são suportados pelo WhatsApp. - A resposta do formulário chega como evento
interactive_response, não é uma mensagem de texto comum, então trate o webhook adequadamente.
Erros
| HTTP | Status interno | Mensagem |
|---|---|---|
| 400 | , | Instance name is required |
| 400 | , | Invalid request: <detalhe> |
| 400 | , | Number is required |
| 400 | , | Message is required |
| 400 | invalid_number | Invalid phone number format: <detalhe> |
| 400 | reply_message_not_found | Original message not found (ID: ...) |
| 400 | reply_message_instance_mismatch | Original message does not belong to this instance |
| 400 | private_reply_failed | (motivo do erro de redirecionamento privado) |
| 404 | , | Instance not found |
| 500 | send_failed | Failed to send message: <reason> |
| 503 | disconnected | Instance is not connected to WhatsApp |