> ## Documentation Index
> Fetch the complete documentation index at: https://developers.insuranceboosters.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Respuesta de WhatsApp Flow

> Inicia una automatización cuando una persona completa un WhatsApp Flow.

Usa `whatsapp_flow_submission` para procesar la información que una persona envía al completar un [WhatsApp Flow](https://developers.facebook.com/docs/whatsapp/flows/).

Después de recibir la respuesta, la plataforma:

1. identifica el Flow que se completó;
2. busca automatizaciones activas configuradas con ese `flowId`;
3. crea una ejecución por cada automatización encontrada;
4. deja la información de la respuesta disponible en `trigger.body`.

## Configuración

```json theme={null}
{
  "type": "whatsapp_flow_submission",
  "flowId": "<meta-flow-id>"
}
```

| Campo | Descripción |
| - | - |
| `type` | Debe ser `whatsapp_flow_submission`. |
| `flowId` | ID del Flow en Meta. La automatización solo recibe respuestas de ese Flow. |

El número o ID de la línea de WhatsApp no forma parte de la configuración. Si el mismo Flow se usa en varias líneas, todas sus respuestas pueden iniciar la automatización.

## Antes de probar

**1. Obtén el ID del Flow**

Copia el ID desde la configuración del Flow en Meta.

**2. Crea la automatización**

Configura `type` y `flowId`, y agrega al menos un paso.

**3. Publica y activa**

Solo una versión publicada y activa puede recibir respuestas.

**4. Completa el Flow**

Sigue la guía de Meta [Sending a Flow](https://developers.facebook.com/docs/whatsapp/flows/guides/sendingaflow/), envíalo a un número de prueba y complétalo desde WhatsApp.

**5. Revisa la ejecución**

[Lista las ejecuciones](https://developers.insuranceboosters.com/automatizaciones/listar-ejecuciones.md) del workflow hasta encontrar la creada después de completar el Flow. Usa su `runId` para [consultar la ejecución](https://developers.insuranceboosters.com/automatizaciones/consultar-ejecucion.md) y sus pasos.

## Datos disponibles en los pasos

`trigger.body` contiene dos grupos de información:

* **Información agregada por la plataforma:** qué Flow se completó, quién respondió, por qué línea llegó y qué mensaje originó la respuesta.
* **Información enviada por tu Flow:** las claves y valores definidos en la acción de finalización del Flow.

### Información agregada por la plataforma

| Ruta | Qué contiene |
| - | - |
| `trigger.body.eventId` | ID calculado por la plataforma a partir del mensaje y sus datos de WhatsApp. Los reintentos del mismo mensaje conservan el mismo ID. |
| `trigger.body.occurredAt` | Fecha y hora de la respuesta en formato ISO 8601. |
| `trigger.body.line` | Línea que recibió la respuesta. `wabaId` identifica la cuenta de WhatsApp Business en Meta. |
| `trigger.body.user` | Identificadores y nombre de perfil de la persona que respondió. |
| `trigger.body.flow` | ID, nombre y token de sesión del Flow. El token identifica el envío concreto que respondió la persona. |
| `trigger.body.ticket` | Folio relacionado, cuando existe. |
| `trigger.body.message` | ID del mensaje de respuesta y `contextMessageId`, que identifica el mensaje desde el que se abrió el Flow. |

### Información enviada por tu Flow

| Ruta | Qué contiene |
| - | - |
| `trigger.body.submission.data` | Objeto JSON listo para usar. Conserva las claves y valores enviados por tu Flow. |
| `trigger.body.submission.rawJson` | Texto original recibido en `response_json`. Úsalo solo si necesitas revisar exactamente lo enviado por Meta. |

La plataforma no asigna un significado especial a las claves de `submission.data`. Por ejemplo, `email`, `calificacion` o `comentario` solo existen si tu Flow las envía.

> [!NOTE]
>
> Meta define la estructura del webhook original y de `interactive.nfm_reply.response_json`. Consulta [Receive a Flow response](https://developers.facebook.com/docs/whatsapp/flows/guides/receiveflowresponse/) para entender el mensaje enviado por Meta y [Flow JSON](https://developers.facebook.com/docs/whatsapp/flows/reference/flowjson/) para configurar qué datos devuelve tu Flow.

### Relación con la acción `complete` de Meta

La acción final de tu Flow decide qué claves aparecen en `submission.data`. Este ejemplo conceptual envía una calificación y un comentario:

```json theme={null}
{
  "on-click-action": {
    "name": "complete",
    "payload": {
      "calificacion": "${form.calificacion}",
      "comentario": "${form.comentario}"
    }
  }
}
```

La automatización recibiría esas claves como `trigger.body.submission.data.calificacion` y `trigger.body.submission.data.comentario`.

La sintaxis y componentes disponibles pertenecen al contrato de Meta. Consulta [Flow JSON](https://developers.facebook.com/docs/whatsapp/flows/reference/flowjson/) antes de publicar el Flow.

## Ejemplo de `trigger.body`

```json theme={null}
{
  "source": "whatsapp_flow_submission",
  "eventId": "<event-id>",
  "occurredAt": "2026-09-02T19:49:40.240Z",
  "tenantId": "<tenant-id>",
  "line": {
    "phoneNumberId": "<phone-number-id>",
    "displayPhoneNumber": "<display-phone-number>",
    "wabaId": "<waba-id>"
  },
  "user": {
    "waId": "<wa-id>",
    "metaUserId": "<meta-user-id>",
    "profileName": "Cliente de ejemplo"
  },
  "flow": {
    "id": "<meta-flow-id>",
    "token": "<flow-token>",
    "name": "Encuesta de servicio"
  },
  "ticket": {
    "id": "<ticket-id>"
  },
  "message": {
    "id": "<message-id>",
    "contextMessageId": "<context-message-id>",
    "contextFrom": "<display-phone-number>"
  },
  "submission": {
    "data": {
      "calificacion": 9,
      "comentario": "Atención rápida",
      "acepta_contacto": true
    },
    "rawJson": "{\"calificacion\":9,\"comentario\":\"Atención rápida\",\"acepta_contacto\":true}"
  }
}
```

Los campos dentro de `submission.data` son ejemplos. Reemplázalos por las claves que devuelve tu Flow.

## Usar la respuesta en JavaScript

Pasa primero los datos al `input` del paso:

```json theme={null}
{
  "name": "Procesar respuesta",
  "actionKey": "code.javascript",
  "input": {
    "response": "{{trigger.body.submission.data}}",
    "flow": "{{trigger.body.flow}}",
    "eventId": "{{trigger.body.eventId}}"
  },
  "code": "output = {\n  eventId: input.eventId,\n  flowId: input.flow.id,\n  response: input.response\n};"
}
```

Como `{{trigger.body.submission.data}}` ocupa todo el string, `input.response` recibe un objeto, no texto.

## Evitar ejecuciones duplicadas en sistemas externos

Meta puede entregar el mismo mensaje más de una vez. La plataforma calcula el mismo `eventId` para esos reintentos y evita crear otra ejecución de la misma automatización durante al menos 30 días.

`eventId` no es el ID que Meta asigna al Flow ni el token de sesión. Es un ID de evento generado por la plataforma.

Si uno de tus pasos llama otro sistema, envía `trigger.body.eventId` como clave de idempotencia:

```json theme={null}
{
  "headers": {
    "X-Idempotency-Key": "process-flow-response:{{trigger.body.eventId}}"
  }
}
```

No uses el contenido de `submission.data` como clave: dos respuestas diferentes pueden contener los mismos valores.

Consulta [Reintentos e idempotencia](https://developers.insuranceboosters.com/automatizaciones/triggers/reintentos-idempotencia.md) antes de crear pagos, mensajes o registros en otro sistema.

## Problemas frecuentes

| Problema | Qué revisar |
| - | - |
| No se crea una ejecución | Confirma que el `flowId` sea correcto y que la automatización esté publicada y activa. |
| Falta un campo en `submission.data` | Revisa la acción de finalización de tu Flow. La plataforma no agrega campos dentro de `data`. |
| Un valor llega con un tipo inesperado | Revisa la definición del componente y la acción de finalización en Flow JSON. |
| La respuesta no se puede procesar | `response_json` debe ser JSON válido y su valor principal debe ser un objeto, no un array o valor simple. |
| El Flow no llega a WhatsApp | Confirma que el Flow esté publicado en Meta y que la línea siga conectada en la plataforma. |
| Ves un solo run después de repetir el mismo mensaje | Compara `eventId`: el mismo ID indica que la plataforma reconoció un reintento y evitó duplicarlo. |
| No encuentras el run | Lista las ejecuciones del workflow sin filtro de estado y revisa las creadas después de completar el Flow. |

## Relacionado

* [Todos los triggers](https://developers.insuranceboosters.com/automatizaciones/triggers)
* [Crear automatización](https://developers.insuranceboosters.com/automatizaciones/crear-automatizacion.md)
* [Variables y contexto](https://developers.insuranceboosters.com/automatizaciones/variables-y-contexto.md)
* [Consultar ejecución](https://developers.insuranceboosters.com/automatizaciones/consultar-ejecucion.md)
* [Meta: Receive a Flow response](https://developers.facebook.com/docs/whatsapp/flows/guides/receiveflowresponse/)
* [Meta: Flow JSON](https://developers.facebook.com/docs/whatsapp/flows/reference/flowjson/)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.