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",
"userId": "MX.123456",
"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",
"userId": "MX.123456"
}
]
}
}
NOTEThe payload also includes a
userIdfield. See Reserved usernames for when this field replaces the user's phone number.
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 19 days ago
