Formularios de WhatsApp

Recopile Respuestas Estructuradas Dentro de WhatsApp

Cree un formulario en el Flow Builder de Meta, sincronícelo con StartMessaging y adjúntelo a un botón de plantilla. Los clientes lo completan sin salir del chat, y cada respuesta llega como campos etiquetados en su bandeja de entrada, la API y sus webhooks. Los WhatsApp Forms están en el plan Business y en la prueba gratis de 14 días.

✦ Prueba gratis de 14 días · Tu propio número de WhatsApp Business · Meta factura los mensajes directamente

Creado en Meta, Usado en StartMessaging

Los Formularios de WhatsApp son Meta Flows. Usted diseña las pantallas y preguntas en el Flow Builder de Meta, en Meta Business Manager; StartMessaging no tiene un editor de formularios propio. Pulse Sincronizar desde Meta y sus formularios aparecen en la página Formularios de WhatsApp con su estado, categorías e ID de Meta, listos para adjuntar al botón Flow de una plantilla.

  • Abra el Flow Builder de Meta desde la página Formularios de WhatsApp
  • Sincronice desde Meta para traer formularios nuevos o modificados
  • Adjunte un formulario sincronizado al botón Flow de una plantilla
Flujo de Formulario de WhatsApp adjunto a un botón de plantilla

Las Respuestas Llegan al Chat, como Campos

Cuando un cliente envía un formulario, la bandeja compartida muestra una tarjeta de Formulario de WhatsApp en la conversación con cada respuesta etiquetada, incluidos archivos de selectores de foto o documento. Una solicitud de dirección se muestra como dirección. Si WhatsApp envía algo que no puede leerse como campos, la tarjeta lo indica y le permite ver exactamente lo que envió WhatsApp, para que no se pierda nada.

  • Cada respuesta se muestra con una etiqueta legible
  • Las mismas respuestas en GET /api/v1/messages/{id}
  • Y en el objeto form del webhook message.received
Bandeja compartida que muestra un Formulario de WhatsApp enviado con respuestas etiquetadas
Cómo Funciona

Del Formulario a las Respuestas en Cuatro Pasos

01

1. Cree el formulario en Meta

Diseñe las pantallas y preguntas en el Flow Builder de Meta: un formulario de leads, una reserva, una encuesta de opinión o cualquier otra cosa que sus clientes deban completar.

02

2. Sincronícelo con StartMessaging

En la página Formularios de WhatsApp, pulse Sincronizar desde Meta. Sus formularios aparecen con su estado e ID de Meta.

03

3. Adjúntelo a una plantilla

En el editor de plantillas, añada un botón Flow (Formulario de WhatsApp), elija el formulario y envíe la plantilla. Meta la revisa como cualquier otra plantilla.

04

4. Envíelo y lea las respuestas

Envíe la plantilla aprobada desde el panel o la API. Mediante la API, añada su propio flow token para que cada envío se pueda asociar a su lead, pedido o reserva.

Comparar

Formulario de WhatsApp vs. Preguntas en el Chat vs. Enlace a un Formulario Web

Tres formas de recopilar datos de un cliente en WhatsApp.

Capacidad Formulario de WhatsApp Preguntas en el chat Enlace a formulario web
Dónde responde el cliente Dentro de WhatsApp, en pantallas de formulario Dentro de WhatsApp, un mensaje a la vez En un navegador, fuera de WhatsApp
Qué recibe Campos estructurados: clave, etiqueta, valor Texto libre que usted mismo interpreta Lo que envíe su herramienta de formularios
Cómo asociarlo a su registro El flow token que usted envía Número de teléfono y conversación Sus propios parámetros de enlace
Se muestra en la bandeja de StartMessaging ✓ (como tarjeta de formulario con respuestas etiquetadas) ✓ (como mensajes)
Cómo se envía Una plantilla con botón Flow Mensajes de texto o interactivos dentro de la ventana de 24 horas Un enlace en un mensaje o un botón de URL
Dónde se crea Flow Builder de Meta Sus agentes o un flujo de chatbot Su herramienta de formularios web
API y Webhooks

Envíe un formulario con su propio token y reciba las respuestas como campos

Defina el flow token con buttonParameters subType "flow". El envío llega en message.received con form.flowToken, form.fields y, mediante context, el mensaje que llevaba el formulario.

# 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"
    }
  }
}
Preguntas Frecuentes

Formularios de WhatsApp — Preguntas Frecuentes

¿Puedo crear el formulario dentro de StartMessaging?

No. Los Formularios de WhatsApp son Meta Flows, y se crean en el Flow Builder de Meta, en Meta Business Manager. StartMessaging sincroniza sus formularios desde Meta, le permite adjuntarlos a botones de plantilla y muestra y entrega las respuestas.

¿Cómo envío un Formulario de WhatsApp a un cliente?

Adjunte el formulario a un botón Flow de una plantilla y envíe la plantilla a Meta. Cuando Meta la apruebe, envíela como cualquier otra plantilla. Mediante la API, use POST /api/v1/messages con buttonParameters [{ "index": 0, "subType": "flow", "text": "<su flow token>" }].

¿Cómo asocio un envío a mi lead o reserva?

Envíe un flow token que identifique el registro, como "lead-77". Vuelve en el envío como form.flowToken. Si el envío no llevaba token, flowToken es "unused". El context del envío también apunta al mensaje que llevaba el formulario, incluido su clientReference.

¿Dónde puedo leer las respuestas?

En tres lugares: como tarjeta de formulario en la conversación de la bandeja compartida; mediante la API con GET /api/v1/messages/{id} o la lista de mensajes de la conversación; y en el objeto form del webhook message.received, como { kind, flowToken, flowId, flowName, fields: [{ key, label, value }], raw }.

¿Las etiquetas de los campos son las que escribí en mi formulario?

No exactamente. WhatsApp envía cada respuesta con una clave, y StartMessaging convierte esa clave en una etiqueta legible (screen_0_Full_name_0 del Flow Builder se lee "Full name"). Mapee sus datos por key, que es exactamente lo que envió WhatsApp. Si las respuestas no pueden leerse como JSON, fields queda vacío y raw guarda la respuesta original de WhatsApp.

¿Para qué puedo usar los Formularios de WhatsApp?

Cualquier caso en que necesite varios datos de una vez: captación de leads, reservas de citas y demostraciones, encuestas de opinión y solicitudes de dirección. Las respuestas pueden ser texto, aceptaciones sí/no, números, opciones de casillas o archivos de un selector de foto o documento.

¿Qué plan incluye los WhatsApp Forms?

El plan Business y la prueba gratis de 14 días, junto con los flujos de chatbot. Sincronizar formularios desde Meta y añadir un botón Flow (WhatsApp Form) a una plantilla requieren Business. Team cubre la bandeja de entrada compartida, los contactos, las campañas y las respuestas automáticas por palabra clave, pero no los formularios.

¿Los Formularios de WhatsApp tienen un costo adicional?

StartMessaging no cobra por formulario ni por mensaje: los WhatsApp Forms vienen con el plan Business. Meta cobra cada plantilla entregada, incluida la que lleva el formulario, según la tarifa de su categoría, directamente a tu propia Cuenta de WhatsApp Business.

WhatsApp API

Empiece a Recopilar Respuestas en WhatsApp

Conecta tu Cuenta de WhatsApp Business, sincroniza tus formularios desde Meta y envía el primero durante la prueba gratis de 14 días. Los WhatsApp Forms están en el plan Business.