3CX ships with reports, and for queue-centric call centers they cover a lot of ground. Ask a basic operational question, though (“how did the phones do yesterday, and which calls did we miss?”), and you end up clicking through the Management Console at 8 a.m., exporting something multi-page, and forwarding it to a manager who will not open it.
The fix is a short email that arrives before the workday starts, each day, on a timer rather than on someone’s memory.
3CX deserves credit here: the built-in scheduled reports can email call logs and queue statistics on a timer, and if you run formal queues with logged-in agents they are worth setting up. They fall short in the general-office case (ring groups instead of queues, a receptionist instead of agents) and on editing: the templates hand you all calls or per-queue detail, while a manager at 7 a.m. needs one page that says how yesterday went and which callers to chase. You are building that page.
What belongs in a daily digest
The discipline is keeping it to one screen of email. The moment it needs scrolling or an attachment, open rates fall off a cliff. Yesterday’s digest needs five things:
- Totals: inbound, outbound, internal. One line.
- Answer rate: answered external inbound ÷ offered external inbound, with the missed count beside it. An office that took 87 external calls and missed 8 reads “91% answered, 8 missed.” This is the headline number.
- The missed-call list: caller number, time, and which extension or ring group it rang. This is the one section that triggers action this morning: someone calls these numbers back.
- Busiest hour: “10:00–11:00, 47 calls.” Over weeks, this drives staffing and lunch scheduling.
- A per-extension table: calls handled, talk time, missed. Ten rows, sorted by volume.
Resist adding more. A digest built to answer any conceivable question goes unread; a digest that flags yesterday’s eight missed callers produces eight callbacks by 8:15.
Getting the data out of 3CX
All five sections come from the CDR stream, and 3CX will hand you that stream as calls complete. In the Management Console, go to Settings > CDR and enable the CDR service. You get three delivery options:
- Output to file: 3CX appends records to CSV files on the server. Simple, but something must collect and rotate the files.
- Passive socket (server): 3CX listens on a TCP port; your application connects and receives records.
- Active socket (client): 3CX connects out to an IP and port you specify and pushes each record as the call ends. This is the option to use with a collector: no polling, no file handling, records arrive within seconds of hangup.
While you are in that screen, review the field list: 3CX lets you choose which CDR fields it emits and in what order. Include at least call start time, duration, caller ID, dialed number, the final extension, and the termination reason, and then don’t change the field list without updating whatever parses it; reordering fields is the classic way to corrupt a 3CX CDR feed without a single error message.
If you’re testing by hand, point the active socket at a machine running a TCP listener and make a call. You’ll see one comma-separated record per call leg, so a call that reception transfers to sales produces two lines. Count calls, with legs grouped, before you trust any totals.
Scheduling and delivery
Aggregation is the easy part once records land somewhere queryable: roll up yesterday 00:00–23:59, compute the five sections, render plain HTML, and send on a schedule. The send time matters more than the layout. The report should beat the recipient to their desk; 06:30 or 07:00 works for most teams. Monday’s edition should cover the whole weekend, because weekend missed calls sit unseen the longest.
Two small details decide whether the report survives long-term. First, send it on quiet days too: “Saturday: 3 calls, all answered” takes two seconds to read, and a report that skips days trains readers to stop expecting it. Second, put the headline in the subject line: “Calls yesterday: 91% answered, 8 missed” reads from the inbox preview even on days the recipient skips the body.
Who gets it
Send the same digest to at most two audiences, and accept that they read different lines:
- The office or sales manager reads the answer rate and the missed-call list. This is their report. They own the callbacks.
- IT cares about the anomalies: zero calls before 9:02 (trunk down?), outbound calls at 2 a.m. (toll fraud), a SIP trunk that stopped passing caller ID. If the digest includes a one-line “unusual activity” footer, IT can skim it in ten seconds.
Don’t CC the whole company. A report with one accountable reader changes behavior; a report with twelve readers is wallpaper.
The shortcut
You can build all of this with the 3CX CDR socket, a small parser, a database, and a cron job. It makes a fair weekend project, and the sections above are the spec. Or hand it to PBXDom: the collector receives the 3CX CDR stream, the cloud side computes answer rate, missed calls, peak hour, and per-extension stats as records arrive, and scheduled email reports go out each morning to whoever you choose, with live dashboards covering the rest of the day. Setup takes about 15 minutes; the onboarding guide walks through the 3CX CDR settings screen by screen.
