Docs/Run your calls

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.

Lead submits your form
Meta, website, landing page
Vociply receives it
Checks consent, DNC, duplicates
instantly
Agent calls the lead
If inside the calling window
seconds
Qualified?
Judged against your own rules
after call
Human picks up
Or the lead is logged and dropped
Everything between the form and the human is automatic. Your salespeople only ever speak to leads that already passed your criteria.

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.

SettingWhat it decides
Name & source labelHow you recognise it later. “Website contact form”, “Meta — solar campaign”.
Lead sourceWebhook (any form) or Meta Lead Ads (Facebook and Instagram).
Agent that callsWhich agent phones the lead. Build one specifically for this.
Field mappingWhere in the incoming data the phone number, name and email live.
Calling windowThe hours and days calling is permitted, in the lead’s own timezone.
Consent requirementWhether a lead with no consent evidence is called at all.
Qualification criteriaWhat the agent must establish, and what counts as qualified.
Warm transferWhether — and when — to hand the live call to a human.
Attempts & retry delayHow many times to try, and how long to wait between tries.

Where leads come from

Built in
Meta Lead Ads

Facebook and Instagram lead forms. Connect Meta, choose the Page, and leads arrive automatically — no webhook to configure. Full walkthrough in the playbook.

Everything else
Webhook

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.

What your form should send
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.

An unprotected intake URL is an invitation to burn your minutes

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:

FieldRequiredExample pathWhy it matters
PhoneYesdata.phone_numberNothing works without it.
NameNodata.full_nameThe agent greets them properly.
EmailNodata.emailCRM matching and follow-up.
ConsentNodata.consent_checkboxYour evidence that they agreed to be called.
TimezoneNodata.timezoneJudges 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.

Send one test lead before going live

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.

This is a legal boundary, not a preference

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:

Example criteria
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 settingBehaviourUse when
NeverThe agent handles the call and hangs up. The lead is logged.You want notes, not live handoffs. Safest starting point.
When qualifiedOnly leads that met your criteria are transferred.The default choice for a sales team. Nobody wastes time on tyre-kickers.
AlwaysEvery 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.

Nothing is worse than a transfer that rings out

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.

EventFires when
lead.receivedA lead arrived and passed the basic checks.
lead.completedThe call finished.
lead.qualifiedThe lead met your criteria.
lead.unqualifiedThe lead did not.
lead.transferredThe call was handed to a human.
lead.exhaustedEvery 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.

lead.exhausted is the one people forget

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.

Still stuck? support@vociply.com