A prospect tells your agent "call me back at 2." The agent dispositions the call, types a note, and moves on. At 2 PM, nothing happens. The callback was never scheduled, or it was scheduled but fired when the agent was at lunch, or it fired but routed to a stranger who opened cold. The prospect hangs up.
This happens thousands of times daily across VICIdial operations. Not because the system can't handle callbacks — VICIdial has one of the most capable callback engines of any dialer — but because almost nobody configures it properly.
CALLBK vs CBHOLD: The Difference That Matters
VICIdial has two main callback dispositions, and most agents don't understand when to use which:
CALLBK creates a callback tied to the specific agent. Only that agent gets the call when it fires. Use this when the prospect asked for the same person, or when the agent built rapport and has context that matters for the close.
CBHOLD creates a callback that routes to any available agent in the campaign. Use this when timing matters more than the person — the lead said "call after 5 PM" for timezone reasons, or your operation has high turnover and you can't guarantee the same agent will be there.
The most common mistake: agents use CALLBK as a dumping ground for leads they don't want to deal with. If someone said "not interested," that's an NI disposition. If the agent wants to retry a lead they think has potential, that's what lead recycling handles. Callbacks are for leads that expressed interest and requested follow-up.
How the Machinery Works
When an agent schedules a callback, VICIdial inserts a row into the vicidial_callbacks table with status = LIVE and the requested time. A background process called AST_VDcallback_check.pl runs every 60 seconds, finds callbacks where the scheduled time has passed, checks that the lead isn't on DNC or in a restricted timezone, and injects the lead into the hopper with elevated priority.
That priority injection is the key. Callback leads jump to the front of the line, ahead of regular list leads. So even with thousands of records in your list, the callback gets dialed first.
For USERONLY callbacks, the system checks if the assigned agent is available. If they're not logged in, the callback stays in LIVE status and rechecks every minute. This is where callbacks silently die — if the agent called in sick, their callbacks just sit there retrying forever.
The Settings Most People Miss
Go to Admin > Campaigns > [Campaign] > Detail and check these:
- Scheduled Callbacks: Must be Y (obvious, but I've seen it off)
- Callback Active Limit: Set this to 20-50 per agent. Without a limit, some agents will disposition every hard call as CALLBK and accumulate hundreds of pending callbacks, hoarding leads.
- Callback List Calltime Check: Set to Y. This prevents an East Coast agent's 9 AM callback from firing at 6 AM Pacific time for a West Coast lead.
- Callback Hours Block: Leave at N unless you have a specific reason. Setting it to Y prevents callbacks from firing outside campaign calling hours, which is usually handled better by the calltime check.
Lead Recycling Is Not the Same Thing
Lead recycling is VICIdial's automatic retry system. When a lead gets dispositoned as NA (No Answer) or B (Busy), the recycling system reschedules it after a configurable delay. It operates on bulk populations of leads based on disposition rules.
Callbacks are individual, agent-initiated follow-ups for specific leads at specific times. Recycling handles the leads nobody answered. Callbacks handle the leads that answered and asked for a follow-up. You need both running.
Configure recycling under Admin > Campaigns > [Campaign] > Lead Recycling. Standard settings: NA retries 5 times at 2-hour intervals, Busy retries 3 times at 30-minute intervals, AM retries 3 times at 4-hour intervals.
Fix Your Orphaned Callbacks
When an agent quits or gets fired, their USERONLY callbacks become orphaned. They sit in LIVE status, retrying every minute, never connecting. Run an orphan check weekly by looking for callbacks assigned to inactive agents in the VICIdial admin, then reassign them to ANYONE or to a specific active agent.
The API can also schedule callbacks programmatically. If your CRM detects a lead visiting your pricing page, you can fire a webhook that creates a VICIdial callback in 5 minutes:
curl -s "https://your-server/vicidial/non_agent_api.php" \
--data-urlencode "source=crm_webhook" \
--data-urlencode "user=API_USER" \
--data-urlencode "pass=API_PASS" \
--data-urlencode "function=add_callback" \
--data-urlencode "lead_id=12345" \
--data-urlencode "campaign_id=SALES" \
--data-urlencode "callback_time=2026-03-19 14:00:00" \
--data-urlencode "recipient=ANYONE"
Callback Notes Make or Break Conversion
Train agents to include four things in every callback note: what was discussed, why the callback happened, when to call (context beyond the date picker — "picks up kids at 3"), and how to open ("ask for Jennifer, reference the premium quote").
Bad note: "call back later." Good note: "Jennifer, interested in premium @ $180/mo, in a meeting until 2PM ET, ask about spouse add-on."
The difference in conversion between agents who write detailed notes and agents who write "call back" is measurable. In operations we manage at ViciStack, agents with detailed callback notes convert at 2-3x the rate.
If your callback completion rate is below 80%, you're leaving revenue on the table. The machinery works — it just needs proper configuration and agent training.
Originally published at https://vicistack.com/blog/vicidial-callback-automation/
Top comments (0)