1. Decide whether automatic dialing should happen
- In the affected Agent session, note the campaign ID and time, including time zone. In Campaigns → Show Campaigns, open that same ID’s Modify screen. Read the saved Dial Method, Auto Dial Level and Active values before touching a control.
- Compare those values with the type of work expected: agent-initiated manual call, automatic outbound work or inbound call delivery. Use the matching row below; do not troubleshoot the outbound hopper for an inbound-only symptom.
- If the intended mode is unknown, leave the campaign unchanged and record that missing decision in the handoff. If a live incident requires a change, use the campaign owner’s approved values rather than copying this lab’s controls.
Saved lab campaign: inactive
Open to enlargeSaved lab campaign: manual mode
Open to enlargeSaved lab campaign: zero automatic dial level
Open to enlargeYou should seeYou have selected the correct branch. MANUAL with no automatic attempts is expected behavior; Active N is a deliberate stop until an activation is approved.
2. Verify the affected agent is available on the same campaign
- On the Agent screen, compare the logged-in user and campaign with the incident record. Read the current state: PAUSED, waiting/available, in a call, or waiting for disposition. Use Admin’s real-time report for the same user as a second observation if you have access.
- If PAUSED is intentional, record it as the stop state. Only when the agent is actually ready for the approved work, select RESUME and check that the screen changes to its available/waiting state. Complete any pending disposition through the normal Agent workflow before expecting another call.
- If the station connection or session audio is absent, stop this branch and follow the phone-login or station setup guide. Reaching an Agent page is not proof of a connected phone leg.
- If the Agent screen and live report disagree after their normal refresh, record both states and the same timestamp. Preserve the session for the supervisor to inspect; do not delete live-agent rows or reset campaigns.
Idle Agent screen with call controls and blank lead details.
Open to enlargeCapture details
It illustrates the workspace only; it is not the current affected user, a READY-state proof, a registered station or a completed call.You should seeMatch: the same user/campaign is available with the expected station session. Different: a pause, pending work or station failure explains the next action. Unknown: send the paired observations to the session owner.
3. Match one intended lead to the campaign’s eligibility gates
- In Lists → Show Lists, open the list containing the authorized test lead or affected work. Compare its saved Campaign and Active controls with the campaign from step 1. Record the values before any correction.
- In the campaign Modify screen, read Dial Statuses, Local Call Time and any lead filter or recycle rule in use. Through the authorized lead-search screen, inspect one intended lead’s status and list ID without copying its phone number or personal fields into a ticket.
- Compare the lead’s status with an allowed Dial Status, its list with the selected campaign, and the current time with the applicable lead-local calling window. A NEW lead is eligible by status only when NEW is among the campaign’s dial statuses; a list’s total count is not its eligible count.
- If a list association or Active flag is wrong on an approved isolated test, record the old value, change only that field, SUBMIT and reopen the record. If the block is a calling window, consent rule, filter or retry limit, honor that rule or have its owner correct the underlying test data; do not disable it to force a call.
- If everything visible matches but eligibility is still unknown, record the specific filter/recycle rule for the campaign owner. Do not reset called statuses or the entire hopper as a first diagnostic.
- List
- Your actual list ID → same campaign IDReopen after an approved save; an unsaved dropdown is not evidence.
- Lead status
- A status present in the campaign’s Dial StatusesUse an authorized record; report only the status and a safe internal reference.
- Time / filters
- Within the applicable window and included by the configured rulesCheck the relevant time zone; server time and lead-local time can differ.
Where to compare the list’s campaign and active flag
Open to enlargeCapture details
These are unsaved entries on example list 90001, not proof of its saved state, lead counts or eligibility. Inspect your own existing list.You should seeYou can name either a failed eligibility rule or one specific intended lead whose visible gates match. That is enough to proceed to staging; it is not proof a call was attempted.
4. Check whether eligible work is staged for this campaign
- If you have only Admin access, use the campaign’s hopper view/count available in your build and record its timestamp. If that view is unavailable, give the read-only database owner the aggregate query below; do not create a broader login during an incident.
- For a local SQL check, first complete Create a read-only database account for safe VICIdial queries. Open the client with sudo mysql --defaults-file=/etc/vicidial-readonly.cnf and verify SELECT CURRENT_USER(), DATABASE(); before entering this query.
- Replace REPLACE_WITH_CAMPAIGN_ID with the exact campaign ID from step 1. Keep the surrounding single quotes. For an ID containing a quote, have the database owner supply a correctly quoted value instead of editing SQL by trial and error.
- Run the query, record the status counts and time, then type quit to leave the client. After an approved eligibility correction, allow the site’s normal hopper refresh and check once more; do not interpret a single instant as a permanent state.
- Before you use it
- Enter this in the verified read-only MariaDB client, not the Linux shell. Replace the campaign placeholder first.
SELECT status, COUNT(*) AS queued_leadsFROM vicidial_hopperWHERE campaign_id = 'REPLACE_WITH_CAMPAIGN_ID'GROUP BY status;This example has no recorded result here. Follow its preparation, expected result and stop conditions before using it.
- Success looks like
- Rows contain status totals for that campaign, or the client reports an empty set. Save only these aggregate observations and their time.
- Stop if
- Access denied: have the database owner review this one table’s authorized access. Unknown table/database: verify the selected schema. No rows is a diagnostic result, not a SQL error.
You should seeThe aggregate distinguishes no staged rows from staged work at that moment. It does not identify a dialplan failure or prove a dial attempt.
5. Verify one correction or hand off the first unresolved gate
- For an approved change, reopen the exact record and confirm the saved value. Keep its original value in your change record and wait for the normal report/hopper refresh before comparing again.
- If testing is authorized, use one approved test destination in the intended workflow. Observe the Agent state and supervisor report together: did an attempt start, did it reach the intended destination, and did the final disposition save? Record these as separate results.
- If the same symptom remains, return the changed field to its recorded value when that rollback is appropriate for the approved change, SUBMIT and reopen. Do not compound the uncertainty with unrelated dial-level, status-reset or carrier changes.
- Complete the handoff below with observed values and the earliest unknown or failing gate. Omit passwords, phone numbers, lead names and raw database rows. A diagnosis with a precise owner/check is a completed diagnostic outcome even when no call was authorized.
- Before you use it
- Use internal IDs and aggregate counts only. This is a blank worksheet, not an observed result.
Observed at / time zone:Campaign ID / intended work:Saved Dial Method / Active / Auto Dial Level:Agent user / campaign / state / station observation:List ID / saved campaign / Active:Lead status / allowed status / calling-window result:Hopper status counts / observed at (or UNKNOWN):First failed or unknown gate:One approved change / original value / saved value:Retest: no test | no attempt | attempt failed | destination reachedDisposition saved / rollback confirmed:Next owner / exact next check:This sample is a template or reading aid, not a terminal command. There is no output to show.
- Success looks like
- Another operator can reproduce the first unresolved check without guessing the campaign, time or change history.
- Stop if
- If a field is unavailable, write UNKNOWN and name the owner who can supply it; do not turn an assumption into a pass.
You should seeDone means either the original symptom was reproduced and the approved correction was verified, or the next owner has the exact failing/unknown gate and evidence needed to continue. A screenshot or a positive hopper count is not a completed call.
Recorded lab terminal checks
Recorded lab checks were run against the synthetic demo on November 4, 2026. These read-only observations supplement the configuration steps above; they do not establish that a call, route, recording or report workflow succeeded.
Recorded lab observation: At capture LAB01 was inactive and MANUAL; this is a configuration observation, not proof of dial readiness.
Recorded lab observation: List 90001 was active and associated with LAB01; active list does not override inactive campaign.
Recorded lab observation: Three synthetic lab leads were NEW. Status counts do not prove eligibility, successful dialing or lead handling.
Recorded lab observation: No matching hopper rows at capture; this alone does not diagnose a fault or justify a reset.
- Before you use it
- These historical commands were captured in a root shell using database vicidb and /etc/vicidial-readonly.cnf. The private client file in Create a read-only database account for safe VICIdial queries is root-owned with mode 0600: use the approved root context from that guide, or invoke mysql through sudo as it describes. A regular user cannot read that file. On your own server use your authorized connection and test campaign/list IDs; changed commands are not this exact capture. Do not print the credential file.
mysql --defaults-extra-file=/etc/vicidial-readonly.cnf --batch vicidb -e "SELECT campaign_id, active, dial_method FROM vicidial_campaigns WHERE campaign_id='LAB01';"mysql --defaults-extra-file=/etc/vicidial-readonly.cnf --batch vicidb -e "SELECT list_id, campaign_id, active FROM vicidial_lists WHERE list_id=90001 AND campaign_id='LAB01';"mysql --defaults-extra-file=/etc/vicidial-readonly.cnf --batch vicidb -e "SELECT status, COUNT(*) AS lead_count FROM vicidial_list WHERE list_id=90001 GROUP BY status ORDER BY status;"mysql --defaults-extra-file=/etc/vicidial-readonly.cnf --batch vicidb -e "SELECT COUNT(*) AS hopper_count FROM vicidial_hopper WHERE campaign_id='LAB01' AND list_id=90001;"Captured demo response · 2026-11-04T22:37:45.695257Z. Any filtering, hidden values or test-only data are identified in the capture label. Select Replay transcript to read the recorded output.
- Success looks like
- Compare the returned rows with the specific task and capture time. An empty result or zero count is an observation to explain, not a complete diagnosis or evidence of a working call.
- Stop if
- For a connection, permission, schema or missing-test-ID error, check the approved client configuration and installed version first. Do not broaden permissions or change production data to match this demonstration.
Steps and result4 steps
See scoped read-only queries against the synthetic lab campaign and list.
Observed read-only resultLAB01 was inactive and MANUAL; list 90001 was active with three NEW leads and zero matching hopper rows. This does not prove dialing or diagnose the hopper.
Read the captured terminal transcript
Read the chapter notes
- LAB01 campaign was inactive and set to MANUAL.
Read-only captured command and output; rendered for this replay.
- List 90001 belonged to LAB01 and was active.
Read-only captured command and output; rendered for this replay.
- The synthetic list contained three leads with status NEW.
Read-only captured command and output; rendered for this replay.
- The scoped hopper count was zero. This alone is not a diagnosis.
Read-only captured command and output; rendered for this replay.
November 4, 2026 · ViciBox 12 · SVN 4037. LAB01 was inactive. Counts alone do not demonstrate dialing or diagnose the hopper. Rendered actual SSH capture using xterm.js; paced still frames, not a live terminal recording. SSH client warning omitted from captured output. Use fullscreen to read the terminal output.
View still screenshots
Recorded lab terminal: lab campaign
Open to enlargeCapture details
Read-only observation, not a completed call or routing test. Display trims blank space; enlargement opens the complete original. SSH client post-quantum warning on stderr omitted; SQL stdout preserved. Aggregate counts or schema only; no customer rows.Recorded lab terminal: lab list
Open to enlargeCapture details
Read-only observation, not a completed call or routing test. Display trims blank space; enlargement opens the complete original. SSH client post-quantum warning on stderr omitted; SQL stdout preserved. Aggregate counts or schema only; no customer rows.You should seeThe recorded lab command and output show exactly what the demo returned. Use the original workflow’s separate end-to-end acceptance checks before declaring success.
Checks and sources
What was checked
- Instructions are based on the linked project documentation and sanitized interface captures. The captures do not prove registration, a completed call, a transfer, callback or audio quality.
- The lab runs VICIdial SVN 4037, database schema 1748 and Asterisk 18.26.4-vici. Labels, enabled features and provider requirements can differ on another installation.
- The saved training campaign is an inactive MANUAL campaign with Auto Dial Level 0. Historical forms and idle screens show where to inspect controls; they do not demonstrate an active automatic campaign or completed call. The reader follows their own campaign’s saved values.
- Reviewed read-only SSH observations were added from the ViciBox 12 / SVN 4037 demo on November 4, 2026. Captures show point-in-time state, not successful calling, routing, audio, API writes or recovery.
Primary references
Sources
- VICIdial Agent API referenceVICIdial Group · accessed November 4, 2026
- VICIdial status definitionsVICIdial Group · accessed November 4, 2026
- VICIdial Non-Agent API referenceVICIdial Group · accessed November 4, 2026






