ViciDial "Campaign Has No Dialable Leads" — List & Hopper Troubleshooting
掌握无拨打线索错误的根本原因,并通过系统化的列表验证、hopper 配置和数据库故障排除恢复完整的活动生产力。
前置要求
在进行故障排除前,请确保您已具备:
- 对 ViciDial 服务器的 SSH 访问权限(具备 sudo 权限)
- 通过
/vicidial/admin.php访问 ViciDial Web 管理面板的权限 - 对
asterisk数据库的 MySQL/MariaDB 命令行访问权限 - 对 ViciDial 活动结构(列表、拨号程序、坐席)的基本理解
- 检查 Asterisk 进程的 root 或 asterisk 用户权限
- 最近的 ViciDial 数据库和配置文件备份
- 一个已知线索数量的测试活动,用于验证
出现 "Campaign Has No Dialable Leads" 错误通常是因为:
- 拨号程序尝试发起呼叫,但 hopper 队列为空
- 线索列表中的所有记录已耗尽或被标记为不可拨打
- 列表设置与活动配置冲突
- ViciDial 与拨号程序之间的数据库连接中断
- 线索过滤规则将所有记录从可拨打池中移除
理解 ViciDial 列表架构
ViciDial 中的线索生命周期
ViciDial 中的每条线索都会经历决定其可拨打性的状态。一个线索如果符合基于活动和列表配置的特定标准,则被视为“可拨打”。
线索状态:
-
NEW— 新线索,尚未联系 -
QUEUE— 已安排拨打 -
CALL— 正在拨打中 -
LEFT MESSAGE— 已留言 -
CALLED— 已联系但未完成 -
XFER— 已转接至其他部门 -
XFER SEND— 待转接 -
INCALL— 进行中的通话 -
CBHOLD— 回拨暂挂状态 -
CBSCHED— 已安排回拨 -
DNCC— 已编译的禁止来电 -
DNCL— 禁止来电列表
vicidial_list 表中的 status 字段控制线索是否可以再次拨打。大多数活动会设置最大拨打次数限制,以防止无限次重复拨打已耗尽的线索。
Hopper 机制
ViciDial hopper 是一个实时队列,用于将线索提供给可用的拨号程序。其运行方式如下:
- 查询:拨号程序请求符合活动标准的下一个可用线索
- 获取:系统根据过滤器从
vicidial_list中提取记录 - 锁定:将线索标记为
QUEUE以防止重复拨打 - 交付:将线索推送至拨号程序进行呼叫尝试
- 释放:根据结果更新线索的新状态和拨打次数
如果 hopper 返回零结果,则活动没有可拨打的线索。
前置要求验证清单
验证 ViciDial 安装
# Check ViciDial daemon status
systemctl status vicidial
# Verify Asterisk is running
asterisk -rx "core show version"
# Check MySQL/MariaDB connectivity
mysql -u cron -p -h localhost asterisk -e "SELECT VERSION();"
Enter fullscreen mode Exit fullscreen mode
确认数据库连接
# Test asterisk database access
mysql -u root -p -e "SELECT * FROM asterisk.vicidial LIMIT 1;"
# Verify vicidial_list table exists
mysql -u root -p asterisk -e "DESCRIBE vicidial_list;"
Enter fullscreen mode Exit fullscreen mode
检查 ViciDial 核心文件
# Confirm ViciDial admin path
ls -la /var/www/html/vicidial/admin.php
# Check CLI tools
ls -la /usr/share/astguiclient/
Enter fullscreen mode Exit fullscreen mode
如果任何命令失败,请先解决安装问题,再继续进行故障排除。
系统化故障排除流程
步骤 1:验证线索列表存在且包含记录
从最基本的检查开始——您的列表是否真的包含线索?
# Log into MySQL
mysql -u root -p asterisk
# Check list summary
SELECT list_id, list_name, active, list_size,
COUNT(*) as record_count
FROM vicidial_lists
LEFT JOIN vicidial_list ON vicidial_lists.list_id = vicidial_list.list_id
WHERE list_id = 'YOUR_LIST_ID'
GROUP BY list_id;
Enter fullscreen mode Exit fullscreen mode
预期输出: record_count 应大于 0 且与 list_size 一致。
如果 record_count 为 0,则您的列表从未被导入。请检查:
# Look for import logs in ViciDial web admin: Admin > Import Lists
# Or check the command line import tool:
/usr/share/astguiclient/VICIDIAL_IN_GROUP.pl --list-id YOUR_LIST_ID
# Check ViciDial load queue
SELECT * FROM vicidial_list_queue LIMIT 5;
Enter fullscreen mode Exit fullscreen mode
步骤 2:检查线索状态分布
导致“无拨打线索”最常见的原因是,所有线索都已被联系,且其状态阻止了重新拨打。
-- Check status breakdown for your list
SELECT list_id, status, COUNT(*) as count
FROM vicidial_list
WHERE list_id = 'YOUR_LIST_ID'
GROUP BY list_id, status
ORDER BY count DESC;
Enter fullscreen mode Exit fullscreen mode
预期输出示例:
+----------+--------+-------+
| list_id | status | count |
+----------+--------+-------+
| LIST-001 | CALLED | 4850 |
| LIST-001 | NEW | 150 |
| LIST-001 | QUEUE | 12 |
+----------+--------+-------+
Enter fullscreen mode Exit fullscreen mode
如果 NEW 数量非常低或为零: 您的线索已耗尽或导入时的状态不正确。您需要重置或重新导入。
将所有线索重置为 NEW 状态:
UPDATE vicidial_list
SET status = 'NEW',
dial_count = 0,
last_call_time = NULL
WHERE list_id = 'YOUR_LIST_ID'
LIMIT 10000;
-- Verify the update
SELECT COUNT(*) FROM vicidial_list
WHERE list_id = 'YOUR_LIST_ID' AND status = 'NEW';
Enter fullscreen mode Exit fullscreen mode
步骤 3:验证活动配置
活动设置直接控制哪些线索被视为可拨打。
# Access the ViciDial web interface
# Navigate: Admin > Campaigns > [Your Campaign]
# OR query directly:
mysql -u root -p asterisk -e "SELECT * FROM vicidial_campaigns WHERE campaign_id = 'YOUR_CAMPAIGN' \G"
Enter fullscreen mode Exit fullscreen mode
需要检查的关键字段:
SELECT campaign_id,
active,
dial_method,
list_id,
max_dial_count,
auto_dial_level,
lead_filter_id,
campaign_script_id,
calls_in_queue_limit
FROM vicidial_campaigns
WHERE campaign_id = 'YOUR_CAMPAIGN';
Enter fullscreen mode Exit fullscreen mode
关键字段:
| 字段 | 预期值 | 问题 |
|---|---|---|
active |
Y |
如果为 N,则活动已禁用 |
dial_method |
ADAPT 或 MANUAL
|
错误的方法会阻止拨打 |
list_id |
您的列表 ID | 为空或错误的列表会阻止拨打 |
max_dial_count |
通常为 3-5 | 过低会快速耗尽线索 |
auto_dial_level |
1-9 | 0 会禁用自动拨打 |
lead_filter_id |
通常为空 | 过滤器可能会排除所有线索 |
步骤 4:检查列表配置
# Via web admin: Admin > Lead Lists > [Your List]
# Or via MySQL:
mysql -u root -p asterisk -e "SELECT * FROM vicidial_lists WHERE list_id = 'YOUR_LIST_ID' \G"
Enter fullscreen mode Exit fullscreen mode
关键字段:
SELECT list_id, list_name, active, list_size,
project_area, script_id, lead_filter_id,
campaign_id_string
FROM vicidial_lists
WHERE list_id = 'YOUR_LIST_ID';
Enter fullscreen mode Exit fullscreen mode
检查列表是否标记为激活:
UPDATE vicidial_lists
SET active = 'Y'
WHERE list_id = 'YOUR_LIST_ID';
Enter fullscreen mode Exit fullscreen mode
步骤 5:实时检查 Hopper 队列
Hopper 是线索在拨打前立即暂存的地方。检查它是否已填充:
-- Check active hopper entries
SELECT campaign_id, count(*) as hopper_count
FROM vicidial_hopper
WHERE campaign_id = 'YOUR_CAMPAIGN'
GROUP BY campaign_id;
-- View sample hopper records
SELECT hopper_id, campaign_id, status, priority, dialable_status
FROM vicidial_hopper
WHERE campaign_id = 'YOUR_CAMPAIGN'
LIMIT 10;
Enter fullscreen mode Exit fullscreen mode
如果 hopper 为空: 拨号程序找不到符合活动标准的线索。
手动填充 hopper(用于测试):
# Use the ViciDial CLI tool to load hopper
/usr/share/astguiclient/VICIDIAL_hopper_loader.pl --campaign-id YOUR_CAMPAIGN --queue-size 100
Enter fullscreen mode Exit fullscreen mode
检查 Asterisk 日志中的 hopper 加载输出:
tail -50 /var/log/asterisk/messages | grep -i hopper
Enter fullscreen mode Exit fullscreen mode
步骤 6:验证拨号程序组配置
拨号程序被分配到组中。检查您的活动拨号程序组是否可以访问列表。
-- Find dialer group for your campaign
SELECT campaign_id, dialer_group_id
FROM vicidial_campaigns
WHERE campaign_id = 'YOUR_CAMPAIGN';
-- Check dialer group members
SELECT dialier_id, dialer_group, active, server_ip, count_attempt_leads
FROM vicidial_dialiers
WHERE dialer_group = 'YOUR_DIALER_GROUP'
AND active = 'Y';
Enter fullscreen mode Exit fullscreen mode
对于每个拨号程序,验证其是否可达:
# Test dialer connectivity
asterisk -rx "sip show peers" | grep "YOUR_DIALER"
# Check dialer status in ViciDial logs
tail -100 /var/log/asterisk/messages | grep -i "dialier"
Enter fullscreen mode Exit fullscreen mode
步骤 7:检查线索过滤规则
线索过滤器可能会悄无声息地将所有记录从可拨打性中排除。
-- Identify filters assigned to your campaign
SELECT lead_filter_id FROM vicidial_campaigns
WHERE campaign_id = 'YOUR_CAMPAIGN';
-- View filter rules
SELECT lead_filter_id, filter_name, filter_type, filter_label
FROM vicidial_lead_filters
WHERE lead_filter_id IN (
SELECT lead_filter_id FROM vicidial_campaigns
WHERE campaign_id = 'YOUR_CAMPAIGN'
);
-- Check filter criteria
SELECT * FROM vicidial_lead_filter_rules
WHERE lead_filter_id = 'YOUR_FILTER_ID';
Enter fullscreen mode Exit fullscreen mode
临时禁用过滤器进行测试:
UPDATE vicidial_campaigns
SET lead_filter_id = ''
WHERE campaign_id = 'YOUR_CAMPAIGN';
-- Restart campaign in web admin
Enter fullscreen mode Exit fullscreen mode
如果移除过滤器后线索变为可拨打,则过滤器规则是罪魁祸首。请审查并修复过滤条件。
步骤 8:审查拨打次数与最大拨打次数
每个线索都有一个 dial_count 字段。如果它达到或超过 max_dial_count,它就会变得不可拨打。
-- Check dial count distribution
SELECT list_id, dial_count, COUNT(*) as count
FROM vicidial_list
WHERE list_id = 'YOUR_LIST_ID'
GROUP BY dial_count
ORDER BY dial_count DESC;
-- Check max_dial_count for campaign
SELECT campaign_id, max_dial_count
FROM vicidial_campaigns
WHERE campaign_id = 'YOUR_CAMPAIGN';
Enter fullscreen mode Exit fullscreen mode
如果所有线索的 dial_count >= max_dial_count:
-- Reset dial count
UPDATE vicidial_list
SET dial_count = 0
WHERE list_id = 'YOUR_LIST_ID';
-- Or increase max_dial_count for campaign
UPDATE vicidial_campaigns
SET max_dial_count = 10
WHERE campaign_id = 'YOUR_CAMPAIGN';
Enter fullscreen mode Exit fullscreen mode
常见原因和具体解决方案
原因 1:列表未关联到活动
-- Verify campaign points to correct list
SELECT campaign_id, list_id, list_id_string, dial_method
FROM vicidial_campaigns
WHERE campaign_id = 'YOUR_CAMPAIGN';
-- Fix: Update campaign to use correct list
UPDATE vicidial_campaigns
SET list_id = 'YOUR_LIST_ID',
list_id_string = 'YOUR_LIST_ID'
WHERE campaign_id = 'YOUR_CAMPAIGN';
Enter fullscreen mode Exit fullscreen mode
原因 2:活动已暂停或自动拨打已禁用
-- Check campaign active status and auto-dial level
SELECT campaign_id, active, auto_dial_level, campaign_status
FROM vicidial_campaigns
WHERE campaign_id = 'YOUR_CAMPAIGN';
-- Restart campaign
UPDATE vicidial_campaigns
SET active = 'Y',
auto_dial_level = 4,
campaign_status = 'ACTIVE'
WHERE campaign_id = 'YOUR_CAMPAIGN';
Enter fullscreen mode Exit fullscreen mode
然后重启 ViciDial:
systemctl restart vicidial
Enter fullscreen mode Exit fullscreen mode
原因 3:所有线索均被标记为禁止来电
-- Check for DNCC (Do Not Call Compiled) status
SELECT list_id, status, COUNT(*) as count
FROM vicidial_list
WHERE list_id = 'YOUR_LIST_ID'
AND status IN ('DNCC', 'DNCL')
GROUP BY status;
-- Clear DNCC marks (if list was incorrectly flagged)
UPDATE vicidial_list
SET status = 'NEW'
WHERE list_id = 'YOUR_LIST_ID'
AND status = 'DNCC';
Enter fullscreen mode Exit fullscreen mode
原因 4:Asterisk-ViciDial 通信中断
检查 Asterisk 是否正在响应 ViciDial 的请求:
# Check Asterisk process
ps aux | grep asterisk | grep -v grep
# Restart Asterisk
systemctl restart asterisk
# Check SIP connectivity
asterisk -rx "sip show peers"
# Tail Asterisk logs
tail -100 /var/log/asterisk/messages
Enter fullscreen mode Exit fullscreen mode
原因 5:数据库损坏或锁定
# Check for locked tables
mysql -u root -p asterisk -e "SHOW OPEN TABLES WHERE In_use > 0;"
# Restart MySQL if locked
systemctl restart mariadb
# Verify vicidial_list table integrity
mysql -u root -p asterisk -e "CHECK TABLE vicidial_list;"
# Repair if corrupted
mysql -u root -p asterisk -e "REPAIR TABLE vicidial_list;"
Enter fullscreen mode Exit fullscreen mode
高级配置示例
完整的 Hopper 加载脚本
创建 /usr/local/bin/load_hopper.sh:
#!/bin/bash
CAMPAIGN_ID="$1"
QUEUE_SIZE="$2"
if [ -z "$CAMPAIGN_ID" ] || [ -z "$QUEUE_SIZE" ]; then
echo "Usage: $0 <CAMPAIGN_ID> <QUEUE_SIZE>"
exit 1
fi
# Load hopper using Perl CLI
/usr/share/astguiclient/VICIDIAL_hopper_loader.pl \
--campaign-id "$CAMPAIGN_ID" \
--queue-size "$QUEUE_SIZE" \
--priority 5 \
--dialable-status READY
# Verify hopper loaded
HOPPER_COUNT=$(mysql -u root -p'PASSWORD' asterisk -N -e \
"SELECT COUNT(*) FROM vicidial_hopper WHERE campaign_id='$CAMPAIGN_ID';")
echo "Hopper loaded: $HOPPER_COUNT records"
# Log event
echo "$(date): Hopper loaded for $CAMPAIGN_ID with $HOPPER_COUNT records" \
>> /var/log/vicidial_hopper.log
Enter fullscreen mode Exit fullscreen mode
用法:
chmod +x /usr/local/bin/load_hopper.sh
/usr/local/bin/load_hopper.sh YOUR_CAMPAIGN 500
Enter fullscreen mode Exit fullscreen mode
带状态验证的列表导入
导入新列表时,请确保正确的状态分配:
#!/bin/bash
# Script: import_list_with_validation.sh
LIST_FILE="$1"
LIST_ID="$2"
CAMPAIGN_ID="$3"
# Import list using ViciDial importer
/usr/share/astguiclient/VICIDIAL_IN_GROUP.pl \
--list-id "$LIST_ID" \
--list-file "$LIST_FILE" \
--delete-duplicates YES \
--ignore-blank-phone YES
# Validate import
TOTAL=$(mysql -u root -p'PASSWORD' asterisk -N -e \
"SELECT COUNT(*) FROM vicidial_list WHERE list_id='$LIST_ID';")
NEW_COUNT=$(mysql -u root -p'PASSWORD' asterisk -N -e \
"SELECT COUNT(*) FROM vicidial_list WHERE list_id='$LIST_ID' AND status='NEW';")
echo "List $LIST_ID imported with $TOTAL total records, $NEW_COUNT in NEW status"
# Verify campaign is linked
mysql -u root -p'PASSWORD' asterisk -e \
"UPDATE vicidial_campaigns SET list_id='$LIST_ID' WHERE campaign_id='$CAMPAIGN_ID';"
echo "Campaign $CAMPAIGN_ID linked to list $LIST_ID"
Enter fullscreen mode Exit fullscreen mode
活动诊断脚本
创建 /usr/local/bin/diagnose_campaign.sh:
#!/bin/bash
# Complete campaign diagnostics
CAMPAIGN_ID="$1"
DB_USER="root"
DB_PASS="your_password"
DB_NAME="asterisk"
echo "=== ViciDial Campaign Diagnostics ==="
echo "Campaign: $CAMPAIGN_ID"
echo "Time: $(date)"
echo ""
# 1. Campaign status
echo "--- CAMPAIGN STATUS ---"
mysql -u $DB_USER -p$DB_PASS $DB_NAME -e \
"SELECT campaign_id, campaign_name, active, auto_dial_level,
dial_method, list_id, max_dial_count, dialer_group_id
FROM vicidial_campaigns WHERE campaign_id='$CAMPAIGN_ID';"
# 2. List statistics
echo ""
echo "--- LEAD LIST STATUS ---"
LIST_ID=$(mysql -u $DB_USER -p$DB_PASS $DB_NAME -N -e \
"SELECT list_id FROM vicidial_campaigns WHERE campaign_id='$CAMPAIGN_ID';")
mysql -u $DB_USER -p$DB_PASS $DB_NAME -e \
"SELECT list_id, status, COUNT(*) as count FROM vicidial_list
WHERE list_id='$LIST_ID' GROUP BY status ORDER BY count DESC;"
# 3. Hopper status
echo ""
echo "--- HOPPER STATUS ---"
mysql -u $DB_USER -p$DB_PASS $DB_NAME -e \
"SELECT campaign_id, COUNT(*) as hopper_count FROM vicidial_hopper
WHERE campaign_id='$CAMPAIGN_ID' GROUP BY campaign_id;"
# 4. Dialer status
echo ""
echo "--- DIALER STATUS ---"
DIALER_GROUP=$(mysql -u $DB_USER -p$DB_PASS $DB_NAME -N -e \
"SELECT dialer_group_id FROM vicidial_campaigns WHERE campaign_id='$CAMPAIGN_ID';")
mysql -u $DB_USER -p$DB_PASS $DB_NAME -e \
"SELECT dialier_id, dialer_group, active, server_ip FROM vicidial_dialiers
WHERE dialer_group='$DIALER_GROUP';"
# 5. Active calls
echo ""
echo "--- ACTIVE CALLS ---"
mysql -u $DB_USER -p$DB_PASS $DB_NAME -e \
"SELECT COUNT(*) as active_calls FROM vicidial_log
WHERE campaign_id='$CAMPAIGN_ID' AND call_date >= DATE_SUB(NOW(), INTERVAL 5 MINUTE)
AND end_epoch = 0;"
# 6. Asterisk SIP peers
echo ""
echo "--- ASTERISK SIP PEERS ---"
asterisk -rx "sip show peers" | head -5
echo ""
echo "=== END DIAGNOSTICS ==="
Enter fullscreen mode Exit fullscreen mode
用法:
chmod +x /usr/local/bin/diagnose_campaign.sh
/usr/local/bin/diagnose_campaign.sh YOUR_CAMPAIGN
Enter fullscreen mode Exit fullscreen mode
故障排除清单
| 问题 | 诊断命令 | 修复方法 |
|---|---|---|
| 列表中没有线索 | SELECT COUNT(*) FROM vicidial_list WHERE list_id='LIST_ID'; |
重新导入列表 |
| 所有线索已耗尽 | SELECT status, COUNT(*) FROM vicidial_list WHERE list_id='LIST_ID' GROUP BY status; |
将状态重置为 NEW |
| 活动未关联到列表 | SELECT list_id FROM vicidial_campaigns WHERE campaign_id='CAMP_ID'; |
更新活动的 list_id |
| Hopper 为空 | SELECT COUNT(*) FROM vicidial_hopper WHERE campaign_id='CAMP_ID'; |
运行 hopper 加载脚本 |
| 活动已暂停 | SELECT active FROM vicidial_campaigns WHERE campaign_id='CAMP_ID'; |
设置 active='Y' |
| 拨打次数已超限 | SELECT dial_count FROM vicidial_list WHERE list_id='LIST_ID' GROUP BY dial_count; |
重置 dial_count 或增加 max_dial_count |
| 过滤器阻止线索 | SELECT lead_filter_id FROM vicidial_campaigns WHERE campaign_id='CAMP_ID'; |
移除或修复过滤器 |
| Asterisk 已关闭 | systemctl status asterisk |
systemctl restart asterisk |
| 数据库已锁定 | SHOW OPEN TABLES WHERE In_use > 0; |
systemctl restart mariadb |
| 拨号程序组离线 | SELECT active FROM vicidial_dialiers WHERE dialer_group='GROUP'; |
检查拨号程序连接 |
Asterisk CLI 验证
修复数据库问题后,验证 Asterisk 是否可以通信:
# Check Asterisk is running
asterisk -rx "core show version"
# Monitor SIP registrations
asterisk -rx "sip show peers"
# Watch active calls
asterisk -rx "core show calls"
# Monitor channel activity
asterisk -rx "core show channels"
# Check ViciDial queues
asterisk -rx "queue show"
# View call statistics
asterisk -rx "core show stats"
# Monitor in real-time (attach to console)
asterisk -r
# Then type: dialplan show vicidial-set-agent-status (or relevant context)
Enter fullscreen mode Exit fullscreen mode
ViciDial 重启流程
进行配置更改后,请正确重启 ViciDial 和 Asterisk:
# Stop ViciDial services
systemctl stop vicidial
systemctl stop asterisk
# Optional: Check for hanging processes
ps aux | grep -E "(asterisk|vicidial)" | grep -v grep
# Kill any remaining processes
killall -9 asterisk
killall -9 perl
# Start services in correct order
systemctl start mariadb
sleep 5
systemctl start asterisk
sleep 10
systemctl start vicidial
# Verify all services started
systemctl status vicidial asterisk mariadb
# Check logs for errors
tail -50 /var/log/asterisk/messages
tail -50 /var/log/vicidial.log
Enter fullscreen mode Exit fullscreen mode
监控与预防
设置实时活动监控
-- Create monitoring query to run periodically
-- Check for campaigns with empty hoppers
SELECT c.campaign_id, c.campaign_name,
COALESCE(COUNT(h.hopper_id), 0) as hopper_count,
(SELECT COUNT(*) FROM vicidial_list
WHERE list_id = c.list_id AND status = 'NEW') as new_leads
FROM vicidial_campaigns c
LEFT JOIN vicidial_hopper h ON c.campaign_id = h.campaign_id
WHERE c.active = 'Y'
GROUP BY c.campaign_id
HAVING hopper_count < 50 OR new_leads = 0;
Enter fullscreen mode Exit fullscreen mode
启用 ViciDial 调试日志记录
编辑 /etc/asterisk/extensions-vicidial.conf:
[vicidial-set-agent-status]
exten => _X.,1,Set(VERBOSE_PREFIX_3=***VICIDIAL_DEBUG***)
exten => _X.,n,NoOp(Campaign: ${CAMPAIGN_ID} | List: ${LIST_ID} | Lead: ${LEAD_ID})
exten => _X.,n,NoOp(Dialable: ${DIALABLE_STATUS} | Status: ${LEAD_STATUS})
Enter fullscreen mode Exit fullscreen mode
然后在 Asterisk CLI 中:
asterisk -rx "core set debug 9"
asterisk -rx "core set verbose 9"
asterisk -rx "sip set debug on"
Enter fullscreen mode Exit fullscreen mode
低 Hopper 条件警报
创建一个 cron 作业,在 hopper 耗尽时发出警报:
#!/bin/bash
# File: /usr/local/bin/check_hopper_alert.sh
THRESHOLD=100
MAIL="[email protected]"
for CAMPAIGN in $(mysql -u root -p'PASSWORD' asterisk -N -e \
"SELECT campaign_id FROM vicidial_campaigns WHERE active='Y';"); do
HOPPER=$(mysql -u root -p'PASSWORD' asterisk -N -e \
"SELECT COUNT(*) FROM vicidial_hopper WHERE campaign_id='$CAMPAIGN';")
if [ "$HOPPER" -lt "$THRESHOLD" ]; then
echo "WARNING: Campaign $CAMPAIGN hopper count: $HOPPER" | \
mail -s "ViciDial Hopper Alert: $CAMPAIGN" "$MAIL"
fi
done
Enter fullscreen mode Exit fullscreen mode
添加到 crontab:
*/5 * * * * /usr/local/bin/check_hopper_alert.sh
Enter fullscreen mode Exit fullscreen mode
摘要
ViciDial 中的 "Campaign Has No Dialable Leads" 错误是由列表管理、活动配置和数据库状态中的系统性问题造成的。请遵循以下故障排除路径:
-
验证线索是否存在 — 统计
vicidial_list表中的记录数 - 检查线索状态 — 确保有可用的 NEW 线索,而不是 CALLED/DNCC
- 验证活动配置 — 确认列表关联、激活状态、自动拨打已启用
- 检查 hopper — 验证 hopper 是否有准备好供拨号程序使用的条目
- 审查过滤器 — 检查线索过滤器是否没有排除所有记录
- 确认拨号程序 — 确保拨号程序组处于激活状态且已连接
- 测试 Asterisk — 验证 SIP 注册和通道可用性
- 重启服务 — 按顺序正确重启 ViciDial、Asterisk 和 MySQL
使用提供的诊断脚本和 SQL 查询来隔离您特定环境中的根本原因。大多数问题可以通过将线索状态重置为 NEW、正确地将活动关联到列表或清除有问题的过滤器来解决。对于生产系统,请实施监控脚本来防止再次发生。
0 Comments
Log in to join the conversation.No comments yet. Be the first to share your thoughts.