Webhook - WhatsApp Flow Responses
Receive and process a contact's WhatsApp Flow submission at a configured webhook endpoint. For developers connecting Flow completions to a Keyword automation or Custom Webhook integration.
Receive and process the answers an end user submits through a WhatsApp Flow at your configured webhook endpoint.
Configure your webhook
Connect your webhook endpoint to the platform using one of the following options:
- Configure an automation for inbound WhatsApp interactions, such as a Keyword.
- Configure a Custom Webhook integration in the platform.
The platform sends a JSON payload whenever an end user completes and submits a Flow.
Identify Flow responses
Distinguish Flow response events from regular inbound WhatsApp messages before processing the payload:
- Regular user messages contain the message content as plain text.
- Flow responses contain a structured response with the answers collected during the Flow. The payload stores this response as a serialized data object that maps each Flow component to the value the user selected or entered.
The following example shows the payload sent when a user completes a customer feedback Flow:
{
"owner": "elipackage",
"date": "2026-01-19T20:38:39.321185230Z",
"processId": 1234,
"origin": "580000000000",
"externalId": "test_121214",
"callback": "https://webhook.site/example",
"id": "abcdefg12345678",
"text": "",
"user": "525600000000",
"extraInfo": {
"SAMWELL_WEBHOOK_NAME": "whatsapp w",
"MSGI_SOURCE_CAMPAIGN": "KWC",
"interactive": {
"type": "nfm_reply",
"id": null,
"title": null,
"description": null,
"nfmReply": {
"type": "nfm_reply",
"responseJson": "{\"overall_experience\":\"0_very_satisfied\",\"improvement_areas\":[\"0_response_time\"],\"flow_token\":\"unused\",\"would_attend_again\":\"1_yes\"}",
"body": "Sent",
"name": "flow"
}
},
"type": "interactive",
"contacts": [
{
"profile": {
"name": "Julian"
},
"wa_id": "123456789"
}
]
}
}Parse the submitted answers
- Read the
"extraInfo.interactive.nfmReply.responseJson"field. The user's answers are not stored at the top level of the payload. - Parse
"responseJson"from a JSON string into a JSON object before processing its values.
After parsing, the value of "responseJson" is:
{
"overall_experience": "0_very_satisfied",
"improvement_areas": ["0_response_time"],
"flow_token": "unused",
"would_attend_again": "1_yes"
}Each key in the parsed responseJson object corresponds to an input component in the Flow configuration. Each value is the option the user selected or the text they entered.
Use the Flow definition for the submitted experience to interpret the available keys and their values.
Updated about 18 hours ago
