Formulários do WhatsApp

Colete Respostas Estruturadas Dentro do WhatsApp

Crie um formulário no Flow Builder da Meta, sincronize-o com a StartMessaging e anexe-o a um botão de template. Os clientes preenchem sem sair da conversa, e cada resposta chega como campos identificados na sua caixa de entrada, na API e nos seus webhooks. Os WhatsApp Forms fazem parte do plano Business e do teste grátis de 14 dias.

✦ Teste grátis de 14 dias · Seu próprio número do WhatsApp Business · A Meta cobra as mensagens diretamente

Criado na Meta, Usado na StartMessaging

Os Formulários do WhatsApp são Meta Flows. Você cria as telas e perguntas no Flow Builder da Meta, no Meta Business Manager; a StartMessaging não tem um editor de formulários próprio. Clique em Sincronizar da Meta e seus formulários aparecem na página Formulários do WhatsApp com status, categorias e ID da Meta, prontos para anexar ao botão Flow de um template.

  • Abra o Flow Builder da Meta pela página Formulários do WhatsApp
  • Sincronize da Meta para trazer formulários novos ou alterados
  • Anexe um formulário sincronizado ao botão Flow de um template
Fluxo de Formulário do WhatsApp anexado a um botão de template

As Respostas Chegam na Conversa, como Campos

Quando um cliente envia um formulário, a caixa de entrada compartilhada mostra um cartão de Formulário do WhatsApp na conversa com cada resposta identificada, incluindo arquivos de seletores de foto ou documento. Uma solicitação de endereço aparece como endereço. Se o WhatsApp enviar algo que não pode ser lido como campos, o cartão avisa e permite ver exatamente o que o WhatsApp enviou, para que nada se perca.

  • Cada resposta exibida com um rótulo legível
  • As mesmas respostas em GET /api/v1/messages/{id}
  • E no objeto form do webhook message.received
Caixa de entrada compartilhada mostrando um Formulário do WhatsApp enviado com respostas identificadas
Como Funciona

Do Formulário às Respostas em Quatro Passos

01

1. Crie o formulário na Meta

Crie as telas e perguntas no Flow Builder da Meta: um formulário de leads, uma reserva, uma pesquisa de satisfação ou qualquer outra coisa que seus clientes precisem preencher.

02

2. Sincronize com a StartMessaging

Na página Formulários do WhatsApp, clique em Sincronizar da Meta. Seus formulários aparecem com status e ID da Meta.

03

3. Anexe a um template

No editor de templates, adicione um botão Flow (Formulário do WhatsApp), escolha o formulário e envie o template. A Meta o revisa como qualquer outro template.

04

4. Envie e leia as respostas

Envie o template aprovado pelo painel ou pela API. Pela API, adicione seu próprio flow token para que cada envio possa ser associado ao seu lead, pedido ou reserva.

Comparar

Formulário do WhatsApp vs. Perguntas na Conversa vs. Link para Formulário Web

Três formas de coletar dados de um cliente no WhatsApp.

Capacidade Formulário do WhatsApp Perguntas na conversa Link para formulário web
Onde o cliente responde Dentro do WhatsApp, em telas de formulário Dentro do WhatsApp, uma mensagem por vez Em um navegador, fora do WhatsApp
O que você recebe Campos estruturados: chave, rótulo, valor Texto livre que você mesmo interpreta O que sua ferramenta de formulário enviar
Como associar ao seu registro O flow token que você envia Número de telefone e conversa Seus próprios parâmetros de link
Exibido na caixa de entrada da StartMessaging ✓ (como cartão de formulário com respostas identificadas) ✓ (como mensagens)
Como é enviado Um template com botão Flow Mensagens de texto ou interativas dentro da janela de 24 horas Um link em uma mensagem ou um botão de URL
Onde é criado Flow Builder da Meta Seus atendentes ou um fluxo de chatbot Sua ferramenta de formulários web
API e Webhooks

Envie um formulário com seu próprio token e receba as respostas como campos

Defina o flow token com buttonParameters subType "flow". O envio chega em message.received com form.flowToken, form.fields e, via context, a mensagem que levou o formulário.

# Send the template whose Flow button opens your WhatsApp Form.
# The flow token comes back on the submission as form.flowToken.
curl -X POST https://waba-api.startmessaging.com/api/v1/messages \
  -H "Authorization: Bearer sm_live_your_api_key" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: lead-77-demo-form" \
  -d '{
    "to": "+919812345678",
    "type": "template",
    "template": {
      "name": "book_a_demo",
      "language": "en_US",
      "parameters": [
        { "text": "Asha" }
      ],
      "buttonParameters": [
        { "index": 0, "subType": "flow", "text": "lead-77" }
      ]
    },
    "clientReference": "lead-77"
  }'
// 1. Send the form (needs the messages:send scope)
const res = await fetch('https://waba-api.startmessaging.com/api/v1/messages', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ' + process.env.SM_API_KEY, // sm_live_your_api_key
    'Content-Type': 'application/json',
    'Idempotency-Key': 'lead-77-demo-form',
  },
  body: JSON.stringify({
    to: '+919812345678',
    type: 'template',
    template: {
      name: 'book_a_demo',
      language: 'en_US',
      parameters: [{ text: 'Asha' }],
      buttonParameters: [{ index: 0, subType: 'flow', text: 'lead-77' }],
    },
    clientReference: 'lead-77',
  }),
});
const { data } = await res.json();
console.log(data.id, data.status);

// 2. In your message.received webhook handler (after verifying the signature)
function onMessageReceived(event) {
  const form = event.data.message.form;
  if (!form) return;
  const answers = Object.fromEntries(form.fields.map((f) => [f.key, f.value]));
  // form.flowToken === 'lead-77' -> update that lead with the answers
}
import os, requests

res = requests.post(
    'https://waba-api.startmessaging.com/api/v1/messages',
    headers={
        'Authorization': f"Bearer {os.environ['SM_API_KEY']}",  # sm_live_your_api_key
        'Idempotency-Key': 'lead-77-demo-form',
    },
    json={
        'to': '+919812345678',
        'type': 'template',
        'template': {
            'name': 'book_a_demo',
            'language': 'en_US',
            'parameters': [{'text': 'Asha'}],
            'buttonParameters': [{'index': 0, 'subType': 'flow', 'text': 'lead-77'}],
        },
        'clientReference': 'lead-77',
    },
)

data = res.json()['data']
print(data['id'], data['status'])

# Later: read the answers from the message.received webhook,
# or GET /api/v1/messages/{id} for the inbound message (messages:read scope).
<?php
$body = json_encode([
    'to' => '+919812345678',
    'type' => 'template',
    'template' => [
        'name' => 'book_a_demo',
        'language' => 'en_US',
        'parameters' => [['text' => 'Asha']],
        'buttonParameters' => [
            ['index' => 0, 'subType' => 'flow', 'text' => 'lead-77'],
        ],
    ],
    'clientReference' => 'lead-77',
]);

$ch = curl_init('https://waba-api.startmessaging.com/api/v1/messages');
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer ' . getenv('SM_API_KEY'), // sm_live_your_api_key
        'Content-Type: application/json',
        'Idempotency-Key: lead-77-demo-form',
    ],
    CURLOPT_POSTFIELDS => $body,
]);
$data = json_decode(curl_exec($ch), true)['data'];
echo $data['id'] . ' ' . $data['status'];
{
  "id": "evt_01JCA4M8ZP",
  "type": "message.received",
  "createdAt": "2026-10-07T11:05:12.000Z",
  "workspaceId": "ws_9f2c",
  "data": {
    "message": {
      "id": "msg_8e41",
      "conversationId": "conv_3a90",
      "contactId": "ct_88b1",
      "from": "+919812345678",
      "type": "interactive",
      "text": "Full name: Asha Rao · City: Pune · Preferred date: 2026-10-12",
      "reply": null,
      "context": {
        "messageId": "msg_7f20",
        "clientReference": "lead-77"
      },
      "form": {
        "kind": "flow",
        "flowToken": "lead-77",
        "flowId": "1187364520093321",
        "flowName": "Book a demo",
        "fields": [
          { "key": "screen_0_Full_name_0", "label": "Full name", "value": "Asha Rao" },
          { "key": "screen_0_City_1", "label": "City", "value": "Pune" },
          { "key": "screen_0_Preferred_date_2", "label": "Preferred date", "value": "2026-10-12" }
        ],
        "raw": null
      },
      "referral": null,
      "timestamp": "2026-10-07T11:05:10.000Z"
    },
    "contact": {
      "id": "ct_88b1",
      "phone": "+919812345678",
      "name": "Asha"
    }
  }
}
Perguntas Frequentes

Formulários do WhatsApp — Perguntas Frequentes

Posso criar o formulário dentro da StartMessaging?

Não. Os Formulários do WhatsApp são Meta Flows, e você os cria no Flow Builder da Meta, no Meta Business Manager. A StartMessaging sincroniza seus formulários da Meta, permite anexá-los a botões de template e exibe e entrega as respostas.

Como envio um Formulário do WhatsApp a um cliente?

Anexe o formulário a um botão Flow de um template e envie o template à Meta. Depois que a Meta aprovar, envie-o como qualquer outro template. Pela API, use POST /api/v1/messages com buttonParameters [{ "index": 0, "subType": "flow", "text": "<seu flow token>" }].

Como associo um envio ao meu lead ou reserva?

Envie um flow token que identifique o registro, como "lead-77". Ele volta no envio como form.flowToken. Se o envio não tiver token, flowToken será "unused". O context do envio também aponta para a mensagem que levou o formulário, incluindo seu clientReference.

Onde posso ler as respostas?

Em três lugares: como cartão de formulário na conversa da caixa de entrada compartilhada; pela API com GET /api/v1/messages/{id} ou a lista de mensagens da conversa; e no objeto form do webhook message.received, como { kind, flowToken, flowId, flowName, fields: [{ key, label, value }], raw }.

Os rótulos dos campos são os que escrevi no formulário?

Não exatamente. O WhatsApp envia cada resposta com uma chave, e a StartMessaging transforma essa chave em um rótulo legível (screen_0_Full_name_0 do Flow Builder vira "Full name"). Mapeie seus dados pela key, que é exatamente o que o WhatsApp enviou. Se as respostas não puderem ser lidas como JSON, fields fica vazio e raw guarda a resposta original do WhatsApp.

Para que posso usar os Formulários do WhatsApp?

Qualquer situação em que você precise de vários dados de uma vez: captação de leads, agendamento de consultas e demonstrações, pesquisas de satisfação e solicitações de endereço. As respostas podem ser texto, aceites sim/não, números, opções de caixas de seleção ou arquivos de um seletor de foto ou documento.

Qual plano inclui os WhatsApp Forms?

O plano Business e o teste grátis de 14 dias, junto com os fluxos de chatbot. Sincronizar formulários da Meta e adicionar um botão Flow (WhatsApp Form) a um template exigem o Business. O Team cobre a caixa de entrada compartilhada, os contatos, as campanhas e as respostas automáticas por palavra-chave, mas não os formulários.

Os Formulários do WhatsApp têm custo extra?

A StartMessaging não cobra por formulário nem por mensagem: os WhatsApp Forms vêm com o plano Business. A Meta cobra todo template entregue, inclusive o que leva o formulário, pela tarifa da categoria dele, diretamente na sua própria Conta do WhatsApp Business.

WhatsApp API

Comece a Coletar Respostas no WhatsApp

Conecte sua Conta do WhatsApp Business, sincronize seus formulários da Meta e envie o primeiro durante o teste grátis de 14 dias. Os WhatsApp Forms fazem parte do plano Business.