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.
Compatibilidade de cliente: Native Flows ainda não são suportados no WhatsApp Web/Desktop. O botão do formulário só será renderizado para destinatários nos apps oficiais de Android e iOS, em outros clientes a mensagem aparecerá sem o botão interativo.
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.
O messageType 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
{ "success": true, "message": "Form message sent successfully", "status": "sent", "data": { "messageId": "3EB08FCF27E532F1B0F5", "direction": "sent", "messageType": "interactive", "content": "Garanta sua vaga no curso com 50% off!", "source": "api", "timestamp": "2026-04-30T14:30:00Z", "chat": { "jid": "5511999999999@s.whatsapp.net", "isGroup": false }, "sender": { "jid": "5511777777777@s.whatsapp.net", "instance": "minha-instancia" } }}
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.
Tipo de formulário pré-configurado: "contact_details" (Dados do cliente) ou "registration_offer" (Oferta de Cadastro). Ignorado se buttonParamsJSON for fornecido.
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.
Escape hatch para flows totalmente customizados. Quando fornecido, o servidor envia esse JSON literal como params do botão Native Flow e ignoraformType, 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.
Os Flows contact_details e registration_offer sã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), use buttonParamsJSON com 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 o flow_id, flow_action, flow_action_payload e flow_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.