ChatbotNode GuidesTriggerWebhook

Webhook Node

Starts a chatbot flow automatically when an external system (e.g. your e-commerce store, CRM, or any custom backend) sends an HTTP webhook to WappCloud — instead of the flow starting from a keyword or button reply. Useful for event-driven automations like “cart abandoned,” “order placed,” or “payment failed” notifications that should trigger a WhatsApp message without the contact having messaged first.


How to Use

  1. Drag a Webhook node onto the canvas and make it the flow’s start node.
  2. Copy the unique webhook URL generated for this node.
  3. Configure your external system to POST a JSON payload to that URL whenever the event occurs.
  4. Select the phone number field from the payload — this is required. The field can be named anything (phoneNumber, contact_number, mobile, etc.), but its value must be a full phone number with country code and no separators — for example 918675XXXXXX, not +91 8675-XXXXXX. This is how WappCloud matches the webhook to a contact; if it’s missing or badly formatted, the flow can’t be triggered.
  5. Every other field in the payload becomes available as a variable ({{fieldName}}) usable later in the flow — in a Template or Message node’s text, or as an input to a Condition node for branching.
  6. Optionally turn on session expiry — if the contact doesn’t complete the flow within the configured time, the flow instance is discarded instead of staying parked indefinitely.
  7. Connect the node’s output to the first real step in your flow (Message, Template, Condition, etc.).

A secret stops anyone who guesses your webhook URL from triggering the flow. Use whichever form matches what the sending system supports:

  • Sender supports custom headers (Zapier, Make, n8n, your own script) — send the secret in the x-flow-webhook-secret header.
  • Sender only accepts a plain URL (Shopify’s native webhook settings, most no-code tools) — append the secret as a ?secret= query parameter on the URL instead.

Sample Payload

{
  "phoneNumber": "919994088934",
  "product_id": "0009",
  "product_price": 200,
  "customField": 0
}
  • phoneNumber — required. Any field name works, but the value must be a phone number with country code (e.g. 91 for India) and no +, spaces, or dashes — 919994088934, not +91 9994088934.
  • product_id, product_price, customField — arbitrary fields you define; each becomes a variable the flow can reference or branch on. In this example, customField could be used by a Condition node further down the flow to tell event types apart (e.g. 0 = cart created, 1 = order placed).

Capturing a Sample Response

Before you can select a phone number field, send one real test webhook to the URL, then click Capture Response to pull it in. Use View Response Data to see every field from that captured payload, flattened out with its value.


Restart the Flow on Every Hit

A checkbox controlling what happens if a second webhook arrives for a contact who’s already partway through this flow:

  • Unchecked (default) — the second hit updates that contact’s data instead of restarting the flow from the beginning.
  • Checked — the second hit restarts the flow from the beginning.

Session Expiry

Same as the Keyword Node — set how long to wait before automatically ending an inactive session, and what message to send when it ends. See Keyword Node — Session Expiry for details.


Summary

  1. Add the node and copy its generated Webhook URL (and Secret, if you want one).
  2. Point your external system at that URL.
  3. Send one test webhook, then click Capture Response to pull in a sample payload.
  4. Select which field in that payload is the contact’s phone number (country code, digits only, no separators).
  5. Reference any other payload field later in the flow as {{fieldName}}.
  6. Decide whether a repeat hit for the same contact should restart the flow or just update it.
  7. Set a session expiry time and message.