DEV Community

Jason Shouldice
Jason Shouldice

Posted on • Originally published at vicistack.com

15 VICIdial Settings Wasting Your Agents' Time Right Now

VICIdial's campaign detail screen has over 170 configurable fields. Most admins change three of them, leave the rest at defaults, and wonder why agents sit idle 40% of the shift.

Default VICIdial is tuned conservatively — designed not to break, not to perform. On a 50-agent campaign running defaults, expect about 28-32 minutes of agent talk time per hour. At $15/hour loaded cost, that's $300/hour in wasted capacity across the floor — $12,000 per week.

The fix isn't one magic setting. It's 15 changes that interact with each other in non-obvious ways. VICIdial's predictive algorithm runs as a Perl script (AST_VDadapt.pl) that recalculates the dial level for each campaign every 15 seconds based on drop rates, agent availability, connection rates, and average talk time. The settings on this list are the inputs to that calculation.

They break into four groups: core dial level controls, hopper and queue configuration, AMD and call handling, and agent performance settings.

Group 1: Core Dial Level Controls

Setting #1: adaptive_dl_level (Adaptive Maximum Dial Level)

Admin path: Admin > Campaigns > Detail > Adaptive Maximum Dial Level

This sets the ceiling — the maximum number of lines the adaptive algorithm is allowed to dial per agent. It does not set the actual dial level. That distinction trips up more admins than any other setting.

When you set it to 3.0 (default), you're telling the algorithm: "Dial up to 3 lines per agent, but figure out the right number based on current conditions." The algorithm ramps up and down within that ceiling every 15 seconds.

The problem with 3.0: For campaigns under 15 agents, a ceiling of 3.0 is too low. The algorithm needs headroom to compensate for statistical volatility — a single long call can create a temporary surplus of available agents, and the algorithm needs room to dial ahead.

Recommended values:

Team Size adaptive_dl_level Why
5-10 4.0-5.0 Small teams need higher ceilings for variance
11-25 3.0-4.0 Medium teams start stabilizing
26-50 2.5-3.5 Large teams produce predictable patterns
51-100 2.0-3.0 Very large teams need tighter control
100+ 1.5-2.5 Small changes produce large volume swings

Think of it as a safety valve, not a performance dial. High enough for the algorithm to do its job during volatile periods, low enough that a contact rate spike doesn't blow through your abandon rate target.

Setting #2: adaptive_dropped_percentage (Drop Percentage Limit)

Admin path: Admin > Campaigns > Detail > Drop Percentage Limit

The TCPA/FTC ceiling is 3% on a 30-day rolling basis. Don't set this to 3.0 — the algorithm will oscillate around it and regularly spike above in short windows.

Compliance Requirement Recommended Buffer
FTC/TCPA 3% rule 1.5-2.0 50-33% safety margin
State-level 1% rules 0.5-0.8 50-20% margin
Zero-tolerance (B2B, financial) 0.5 Minimal drops

Setting to 1.5 is the sweet spot for most US-based outbound campaigns. The algorithm checks drop rates across five time windows (since midnight, past hour, past 30 min, past 5 min, past 1 min) and uses the most conservative value.

Monitor live:

SELECT campaign_id, drops_today, calls_today,
       ROUND((drops_today / calls_today) * 100, 2) AS drop_pct
FROM vicidial_campaign_stats
WHERE campaign_id = 'YOUR_CAMPAIGN';
Enter fullscreen mode Exit fullscreen mode

Setting #3: auto_dial_level + Dial Method

Critical distinction: If your dial method is RATIO, the auto_dial_level is the only dial level — fixed, no adaptation. If it's ADAPT_TAPERED, ADAPT_HARD_LIMIT, or ADAPT_AVERAGE, it's just the starting point.

Stop using RATIO for production campaigns. Switch to ADAPT_TAPERED for 90% of campaigns. It starts conservative early in the shift (when you have time to recover averages) and tightens as the shift progresses.

Method Best For
RATIO Testing, very small teams (<5), strict 1:1 compliance
ADAPT_HARD_LIMIT Strict compliance environments
ADAPT_TAPERED Most production campaigns
ADAPT_AVERAGE High-volume campaigns with large teams

Starting auto_dial_level values:

Scenario Value
New campaign, unknown contact rate 1.0
Established, 30-40% contact rate 1.5-2.0
Clean list, 50%+ contact rate 1.0-1.5
Aged list, <20% contact rate 2.5-3.0
Callback/hot lead campaign 1.0

Set ADAPT_TAPERED, starting auto_dial_level at 1.5, adaptive_dl_level at 3.5, and adaptive_dropped_percentage at 1.5. The algorithm finds the right level within 10-15 minutes.

Group 2: Hopper and Queue Configuration

Setting #4: hopper_level

The hopper is VICIdial's lead staging queue. If it empties, agents sit idle no matter how perfect everything else is.

Auto-hopper formula:

hopper_level = agents * dial_level * (60 / dial_timeout) * multiplier
Enter fullscreen mode Exit fullscreen mode

Default multiplier of 1 gives exactly one cycle of leads. Set auto_hopper_multiplier to 2 for 25+ agent campaigns. This doubles the buffer. For manual control, set hopper_level to at least 4x agents times dial level.

Setting #5: dial_timeout

Default 26 seconds means 5-6 full ring cycles on numbers that never answer. With a 60% no-answer rate, you burn 15.6 seconds of trunk time per unanswered call. Cut to 18 seconds: 10.8 seconds wasted — 30% reduction.

Scenario dial_timeout
General outbound (US) 18-22 seconds
B2B daytime 20-24 seconds
Mobile-heavy lists 16-20 seconds
Callback campaigns 22-26 seconds
High-velocity cold calling 15-18 seconds

The 23-second trick: Most carrier voicemail picks up after 24-25 seconds. Setting timeout to 23 hangs up just before voicemail answers — useful when AMD is off.

Setting #6: available_only_ratio_tally

When N (default), VICIdial counts mid-call agents as "available." With 50 agents, statistics smooth this out. With 5 agents: the dialer places 10 calls because all 5 are non-paused, 4 are in conversations, 4 calls connect to live people, only 1 agent is free, 3 get abandoned.

Use the threshold approach: available_only_tally_threshold set to 10. Below 10 agents, dial only for actually-available agents. Above 10, use predictive model.

Setting #7: dial_level_difference_target

Tells the algorithm whether to target agents waiting (negative) or calls waiting (positive). Default 0 targets equilibrium.

Priority Value
Compliance-first -1 to -2
Balanced (recommended) 0
Throughput-first 1

Leave at 0 for most campaigns.

Group 3: AMD and Call Handling

Setting #8-9: AMD Type and Configuration

Enable AMD by routing through extension 8369 (AMD enabled). Then tune /etc/asterisk/amd.conf:

Parameter Default Recommended What It Does
initial_silence 2500 2000 ms of silence before classifying as machine
greeting 1500 1200 ms of continuous speech indicating greeting
after_greeting_silence 800 300 ms of silence after greeting to confirm machine
total_analysis_time 5000 3500 Max ms to analyze before deciding
maximum_number_of_words 3 3 Words before classifying as machine
; /etc/asterisk/amd.conf
[general]
initial_silence=2000
greeting=1200
after_greeting_silence=300
total_analysis_time=3500
min_word_length=120
between_words_silence=50
maximum_number_of_words=3
silence_threshold=256
Enter fullscreen mode Exit fullscreen mode

After changes, reload Asterisk:

asterisk -rx "module reload res_speech.so"
asterisk -rx "core reload"
Enter fullscreen mode Exit fullscreen mode

Reducing total_analysis_time from 5000ms to 3500ms gets live calls to agents faster. The 5-second default means live humans hear dead air and hang up.

Warning: AMD tuning is carrier-dependent. Test with known voicemail boxes and live answers before rolling to production.

Setting #10: AMD Send to Action (amd_send_to_vmx)

When AMD detects a machine:

  • N: Call dropped, dispositioned as answering machine
  • Y: Pre-recorded voicemail message played

Voicemail drops generate 2-8% callback rates. For campaigns wanting every touchpoint, enable this. Upload audio through Admin > Audio Store (WAV: PCM Mono, 16-bit, 8kHz or GSM: 8-bit, 8kHz).

Setting #11: Wait For Silence

Campaign-level AMD override. Format: milliseconds,iterations.

Campaign Type Value
B2C mobile-heavy 2000,2
B2C landline-heavy 2500,2
B2B 1500,2
Mixed (general-purpose) 2000,2

Second parameter (iterations) should almost always be 2. Setting 1 produces too many false positives; 3 lets too many machines through.

Group 4: Agent Performance Settings

Setting #12: next_agent_call

Which agent gets the next connected call:

Method Best For
random Simple, default
longest_wait_time Most outbound campaigns — fairest distribution
campaign_rank Skills-based routing for closer campaigns

Use longest_wait_time for most outbound. Agent who's been idle longest gets the next call — even utilization, fewer complaints. For skills-based routing, assign campaign ranks (9 = top, 1 = trainee) and use campaign_rank.

Setting #13: wrapup_seconds

Default 0 means the next call fires immediately after disposition. Agents skip notes, mis-disposition, and burn out.

Campaign Type Value
Simple disposition 5-10 seconds
CRM note entry required 15-25 seconds
Complex data entry 30-45 seconds

Set to 10 and combine with forced pause codes. If agents need more time, they pause with a specific code.

Setting #14: agent_pause_codes_active

Set to FORCE. Always. Without it, you have zero visibility into why agents aren't taking calls.

SELECT sub_status, COUNT(*) AS pause_count,
       SUM(pause_sec) AS total_seconds,
       ROUND(AVG(pause_sec), 1) AS avg_seconds
FROM vicidial_agent_log
WHERE campaign_id = 'YOUR_CAMPAIGN'
  AND event_time >= CURDATE()
GROUP BY sub_status
ORDER BY total_seconds DESC;
Enter fullscreen mode Exit fullscreen mode

Standard codes for every campaign: BREAK, LUNCH, BIO (restroom), TRAIN, TECH, ADMIN, MEET.

Setting #15: calls_per_second (server level)

Controls how fast VICIdial fires outbound calls at the server level. At 500 agents across multiple telephony servers, this prevents any single server from overwhelming your SIP trunks. Set based on your trunk provider's capacity and distribute load across servers in your cluster.

The Tuning Workflow

Don't change all 15 at once. Follow this process:

  1. Make one change
  2. Monitor for 2-4 hours
  3. Compare key metrics (talk time per hour, drop rate, agent utilization)
  4. Roll back if performance drops
  5. Move to the next setting

The algorithm recalculates every 15 seconds — give it time to stabilize before declaring something isn't working.

For the complete deep-dive including the math behind the adaptive algorithm, per-setting configuration guides, and carrier-specific AMD profiles, see ViciStack's predictive dialer settings guide.


Originally published at https://vicistack.com/blog/vicidial-predictive-dialer-settings/

Top comments (0)