@vicistack/vicidial-inbound-setup
v1.0.0
Published
Why Your VICIdial Inbound Queue Loses Calls (And How to Fix the 5 Worst Settings) — ViciStack call center engineering guide
Maintainers
Readme
Why Your VICIdial Inbound Queue Loses Calls (And How to Fix the 5 Worst Settings)
Last updated: March 2026 | Reading time: ~22 minutes A potential customer calls your sales line. They navigated your IVR, pressed 2 for Sales, and landed in a queue. They hear silence for 8 seconds, then a ring that nobody answers, then silence again. After 45 seconds of this they hang up. Your real-time report shows a new abandoned call. The lead is gone. This happens because VICIdial's inbound system ships with sensible defaults but zero awareness of your actual operation. The default inbound group has no hold music, no queue position announcement, no overflow route, and no after-hours handling. If you stood up your inbound DIDs and pointed them at an inbound group without touching the configuration, you are running a skeleton setup that actively loses calls. VICIdial's inbound engine is genuinely powerful. It supports skill-based routing, weighted ring strategies, queue priority by DID or caller ID, blended agent configurations that mix inbound and outbound on the same campaign, overflow cascades, after-hours voicemail, and real-time queue monitoring. But none of it works unless you configure it, and VICIdial's admin interface gives you approximately 80 settings per inbound group with minimal documentation about what most of them do. This guide covers every aspect of VICIdial inbound group configuration: creation, queue management, ring strategies, hold music, overflow handling, after-hours routing, blended agent setup, priority routing, and the operational patterns that separate a professional inbound operation from a ringing phone that nobody answers. ViciStack deploys inbound configurations tuned to your call volume, agent count, and routing requirements from day one. Start with a properly configured inbound system. --- ## How VICIdial Inbound Routing Works Before configuring anything, you need to understand the path a call takes from the PSTN to an agent's headset. VICIdial's inbound architecture has four layers: the DID, the inbound group, the queue, and the agent selection. ### The Call Flow 1. DID receives the call. An inbound call hits your SIP trunk and reaches VICIdial's Asterisk server. The dialplan matches the dialed number to a DID entry in VICIdial's vicidial_inbound_dids table. 2. DID routes to an inbound group (or IVR). The DID configuration specifies where to send the call. For direct-to-queue routing, this is an inbound group. For menu-driven routing, this is an IVR that eventually routes to one or more inbound groups. See our IVR setup guide for the menu layer. 3. Inbound group places the call in queue. The call enters the inbound group's queue. Hold music plays. Queue position announcements fire at configured intervals. The queue engine evaluates which agents are eligible to take this call. 4. Agent is selected and connected. Based on the ring strategy (longest wait time, ring all, random, etc.), VICIdial selects an agent, rings their phone, and connects the call. The agent's screen pops with the caller's information. ### Key Database Tables | Table | Purpose | |-------|---------| | vicidial_inbound_dids | Maps phone numbers to routing destinations (inbound groups, IVRs, phones) | | vicidial_inbound_groups | Defines inbound group configuration --- ring strategy, hold music, overflow, etc. | | vicidial_closer_log | Logs every inbound call with timestamps, queue time, handle time, agent, disposition | | vicidial_auto_calls | Active calls currently in queue or being handled | | vicidial_live_inbound_agents | Agents currently logged into inbound groups with their status and weight | Understanding these tables helps when you need to debug routing issues, build custom reports, or troubleshoot calls that are not reaching agents. --- ## Creating an Inbound Group Navigate to Admin > Inbound > Add a New In-Group. This is where you define the fundamental identity and behavior of your queue. ### Basic Setup Fields | Field | Example Value | Purpose | |-------|---------------|---------| | Group ID | SALES_QUEUE | Unique identifier, no spaces, max 20 characters | | Group Name | Sales Inbound Queue | Human-readable label for reports and agent interface | | Group Color | #0066CC | Color coding in real-time monitoring screens | | Active | Y | Whether agents can log into this group | | Web Form | https://crm.example.com/lead?phone=--A--phone_number--B-- | URL that pops on the agent screen when the call connects | | Voicemail | vm-salesbox | Voicemail box for after-hours or overflow | | Next Agent Call | longest_wait_time | Ring strategy (covered in detail below) | | Fronter Display | Y | Whether agents see the inbound group name on their screen | The Group ID matters. You will reference it in DID routing, IVR configuration, closer campaigns settings, and SQL queries. Use a naming convention that scales: SALES_QUEUE, SUPPORT_T1, SUPPORT_T2, BILLING_MAIN. Do not use generic names like INBOUND1 that tell you nothing when you are troubleshooting at 3 AM. ### Critical Initial Settings After creating the inbound group, click into its detail page. Here are the settings that must be configured before you take a single call: Queue handling: | Setting | Recommended Value | Why | |---------|------------------|-----| | Hold Time Option | NONE initially, then customize | What happens to callers in queue (announcements, overflow) | | Hold Time Option Seconds | 60-120 | How long before the hold time option triggers | | Hold Recall Transfer | CLOSERSELECT | Where to send calls that hit the overflow threshold | | No Agent No Queue | N | If Y, calls are rejected when no agents are logged in --- use voicemail instead | | After Hours Action | MESSAGE | Play a message and/or route to voicemail after hours | | After Hours Message Filename | after-hours-sales | Audio file to play outside business hours | | After Hours Voicemail | vm-salesbox | Voicemail box for after-hours calls | | Call Time ID | 9am-9pm | Defines business hours for this inbound group | Agent connection: | Setting | Recommended Value | Why | |---------|------------------|-----| | Next Agent Call | longest_wait_time | Routes to the agent who has been waiting longest (most common) | | Agent Alert Delay | 0 | Seconds to wait before alerting the agent (0 for immediate) | | Agent Alert Hold | On | Whether the agent hears a brief tone before the call connects | | Drop Call Seconds | 0 | For inbound, set to 0 --- you do not want to drop inbound calls | | Max Queue Ingroup Calls | 0 (unlimited) | Maximum calls allowed in queue, 0 for no limit | --- ## Ring Strategies Explained The Next Agent Call setting determines how VICIdial selects which agent receives the next inbound call. This single setting has more impact on your inbound operation than almost any other configuration. ### longest_wait_time The agent who has been idle the longest gets the next call. This is the default and the most commonly used strategy for general inbound operations. How it works: VICIdial tracks the timestamp of each agent's last call end time. When a new inbound call needs routing, it selects the agent with the oldest last_call_time. Best for: General sales queues, support lines, any scenario where all agents are equally qualified and you want even call distribution. Watch out for: In blended environments, agents who just finished an outbound call have a recent last_call_time, so they will receive fewer inbound calls than agents who have been sitting idle. This is usually correct behavior --- but if your outbound agents complain about getting fewer inbound calls, this is why. ### ring_all Every available agent's phone rings simultaneously. The first agent to pick up gets the call. How it works: VICIdial sends a SIP INVITE to all available agents in the inbound group at the same time. The first agent to answer is connected, and all other agent phones stop ringing. Best for: Small teams (under 10 agents), scenarios where speed-to-answer is critical, operations where you want agents competing for calls. Watch out for: Ring-all does not scale well. With 50 agents, you are generating 50 simultaneous SIP INVITEs per inbound call. This puts load on your Asterisk server and SIP infrastructure. Also, aggressive agents will always answer first, leading to uneven call distribution. For teams over 10-15 agents, use longest_wait_time instead. ### random A random available agent is selected. How it works: VICIdial picks a random agent from the pool of available agents in the inbound group. Best for: Almost nothing, honestly. Random distribution means some agents get 3 calls in a row while others sit idle for 20 minutes. The only valid use case is when you explicitly want unpredictable distribution for compliance or fairness auditing purposes. ### fewest_calls The agent with the fewest calls in the current session gets the next call. How it works: VICIdial counts each agent's calls since login and routes to the agent with the lowest count. Best for: Operations where you need exactly equal call counts per agent per shift (some union environments, regulated operations). Watch out for: A slow agent who takes 15-minute calls will get the same number of calls as a fast agent who handles calls in 3 minutes. This means your efficient agents are penalized with more idle time. ### fewest_calls_campaign Same as fewest_calls, but counts across the campaign rather than just the inbound group. Relevant for blended campaigns where agents handle both inbound and outbound. ### oldest_call_start Routes to the agent whose last call started earliest (not ended earliest). Subtly different from longest_wait_time --- this factors in agents who are on long calls. ### oldest_call_finish Routes to the agent whose last call finished earliest. This is similar to longest_wait_time but explicitly uses the call finish timestamp rather than the last state change timestamp. ### Choosing the Right Strategy | Operation Type | Recommended Strategy | Reason | |---------------|---------------------|--------| | Sales inbound (general) | longest_wait_time | Even distribution, rewards idle agents | | Small team (<10 agents) | ring_all | Fastest answer time | | Support tier 1 | longest_wait_time | Even workload distribution | | Support tier 2 (specialists) | longest_wait_time or fewest_calls | Even distribution among limited specialists | | Blended inbound + outbound | longest_wait_time | Correctly prioritizes idle agents over agents on outbound | | Compliance-sensitive | fewest_calls | Provably equal distribution | --- ## Hold Music and Queue Announcements Nothing tells a caller "we don't have our act together" faster than dead silence in a queue. VICIdial's hold music and announcement system is flexible, but you have to configure it. ### Setting Up Hold Music VICIdial uses Music on Hold (MOH) classes from Asterisk. The default class is default, which plays whatever files are in /var/lib/asterisk/mohmp3/. To configure hold music for an inbound group: 1. Upload your hold music files to /var/lib/asterisk/mohmp3/ (or a custom directory for a custom MOH class). Files should be MP3 or WAV format. For best quality with minimal CPU usage, use 8kHz 16-bit mono WAV files. 2. If using a custom MOH class, define it in /etc/asterisk/musiconhold.conf: ini [sales_hold] mode=files directory=/var/lib/asterisk/moh/sales sort=random 3. Reload Asterisk MOH: asterisk -rx "moh reload" 4. In the inbound group settings, set On Hold Music to your MOH class name (e.g., sales_hold). For more on Asterisk audio configuration, see our Asterisk configuration guide. Hold music best practices: - Keep it short. 60-90 seconds of music on a loop is sufficient. Callers who are on hold for 5 minutes will hear it repeat, but that is acceptable. - Avoid music with vocals. Instrumental is clearer over phone audio codecs. Vocals compete with announcements and sound garbled on low-bandwidth codecs. - Match your brand. A law firm should not have upbeat pop music. A youth-oriented brand should not have classical. - License your music. Using copyrighted music on hold is technically a public performance. Use royalty-free hold music or license it properly. ### Queue Position Announcements Callers want to know two things: where they are in the queue and how long they will wait. VICIdial can announce both. Configuration in the inbound group settings: | Setting | Recommended Value | Purpose | |---------|------------------|---------| | Hold Time Option | ANNOUNCE_POSITION | Announces the caller's queue position
About
Built by ViciStack — enterprise VoIP and call center infrastructure.
- VICIdial Hosting & Optimization
- Call Center Performance Guides
- Full Article: Why Your VICIdial Inbound Queue Loses Calls (And How to Fix the 5 Worst Settings)
License
MIT
