All docs

How to pull reports from VICIdial

The most useful built-in reports + how to query the underlying tables for custom analysis.

VICIdial ships with ~80 built-in reports. Here are the ones you'll actually use day-to-day.

Top reports

Real-time

  • Real-time Main Report (Reports → Real Time Main Report) — campaign-level live status: agents on, dial level, drops, abandons
  • Time on Reports — per-agent live status: pause time, talk time, calls

Daily / shift

  • Daily Stats (Reports → Daily Report) — totals per campaign per day
  • User Stats (Reports → User Stats) — per-agent productivity
  • Call Status Stats — disposition counts, helpful for funnel analysis

Compliance

  • Drop Calls Report — every abandoned call. Critical for FCC 3% cap monitoring.
  • DNC Stats — additions to your DNC list per period

Sales analysis

  • Sales by Hour — peak conversion times
  • Sales Tracker — campaign-level conversion funnel

Query the underlying tables

VICIdial's reports run against MariaDB tables. For custom analysis, query directly. Useful tables:

-- Every call placed
SELECT * FROM vicidial_log WHERE call_date >= NOW() - INTERVAL 1 DAY;

-- Every agent action / disposition
SELECT * FROM vicidial_agent_log WHERE event_date >= NOW() - INTERVAL 1 DAY;

-- Closer (in-group) calls
SELECT * FROM vicidial_closer_log WHERE call_date >= NOW() - INTERVAL 1 DAY;

-- DNC entries
SELECT phone_number, campaign_id, call_date FROM vicidial_dnc;

-- Agent live status snapshot
SELECT user, status, lead_id, last_call_time FROM vicidial_live_agents;

Connect a BI tool

VICIdial's MariaDB is a normal SQL database. Point any BI tool (Tableau, Looker, Metabase, Superset, Power BI) at it:

  • Host: your VICIdial server's public IP
  • Port: 3306
  • DB: asterisk
  • User/pass: a read-only user you create

Create a read-only user:

CREATE USER 'reporting'@'%' IDENTIFIED BY 'strong-password';
GRANT SELECT ON asterisk.* TO 'reporting'@'%';
FLUSH PRIVILEGES;

Lock it down further by IP allowlist in MariaDB.

Daily exports

Cron-driven CSV export to S3:

# /etc/cron.d/daily-export
0 2 * * * root mysql asterisk -e "
  SELECT * FROM vicidial_log
  WHERE call_date >= CURDATE() - INTERVAL 1 DAY
    AND call_date < CURDATE()
  INTO OUTFILE '/tmp/vicidial-$(date +\\%F).csv'
  FIELDS TERMINATED BY ',' ENCLOSED BY '\"'
" && aws s3 cp /tmp/vicidial-$(date +%F).csv s3://your-bucket/vicidial/

Related