Only one Webhook node per canvas is allowed.
Webhook URL
The URL is generated by the node itself. Open it in Studio and use Copy URL: the trailing identifier is the Webhook node ID, not a separate identifier. Calls come in through the Jelou gateway. The node generates two URLs, depending on which version of the workflow you want to run. Production — runs the latest published version of the workflow:{channel} is the workflow channel in lowercase: whatsapp, web, instagram, facebook, slack, teams, twitter, or custom.
Already have an integration pointing at the previous host,
workflows.jelou.ai? It keeps working and you do not need to migrate it urgently. The gateway URL applies to new integrations.Always copy the URL from the node instead of building it by hand.
{nodeId} with test/{nodeId}.
Operation modes
The Webhook node operates in two modes, automatically determined by the presence of theexecutionId:
Start new execution
When the request does not include anexecutionId, the webhook creates a new workflow execution from scratch.
Use case: An external system (CRM, ERP, payment gateway) needs to trigger an automated process in Jelou.
Starting a new execution requires the user identifier. The example passes it as ?userId=; the other way is covered in Webhook in Workflows.
Resume existing execution
When the request includes anexecutionId, the webhook resumes an execution that was paused waiting for an external response.
Use case: A payment gateway notifies that the payment was processed, and the flow should continue where it left off.
Configuration
Variable name
Define the name under which webhook data will be stored within the$webhook variable. Data received by the request will be available at $webhook.<variableName>. For example, if you define myWebhook, you can access the body via {{$webhook.myWebhook.body}}, headers via {{$webhook.myWebhook.headers}}, etc.
HTTP Method
Select which HTTP methods the webhook accepts. Supports GET, POST, PUT, PATCH, and DELETE.For methods without a body (like GET), the
executionId for resuming must be sent as a query param: ?executionId=abc-123.Resume multiple times (oneTimeOnly)
By default, an execution can be resumed more than once by the webhook. If you need to restrict this — for example, in payment integrations where a confirmation should only be processed once — you can enable the “Resume only once” option in advanced settings.$webhook variable
When a request reaches the Webhook node, all request information becomes available through the $webhook variable. It works similarly to $memory and $context.
Usage example in the flow
Assuming you definedmyWebhook as the variable name, you can use the properties in any subsequent node:
Webhook in Workflows
The Webhook node is available in Workflows, allowing conversational flows to be triggered or resumed by external events.Considerations for Workflows
New executions in Workflows
New executions in Workflows
To start a new Workflow execution via webhook, the request must include the user identifier (e.g., phone number for WhatsApp). This is needed so the Workflow can send messages to the user through the corresponding channel.You can send it in two ways:
- In the body: configure the User ID field in the node panel with the path (dot notation) where the identifier arrives.
- As a query param: append
?userId=to the URL, with nothing to configure in the panel.
If the identifier does not arrive through either route, the webhook responds with an error stating that
userId is missing.Resuming executions in Workflows
Resuming executions in Workflows
To resume an existing execution, only the
executionId is needed. The system already has the user context from the original execution.Platform restrictions
Platform restrictions
On platforms like WhatsApp, if there is no active session (24-hour window) between the user and the channel, the webhook won’t be able to send messages directly. In these cases, you can use an HSM node within the flow to send an approved template that reopens the conversational window.
Versioning
Versioning
The webhook always executes the latest published version of the Workflow. If there is more than one channel of the same type connected to the project, the most recent one is used.
Inheritance in child workflows
Inheritance in child workflows
When a child Workflow inherits webhooks from its parent Workflow, if the child Workflow receives a request, it overwrites the parent flow’s webhook data. The
$webhook data propagates to child executions (internal Workflow nodes).Testing (Draft)
To test the webhook during development (before publishing), the node generates a test URL that includes a/test segment before the node ID:
/test URL executes the current draft of the workflow, so you can iterate without affecting the published version. It also does not require the user identifier: those parameters come from the Workflow Tester.
Backward compatibility
Webhooks created before this update continue to work without changes. The improvements only apply going forward:- Existing webhooks keep their legacy configuration, including the “variable” field that stored data in
$context. - New webhooks always store information in the new
$webhookentity, offering a richer and more consistent structure. - Previous URLs are still served, as noted in Webhook URL.
For legacy webhooks that had a context variable configured, the variable configuration component will still be shown for backward compatibility. In new webhooks, this field does not appear since data is always stored in
$webhook.Common use cases
Payment notifications
Receive confirmations from gateways like Stripe or MercadoPago and resume the purchase flow.
CRM integrations
Trigger automated flows when a record is created or updated in your CRM.
E-commerce events
Process events like cart abandonment, order shipment, or returns.
IoT automations
Receive data from sensors or devices to trigger alert or processing flows.