n8n: in-call and post-call automation
On this page
n8n is the universal adapter. If your system is not in the integrations catalogue but has an API, n8n reaches it — and you build the connection by dragging boxes rather than writing code.
- An n8n instance — self-hosted or on n8n.cloud. The free self-hosted version is enough.
- A workflow you can make Active, with a Webhook trigger node.
- Thirty minutes for the first one. Ten for each after that.
An agent that can reach into any system you can automate — mid-call, with the answer spoken back to the caller — and a set of workflows that fire automatically as leads move through your callback flow.
Two different jobs
People conflate these and then wonder why the setup does not behave. They are separate mechanisms with separate uses.
| In-call | Post-call | |
|---|---|---|
| What starts it | The agent decides to, during a conversation | A lead reaches a notable state |
| Timing | Synchronous — the caller is waiting | Queued and retried in the background |
| The reply matters | Yes — it is spoken to the caller | No — nobody is on the line |
| Set up on | The Integrations page | Your Lead Callback triggers |
| Typical use | Order status, stock, account lookup, escalation | CRM sync, Slack alerts, email follow-up, reporting |
In both directions the flow is outbound from Vociply to your webhook URL. That means you give Vociply no credentials into your instance, and you open no inbound access back to us. Your workflow is the API.
In-call: the agent triggers a workflow
Connect it
Build the workflow in n8n first
Start with a Webhook node. Set the method to POST. Copy the Production URL — not the test URL, which only listens while you are watching the editor.
Activate the workflow. An inactive workflow returns nothing and the agent is left with silence.
Connect n8n in Vociply
Integrationsn8nConnect. Paste the webhook URL. If your webhook uses Header Auth, add the header name and value here too.
Attach it to the agent
Select the agents that should be able to trigger it.
Building the workflow
Vociply sends two things: a one-line summary of why, and whatever data the agent gathered.
{
"summary": "caller asked for the status of order 1042",
"data": {
"order_number": "1042",
"caller_phone": "+254712345678"
}
}Your workflow does its work and returns JSON. Return facts, not sentences:
{
"found": true,
"status": "out for delivery",
"courier": "G4S",
"expected": "tomorrow before noon"
}The agent turns that into speech itself — “That one’s out for delivery with G4S, should be with you before noon tomorrow.” Return a pre-written sentence and you get a stilted, obviously-scripted reply.
| Do | Do not |
|---|---|
| Return structured fields the agent can phrase | Return prose for the agent to read out |
| Return a clear “not found” flag | Return an empty object and hope |
| Respond in under two seconds | Chain six slow API calls in one workflow |
| Keep the response small | Return an entire database row of 60 fields |
Every second your workflow takes is dead air. Aim for under two seconds. If a lookup is genuinely slow, tell the agent to say “bear with me a moment” before triggering it — a narrated wait is far more tolerable than an unexplained one.
Telling the agent to use it
The tool is execute_n8n with action trigger_workflow. Name the trigger conditions precisely — this is one tool that can mean many things, so vagueness here produces an agent that fires it at random or never.
If the caller asks about the status of an existing order: 1. Ask for their order number. 2. Say "let me check that for you". 3. Use execute_n8n with action trigger_workflow, summary "order status check", and data containing the order_number. 4. Tell them what came back, in your own words. If the workflow returns found: false, say you cannot find that order number and offer to have someone email them. Do not guess a status. Do not use this tool for anything other than order status questions.
Resist building one giant workflow with a switch on the summary field. Separate purposes are easier to describe to the agent, easier to debug in n8n, and fail independently. If you need several in-call actions, front them with a small router workflow of your own.
Post-call: reacting to lead events
The second job, and the one most people get more value from. As a lead moves through Lead Callback, Vociply emits events and delivers them to your connected workflow destinations.
| Event | A good workflow for it |
|---|---|
lead.received | Create the record in your CRM before the call even happens. |
lead.completed | Append a row to a reporting sheet. |
lead.qualified | Post to Slack, assign an owner, start a sequence. |
lead.unqualified | Add to a nurture list rather than throwing it away. |
lead.transferred | Notify the rep who is about to pick up. |
lead.exhausted | Create a task for a human. You paid for this lead. |
{
"event": "lead.qualified",
"lead": {
"name": "Amina Otieno",
"phone": "+254712345678",
"email": "amina@example.com"
},
"qualification": {
"owns_property": true,
"monthly_bill": 4800
}
}Build one workflow with a Switch node on event and a branch each. Deliveries are queued and retried rather than sent inline, so a slow or briefly unavailable endpoint never delays a dial — and each delivery is recorded, so “did my workflow get told?” is answerable without reading logs.
If you build only one workflow, build this one. It is the “we tried three times and never reached them” signal — leads you have already paid for and never spoken to. Route it to a human’s task list and it usually pays for the whole setup.
Locking it down
A webhook URL is a credential. Anyone who learns it can run your workflow, and if that workflow writes to your systems, that matters.
- Use Header Auth on the n8n webhook node and set the matching header name and value in the Vociply connection. This is the single most important step.
- Validate the input. Do not pass
datastraight into a database query or a shell command. - Prefer read-only workflows for in-call use. Lookups are safe to get wrong; writes triggered by a mis-heard sentence are not.
- Use HTTPS and a properly reachable host. Local and internal addresses are refused when you connect, deliberately.
- Log what ran. When something odd happens on a call, the n8n execution history is where you find out what was actually asked for.
Recipes worth stealing
| Recipe | Direction | What it does |
|---|---|---|
| Order status from your own system | In-call | Caller gives an order number; the workflow queries your database or ERP and returns status, courier and date. |
| Escalate to a duty manager | In-call | Agent triggers the workflow, which pages whoever is on duty in Slack and returns their name so the agent can say who will call back. |
| Stock check against an unusual system | In-call | For inventories not covered by Zoho or WooCommerce. Return quantity and a simple in-stock flag. |
| Two-way CRM sync | Post-call | lead.received creates the record; lead.qualified updates it and assigns an owner. |
| Daily digest | Post-call | Collect lead.completed events into a sheet and email a summary each evening. |
| Never-reached follow-up | Post-call | lead.exhausted creates a task, sends an SMS, or drops the lead into a re-marketing audience. |
Questions
Do I need to know how to code?
No. n8n is drag-and-drop, and it ships with nodes for most common systems. You will need to understand what your other system’s API expects — but you rarely have to write anything.
Can one agent trigger several different workflows?
The connection holds one webhook URL. To reach several destinations, point it at a router workflow that branches on the summary or a field in data, and be very explicit in the instructions about what to send for each case.
What happens if my n8n instance is down?
For in-call, the trigger fails and the agent needs a fallback instruction — “if you cannot check, take their number and say we will call back”. For post-call, deliveries are retried, so a brief outage catches up on its own.
Can the workflow make the agent say something specific?
Indirectly. Return a field and instruct the agent to relay it. Do not return a whole scripted sentence — it comes out sounding read aloud, because it is.
Is n8n included in my plan?
Integration availability varies by plan — check Billing. Your n8n instance itself is yours: self-host it free, or pay n8n for their cloud.