Call Webhook
Make an HTTP request to an external URL during a conversation. Pass data out, receive data back, and use the response downstream.
The Call Webhook node makes an HTTP request to a URL you specify, optionally passing data from the conversation, and stores the response for use in subsequent nodes. Use it to integrate the virtual being with external systems – CRMs, order management, booking systems, custom APIs, or any service with an HTTP endpoint.
Available in: Conversational Flows and Handlers
Configuration
| Field | Description |
|---|---|
| URL | The endpoint to call. Supports variable interpolation (e.g. https://api.example.com/orders/{{conversation.orderId}}). |
| Method | HTTP method: GET, POST, PUT, PATCH, DELETE |
| Headers | Key-value pairs added to the request headers (e.g. Authorization: Bearer {{user.apiToken}}) |
| Body | Request body for POST/PUT/PATCH – JSON, form data, or plain text. Supports variable interpolation. |
| Response variable | Conversation variable where the response body is stored |
| Timeout | How long to wait for a response before treating the request as failed (seconds) |
Request body example
To post user data to a CRM:
{
"email": "{{user.email}}",
"name": "{{user.name}}",
"source": "virbe-widget",
"message": "{{conversation.lastMessage}}"
}Using the response
The response body is stored as a string in the result variable. If the API returns JSON, parse specific values using dot notation in subsequent nodes:
{{conversation.webhookResponse.order.status}}Use a Check Variable node to handle errors – check whether the response is empty or contains an error indicator before referencing response fields in a Text node.
Error handling
If the webhook call fails (network error, timeout, non-2xx response), the result variable is set to empty or contains the error response. Always design an error branch:
[Call Webhook: look up order]
→ [Check Variable: conversation.webhookResponse is empty]
→ [Empty / Error]: [Text: "I wasn't able to retrieve that right now. Please try again or contact support."]
→ [Has value]: [Text: "Your order status is: {{conversation.webhookResponse.status}}"]Webhook calls add latency to the conversation – the user waits while the request completes. Keep external API calls fast (under 2–3 seconds) for a good experience. If the call might be slow, consider using a Text node before it to acknowledge the user while they wait ("Let me look that up for you…").
External endpoint responsibility
The availability, response behaviour, and data handling of the endpoint you call are outside Virbe's control. If the endpoint is slow, unavailable, or returns unexpected data, conversation behaviour depends entirely on how you handle those cases in your flow. Always implement an error branch (see Error handling above). Any data sent to an external endpoint – including user messages or conversation variables – is governed by your agreement with the operator of that endpoint, not by Virbe.
Security
- Store API keys and tokens in User variables or pass them via the Profile's Additional Information field – never hard-code secrets in the URL or body as plain text visible to all editors.
- Use HTTPS endpoints only.
- Validate and sanitize any user input before passing it to external APIs.
Integration Nodes
Integration nodes connect a conversation to external systems – HTTP webhooks, custom server-side actions, and Automations.
Trigger Automation
Fires an Automation flow from within a Conversational Flow or Handler, running background tasks without interrupting the user-facing conversation.