# WhatsApp Flows: datos dinámicos

> WhatsApp Flows: datos dinámicos

Source: https://docs.plazbot.com/kb/whatsapp-flows-datos-dinamicos

Con **Data Exchange**, tu WhatsApp Flow se conecta con tu sistema: carga datos cuando se abre un screen, llama a tu API cuando el cliente lo envía y guarda las respuestas en el contacto.

[Watch the video on YouTube](https://www.youtube.com/watch?v=TKVObE0zWro)

## Antes de empezar

- Un flow en **borrador** (ver RH-07). Si ya está publicado, usa **Duplicar** y trabaja sobre la copia.
- Si tu API pide autenticación, crea el secret en **Configuración → Secrets**. En el flow solo va la referencia `{{secret.CLAVE}}`, nunca el valor.

## 1\. Una lista que se llena desde tu API

1. En el tab **Diseño**, agrega una **Lista desplegable** y ponle una **Variable (name)**, por ejemplo `servicio`.
2. En **Opciones**, elige **Desde Init** y escribe la **Clave dentro de screen.data**, por ejemplo `servicios`.
3. La lista se renderiza como `${data.servicios}`: tu API debe devolver `{ "servicios": [{ "id": "...", "title": "..." }] }`.

## 2\. Data Exchange: Al abrir

1. Ve al tab **Data Exchange** y selecciona el screen en **Screens del flow**.
2. Paso **1 Al abrir**: elige una opción.
   - **No, el screen es estático**: los textos y opciones ya están en el diseño.
   - **Sí, con datos fijos**: escribes el JSON que recibe el screen.
   - **Sí, consultando mi API**: Plazbot llama a tu endpoint y entrega la respuesta al screen.
3. Con tu API: elige el **Método**, escribe la **URL** y, en **Headers (JSON)**, usa **\+ Insertar secret** para agregar `Authorization: Bearer {{secret.CLAVE}}`.
4. Presiona **Probar request**: ves el código HTTP, la **Respuesta** y la **Data que recibe el screen**. Si tu API tarda más de 10 s, WhatsApp corta la espera.

> Al abrir solo se ejecuta en el primer screen o cuando el screen anterior envía sus datos a Plazbot.

## 3\. Data Exchange: Al enviar

1. Paso **2 Al enviar**: elige **Enviar a mi API** (o **Responder con datos fijos**).
2. Marca **Enviar todas las respuestas del formulario en el body** para recibirlas en el campo `form`.
3. El **Botón footer** del screen debe tener la acción `data_exchange` (o `navigate`). Con `complete`, WhatsApp cierra el flow sin llamar a Plazbot.
4. En **¿A dónde va el usuario después?**, elige otro screen o **COMPLETE — finalizar flow**. Sin selección, va al screen que devuelva tu API en el campo `screen`.

En los textos puedes usar `{{contact.x}}` (datos del contacto), `{{form.x}}` (respuestas) y `{{secret.X}}` (secrets).

## 4\. Guardar en contacto

1. Paso **3 Guardar en contacto**: presiona **\+ Agregar mapeo**.
2. En **Origen del flow** elige `form.<name>` (lo que respondió el cliente) o `data.<clave>` (lo que devolvió tu API).
3. En **Campo / variable del contacto** elige un dato del contacto (Nombre, Correo, Teléfono…) o una variable personalizada; también puedes crear una nueva.
4. Presiona **Listo**, luego **Guardar** arriba, y publica el flow.

Los valores se guardan al enviar el screen y al terminar el flow; las opciones de listas se guardan con su texto visible.
