Lead Callback
On this page
A lead fills in your form. Before they have closed the tab, their phone is ringing and an agent is qualifying them. If they are worth talking to, a human picks up. This is the single highest-value thing on the platform.
Why seconds matter
Speed to lead is the most consistently reproduced finding in sales research: contact someone within a minute of enquiring and you are dramatically more likely to reach them and to convert them than if you call an hour later. It is not a small edge.
The reason is not mysterious. A minute after submitting, the person is still at their desk, still thinking about you, and has not yet filled in three competitors’ forms. An hour later they are in a meeting and you are a stranger.
What a trigger contains
A trigger is one lead source and everything that should happen to leads from it. Create them at Lead CallbackNew Trigger. You will usually have one per form or campaign, because different sources deserve different handling.
| Setting | What it decides |
|---|---|
| Name & source label | How you recognise it later. “Website contact form”, “Meta — solar campaign”. |
| Lead source | Webhook (any form) or Meta Lead Ads (Facebook and Instagram). |
| Agent that calls | Which agent phones the lead. Build one specifically for this. |
| Field mapping | Where in the incoming data the phone number, name and email live. |
| Calling window | The hours and days calling is permitted, in the lead’s own timezone. |
| Consent requirement | Whether a lead with no consent evidence is called at all. |
| Qualification criteria | What the agent must establish, and what counts as qualified. |
| Warm transfer | Whether — and when — to hand the live call to a human. |
| Attempts & retry delay | How many times to try, and how long to wait between tries. |
Where leads come from
Facebook and Instagram lead forms. Connect Meta, choose the Page, and leads arrive automatically — no webhook to configure. Full walkthrough in the playbook.
Any system that can send an HTTP request: your website form, Webflow, Typeform, WordPress, a landing page builder, or your own application.
Setting up a webhook source
When you create a webhook trigger, Vociply gives you an intake URL and a secret. The secret is shown once — copy it then.
POST https://vociply.com/api/leads/inbound/<your-trigger-key>
x-vociply-secret: <your-trigger-secret>
Content-Type: application/json
{
"data": {
"full_name": "Amina Otieno",
"phone_number": "+254712345678",
"email": "amina@example.com",
"consent_checkbox": true,
"timezone": "Africa/Nairobi"
}
}Send x-vociply-secret as a header. If your system can compute an HMAC, send x-vociply-signature: sha256=<hex> over the raw body instead — it is stronger, because it authenticates the payload rather than just the caller. Either is accepted.
Anyone who learns the URL can post fake leads, and each one costs you a real phone call. Never put the secret in front-end JavaScript where a visitor can read it — send the lead from your server, or from the form platform’s own webhook feature.
Field mapping
Every form platform names its fields differently, so you tell Vociply where to look. Mapping uses dotted paths into the JSON you send:
| Field | Required | Example path | Why it matters |
|---|---|---|---|
| Phone | Yes | data.phone_number | Nothing works without it. |
| Name | No | data.full_name | The agent greets them properly. |
| No | data.email | CRM matching and follow-up. | |
| Consent | No | data.consent_checkbox | Your evidence that they agreed to be called. |
| Timezone | No | data.timezone | Judges the calling window in the lead’s local time, not yours. |
Paths can reach into arrays: data.contact.0.phone takes the first contact’s phone. A default calling code is used to complete local-format numbers — a form that submits 0712345678 with a default of +254 becomes +254712345678.
Post a single lead with your own phone number in it. If your phone rings, the mapping is right. If nothing happens, the phone path is almost certainly wrong — check the trigger’s recent activity, which shows what arrived.
Calling windows and consent
The calling window
Set a timezone, the days of the week, and the hours calling is allowed. The default is Monday to Friday, 08:00–20:00.
The important detail: the window is judged in the lead’s timezone when you have mapped one, and in the trigger’s timezone otherwise. A lead arriving at 3am local time is not called at 3am — it is held and dialled when the window opens.
Permitted calling hours are set by regulators, and they are enforced on the recipient’s local clock. Widening the window because leads arrive at night is how accounts get complaints and fines. Leave it lawful and let the queue do its job.
Consent evidence
Turn on Require consent evidence and a lead with no consent value is not called at all. If your form has a “yes, you may call me” checkbox, map it and switch this on.
Vociply also checks the number against your do-not-call list and de-duplicates repeat submissions before dialling, so the same person filling in your form three times does not get called three times.
Qualification
After the call ends, Vociply reads the transcript and works out whether this lead is worth a human’s time. It does this in two distinct halves, and the split is deliberate:
- The AI extracts facts. “What budget did they state?” “Do they own the property?” “When do they want to start?”
- Your rules decide. Which of those answers must be present for the lead to count as qualified is a setting, applied in code.
This matters because it makes the verdict consistent and auditable. Ask an AI “is this lead good?” and you get an answer that drifts between calls and cannot be argued with. Ask it only what the person actually said, then apply your own rule, and the same facts always produce the same verdict — and when you disagree, you can point at the field.
Setting criteria
Each criterion has a key, a label, a type, and a description that tells the AI what to look for:
key: budget type: number "The monthly budget the caller stated" key: decision_maker type: boolean "Whether the caller can sign off themselves" key: timeline type: string "When they want to start" key: property_type type: string "House, apartment, or commercial" Required for qualified: budget, decision_maker
Then make sure the agent’s instructions actually ask these questions. Criteria describe what to extract; they do not make the agent ask. Both halves are needed.
Warm transfer
The highest-value part of the whole flow: while the lead is still on the phone, the call is handed to a human.
| Transfer setting | Behaviour | Use when |
|---|---|---|
| Never | The agent handles the call and hangs up. The lead is logged. | You want notes, not live handoffs. Safest starting point. |
| When qualified | Only leads that met your criteria are transferred. | The default choice for a sales team. Nobody wastes time on tyre-kickers. |
| Always | Every answered call is handed over. | Small volumes, or when a human should hear everything. |
Set the destination number, and optionally a whisper — a short line played to your salesperson before they are connected, so they know what they are picking up: Qualified solar lead from Facebook, budget 50,000.
You have just told a warm lead “let me put you through”. If nobody answers, you have converted enthusiasm into irritation. Point transfers at a hunt group or a mobile that is genuinely staffed, and set transfers to Never outside the hours your team works.
Telling your other systems
As a lead moves through the flow, Vociply emits events you can send anywhere — an n8n workflow, a CRM, a Slack channel.
| Event | Fires when |
|---|---|
| lead.received | A lead arrived and passed the basic checks. |
| lead.completed | The call finished. |
| lead.qualified | The lead met your criteria. |
| lead.unqualified | The lead did not. |
| lead.transferred | The call was handed to a human. |
| lead.exhausted | Every attempt was used and the lead was never reached. |
Deliveries are queued and retried rather than sent inline, so a slow endpoint on your side never delays a dial. Each delivery is recorded, so “did my workflow get told?” is answerable without digging through logs. See the n8n playbook for what to build on the other end.
It is the “we tried three times and never got them” signal. Route it somewhere a human will see — an email, a Slack channel, a task in your CRM. These are leads you paid for and never spoke to, and they are usually worth one manual attempt.
Lead Callback questions
What happens to a lead that arrives outside the calling window?
It is held and called when the window next opens — not dropped, and not called at 3am. A Saturday-night lead on a weekday-only window rings on Monday morning.
How many times will it try?
As many as Max attempts says, waiting Retry delay minutes between each. Defaults are 3 attempts, 15 minutes apart. After the last one, a lead.exhausted event fires.
Can I run several triggers at once?
Yes, and you should. One per source — website, Meta, partner referrals — because each deserves different criteria, a different agent, and different transfer rules.
Do unqualified leads get thrown away?
No. The call, the transcript and the extracted fields are all kept, and lead.unqualified fires so you can push them to a nurture list. Unqualified today often means qualified next quarter.
Can I test without spending money on ads?
Yes — create a webhook trigger and post a test lead with your own number from any HTTP client. That exercises the entire path including qualification and transfer.
The lead answered but says they never filled in a form.
Either your source is sending stale or purchased data, or the intake URL is being posted to by someone else. Check the trigger’s recent activity to see what arrived, and rotate the secret if you suspect the URL has leaked.