ViciDial「活動沒有可撥打的潛在客戶」— 清單與 Hopper 疑難排解
掌握沒有可撥打潛在客戶錯誤的根本原因,並透過系統化的清單驗證、hopper 設定與資料庫排解,恢復活動的完整生產力。
先決條件
在進行疑難排解之前,請確認您已具備:
- 具備 sudo 權限的 ViciDial 伺服器 SSH 存取權限
- 存取 ViciDial 網頁管理面板(位於
/vicidial/admin.php) - 對
asterisk資料庫的 MySQL/MariaDB 指令列存取權限 - 了解基本的 ViciDial 活動結構(清單、撥號器、坐席)
- 具備檢查 Asterisk 程序的 root 或 asterisk 使用者權限
- 已備份 ViciDial 資料庫與設定檔的近期備份
- 用於驗證的測試活動,其潛在客戶數量已知
「活動沒有可撥打的潛在客戶」錯誤通常發生於下列情況:
- 撥號器嘗試發起通話,但 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 安裝
# 檢查 ViciDial 服務狀態
systemctl status vicidial
# 驗證 Asterisk 是否正在執行
asterisk -rx "core show version"
# 檢查 MySQL/MariaDB 連線
mysql -u cron -p -h localhost asterisk -e "SELECT VERSION();"
進入全螢幕模式 退出全螢幕模式
確認資料庫連線
# 測試 asterisk 資料庫存取
mysql -u root -p -e "SELECT * FROM asterisk.vicidial LIMIT 1;"
# 驗證 vicidial_list 資料表是否存在
mysql -u root -p asterisk -e "DESCRIBE vicidial_list;"
進入全螢幕模式 退出全螢幕模式
檢查 ViciDial 核心檔案
# 確認 ViciDial 管理路徑
ls -la /var/www/html/vicidial/admin.php
# 檢查 CLI 工具
ls -la /usr/share/astguiclient/
進入全螢幕模式 退出全螢幕模式
若上述任何指令失敗,請先解決安裝問題,再繼續進行疑難排解。
系統化疑難排解流程
步驟 1:確認潛在客戶清單存在且含有記錄
從最基本的檢查開始——您的清單是否真的包含潛在客戶?
# 登入 MySQL
mysql -u root -p asterisk
# 檢查清單摘要
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;
進入全螢幕模式 退出全螢幕模式
預期輸出: record_count 應大於 0,且與 list_size 相符。
若 record_count 為 0,表示您的清單從未匯入。請檢查:
# 在 ViciDial 網頁管理介面查看匯入記錄:Admin > Import Lists
# 或檢查指令列匯入工具:
/usr/share/astguiclient/VICIDIAL_IN_GROUP.pl --list-id YOUR_LIST_ID
# 檢查 ViciDial 載入佇列
SELECT * FROM vicidial_list_queue LIMIT 5;
進入全螢幕模式 退出全螢幕模式
步驟 2:檢查潛在客戶狀態分佈
造成「沒有可撥打的潛在客戶」最常見的原因,是所有潛在客戶都已被聯絡過,且其狀態不允許重新撥打。
-- 檢查清單的狀態明細
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;
進入全螢幕模式 退出全螢幕模式
預期輸出範例:
+----------+--------+-------+
| list_id | status | count |
+----------+--------+-------+
| LIST-001 | CALLED | 4850 |
| LIST-001 | NEW | 150 |
| LIST-001 | QUEUE | 12 |
+----------+--------+-------+
進入全螢幕模式 退出全螢幕模式
若 NEW 數量極低或為零: 表示您的潛在客戶已用盡,或匯入時的狀態不正確。您需要重設或重新匯入。
將所有潛在客戶重設為 NEW 狀態:
UPDATE vicidial_list
SET status = 'NEW',
dial_count = 0,
last_call_time = NULL
WHERE list_id = 'YOUR_LIST_ID'
LIMIT 10000;
-- 驗證更新結果
SELECT COUNT(*) FROM vicidial_list
WHERE list_id = 'YOUR_LIST_ID' AND status = 'NEW';
進入全螢幕模式 退出全螢幕模式
步驟 3:驗證活動設定
活動設定直接控制哪些潛在客戶被視為可撥打。
# 存取 ViciDial 網頁介面
# 導覽:Admin > Campaigns > [您的活動]
# 或直接查詢:
mysql -u root -p asterisk -e "SELECT * FROM vicidial_campaigns WHERE campaign_id = 'YOUR_CAMPAIGN' \G"
進入全螢幕模式 退出全螢幕模式
需檢查的關鍵欄位:
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';
進入全螢幕模式 退出全螢幕模式
關鍵欄位:
| 欄位 | 預期值 | 問題說明 |
|---|---|---|
active |
Y |
若為 N,活動即已停用 |
dial_method |
ADAPT 或 MANUAL
|
錯誤的方法會阻擋撥打 |
list_id |
您的清單 ID | 空白或錯誤的清單 ID 會阻擋撥打 |
max_dial_count |
通常為 3-5 | 數值過低會快速耗盡潛在客戶 |
auto_dial_level |
1-9 | 0 會停用自動撥號 |
lead_filter_id |
通常為空 | 過濾器可能會排除所有潛在客戶 |
步驟 4:檢查清單設定
# 透過網頁管理:Admin > Lead Lists > [您的清單]
# 或透過 MySQL:
mysql -u root -p asterisk -e "SELECT * FROM vicidial_lists WHERE list_id = 'YOUR_LIST_ID' \G"
進入全螢幕模式 退出全螢幕模式
關鍵欄位:
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';
進入全螢幕模式 退出全螢幕模式
檢查清單是否標記為啟用:
UPDATE vicidial_lists
SET active = 'Y'
WHERE list_id = 'YOUR_LIST_ID';
進入全螢幕模式 退出全螢幕模式
步驟 5:即時檢查 Hopper 佇列
Hopper 是潛在客戶在撥打前即將被分派的階段。請檢查其是否已填入資料:
-- 檢查作用中的 hopper 項目
SELECT campaign_id, count(*) as hopper_count
FROM vicidial_hopper
WHERE campaign_id = 'YOUR_CAMPAIGN'
GROUP BY campaign_id;
-- 查看 hopper 記錄範例
SELECT hopper_id, campaign_id, status, priority, dialable_status
FROM vicidial_hopper
WHERE campaign_id = 'YOUR_CAMPAIGN'
LIMIT 10;
進入全螢幕模式 退出全螢幕模式
若 hopper 為空: 表示撥號器找不到符合活動條件的潛在客戶。
手動填入 hopper(用於測試):
# 使用 ViciDial CLI 工具載入 hopper
/usr/share/astguiclient/VICIDIAL_hopper_loader.pl --campaign-id YOUR_CAMPAIGN --queue-size 100
進入全螢幕模式 退出全螢幕模式
請檢查 Asterisk 日誌中 hopper 載入的輸出:
tail -50 /var/log/asterisk/messages | grep -i hopper
進入全螢幕模式 退出全螢幕模式
步驟 6:驗證撥號器群組設定
撥號器會被指派至群組。請檢查您的活動撥號器群組是否能存取該清單。
-- 找出活動對應的撥號器群組
SELECT campaign_id, dialer_group_id
FROM vicidial_campaigns
WHERE campaign_id = 'YOUR_CAMPAIGN';
-- 檢查撥號器群組成員
SELECT dialier_id, dialer_group, active, server_ip, count_attempt_leads
FROM vicidial_dialiers
WHERE dialer_group = 'YOUR_DIALER_GROUP'
AND active = 'Y';
進入全螢幕模式 退出全螢幕模式
請針對每一台撥號器,確認其可連線:
# 測試撥號器連線
asterisk -rx "sip show peers" | grep "YOUR_DIALER"
# 檢查 ViciDial 日誌中的撥號器狀態
tail -100 /var/log/asterisk/messages | grep -i "dialier"
進入全螢幕模式 退出全螢幕模式
步驟 7:檢查潛在客戶過濾規則
潛在客戶過濾器可能會悄無聲息地排除所有記錄,使其無法撥打。
-- 識別指派給活動的過濾器
SELECT lead_filter_id FROM vicidial_campaigns
WHERE campaign_id = 'YOUR_CAMPAIGN';
-- 查看過濾器規則
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'
);
-- 檢查過濾條件
SELECT * FROM vicidial_lead_filter_rules
WHERE lead_filter_id = 'YOUR_FILTER_ID';
進入全螢幕模式 退出全螢幕模式
暫時停用過濾器以進行測試:
UPDATE vicidial_campaigns
SET lead_filter_id = ''
WHERE campaign_id = 'YOUR_CAMPAIGN';
-- 在網頁管理介面重新啟動活動
進入全螢幕模式 退出全螢幕模式
若移除過濾器後潛在客戶變為可撥打,則問題出在過濾規則。請檢視並修正過濾條件。
步驟 8:檢視撥打次數與最大撥打次數
每一筆潛在客戶都有一個 dial_count 欄位。若其達到或超過 max_dial_count,即變為不可撥打。
-- 檢查撥打次數分佈
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;
-- 檢查活動的 max_dial_count
SELECT campaign_id, max_dial_count
FROM vicidial_campaigns
WHERE campaign_id = 'YOUR_CAMPAIGN';
進入全螢幕模式 退出全螢幕模式
若所有潛在客戶的 dial_count >= max_dial_count:
-- 重設撥打次數
UPDATE vicidial_list
SET dial_count = 0
WHERE list_id = 'YOUR_LIST_ID';
-- 或增加活動的 max_dial_count
UPDATE vicidial_campaigns
SET max_dial_count = 10
WHERE campaign_id = 'YOUR_CAMPAIGN';
進入全螢幕模式 退出全螢幕模式
常見原因與對應解決方案
原因 1:清單未連結至活動
-- 驗證活動是否指向正確的清單
SELECT campaign_id, list_id, list_id_string, dial_method
FROM vicidial_campaigns
WHERE campaign_id = 'YOUR_CAMPAIGN';
-- 修正:更新活動以使用正確的清單
UPDATE vicidial_campaigns
SET list_id = 'YOUR_LIST_ID',
list_id_string = 'YOUR_LIST_ID'
WHERE campaign_id = 'YOUR_CAMPAIGN';
進入全螢幕模式 退出全螢幕模式
原因 2:活動已暫停或自動撥號已停用
-- 檢查活動啟用狀態與自動撥號等級
SELECT campaign_id, active, auto_dial_level, campaign_status
FROM vicidial_campaigns
WHERE campaign_id = 'YOUR_CAMPAIGN';
-- 重新啟動活動
UPDATE vicidial_campaigns
SET active = 'Y',
auto_dial_level = 4,
campaign_status = 'ACTIVE'
WHERE campaign_id = 'YOUR_CAMPAIGN';
進入全螢幕模式 退出全螢幕模式
然後重新啟動 ViciDial:
systemctl restart vicidial
進入全螢幕模式 退出全螢幕模式
原因 3:所有潛在客戶皆被標記為勿打
-- 檢查 DNCC(已列入勿打清單編譯)狀態
SELECT list_id, status, COUNT(*) as count
FROM vicidial_list
WHERE list_id = 'YOUR_LIST_ID'
AND status IN ('DNCC', 'DNCL')
GROUP BY status;
-- 清除 DNCC 標記(若清單被錯誤標記)
UPDATE vicidial_list
SET status = 'NEW'
WHERE list_id = 'YOUR_LIST_ID'
AND status = 'DNCC';
進入全螢幕模式 退出全螢幕模式
原因 4:Asterisk 與 ViciDial 通訊中斷
請檢查 Asterisk 是否回應 ViciDial 的請求:
# 檢查 Asterisk 程序
ps aux | grep asterisk | grep -v grep
# 重新啟動 Asterisk
systemctl restart asterisk
# 檢查 SIP 連線
asterisk -rx "sip show peers"
# 追蹤 Asterisk 日誌
tail -100 /var/log/asterisk/messages
進入全螢幕模式 退出全螢幕模式
原因 5:資料庫損毀或鎖定
# 檢查是否有被鎖定的資料表
mysql -u root -p asterisk -e "SHOW OPEN TABLES WHERE In_use > 0;"
# 若鎖定則重新啟動 MySQL
systemctl restart mariadb
# 驗證 vicidial_list 資料表完整性
mysql -u root -p asterisk -e "CHECK TABLE vicidial_list;"
# 若損毀則修復
mysql -u root -p asterisk -e "REPAIR TABLE vicidial_list;"
進入全螢幕模式 退出全螢幕模式
進階設定範例
完整的 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
# 使用 Perl CLI 載入 hopper
/usr/share/astguiclient/VICIDIAL_hopper_loader.pl \
--campaign-id "$CAMPAIGN_ID" \
--queue-size "$QUEUE_SIZE" \
--priority 5 \
--dialable-status READY
# 驗證 hopper 已載入
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"
# 記錄事件
echo "$(date): Hopper loaded for $CAMPAIGN_ID with $HOPPER_COUNT records" \
>> /var/log/vicidial_hopper.log
進入全螢幕模式 退出全螢幕模式
使用方式:
chmod +x /usr/local/bin/load_hopper.sh
/usr/local/bin/load_hopper.sh YOUR_CAMPAIGN 500
進入全螢幕模式 退出全螢幕模式
含狀態驗證的清單匯入
匯入新清單時,請確保正確的狀態指派:
#!/bin/bash
# 指令稿:import_list_with_validation.sh
LIST_FILE="$1"
LIST_ID="$2"
CAMPAIGN_ID="$3"
# 使用 ViciDial 匯入器匯入清單
/usr/share/astguiclient/VICIDIAL_IN_GROUP.pl \
--list-id "$LIST_ID" \
--list-file "$LIST_FILE" \
--delete-duplicates YES \
--ignore-blank-phone YES
# 驗證匯入
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"
# 驗證活動已連結
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"
進入全螢幕模式 退出全螢幕模式
活動診斷指令稿
建立 /usr/local/bin/diagnose_campaign.sh:
#!/bin/bash
# 完整的活動診斷
CAMPAIGN_ID="$1"
DB_USER="root"
DB_PASS="your_password"
DB_NAME="asterisk"
echo "=== ViciDial 活動診斷 ==="
echo "Campaign: $CAMPAIGN_ID"
echo "Time: $(date)"
echo ""
# 1. 活動狀態
echo "--- 活動狀態 ---"
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. 清單統計
echo ""
echo "--- 潛在客戶清單狀態 ---"
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 狀態
echo ""
echo "--- HOPPER 狀態 ---"
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. 撥號器狀態
echo ""
echo "--- 撥號器狀態 ---"
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. 進行中的通話
echo ""
echo "--- 進行中的通話 ---"
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 對等端
echo ""
echo "--- ASTERISK SIP 對等端 ---"
asterisk -rx "sip show peers" | head -5
echo ""
echo "=== 診斷結束 ==="
進入全螢幕模式 退出全螢幕模式
使用方式:
chmod +x /usr/local/bin/diagnose_campaign.sh
/usr/local/bin/diagnose_campaign.sh YOUR_CAMPAIGN
進入全螢幕模式 退出全螢幕模式
疑難排解清單
| 問題 | 診斷指令 | 解決方式 |
|---|---|---|
| 清單中沒有潛在客戶 | 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 是否能正常通訊:
# 檢查 Asterisk 是否正在執行
asterisk -rx "core show version"
# 監控 SIP 註冊
asterisk -rx "sip show peers"
# 監看進行中的通話
asterisk -rx "core show calls"
# 監控頻道活動
asterisk -rx "core show channels"
# 檢查 ViciDial 佇列
asterisk -rx "queue show"
# 查看通話統計
asterisk -rx "core show stats"
# 即時監控(連線至主控台)
asterisk -r
# 然後輸入:dialplan show vicidial-set-agent-status(或相關的 context)
進入全螢幕模式 退出全螢幕模式
ViciDial 重新啟動程序
完成設定變更後,請正確重新啟動 ViciDial 與 Asterisk:
# 停止 ViciDial 服務
systemctl stop vicidial
systemctl stop asterisk
# 選用:檢查是否有殘留程序
ps aux | grep -E "(asterisk|vicidial)" | grep -v grep
# 終止任何殘留程序
killall -9 asterisk
killall -9 perl
# 依正確順序啟動服務
systemctl start mariadb
sleep 5
systemctl start asterisk
sleep 10
systemctl start vicidial
# 驗證所有服務已啟動
systemctl status vicidial asterisk mariadb
# 檢查日誌是否有錯誤
tail -50 /var/log/asterisk/messages
tail -50 /var/log/vicidial.log
進入全螢幕模式 退出全螢幕模式
監控與預防
設定即時活動監控
-- 建立定期執行的監控查詢
-- 檢查 hopper 為空的活動
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;
進入全螢幕模式 退出全螢幕模式
啟用 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})
進入全螢幕模式 退出全螢幕模式
然後在 Asterisk CLI 中執行:
asterisk -rx "core set debug 9"
asterisk -rx "core set verbose 9"
asterisk -rx "sip set debug on"
進入全螢幕模式 退出全螢幕模式
對 Hopper 過低發出警示
建立 cron job,以便在 hopper 耗盡時發出警示:
#!/bin/bash
# 檔案:/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
進入全螢幕模式 退出全螢幕模式
加入 crontab:
*/5 * * * * /usr/local/bin/check_hopper_alert.sh
進入全螢幕模式 退出全螢幕模式
摘要
ViciDial 中的「活動沒有可撥打的潛在客戶」錯誤,源於清單管理、活動設定與資料庫狀態等系統性問題。請遵循以下疑難排解路徑:
-
確認潛在客戶存在 — 計算
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.