WhatsApp Flows: cómo crear formularios y recopilar datos dentro de WhatsApp

WhatsApp Flows es una función de la Cloud API que te permite crear formularios de varias pantallas directamente dentro de una conversación de WhatsApp. Los usuarios completan campos de texto, menús desplegables y selectores de fecha con unos toques, sin salir del chat, y tu sistema recibe los datos recopilados como JSON estructurado. Meta describe los Flows como una forma de crear interacciones estructuradas para la mensajería empresarial, en tareas como la generación de leads y las recomendaciones de productos.[1] Si desarrollas sobre la WhatsApp Cloud API, los Flows te dan una forma nativa de recopilar datos estructurados en el mismo momento de la conversación. Un Flow se abre cuando un usuario toca un botón de llamada a la acción en un mensaje interactivo o en un mensaje de plantilla (el tipo de mensaje aprobado previamente que una empresa puede enviar en cualquier momento), y el formulario se ejecuta dentro de WhatsApp.

Puntos clave

  1. Los Flows requieren la WhatsApp Cloud API y una cuenta de WhatsApp Business (WABA). Meta está dividiendo la WABA en dos cuentas: una WhatsApp account, que contiene tu número de teléfono de empresa, y una Messaging account, que contiene tus plantillas y la facturación.
  2. Un Flow sin endpoint de datos (una URL en tu servidor a la que el Flow llama para obtener datos en vivo) recopila las respuestas del formulario y las envía cuando el usuario termina. Un Flow con endpoint intercambia datos con tu servidor en tiempo real.
  3. Un Flow puede tener hasta 100 pantallas, pero Meta recomienda que cada tarea tome menos de 5 minutos y que cada pantalla se centre en una sola tarea.
  4. Los Flows que intercambian datos con tu servidor necesitan un par de claves RSA de 2048 bits, con la clave pública firmada a través del endpoint de cifrado que ofrece 360Dialog.
  5. El costo de un Flow es el costo del mensaje que lo lleva. A partir del 1 de octubre de 2026, Meta también cobra las respuestas enviadas dentro de la ventana de atención al cliente de 24 horas, el período posterior al último mensaje de un usuario en el que puedes responder sin plantilla.

¿Quieres crear tu primer Flow? 360Dialog ofrece acceso a la Cloud API, gestión de claves de cifrado y la infraestructura para crear e implementar Flows, con un precio por número al mes y sin recargo sobre las tarifas de Meta. Obtener acceso a la API.

¿Qué son los WhatsApp Flows y cómo funcionan?

WhatsApp Flows es un marco de interacciones estructuradas integrado en la WhatsApp Business Platform que permite a las empresas definir formularios de varias pantallas con una definición JSON, mostrarlos de forma nativa dentro de WhatsApp y recibir las respuestas de los usuarios como payloads JSON estructurados mediante un webhook. El usuario nunca sale del chat. Los Flows se componen de pantallas (cada pantalla es un nodo en una máquina de estados), componentes (los elementos de la interfaz de cada pantalla) y acciones (la lógica que pasa de una pantalla a otra o envía los datos).

Un Flow comienza cuando un usuario toca un botón de llamada a la acción asociado a un mensaje interactivo (tipo "flow") o a un mensaje de plantilla (tipo de botón FLOW). El botón abre la primera pantalla, que contiene el diseño, los componentes y la lógica de navegación definidos en tu Flow JSON. El usuario completa los campos y avanza por las pantallas. En la pantalla final, la acción complete envía a tu sistema los campos listados en su payload, como un payload JSON que llega mediante un webhook.

La diferencia principal frente a otros métodos de recopilación de datos en WhatsApp:

MétodoEstructura de datosExperiencia del usuarioIdeal para
WhatsApp FlowsPayload JSON estructuradoPantallas de formulario que se completan con toques dentro del chatCaptación de leads, reservas, encuestas, formularios de pedido
Respuestas rápidas de plantillaSelección de un solo botónEl usuario toca una opción predefinidaConfirmaciones, opt-ins (consentimiento para recibir mensajes), enrutamiento simple
Recopilación de texto libreTexto no estructuradoEl usuario escribe respuestas abiertasComentarios abiertos, conversaciones de soporte

Los Flows resuelven un problema concreto: recopilar datos estructurados de usuarios que ya están en una conversación de WhatsApp. Si necesitas un nombre, un correo electrónico, una fecha y una preferencia en una sola interacción, los Flows te permiten recopilar los cuatro en un solo formulario que se completa con unos toques. La recopilación de texto libre requiere varias rondas de mensajes y lógica de análisis en tu backend para extraer los mismos campos.

Si necesitas un número de la Cloud API para empezar a crear Flows, puedes obtener acceso a la API a través de 360Dialog.

Flows estáticos o dinámicos: ¿qué tipo necesitas?

La diferencia práctica es si tu Flow se conecta a un endpoint de datos. Un Flow sin endpoint de datos define todo su contenido en el Flow JSON y recopila localmente lo que ingresa el usuario. Un Flow con endpoint de datos envía solicitudes cifradas a tu servidor durante la ejecución y recibe los datos que completan la siguiente pantalla. Las dos etiquetas describen formas de manejar los datos que determinan cuánta infraestructura de backend necesitas.

Sin endpoint de datos: El Flow JSON define cada pantalla, componente y ruta de navegación en el momento del diseño. Lo que ingresa el usuario se recopila localmente y se envía como payload JSON cuando el Flow termina. Este enfoque funciona para formularios de captación de leads, encuestas de opinión y formularios de registro en los que todos los campos se conocen de antemano. Las acciones principales son navigate (para pasar de una pantalla a otra) y complete (para terminar el Flow y devolver los datos). No interviene ningún servidor hasta que el envío final llega mediante webhook.

Con endpoint de datos: El Flow envía solicitudes POST cifradas a tu endpoint HTTPS durante la ejecución mediante la acción data_exchange.[2][4] Tu servidor descifra la solicitud, procesa los datos y devuelve el contenido de la siguiente pantalla. Esto permite reservar citas con disponibilidad en vivo, mostrar catálogos de productos con inventario en tiempo real o cualquier escenario en el que el contenido de la pantalla dependa de las selecciones anteriores del usuario o del estado de tu backend. Las solicitudes a tu endpoint agotan el tiempo de espera a los 10 segundos, y Meta recomienda que el flow_token venza a los 2 o 3 días para que los usuarios tengan tiempo de interactuar.[6]

Ambos enfoques usan la misma estructura de Flow JSON y los mismos componentes. La elección depende de si tus pantallas necesitan datos de tu servidor durante la ejecución.

Para conectar las respuestas de tus Flows con las herramientas de automatización que ya usas, consulta cómo funcionan las integraciones de WhatsApp con 360Dialog.

¿Qué componentes puedes usar en un Flow?

Los Flows ofrecen más de 20 tipos de componentes, repartidos en las categorías de entrada, visualización, navegación y condicionales. Cada pantalla admite hasta 50 componentes y usa un diseño de una sola columna (SingleColumnLayout, un flexbox vertical).[3] Meta limita el contenido del Flow JSON a 10 MB.

Componentes de entrada principales:

  • TextInput: Texto de una línea, correo electrónico, teléfono, número, contraseña o código de acceso. Admite validación con expresiones regulares (v6.2 y posteriores). Máximo de 80 caracteres de forma predeterminada.
  • TextArea: Entrada de texto de varias líneas, 600 caracteres de forma predeterminada.
  • Dropdown: Selección única entre hasta 200 opciones (100 con imágenes).
  • RadioButtonsGroup: Selección única entre hasta 20 opciones. Meta recomienda un Dropdown a partir de 8 opciones.
  • CheckboxGroup: Selección múltiple entre hasta 20 opciones.
  • DatePicker: Selección de fecha con un formato independiente de la zona horaria (v5.0 y posteriores).
  • CalendarPicker: Selección de una fecha o de un rango de fechas (v6.1 y posteriores).
  • OptIn: Casilla de consentimiento, hasta 5 por pantalla.
  • ChipsSelector: Selector compacto de varias opciones, para 2 a 20 opciones (v6.3 y posteriores).

Los componentes de visualización incluyen TextHeading, TextSubheading, TextBody, TextCaption, RichText (v5.1 y posteriores, para textos más largos con formato markdown), Image (hasta 3 por pantalla) e ImageCarousel (v7.1 y posteriores).

Los componentes de navegación incluyen Footer (obligatorio en las pantallas terminales, máximo 35 caracteres), EmbeddedLink (hasta 2 por pantalla) y NavigationList (v6.2 y posteriores). Los componentes para subir archivos (DocumentPicker y PhotoPicker, v4.0 y posteriores) permiten a los usuarios adjuntar archivos directamente dentro del Flow.

Los componentes condicionales (If y Switch, disponibles desde la v4.0) te permiten mostrar u ocultar elementos según lo que ingresa el usuario o los valores de los datos, y los componentes If pueden anidarse hasta 3 niveles. La acción update_data (v6.0 y posteriores) permite actualizar la pantalla en tiempo real según las interacciones del usuario sin una ida y vuelta al servidor, algo útil para menús desplegables en cascada o campos calculados.

Para ver los pasos de configuración en 360Dialog, consulta la documentación de Flows en docs.360dialog.com. La referencia completa de componentes está en la documentación de componentes de Meta.

¿Cómo creas un Flow con la API? (La ruta con 360Dialog)

Crear un Flow con 360Dialog lleva cinco pasos: generar un par de claves RSA, subir tu clave pública, escribir el Flow JSON, configurar el endpoint y enviar el Flow a los usuarios. Los pasos 1, 2 y 4 solo son necesarios para los Flows que intercambian datos con tu servidor, y Meta incluye el par de claves como parte de la configuración del endpoint. WhatsApp Manager también tiene un Flows Builder con vista previa en vivo, y la ruta por API te permite gestionar el Flow JSON desde tus propios sistemas. En cualquier caso, un Flow puede tener hasta 100 pantallas.

  1. Genera tu par de claves RSA. Crea un par de claves RSA de 2048 bits con OpenSSL:
openssl genrsa -des3 -out private.pem 2048
openssl rsa -in private.pem -outform PEM -pubout -out public.pem

Guarda la clave privada en un lugar seguro. La usarás para descifrar los datos que lleguen de los Flows.

  1. Sube tu clave pública a 360Dialog. Firma y sube la clave mediante nuestro endpoint de cifrado:[5]
POST https://waba-v2.360dialog.io/whatsapp_business_encryption

Envía la clave pública completa (incluidos los marcadores BEGIN y END) como business_public_key en el cuerpo de la solicitud. El endpoint devuelve {"success": true} cuando la operación sale bien. Puedes verificar el estado de la clave con una solicitud GET a la misma URL.

  1. Escribe el Flow JSON. Define tus pantallas, diseños, componentes y acciones de navegación. Como mínimo, el JSON requiere un campo version y un arreglo screens. Usa la versión de Flow JSON que Meta recomienda actualmente (7.3): las versiones hasta la 5.0 están congeladas y ya no se pueden publicar.[7] Cada pantalla tiene un id, un bloque layout y los campos opcionales data y title. Al menos una pantalla debe estar marcada como terminal, y cada pantalla terminal necesita un Footer. Para los Flows con endpoint, define también data_api_version (Meta recomienda "4.0"; "3.0" sigue siendo compatible) y un routing_model que indique qué pantallas pueden seguir a cuáles.
  1. Configura tu endpoint de datos (solo Flows dinámicos). Define el endpoint_uri mediante la Flows API. Tu endpoint debe aceptar solicitudes POST por HTTPS con un certificado TLS/SSL válido. Todos los payloads se cifran con RSA de 2048 bits (OAEP-SHA256) para el intercambio de claves y con AES-128-GCM para el payload de datos. Valida las solicitudes entrantes con el encabezado X-Hub-Signature-256 y el secreto de tu app. Tu endpoint también debe responder a los pings de verificación de estado: {"action": "ping"} espera {"data": {"status": "active"}}.
  1. Envía el Flow a los usuarios. Asocia el Flow a un mensaje interactivo (tipo "flow") o a un mensaje de plantilla (tipo de botón FLOW). Un mensaje interactivo de Flow necesita flow_message_version con el valor "3", el texto del botón en flow_cta y un flow_id o un flow_name.[8] El registro de cambios de Meta indica que flow_token es opcional; defínelo cuando necesites asociar cada respuesta a una sesión o a un usuario. Con flow_action en "navigate" (el valor predeterminado), flow_action_payload indica la primera pantalla y puede completar campos por adelantado cuando ya conoces datos del usuario por el contexto de la conversación.

Como Official Meta Solution Partner, 360Dialog ofrece el endpoint de cifrado y la infraestructura de API que gestionan las claves de los Flows. La documentación para desarrolladores de Meta incluye ejemplos de código para descifrar los datos en el endpoint en Python, Node.js, PHP, Java, C# y Go.

Si todavía no usas la WhatsApp Business API, empieza por conseguir la aprobación de tu WhatsApp account antes de crear Flows.

Tres ejemplos prácticos con Flow JSON

Los siguientes ejemplos muestran la estructura JSON de tres casos de uso habituales. Cada uno usa la versión 7.3 de Flow JSON, la que Meta recomienda actualmente. La referencia completa de componentes y acciones está en la documentación de Flow JSON de Meta.

Formulario de captación de leads (una pantalla, sin endpoint)

Un formulario mínimo de captación de leads con un campo de nombre, un selector de interés y una casilla de consentimiento:

{
  "version": "7.3",
  "screens": [{
    "id": "LEAD_FORM",
    "title": "Contáctanos",
    "terminal": true,
    "layout": {
      "type": "SingleColumnLayout",
      "children": [
        {"type": "TextInput", "name": "full_name",
         "label": "Nombre completo", "required": true,
         "input-type": "text"},
        {"type": "RadioButtonsGroup", "name": "interest",
         "label": "Área de interés", "required": true,
         "data-source": [
           {"id": "sales", "title": "Ventas"},
           {"id": "support", "title": "Soporte"},
           {"id": "partnership", "title": "Alianzas"}
        ]},
        {"type": "OptIn", "name": "consent",
         "label": "Acepto recibir novedades"},
        {"type": "Footer", "label": "Enviar",
         "on-click-action": {
           "name": "complete",
           "payload": {
             "full_name": "${form.full_name}",
             "interest": "${form.interest}",
             "consent": "${form.consent}"
           }
        }}
      ]
    }
  }]
}

La acción complete del Footer termina el Flow y envía a tu webhook los campos listados en su payload, así que incluye todos los campos que necesites. El webhook entrega un mensaje de tipo "interactive" con tipo interactivo "nfm_reply", cuyo campo response_json es una cadena JSON que contiene el flow_token y los valores de esos campos.

Formulario de opinión (dos pantallas, sin endpoint)

Un formulario de opinión de dos pantallas recopila una calificación en la primera pantalla y comentarios opcionales en la segunda:

{
  "version": "7.3",
  "screens": [
    {
      "id": "RATING",
      "title": "Opinión 1 de 2",
      "layout": {
        "type": "SingleColumnLayout",
        "children": [
          {"type": "TextHeading",
           "text": "¿Cómo fue tu experiencia?"},
          {"type": "RadioButtonsGroup",
           "name": "rating", "label": "Calificación",
           "required": true,
           "data-source": [
             {"id": "5", "title": "Excelente"},
             {"id": "4", "title": "Buena"},
             {"id": "3", "title": "Regular"},
             {"id": "2", "title": "Mala"}
          ]},
          {"type": "Footer", "label": "Siguiente",
           "on-click-action": {
             "name": "navigate",
             "next": {"type": "screen", "name": "COMMENTS"},
             "payload": {}
          }}
        ]
      }
    },
    {
      "id": "COMMENTS",
      "title": "Opinión 2 de 2",
      "terminal": true,
      "layout": {
        "type": "SingleColumnLayout",
        "children": [
          {"type": "TextArea", "name": "comments",
           "label": "Comentarios",
           "required": false},
          {"type": "Footer", "label": "Enviar",
           "on-click-action": {
             "name": "complete",
             "payload": {
               "rating": "${screen.RATING.form.rating}",
               "comments": "${form.comments}"
             }
          }}
        ]
      }
    }
  ]
}

La acción navigate lleva al usuario a la segunda pantalla con un payload vacío. A partir de Flow JSON v4.0, cualquier pantalla puede leer lo que se ingresó en otra pantalla con la sintaxis global ${screen.RATING.form.rating}, así que la acción complete de la última pantalla envía tanto la calificación como los comentarios.

Reserva de citas (dinámico, con endpoint)

Un Flow dinámico usa la acción data_exchange para pedir a tu servidor los horarios disponibles y luego los muestra en una segunda pantalla:

{
  "version": "7.3",
  "data_api_version": "4.0",
  "routing_model": {
    "BOOKING": ["SLOTS"],
    "SLOTS": []
  },
  "screens": [
    {
      "id": "BOOKING",
      "title": "Agenda una cita",
      "layout": {
        "type": "SingleColumnLayout",
        "children": [
          {"type": "DatePicker", "name": "date",
           "label": "Selecciona una fecha", "required": true},
          {"type": "Footer",
           "label": "Ver disponibilidad",
           "on-click-action": {
             "name": "data_exchange",
             "payload": {"date": "${form.date}"}
          }}
        ]
      }
    },
    {
      "id": "SLOTS",
      "title": "Elige un horario",
      "terminal": true,
      "data": {
        "available_slots": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {"type": "string"},
              "title": {"type": "string"}
            }
          },
          "__example__": [
            {"id": "1", "title": "08:00"},
            {"id": "2", "title": "09:00"}
          ]
        }
      },
      "layout": {
        "type": "SingleColumnLayout",
        "children": [
          {"type": "Dropdown", "name": "slot",
           "label": "Horarios disponibles", "required": true,
           "data-source": "${data.available_slots}"},
          {"type": "Footer", "label": "Confirmar cita",
           "on-click-action": {
             "name": "complete",
             "payload": {
               "date": "${screen.BOOKING.form.date}",
               "slot": "${form.slot}"
             }
          }}
        ]
      }
    }
  ]
}

Cuando el usuario selecciona una fecha y toca el Footer, el Flow envía a tu endpoint una solicitud POST cifrada con la fecha seleccionada. Tu servidor descifra la solicitud con tu clave privada RSA y AES-128-GCM, consulta los horarios disponibles y devuelve una respuesta cifrada con la siguiente pantalla ("screen": "SLOTS") y un objeto data que contiene available_slots. El usuario elige un horario, y la acción complete envía la fecha y el horario a tu webhook. Envía este Flow con flow_action en "navigate" y la primera pantalla en BOOKING, para que abrir el Flow no llame a tu endpoint.

¿Cómo diseñas un Flow que la gente termine?

Las buenas prácticas de Meta para los Flows se centran en que cada tarea sea breve y cada pantalla sencilla, para que los usuarios terminen lo que empezaron. Para medir tus propios resultados, el Flows Builder de WhatsApp Manager muestra estadísticas de interacción de los Flows publicados.

Las buenas prácticas documentadas por Meta:

  • Dedica cada pantalla a una sola tarea y mantén el Flow completo por debajo de 5 minutos.
  • Escribe un texto de llamada a la acción que le diga al usuario exactamente qué pasa cuando lo toca. Mantén corto el texto del botón: nuestra documentación fija un límite de 20 caracteres, sin emojis.
  • Usa el componente adecuado para cada tipo de dato: DatePicker para fechas, Dropdown para 8 opciones o más, RadioButtonsGroup para elegir una sola entre menos opciones, CheckboxGroup para selecciones múltiples.
  • Diseña pensando en la caché: cuando un usuario completa una pantalla y avanza, WhatsApp guarda en caché los datos de esa pantalla. Un usuario que sale pierde lo que ingresó en la pantalla actual, así que varias pantallas cortas ponen en riesgo menos datos que una sola pantalla larga.
  • Termina los Flows de varios pasos con una pantalla de resumen para que el usuario revise todo antes de enviar.

Para ver cómo encajan los Flows en tus procesos de mensajería, consulta nuestra guía de automatización de WhatsApp.

¿Cuánto cuestan los Flows?

Meta cobra por mensaje entregado, así que el costo de un Flow es el costo del mensaje que lleva su botón.[9] Nuestros planes tienen un precio por número al mes y no incluyen ningún cargo aparte por los Flows. Si envías el Flow dentro de un mensaje de plantilla, pagas la tarifa de la categoría de esa plantilla (marketing, utilidad o autenticación), que varía según el país.

Si envías el Flow como mensaje interactivo en respuesta a un usuario, sale dentro de la ventana de atención al cliente de 24 horas. A partir del 1 de octubre de 2026, Meta cobra estas respuestas como mensajes de servicio, a la misma tarifa que los mensajes de utilidad y autenticación en ese mercado, y también cobra las plantillas de utilidad enviadas dentro de la ventana.[10] Los mensajes de los usuarios, incluido un Flow enviado, no tienen costo. Para ver las tarifas vigentes por mensaje en cada país, consulta nuestra página de precios.

Si ofreces un SaaS o revendes servicios y quieres ofrecer Flows desde tus propios productos, puedes integrar WhatsApp en tu SaaS con nuestra Partner Platform, que aporta la infraestructura de API para implementaciones multi-cliente.

Si quieres crear tu primer Flow, puedes obtener acceso a la API a través de 360Dialog y, si tu Flow usa un endpoint, seguir los pasos para configurar el par de claves en nuestra documentación de Flows.

Preguntas frecuentes

¿Puedo enviar un Flow dentro de un mensaje de plantilla?

Sí. Para asociar un Flow a un mensaje de plantilla, agregas un botón de tipo FLOW al crear la plantilla. El botón identifica el Flow por su ID o su nombre, e indica la primera pantalla cuando la acción del botón es navigate. Cuando el usuario toca el botón, el Flow se abre dentro del chat. La plantilla en sí pasa por el proceso estándar de aprobación de plantillas de WhatsApp, así que asegúrate de que el contenido de la plantilla y el propósito del Flow cumplan las políticas de comercio y mensajería de Meta.

¿Qué necesitas para enviar un Flow?

Necesitas un número de teléfono de empresa registrado en la WhatsApp Cloud API. Cualquier empresa puede empezar a crear Flows en WhatsApp Manager, y para publicarlos y enviarlos, Meta exige una empresa verificada y una calidad de mensajes alta.

¿Puedo probar un Flow antes de publicarlo?

Sí. El Flows Builder de WhatsApp Manager tiene una vista previa interactiva que se comporta como un dispositivo real y envía solicitudes reales a tu endpoint si el Flow tiene uno. También puedes enviar el borrador a un teléfono de prueba, desde la opción de envío del Builder o mediante la API con mode en draft. Los mensajes de borrador muestran un banner de advertencia en el dispositivo, y el teléfono de prueba debe haberle escrito a tu número en las últimas 24 horas. Los Flows creados desde noviembre de 2024 siguen siendo editables después de publicarse, mediante la API o el Builder, y conservan el mismo ID de Flow.

¿Qué pasa con los datos del usuario si cierra el Flow a mitad de camino?

WhatsApp guarda en caché los datos de una pantalla cuando el usuario la completa y pasa a la siguiente. Los datos ingresados en la pantalla actual, antes de que el usuario toque el botón del Footer, se pierden si sale. Por eso Meta recomienda dividir los formularios con varios campos en varias pantallas cortas, para que haya menos datos en riesgo si el usuario sale antes de terminar.

¿Los datos están cifrados?

Sí. Todos los datos que se intercambian entre el Flow y tu endpoint usan un intercambio de claves RSA de 2048 bits (OAEP-SHA256) combinado con cifrado AES-128-GCM del payload. La solicitud entrante contiene tres campos: encrypted_flow_data, encrypted_aes_key e initial_vector. Descifras la clave AES con tu clave privada RSA y luego descifras el payload con AES-GCM. Tu respuesta se cifra con la misma clave AES usando un vector de inicialización invertido. La guía completa de implementación del cifrado, con ejemplos de código en seis lenguajes, está en la documentación para desarrolladores de Meta.

Fuentes

[1] Meta, “WhatsApp Flows,” developers.facebook.com/docs/whatsapp/flows. Accessed September 29, 2026.

[2] Meta, “Flow JSON Reference,” developers.facebook.com/docs/whatsapp/flows/reference/flowjson. Accessed September 29, 2026.

[3] Meta, “Components Reference,” developers.facebook.com/docs/whatsapp/flows/reference/components. Accessed September 29, 2026.

[4] Meta, “Implementing Your Flow Endpoint,” developers.facebook.com/docs/whatsapp/flows/guides/implementingyourflowendpoint. Accessed September 29, 2026.

[5] 360Dialog, “Flows,” docs.360dialog.com/docs/messaging/flows. Accessed September 29, 2026.

[6] Meta, “Best Practices,” developers.facebook.com/docs/whatsapp/flows/guides/bestpractices. Accessed September 29, 2026.

[7] Meta, “Changelog,” developers.facebook.com/docs/whatsapp/flows/changelogs. Accessed September 29, 2026.

[8] Meta, “Sending a Flow,” developers.facebook.com/documentation/business-messaging/whatsapp/flows/guides/sendingaflow. Accessed September 29, 2026.

[9] Meta, “Pricing on the WhatsApp Business Platform,” developers.facebook.com/docs/whatsapp/pricing. Accessed September 29, 2026.

[10] Meta, “Upcoming Pricing Updates for Meta Business Agent, Service and Utility Messages,” developers.facebook.com/documentation/business-messaging/whatsapp/pricing/non-template-messages. Accessed September 29, 2026.

WhatsApp Flows es una función de la Cloud API que te permite crear formularios de varias pantallas directamente dentro de una conversación de WhatsApp. Los usuarios completan campos de texto, menús desplegables y selectores de fecha con unos toques, sin salir del chat, y tu sistema recibe los datos recopilados como JSON estructurado. Meta describe los Flows como una forma de crear interacciones estructuradas para la mensajería empresarial, en tareas como la generación de leads y las recomendaciones de productos.[1] Si desarrollas sobre la WhatsApp Cloud API, los Flows te dan una forma nativa de recopilar datos estructurados en el mismo momento de la conversación. Un Flow se abre cuando un usuario toca un botón de llamada a la acción en un mensaje interactivo o en un mensaje de plantilla (el tipo de mensaje aprobado previamente que una empresa puede enviar en cualquier momento), y el formulario se ejecuta dentro de WhatsApp.

Puntos clave

  1. Los Flows requieren la WhatsApp Cloud API y una cuenta de WhatsApp Business (WABA). Meta está dividiendo la WABA en dos cuentas: una WhatsApp account, que contiene tu número de teléfono de empresa, y una Messaging account, que contiene tus plantillas y la facturación.
  2. Un Flow sin endpoint de datos (una URL en tu servidor a la que el Flow llama para obtener datos en vivo) recopila las respuestas del formulario y las envía cuando el usuario termina. Un Flow con endpoint intercambia datos con tu servidor en tiempo real.
  3. Un Flow puede tener hasta 100 pantallas, pero Meta recomienda que cada tarea tome menos de 5 minutos y que cada pantalla se centre en una sola tarea.
  4. Los Flows que intercambian datos con tu servidor necesitan un par de claves RSA de 2048 bits, con la clave pública firmada a través del endpoint de cifrado que ofrece 360Dialog.
  5. El costo de un Flow es el costo del mensaje que lo lleva. A partir del 1 de octubre de 2026, Meta también cobra las respuestas enviadas dentro de la ventana de atención al cliente de 24 horas, el período posterior al último mensaje de un usuario en el que puedes responder sin plantilla.

¿Quieres crear tu primer Flow? 360Dialog ofrece acceso a la Cloud API, gestión de claves de cifrado y la infraestructura para crear e implementar Flows, con un precio por número al mes y sin recargo sobre las tarifas de Meta. Obtener acceso a la API.

¿Qué son los WhatsApp Flows y cómo funcionan?

WhatsApp Flows es un marco de interacciones estructuradas integrado en la WhatsApp Business Platform que permite a las empresas definir formularios de varias pantallas con una definición JSON, mostrarlos de forma nativa dentro de WhatsApp y recibir las respuestas de los usuarios como payloads JSON estructurados mediante un webhook. El usuario nunca sale del chat. Los Flows se componen de pantallas (cada pantalla es un nodo en una máquina de estados), componentes (los elementos de la interfaz de cada pantalla) y acciones (la lógica que pasa de una pantalla a otra o envía los datos).

Un Flow comienza cuando un usuario toca un botón de llamada a la acción asociado a un mensaje interactivo (tipo "flow") o a un mensaje de plantilla (tipo de botón FLOW). El botón abre la primera pantalla, que contiene el diseño, los componentes y la lógica de navegación definidos en tu Flow JSON. El usuario completa los campos y avanza por las pantallas. En la pantalla final, la acción complete envía a tu sistema los campos listados en su payload, como un payload JSON que llega mediante un webhook.

La diferencia principal frente a otros métodos de recopilación de datos en WhatsApp:

MétodoEstructura de datosExperiencia del usuarioIdeal para
WhatsApp FlowsPayload JSON estructuradoPantallas de formulario que se completan con toques dentro del chatCaptación de leads, reservas, encuestas, formularios de pedido
Respuestas rápidas de plantillaSelección de un solo botónEl usuario toca una opción predefinidaConfirmaciones, opt-ins (consentimiento para recibir mensajes), enrutamiento simple
Recopilación de texto libreTexto no estructuradoEl usuario escribe respuestas abiertasComentarios abiertos, conversaciones de soporte

Los Flows resuelven un problema concreto: recopilar datos estructurados de usuarios que ya están en una conversación de WhatsApp. Si necesitas un nombre, un correo electrónico, una fecha y una preferencia en una sola interacción, los Flows te permiten recopilar los cuatro en un solo formulario que se completa con unos toques. La recopilación de texto libre requiere varias rondas de mensajes y lógica de análisis en tu backend para extraer los mismos campos.

Si necesitas un número de la Cloud API para empezar a crear Flows, puedes obtener acceso a la API a través de 360Dialog.

Flows estáticos o dinámicos: ¿qué tipo necesitas?

La diferencia práctica es si tu Flow se conecta a un endpoint de datos. Un Flow sin endpoint de datos define todo su contenido en el Flow JSON y recopila localmente lo que ingresa el usuario. Un Flow con endpoint de datos envía solicitudes cifradas a tu servidor durante la ejecución y recibe los datos que completan la siguiente pantalla. Las dos etiquetas describen formas de manejar los datos que determinan cuánta infraestructura de backend necesitas.

Sin endpoint de datos: El Flow JSON define cada pantalla, componente y ruta de navegación en el momento del diseño. Lo que ingresa el usuario se recopila localmente y se envía como payload JSON cuando el Flow termina. Este enfoque funciona para formularios de captación de leads, encuestas de opinión y formularios de registro en los que todos los campos se conocen de antemano. Las acciones principales son navigate (para pasar de una pantalla a otra) y complete (para terminar el Flow y devolver los datos). No interviene ningún servidor hasta que el envío final llega mediante webhook.

Con endpoint de datos: El Flow envía solicitudes POST cifradas a tu endpoint HTTPS durante la ejecución mediante la acción data_exchange.[2][4] Tu servidor descifra la solicitud, procesa los datos y devuelve el contenido de la siguiente pantalla. Esto permite reservar citas con disponibilidad en vivo, mostrar catálogos de productos con inventario en tiempo real o cualquier escenario en el que el contenido de la pantalla dependa de las selecciones anteriores del usuario o del estado de tu backend. Las solicitudes a tu endpoint agotan el tiempo de espera a los 10 segundos, y Meta recomienda que el flow_token venza a los 2 o 3 días para que los usuarios tengan tiempo de interactuar.[6]

Ambos enfoques usan la misma estructura de Flow JSON y los mismos componentes. La elección depende de si tus pantallas necesitan datos de tu servidor durante la ejecución.

Para conectar las respuestas de tus Flows con las herramientas de automatización que ya usas, consulta cómo funcionan las integraciones de WhatsApp con 360Dialog.

¿Qué componentes puedes usar en un Flow?

Los Flows ofrecen más de 20 tipos de componentes, repartidos en las categorías de entrada, visualización, navegación y condicionales. Cada pantalla admite hasta 50 componentes y usa un diseño de una sola columna (SingleColumnLayout, un flexbox vertical).[3] Meta limita el contenido del Flow JSON a 10 MB.

Componentes de entrada principales:

  • TextInput: Texto de una línea, correo electrónico, teléfono, número, contraseña o código de acceso. Admite validación con expresiones regulares (v6.2 y posteriores). Máximo de 80 caracteres de forma predeterminada.
  • TextArea: Entrada de texto de varias líneas, 600 caracteres de forma predeterminada.
  • Dropdown: Selección única entre hasta 200 opciones (100 con imágenes).
  • RadioButtonsGroup: Selección única entre hasta 20 opciones. Meta recomienda un Dropdown a partir de 8 opciones.
  • CheckboxGroup: Selección múltiple entre hasta 20 opciones.
  • DatePicker: Selección de fecha con un formato independiente de la zona horaria (v5.0 y posteriores).
  • CalendarPicker: Selección de una fecha o de un rango de fechas (v6.1 y posteriores).
  • OptIn: Casilla de consentimiento, hasta 5 por pantalla.
  • ChipsSelector: Selector compacto de varias opciones, para 2 a 20 opciones (v6.3 y posteriores).

Los componentes de visualización incluyen TextHeading, TextSubheading, TextBody, TextCaption, RichText (v5.1 y posteriores, para textos más largos con formato markdown), Image (hasta 3 por pantalla) e ImageCarousel (v7.1 y posteriores).

Los componentes de navegación incluyen Footer (obligatorio en las pantallas terminales, máximo 35 caracteres), EmbeddedLink (hasta 2 por pantalla) y NavigationList (v6.2 y posteriores). Los componentes para subir archivos (DocumentPicker y PhotoPicker, v4.0 y posteriores) permiten a los usuarios adjuntar archivos directamente dentro del Flow.

Los componentes condicionales (If y Switch, disponibles desde la v4.0) te permiten mostrar u ocultar elementos según lo que ingresa el usuario o los valores de los datos, y los componentes If pueden anidarse hasta 3 niveles. La acción update_data (v6.0 y posteriores) permite actualizar la pantalla en tiempo real según las interacciones del usuario sin una ida y vuelta al servidor, algo útil para menús desplegables en cascada o campos calculados.

Para ver los pasos de configuración en 360Dialog, consulta la documentación de Flows en docs.360dialog.com. La referencia completa de componentes está en la documentación de componentes de Meta.

¿Cómo creas un Flow con la API? (La ruta con 360Dialog)

Crear un Flow con 360Dialog lleva cinco pasos: generar un par de claves RSA, subir tu clave pública, escribir el Flow JSON, configurar el endpoint y enviar el Flow a los usuarios. Los pasos 1, 2 y 4 solo son necesarios para los Flows que intercambian datos con tu servidor, y Meta incluye el par de claves como parte de la configuración del endpoint. WhatsApp Manager también tiene un Flows Builder con vista previa en vivo, y la ruta por API te permite gestionar el Flow JSON desde tus propios sistemas. En cualquier caso, un Flow puede tener hasta 100 pantallas.

  1. Genera tu par de claves RSA. Crea un par de claves RSA de 2048 bits con OpenSSL:
openssl genrsa -des3 -out private.pem 2048
openssl rsa -in private.pem -outform PEM -pubout -out public.pem

Guarda la clave privada en un lugar seguro. La usarás para descifrar los datos que lleguen de los Flows.

  1. Sube tu clave pública a 360Dialog. Firma y sube la clave mediante nuestro endpoint de cifrado:[5]
POST https://waba-v2.360dialog.io/whatsapp_business_encryption

Envía la clave pública completa (incluidos los marcadores BEGIN y END) como business_public_key en el cuerpo de la solicitud. El endpoint devuelve {"success": true} cuando la operación sale bien. Puedes verificar el estado de la clave con una solicitud GET a la misma URL.

  1. Escribe el Flow JSON. Define tus pantallas, diseños, componentes y acciones de navegación. Como mínimo, el JSON requiere un campo version y un arreglo screens. Usa la versión de Flow JSON que Meta recomienda actualmente (7.3): las versiones hasta la 5.0 están congeladas y ya no se pueden publicar.[7] Cada pantalla tiene un id, un bloque layout y los campos opcionales data y title. Al menos una pantalla debe estar marcada como terminal, y cada pantalla terminal necesita un Footer. Para los Flows con endpoint, define también data_api_version (Meta recomienda "4.0"; "3.0" sigue siendo compatible) y un routing_model que indique qué pantallas pueden seguir a cuáles.
  1. Configura tu endpoint de datos (solo Flows dinámicos). Define el endpoint_uri mediante la Flows API. Tu endpoint debe aceptar solicitudes POST por HTTPS con un certificado TLS/SSL válido. Todos los payloads se cifran con RSA de 2048 bits (OAEP-SHA256) para el intercambio de claves y con AES-128-GCM para el payload de datos. Valida las solicitudes entrantes con el encabezado X-Hub-Signature-256 y el secreto de tu app. Tu endpoint también debe responder a los pings de verificación de estado: {"action": "ping"} espera {"data": {"status": "active"}}.
  1. Envía el Flow a los usuarios. Asocia el Flow a un mensaje interactivo (tipo "flow") o a un mensaje de plantilla (tipo de botón FLOW). Un mensaje interactivo de Flow necesita flow_message_version con el valor "3", el texto del botón en flow_cta y un flow_id o un flow_name.[8] El registro de cambios de Meta indica que flow_token es opcional; defínelo cuando necesites asociar cada respuesta a una sesión o a un usuario. Con flow_action en "navigate" (el valor predeterminado), flow_action_payload indica la primera pantalla y puede completar campos por adelantado cuando ya conoces datos del usuario por el contexto de la conversación.

Como Official Meta Solution Partner, 360Dialog ofrece el endpoint de cifrado y la infraestructura de API que gestionan las claves de los Flows. La documentación para desarrolladores de Meta incluye ejemplos de código para descifrar los datos en el endpoint en Python, Node.js, PHP, Java, C# y Go.

Si todavía no usas la WhatsApp Business API, empieza por conseguir la aprobación de tu WhatsApp account antes de crear Flows.

Tres ejemplos prácticos con Flow JSON

Los siguientes ejemplos muestran la estructura JSON de tres casos de uso habituales. Cada uno usa la versión 7.3 de Flow JSON, la que Meta recomienda actualmente. La referencia completa de componentes y acciones está en la documentación de Flow JSON de Meta.

Formulario de captación de leads (una pantalla, sin endpoint)

Un formulario mínimo de captación de leads con un campo de nombre, un selector de interés y una casilla de consentimiento:

{
  "version": "7.3",
  "screens": [{
    "id": "LEAD_FORM",
    "title": "Contáctanos",
    "terminal": true,
    "layout": {
      "type": "SingleColumnLayout",
      "children": [
        {"type": "TextInput", "name": "full_name",
         "label": "Nombre completo", "required": true,
         "input-type": "text"},
        {"type": "RadioButtonsGroup", "name": "interest",
         "label": "Área de interés", "required": true,
         "data-source": [
           {"id": "sales", "title": "Ventas"},
           {"id": "support", "title": "Soporte"},
           {"id": "partnership", "title": "Alianzas"}
        ]},
        {"type": "OptIn", "name": "consent",
         "label": "Acepto recibir novedades"},
        {"type": "Footer", "label": "Enviar",
         "on-click-action": {
           "name": "complete",
           "payload": {
             "full_name": "${form.full_name}",
             "interest": "${form.interest}",
             "consent": "${form.consent}"
           }
        }}
      ]
    }
  }]
}

La acción complete del Footer termina el Flow y envía a tu webhook los campos listados en su payload, así que incluye todos los campos que necesites. El webhook entrega un mensaje de tipo "interactive" con tipo interactivo "nfm_reply", cuyo campo response_json es una cadena JSON que contiene el flow_token y los valores de esos campos.

Formulario de opinión (dos pantallas, sin endpoint)

Un formulario de opinión de dos pantallas recopila una calificación en la primera pantalla y comentarios opcionales en la segunda:

{
  "version": "7.3",
  "screens": [
    {
      "id": "RATING",
      "title": "Opinión 1 de 2",
      "layout": {
        "type": "SingleColumnLayout",
        "children": [
          {"type": "TextHeading",
           "text": "¿Cómo fue tu experiencia?"},
          {"type": "RadioButtonsGroup",
           "name": "rating", "label": "Calificación",
           "required": true,
           "data-source": [
             {"id": "5", "title": "Excelente"},
             {"id": "4", "title": "Buena"},
             {"id": "3", "title": "Regular"},
             {"id": "2", "title": "Mala"}
          ]},
          {"type": "Footer", "label": "Siguiente",
           "on-click-action": {
             "name": "navigate",
             "next": {"type": "screen", "name": "COMMENTS"},
             "payload": {}
          }}
        ]
      }
    },
    {
      "id": "COMMENTS",
      "title": "Opinión 2 de 2",
      "terminal": true,
      "layout": {
        "type": "SingleColumnLayout",
        "children": [
          {"type": "TextArea", "name": "comments",
           "label": "Comentarios",
           "required": false},
          {"type": "Footer", "label": "Enviar",
           "on-click-action": {
             "name": "complete",
             "payload": {
               "rating": "${screen.RATING.form.rating}",
               "comments": "${form.comments}"
             }
          }}
        ]
      }
    }
  ]
}

La acción navigate lleva al usuario a la segunda pantalla con un payload vacío. A partir de Flow JSON v4.0, cualquier pantalla puede leer lo que se ingresó en otra pantalla con la sintaxis global ${screen.RATING.form.rating}, así que la acción complete de la última pantalla envía tanto la calificación como los comentarios.

Reserva de citas (dinámico, con endpoint)

Un Flow dinámico usa la acción data_exchange para pedir a tu servidor los horarios disponibles y luego los muestra en una segunda pantalla:

{
  "version": "7.3",
  "data_api_version": "4.0",
  "routing_model": {
    "BOOKING": ["SLOTS"],
    "SLOTS": []
  },
  "screens": [
    {
      "id": "BOOKING",
      "title": "Agenda una cita",
      "layout": {
        "type": "SingleColumnLayout",
        "children": [
          {"type": "DatePicker", "name": "date",
           "label": "Selecciona una fecha", "required": true},
          {"type": "Footer",
           "label": "Ver disponibilidad",
           "on-click-action": {
             "name": "data_exchange",
             "payload": {"date": "${form.date}"}
          }}
        ]
      }
    },
    {
      "id": "SLOTS",
      "title": "Elige un horario",
      "terminal": true,
      "data": {
        "available_slots": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {"type": "string"},
              "title": {"type": "string"}
            }
          },
          "__example__": [
            {"id": "1", "title": "08:00"},
            {"id": "2", "title": "09:00"}
          ]
        }
      },
      "layout": {
        "type": "SingleColumnLayout",
        "children": [
          {"type": "Dropdown", "name": "slot",
           "label": "Horarios disponibles", "required": true,
           "data-source": "${data.available_slots}"},
          {"type": "Footer", "label": "Confirmar cita",
           "on-click-action": {
             "name": "complete",
             "payload": {
               "date": "${screen.BOOKING.form.date}",
               "slot": "${form.slot}"
             }
          }}
        ]
      }
    }
  ]
}

Cuando el usuario selecciona una fecha y toca el Footer, el Flow envía a tu endpoint una solicitud POST cifrada con la fecha seleccionada. Tu servidor descifra la solicitud con tu clave privada RSA y AES-128-GCM, consulta los horarios disponibles y devuelve una respuesta cifrada con la siguiente pantalla ("screen": "SLOTS") y un objeto data que contiene available_slots. El usuario elige un horario, y la acción complete envía la fecha y el horario a tu webhook. Envía este Flow con flow_action en "navigate" y la primera pantalla en BOOKING, para que abrir el Flow no llame a tu endpoint.

¿Cómo diseñas un Flow que la gente termine?

Las buenas prácticas de Meta para los Flows se centran en que cada tarea sea breve y cada pantalla sencilla, para que los usuarios terminen lo que empezaron. Para medir tus propios resultados, el Flows Builder de WhatsApp Manager muestra estadísticas de interacción de los Flows publicados.

Las buenas prácticas documentadas por Meta:

  • Dedica cada pantalla a una sola tarea y mantén el Flow completo por debajo de 5 minutos.
  • Escribe un texto de llamada a la acción que le diga al usuario exactamente qué pasa cuando lo toca. Mantén corto el texto del botón: nuestra documentación fija un límite de 20 caracteres, sin emojis.
  • Usa el componente adecuado para cada tipo de dato: DatePicker para fechas, Dropdown para 8 opciones o más, RadioButtonsGroup para elegir una sola entre menos opciones, CheckboxGroup para selecciones múltiples.
  • Diseña pensando en la caché: cuando un usuario completa una pantalla y avanza, WhatsApp guarda en caché los datos de esa pantalla. Un usuario que sale pierde lo que ingresó en la pantalla actual, así que varias pantallas cortas ponen en riesgo menos datos que una sola pantalla larga.
  • Termina los Flows de varios pasos con una pantalla de resumen para que el usuario revise todo antes de enviar.

Para ver cómo encajan los Flows en tus procesos de mensajería, consulta nuestra guía de automatización de WhatsApp.

¿Cuánto cuestan los Flows?

Meta cobra por mensaje entregado, así que el costo de un Flow es el costo del mensaje que lleva su botón.[9] Nuestros planes tienen un precio por número al mes y no incluyen ningún cargo aparte por los Flows. Si envías el Flow dentro de un mensaje de plantilla, pagas la tarifa de la categoría de esa plantilla (marketing, utilidad o autenticación), que varía según el país.

Si envías el Flow como mensaje interactivo en respuesta a un usuario, sale dentro de la ventana de atención al cliente de 24 horas. A partir del 1 de octubre de 2026, Meta cobra estas respuestas como mensajes de servicio, a la misma tarifa que los mensajes de utilidad y autenticación en ese mercado, y también cobra las plantillas de utilidad enviadas dentro de la ventana.[10] Los mensajes de los usuarios, incluido un Flow enviado, no tienen costo. Para ver las tarifas vigentes por mensaje en cada país, consulta nuestra página de precios.

Si ofreces un SaaS o revendes servicios y quieres ofrecer Flows desde tus propios productos, puedes integrar WhatsApp en tu SaaS con nuestra Partner Platform, que aporta la infraestructura de API para implementaciones multi-cliente.

Si quieres crear tu primer Flow, puedes obtener acceso a la API a través de 360Dialog y, si tu Flow usa un endpoint, seguir los pasos para configurar el par de claves en nuestra documentación de Flows.

Preguntas frecuentes

¿Puedo enviar un Flow dentro de un mensaje de plantilla?

Sí. Para asociar un Flow a un mensaje de plantilla, agregas un botón de tipo FLOW al crear la plantilla. El botón identifica el Flow por su ID o su nombre, e indica la primera pantalla cuando la acción del botón es navigate. Cuando el usuario toca el botón, el Flow se abre dentro del chat. La plantilla en sí pasa por el proceso estándar de aprobación de plantillas de WhatsApp, así que asegúrate de que el contenido de la plantilla y el propósito del Flow cumplan las políticas de comercio y mensajería de Meta.

¿Qué necesitas para enviar un Flow?

Necesitas un número de teléfono de empresa registrado en la WhatsApp Cloud API. Cualquier empresa puede empezar a crear Flows en WhatsApp Manager, y para publicarlos y enviarlos, Meta exige una empresa verificada y una calidad de mensajes alta.

¿Puedo probar un Flow antes de publicarlo?

Sí. El Flows Builder de WhatsApp Manager tiene una vista previa interactiva que se comporta como un dispositivo real y envía solicitudes reales a tu endpoint si el Flow tiene uno. También puedes enviar el borrador a un teléfono de prueba, desde la opción de envío del Builder o mediante la API con mode en draft. Los mensajes de borrador muestran un banner de advertencia en el dispositivo, y el teléfono de prueba debe haberle escrito a tu número en las últimas 24 horas. Los Flows creados desde noviembre de 2024 siguen siendo editables después de publicarse, mediante la API o el Builder, y conservan el mismo ID de Flow.

¿Qué pasa con los datos del usuario si cierra el Flow a mitad de camino?

WhatsApp guarda en caché los datos de una pantalla cuando el usuario la completa y pasa a la siguiente. Los datos ingresados en la pantalla actual, antes de que el usuario toque el botón del Footer, se pierden si sale. Por eso Meta recomienda dividir los formularios con varios campos en varias pantallas cortas, para que haya menos datos en riesgo si el usuario sale antes de terminar.

¿Los datos están cifrados?

Sí. Todos los datos que se intercambian entre el Flow y tu endpoint usan un intercambio de claves RSA de 2048 bits (OAEP-SHA256) combinado con cifrado AES-128-GCM del payload. La solicitud entrante contiene tres campos: encrypted_flow_data, encrypted_aes_key e initial_vector. Descifras la clave AES con tu clave privada RSA y luego descifras el payload con AES-GCM. Tu respuesta se cifra con la misma clave AES usando un vector de inicialización invertido. La guía completa de implementación del cifrado, con ejemplos de código en seis lenguajes, está en la documentación para desarrolladores de Meta.

Fuentes

[1] Meta, “WhatsApp Flows,” developers.facebook.com/docs/whatsapp/flows. Accessed September 29, 2026.

[2] Meta, “Flow JSON Reference,” developers.facebook.com/docs/whatsapp/flows/reference/flowjson. Accessed September 29, 2026.

[3] Meta, “Components Reference,” developers.facebook.com/docs/whatsapp/flows/reference/components. Accessed September 29, 2026.

[4] Meta, “Implementing Your Flow Endpoint,” developers.facebook.com/docs/whatsapp/flows/guides/implementingyourflowendpoint. Accessed September 29, 2026.

[5] 360Dialog, “Flows,” docs.360dialog.com/docs/messaging/flows. Accessed September 29, 2026.

[6] Meta, “Best Practices,” developers.facebook.com/docs/whatsapp/flows/guides/bestpractices. Accessed September 29, 2026.

[7] Meta, “Changelog,” developers.facebook.com/docs/whatsapp/flows/changelogs. Accessed September 29, 2026.

[8] Meta, “Sending a Flow,” developers.facebook.com/documentation/business-messaging/whatsapp/flows/guides/sendingaflow. Accessed September 29, 2026.

[9] Meta, “Pricing on the WhatsApp Business Platform,” developers.facebook.com/docs/whatsapp/pricing. Accessed September 29, 2026.

[10] Meta, “Upcoming Pricing Updates for Meta Business Agent, Service and Utility Messages,” developers.facebook.com/documentation/business-messaging/whatsapp/pricing/non-template-messages. Accessed September 29, 2026.