Enviar un formulario
Sirve para pedirle datos a un contacto dentro de WhatsApp, por ejemplo para una inscripción o una encuesta, con un formulario que ya publicaste.
Permiso requerido: conversations:send
Envía a un contacto un formulario de WhatsApp publicado. form_id es el identificador estable del formulario (el mismo en todas sus versiones) y device_id el número de WhatsApp Cloud de tu cuenta por el que sale. text (hasta 1024 caracteres) acompaña al formulario y por defecto es su nombre; button_text (hasta 30 caracteres, sin emojis) es el botón y por defecto es «Abrir» u «Open» según el idioma del usuario de la clave (en inglés «Open»; en español y portugués «Abrir»). Sólo funciona dentro de las 24 horas siguientes al último mensaje del contacto a ese número. Responde 200 con el mensaje en cola (status queued, type whatsapp_form); aceptado no es entregado: el estado final llega por message.status_changed o por GET /contacts/{contact}/messages/{message}, y la respuesta del contacto por whatsapp_form.completed. Responde 404 si el contacto no existe o no es de tu cuenta, o 404 con form_not_found si el formulario no existe en tu cuenta. Responde 422 con device_unavailable si el número no es de tu cuenta o no está conectado, number_not_eligible si no es un número de WhatsApp Cloud que pueda enviar formularios, form_not_published si el formulario no tiene versión publicada, form_not_on_number si no está publicado en ese número, recipient_unreachable si el contacto no tiene teléfono ni identificador de WhatsApp y window_closed si pasaron más de 24 horas. También responde 422 por las guardas de envío y 429 con rate_limited si superas el ritmo del número o del contacto.
Si tu cuenta está bloqueada por el límite de contactos activos, responde 429 con mac_lockout_24h (además del 429 rate_limited del ritmo) y no guarda ningún mensaje ni client_reference. Si Funnelchat no pudo poner el mensaje en cola, la respuesta no es un error: es 200 con el mensaje en estado failed y error.reason not_queued; no salió, así que reintentar no lo duplica.
httpAuthorizationBearer <clave>contact*integerapplication/json- body
form_id*integer1 <= valuedevice_id*integer1 <= valuetext?string1 <= length <= 1024button_text?string1 <= length <= 30client_reference?|^[\x21-\x7E]{1,64}$length <= 64OK
application/json- response
message*|nullcurl -X POST "https://example.com/contacts/0/message/form" \ -H "Content-Type: application/json" \ -d '{ "form_id": 1, "device_id": 1 }'{ "message": { "id": 0, "contact_id": 0, "device_id": 0, "direction": "outbound", "type": "text", "status": "sent", "error": { "code": 0, "title": "string", "reason": "string" }, "client_reference": "string", "created_at": "string", "updated_at": "string" }}