VICIfast
Glossary

Hopper

VICIdial's pre-staged queue of leads that are ready to dial right now.

The hopper is VICIdial's staging queue of leads that are ready to dial right now. It lives in the vicidial_hopper table, and the dialer pulls from it instead of searching your lead lists on every call.

Where it lives

vicidial_hopper is a MySQL MEMORY table — it lives in RAM, not on disk. That is why it is fast, and also why it empties on a database restart. Each row is a lead already cleared for dialing, carrying its lead_id, campaign_id, list_id, the lead's gmt_offset_now (used for calling-hours checks), state, a priority value, and a status from READY, QUEUE, INCALL, DONE, HOLD, DNC, RHOLD, RQUEUE.

How it gets filled

AST_VDhopper.pl runs from cron every minute on the dialer. It walks each active campaign, applies that campaign's dial statuses, list order, lead filter, DNC rules and local-call-time window, and tops the hopper back up. AST_VDauto_dial.pl is the process that then takes READY rows and actually places calls.

The Hopper Level field on the campaign sets the target depth. Size it comfortably above agents × dial level so the dialer never starves mid-shift, but not so high that stale rows pile up. VICIdial can also size it for you: use_auto_hopper on the campaign, with auto_hopper_multi and auto_hopper_level, scales the target against the number of logged-in agents.

The gotcha: hopper rows are a snapshot

Hopper rows were built under the campaign config that existed when AST_VDhopper.pl last ran. Change a lead filter, a DNC setting or a dial-status list, and the leads already in the hopper still reflect the old rules. Drain it to apply the change immediately:

DELETE FROM vicidial_hopper WHERE campaign_id = 'YOURCAMP';

Cron refills within the next minute. "No leads in hopper" on the agent screen almost always means one of three things: the campaign's dial statuses match nothing left in the list, every remaining lead is outside its local calling window, or AST_VDhopper.pl is not running.

See also