
Key Takeaways
VICIdial DNC not working is one of the most compliance-critical failures a contact center can encounter, and it almost always has a clear, fixable cause. This guide is written for VICIdial administrators, IT managers, and contact center operations teams who need to diagnose and resolve Do Not Call filter failures quickly, without guesswork.
Whether your DNC list appears to be loading but numbers are still being dialed, or the filter simply isn’t engaging at the campaign level, the following troubleshooting steps cover every layer of the VICIdial DNC architecture, from database-level configuration to list upload formatting.
The Do Not Call (DNC) filter in VICIdial is a multi-layer compliance mechanism. Unlike a single toggle switch, it operates across system-wide settings, campaign configuration, individual list settings, and database entries. This means a problem at any single layer silently disables the entire filter, even if every other layer is correctly configured.
In most production environments, DNC failures are not software bugs. They are configuration oversights or data formatting problems. The good news: every common failure mode is reproducible, diagnosable, and correctable through the VICIdial admin interface and the underlying MySQL database without any reinstallation or code changes.
The three most common root causes, in order of frequency observed across enterprise deployments, are:
Before troubleshooting, it is essential to understand how VICIdial applies DNC filtering during a dial session. The system checks Do Not Call status at multiple points:

Located in Admin → System Settings, the global DNC parameters control whether the DNC lookup engine is active at all. The key field is DNC_ACTIVE. If this is set to N, no DNC filtering occurs anywhere in the system, regardless of campaign-level settings.
Each campaign has its own DNC configuration block.
The relevant fields are:
VICIdial stores DNC numbers in the vicidial_dnc table for internal DNC and in vicidial_campaign_dnc_lists for campaign-specific DNC entries. When a number is dialed, the system queries these tables in real time. Any corruption or failure to populate these tables will silently bypass filtering.
Follow this diagnostic sequence in order. Each step builds on the previous one. Do not skip ahead, a misconfiguration at Step 2 will make Step 7 appear broken even when it is not.
Navigate to Admin → System Settings.
Locate the field labelled DNC_ACTIVE and confirm it is set to Y. If it reads N, change it and click Save. This single setting gates all DNC functionality system-wide.
Go to Admin → Campaigns → [Your Campaign] → Edit. Scroll to the Compliance Settings section. Ensure campaign_dnc is set to Y and that internal_dnc is set appropriately for your use case. Save changes and restart the campaign if it is active.
Navigate to Admin → DNC Lists.
Confirm your list appears, shows a status of Active, and that the record count matches your expected upload. A list showing 0 records despite a successful upload attempt almost always indicates a CSV formatting problem, see Section 4.2 for fixes.
This is the single most common silent failure point. VICIdial stores numbers in 10-digit format by default (e.g., 8005551234). If your DNC list contains numbers with country codes (e.g., 18005551234) or formatting characters like dashes and parentheses, the lookup will fail to match — and the number will be dialed.
Log into MySQL as the VICIdial database user and run: SELECT * FROM vicidial_dnc LIMIT 20; Review the phone_number column. Confirm the format matches exactly what exists in your lead list. Repeat for vicidial_campaign_dnc_lists if using campaign-specific DNC.
Review /var/log/ vicidial/AST_agent_event_log and the vicidial_log MySQL table for dialed numbers that should have been filtered. A number appearing in both the DNC list and the call log with a disposition of ANSWERED or MACHINE confirms the filter is not engaging properly.
Insert a test phone number directly into the vicidial_dnc table via MySQL: INSERT INTO vicidial_dnc (phone_number, list_id) VALUES (‘8005559999’, ‘TEST’); Then add this same number to a test lead list and attempt a manual dial. If it connects, the filter is confirmed broken at a layer that needs deeper investigation.
After making any configuration changes, restart the VICIdial campaign or full AGI daemon if required. Some settings are cached at session start and will not take effect until a service restart: service vicidial restart (adjust for your distribution).
In advanced outbound campaigns, features like predictive dialing play a crucial role in maximizing agent efficiency, making it essential that your DNC filter is properly configured to avoid compliance risks while maintaining dialing performance.
If the filter appears enabled but numbers are still being called, the most likely cause is a phone number format mismatch. Strip all non-numeric characters from your DNC list and ensure numbers are in the exact same format as your lead database. Use a spreadsheet formula or simple sed command to clean the file before re-uploading.
This occurs when the CSV file uses incorrect column headers, wrong delimiters, or encoding issues (e.g., UTF-8 BOM from Excel exports). VICIdial expects a plain UTF-8 CSV with a phone_number column header. Open the file in a plain text editor to verify the first line reads exactly: phone_number, with no extra characters or spaces.
Campaign-specific DNC lists are stored in vicidial_campaign_dnc_lists and require the campaign’s dnc_campaign_id to match the list association. If you have multiple campaigns and moved a DNC list from one campaign to another without updating the database reference, the filter will query the wrong table partition. Re-associate the list through the Admin panel or correct the campaign ID directly in the database.
This typically indicates that production campaigns are using a different DNC list ID or that the test campaign had a manually-set override that the production campaign does not. Compare the campaign_dnc field between your test and production campaign configurations side by side in the Admin panel. Also verify that your lead list’s dial_statuses setting is not overriding DNC dispositions
Many contact centers automate DNC imports via cron jobs. If the cron user lacks MySQL write permissions, or if the import script path changed after a VICIdial upgrade, imports will appear to succeed but no data is actually written. Check cron logs (/var/log/cron) and test the import script manually with output verbosity enabled to catch these silent failures.
A regional financial services contact center running VICIdial across 120 agent seats reported that their DNC filter had stopped working after a scheduled platform update. Agents were reaching consumers whose numbers were confirmed on the internal DNC list, a clear compliance breach.
The root cause, identified within 90 minutes of investigation, was a two-part failure. First, the update process had reset the system-level DNC_ACTIVE flag to N as part of a configuration refresh. Second, a routine DNC import cron job had been calling a deprecated script path that existed in the previous version but had moved in the updated installation, meaning three weeks of DNC additions had not actually been written to the database.
The resolution involved three actions: re-enabling DNC_ACTIVE in System Settings, correcting the cron job script path, and manually re-importing the three weeks of missed DNC records. A post-incident monitoring rule was added to alert the operations team if vicidial_dnc record counts failed to increase on expected import days.
VICIdial DNC not working is a solvable problem in virtually every case, and the solution almost never requires reinstallation or advanced code changes. By working through the three diagnostic layers (system settings, campaign settings, and database integrity), contact center administrators can isolate and correct the failure within a single shift.
The key takeaway is that VICIdial’s DNC filter is only as reliable as the data behind it. Consistent phone number formatting, verified import processes, and routine database checks are the operational habits that keep compliance infrastructure functioning correctly in production environments. A single misconfigured flag or a corrupted CSV upload is all it takes to expose your contact center to regulatory risk.
If you have followed every step in this guide and are still experiencing issues, the problem likely lies in a custom VICIdial configuration, a database permission issue, or a conflict introduced by a third-party integration, all of which require hands-on investigation from an experienced VICIdial engineer.
Need Expert Help With VICIdial?
If you’re still experiencing VICIdial DNC not working issues after following this guide, the DialerKing team is ready to assist. Our engineers have hands-on deployment experience across enterprise contact center environments worldwide. Contact DialerKing Today!
