ViciDial「Campaign Has No Dialable Leads」— リストとホッパーのトラブルシューティング
ダイヤル可能リードなしエラーの根本原因を把握し、体系的なリスト検証、ホッパー設定、データベースのトラブルシューティングを通じてキャンペーンの生産性を完全に回復させる。
前提条件
トラブルシューティングの前に、以下を確保してください:
- sudo 権限を持つ ViciDial サーバーへの SSH アクセス
/vicidial/admin.phpにある ViciDial ウェブ管理パネルへのアクセスasteriskデータベースへの MySQL/MariaDB コマンドラインアクセス- ViciDial キャンペーン構造(リスト、ダイヤラー、エージェント)の基本理解
- Asterisk プロセスを確認するための root または asterisk-user 権限
- ViciDial データベースと設定ファイルの最近のバックアップ
- 検証用の既知のリード数を持つテストキャンペーン
「Campaign Has No Dialable Leads」エラーは通常、以下の場合に発生します:
- ダイヤラーが通話を開始しようとするが、ホッパーキューが空である
- リードリストのすべてのレコードが使い果たされたか、ダイヤル不可とマークされている
- リスト設定がキャンペーン設定と競合している
- ViciDial とダイヤラー間のデータベース接続が切断されている
- リードフィルタリングルールがダイヤル可能プールからすべてのレコードを除外している
ViciDial リストアーキテクチャの理解
ViciDial におけるリードのライフサイクル
ViciDial のすべてのリードは、ダイヤル可能性を決定するステータス状態を通過します。リードは、キャンペーンとリスト設定に基づく特定の基準に一致する場合に「ダイヤル可能」と見なされます。
リードステータス状態:
-
NEW— 新しいリード、未連絡 -
QUEUE— ダイヤル予定 -
CALL— 現在ダイヤル中 -
LEFT MESSAGE— ボイスメールが残された -
CALLED— 連絡されたが完了していない -
XFER— 別の部門に転送された -
XFER SEND— 転送保留中 -
INCALL— 進行中の通話 -
CBHOLD— コールバック保留ステータス -
CBSCHED— コールバック予定 -
DNCC— Do Not Call Compiled -
DNCL— Do Not Call List
vicidial_list テーブルの status フィールドは、リードが再ダイヤル可能かどうかを制御します。ほとんどのキャンペーンは、使い果たされたリードの無限再ダイヤルを防ぐために最大ダイヤル回数制限を設定しています。
ホッパーメカニズム
ViciDial ホッパーは、利用可能なダイヤラーにリードを供給するリアルタイムキューです。以下の方法で動作します:
- Query: ダイヤラーがキャンペーン基準に一致する次の利用可能なリードを要求する
- Fetch: システムがフィルターに基づいて
vicidial_listからレコードを取得する - Lock: 重複ダイヤルを防ぐためにリードを
QUEUEとマークする - Deliver: リードをダイヤラーにプッシュして通話試行を行う
- Release: 結果後、リードに新しいステータスとダイヤル回数が更新される
ホッパーがゼロ結果を返す場合、キャンペーンにはダイヤル可能なリードがありません。
前提条件検証チェックリスト
ViciDial インストールの確認
# ViciDial デーモンステータスの確認
systemctl status vicidial
# Asterisk の実行確認
asterisk -rx "core show version"
# MySQL/MariaDB 接続確認
mysql -u cron -p -h localhost asterisk -e "SELECT VERSION();"
Enter fullscreen mode Exit fullscreen mode
データベース接続の確認
# asterisk データベースアクセスのテスト
mysql -u root -p -e "SELECT * FROM asterisk.vicidial LIMIT 1;"
# vicidial_list テーブルの存在確認
mysql -u root -p asterisk -e "DESCRIBE vicidial_list;"
Enter fullscreen mode Exit fullscreen mode
ViciDial コアファイルの確認
# ViciDial 管理パスの確認
ls -la /var/www/html/vicidial/admin.php
# CLI ツールの確認
ls -la /usr/share/astguiclient/
Enter fullscreen mode Exit fullscreen mode
これらのコマンドのいずれかが失敗した場合は、トラブルシューティングを進める前にインストールの問題に対処してください。
体系的なトラブルシューティングプロセス
ステップ 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;
Enter fullscreen mode Exit fullscreen mode
期待される出力: 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;
Enter fullscreen mode Exit fullscreen mode
ステップ 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;
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;
-- 更新の確認
SELECT COUNT(*) FROM vicidial_list
WHERE list_id = 'YOUR_LIST_ID' AND status = 'NEW';
Enter fullscreen mode Exit fullscreen mode
ステップ 3: キャンペーン設定の検証
キャンペーン設定は、どのリードがダイヤル可能と見なされるかを直接制御します。
# ViciDial ウェブインターフェースにアクセス
# ナビゲート: Admin > Campaigns > [Your Campaign]
# または直接クエリ:
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
重要なフィールド:
| Field | Expected Value | Issues |
|---|---|---|
active |
Y |
If N, campaign is disabled |
dial_method |
ADAPT or MANUAL
|
Wrong method blocks dialing |
list_id |
Your list ID | Blank or wrong list blocks dialing |
max_dial_count |
Usually 3-5 | Too low exhausts leads quickly |
auto_dial_level
1-9
0 disables auto-dialing
lead_filter_id
Usually empty
Filters can exclude all leads
ステップ 4: リスト設定の確認
# ウェブ管理経由: Admin > Lead Lists > [Your List]
# または 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: リアルタイムでのホッパーキュー確認
ホッパーはダイヤル直前にリードがステージングされる場所です。ホッパーが入力されているか確認します:
-- アクティブなホッパーエントリの確認
SELECT campaign_id, count(*) as hopper_count
FROM vicidial_hopper
WHERE campaign_id = 'YOUR_CAMPAIGN'
GROUP BY campaign_id;
-- サンプルホッパーレコードの表示
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
ホッパーが空の場合: ダイヤラーがキャンペーン基準に一致するリードを見つけられません。
ホッパーの手動投入(テスト用):
# ViciDial CLI ツールを使用してホッパーをロード
/usr/share/astguiclient/VICIDIAL_hopper_loader.pl --campaign-id YOUR_CAMPAIGN --queue-size 100
Enter fullscreen mode Exit fullscreen mode
Asterisk ログでホッパーロード出力を確認:
tail -50 /var/log/asterisk/messages | grep -i hopper
Enter fullscreen mode Exit fullscreen mode
ステップ 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';
Enter fullscreen mode Exit fullscreen mode
各ダイヤラーについて、到達可能であることを確認:
# ダイヤラー接続のテスト
asterisk -rx "sip show peers" | grep "YOUR_DIALER"
# ViciDial ログでダイヤラーステータスを確認
tail -100 /var/log/asterisk/messages | grep -i "dialier"
Enter fullscreen mode Exit fullscreen mode
ステップ 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';
Enter fullscreen mode Exit fullscreen mode
テストのため一時的にフィルターを無効化:
UPDATE vicidial_campaigns
SET lead_filter_id = ''
WHERE campaign_id = 'YOUR_CAMPAIGN';
-- ウェブ管理でキャンペーンを再起動
Enter fullscreen mode Exit fullscreen mode
フィルターを削除した後にリードがダイヤル可能になった場合、フィルタルールが原因です。フィルター基準を確認して修正してください。
ステップ 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';
Enter fullscreen mode Exit fullscreen mode
すべてのリードの 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';
Enter fullscreen mode Exit fullscreen mode
一般的な原因と具体的な解決策
原因 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';
Enter fullscreen mode Exit fullscreen mode
原因 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';
Enter fullscreen mode Exit fullscreen mode
その後 ViciDial を再起動:
systemctl restart vicidial
Enter fullscreen mode Exit fullscreen mode
原因 3: すべてのリードが Do Not Call とマークされている
-- DNCC (Do Not Call Compiled) ステータスの確認
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';
Enter fullscreen mode Exit fullscreen mode
原因 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
Enter fullscreen mode Exit fullscreen mode
原因 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;"
Enter fullscreen mode Exit fullscreen mode
高度な設定例
完全なホッパーロードスクリプト
/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 を使用してホッパーをロード
/usr/share/astguiclient/VICIDIAL_hopper_loader.pl \
--campaign-id "$CAMPAIGN_ID" \
--queue-size "$QUEUE_SIZE" \
--priority 5 \
--dialable-status READY
# ホッパーがロードされたか確認
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
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"
# 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"
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
トラブルシューティングチェックリスト
| Issue | Diagnostic Command | Fix |
|---|---|---|
| No leads in list | SELECT COUNT(*) FROM vicidial_list WHERE list_id='LIST_ID'; |
Re-import list |
| All leads exhausted | SELECT status, COUNT(*) FROM vicidial_list WHERE list_id='LIST_ID' GROUP BY status; |
Reset status to NEW |
| Campaign not linked to list | SELECT list_id FROM vicidial_campaigns WHERE campaign_id='CAMP_ID'; |
Update campaign list_id |
| Hopper empty | SELECT COUNT(*) FROM vicidial_hopper WHERE campaign_id='CAMP_ID'; |
Run hopper loader script |
| Campaign paused | SELECT active FROM vicidial_campaigns WHERE campaign_id='CAMP_ID'; |
Set active='Y' |
| Dial count exceeded | SELECT dial_count FROM vicidial_list WHERE list_id='LIST_ID' GROUP BY dial_count; |
Reset dial_count or increase max_dial_count |
| Filter blocking leads | SELECT lead_filter_id FROM vicidial_campaigns WHERE campaign_id='CAMP_ID'; |
Remove or fix filter |
| Asterisk down | systemctl status asterisk |
systemctl restart asterisk |
| Database locked | SHOW OPEN TABLES WHERE In_use > 0; |
systemctl restart mariadb |
| Dialer group offline | SELECT active FROM vicidial_dialiers WHERE dialer_group='GROUP'; |
Check dialer connectivity |
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
# Then type: dialplan show vicidial-set-agent-status (or relevant context)
Enter fullscreen mode Exit fullscreen mode
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
Enter fullscreen mode Exit fullscreen mode
監視と予防
リアルタイムキャンペーン監視の設定
-- 定期的に実行する監視クエリの作成
-- 空のホッパーを持つキャンペーンの確認
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
低いホッパー状態のアラート
ホッパーが枯渇した場合にアラートする cron ジョブを作成:
#!/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 ではないことを確認
- キャンペーン設定を検証 — リストリンク、アクティブステータス、オートダイヤル有効を確認
- ホッパーを検査 — ダイヤラー用に準備されたエントリがホッパーにあることを確認
- フィルターを確認 — リードフィルターがすべてのレコードを除外していないことを確認
- ダイヤラーを確認 — ダイヤラーグループがアクティブで接続されていることを確認
- 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.