1. Overview
QCall supports two webhook trigger modes. You configure them from the Tools section of your assistant inside the QCall Dashboard.
This guide focuses on the End-of-Call Webhook — the most common client integration.
2. How It Works (Flow)
- The assistant completes the call.
- QCall takes the full transcript + collected context.
- The AI extracts every Body Parameter value using strict rules (never invents data, only uses exact words from the user/transcript).
- QCall sends an HTTP request (method of your choice) to your configured URL with headers, query parameters, and body.
- Your server responds. The response status + body is logged in the QCall delivery history for audit.
3. Configuring the Webhook in the QCall Dashboard
Open Dashboard → Assistants → (select your assistant) → Tools → + Add Webhook. You’ll see the following fields:Body Parameter fields (each row)
4. Example: Recommended Field Setup
Configure the following Body Parameters inside your webhook tool to receive full caller + order information after each call.
Webhook URL example:
https://your-domain.com/api/qcall/call-report
Method: POST
Trigger on Call End: ON
Enable Trigger: ON
Enable Body: ON
Headers:
5. Example: The Payload Your Server Will Receive
When the call ends, QCall sends a request like this to the URL you configured: Request6. Expected Response from Your Server
Your server should respond with HTTP 200 or 201 and a JSON body. Non-2xx responses are logged as failures in QCall’s delivery history. Example response- Timeout: 10 seconds. If your endpoint does not respond within 10s, the delivery is marked failed.
- Retries: The webhook fires once per call. Build your endpoint to be idempotent (use
order_idor a call-level unique id to dedupe).
7. Security Recommendations
- Use HTTPS only. Plain HTTP endpoints are accepted but strongly discouraged.
- Protect your endpoint with a static bearer token / API key passed via the
Authorizationheader: - Validate input server-side. Do not trust field values blindly — treat them like any user-supplied data.
- Log every request (request id, timestamp, IP) for auditing.
8. Content Types Supported
QCall automatically serializes the body based on theContent-Type header you set:
For GET / DELETE requests, the body is omitted automatically — use Query Parameters instead.
9. Testing Your Integration
- Build a test receiver — either a simple Express server or use webhook.site.
- Use the webhook.site URL as the Webhook URL in the QCall Dashboard while testing:
- Place a test call through the QCall dashboard or playground.
- End the call — the webhook should fire within a few seconds.
- Verify the received payload matches the Body Parameters you configured.
Minimal Node.js receiver example
10. Frequently Asked Questions
Q. Can I receive multiple webhooks per call? Yes. Add multiple webhook tools under the same assistant. Each one has its own URL, method, and parameter set. Q. What happens to missing values? The AI will set the field to an empty string"" rather than invent data. Your server should handle empty strings gracefully.
Q. Can I add custom fields?
Yes. Any Body Parameter you add with a clear Description will be extracted by the AI. Always use lowercase snake_case identifiers.
Q. Can I filter which calls trigger the webhook?
Not natively — every call for that assistant fires the webhook. Filter on your side using call_outcome or sentiment_analysis.
Q. Where can I see webhook delivery history?
Contact your QCall account manager for access to the delivery log for your workspace.
11. Quick Checklist Before Going Live
- Webhook URL is HTTPS and reachable from the public internet.
- Trigger on Call End and Enable Trigger are both ON.
-
Content-Typeheader matches how you parse the body. - Authorization header is set and validated on your server.
- Endpoint responds within 10 seconds.
- Endpoint is idempotent (safe to receive same call twice).
- Every Body Parameter identifier uses lowercase snake_case.
- Tested end-to-end with a real call.
12. Support
For issues, error codes, or custom integrations, reach out to your QCall support contact with:- Assistant name
- Approximate call timestamp (with timezone)
- Your server’s response code + body

