User Tools

Site Tools


api:pbx:quality:calls

API : PBX : Call audio quality : Calls

Introduction

Returns the calls with the worst audio in a window, worst first. This is the proactive-outreach worklist: it answers “which calls went badly, and whose phone was it”.

Scope, verdicts, finding codes and thresholds are described on Call audio quality.

Request

URL https://api.telecomx.dk/pbx/quality/calls
Method GET
Access level ADMIN, or RESELLER_ADMIN with the TELE employee feature. TX staff only - see Call audio quality.
Query from Date Start of the window. Optional, defaults to 24 hours ago.
to Date End of the window. Optional, defaults to now.
customer Id Customer to report on. Optional - omit it to span every customer.
extension Id Only calls involving this extension. Optional.
employee Id Only calls involving this employees extensions. Optional.
pbx String Only calls handled by this PBX server, e.g. pbx12. Optional.
minVerdict String Lowest verdict to include: OK, DEGRADED, BAD or NO_AUDIO. Optional, default DEGRADED.
minDurationSeconds Number Ignore calls shorter than this. Optional, default 5.
offset Number Index of the first call to return. Optional, default 0.
limit Number Maximum number of calls to return (1-200). Optional, default 50.

Pass minVerdict=OK to list every call that could be measured, not only the bad ones. A period with no problems then reads as “here are your calls, all fine” instead of as an empty page. NOT_MEASURED calls are never listed - they carry no information.

minDurationSeconds is a call-level floor and is deliberately low. Legs are separately held to a 10 second measurable floor by the analyser, which is what actually keeps the rates honest; a call-level floor high enough to hide a low-volume customers only call is worse than a little noise.

The window may not exceed 31 days for a single customer, or 7 days when spanning customers. The cross-customer form unwinds every leg of every answered call in the window, so it is a report rather than a page render.

Query examples

https://api.telecomx.dk/pbx/quality/calls
https://api.telecomx.dk/pbx/quality/calls?customer=1234567890ABCDEF12345678&from=2026-08-17T00:00:00.000Z&to=2026-08-24T00:00:00.000Z
https://api.telecomx.dk/pbx/quality/calls?minVerdict=NO_AUDIO&pbx=pbx12&limit=100

Response

JSON object
offset Number Index of the first returned call.
limit Number Maximum number of returned calls.
total Number Total number of calls matching the filters.
from Date Start of the window that was actually used.
to Date End of the window that was actually used.
calls Array Matching calls, worst first (see below).
calls[] object
_id Id Id of the CDR.
customer Id Id of the customer the call belongs to.
pbx String Hostname of the PBX server that handled the call.
started Date When the call started.
ended Date When the call ended.
durationSeconds Number Length of the call in whole seconds.
caller Object Caller details, as in CDR. Subject to the same privacy rules.
callee Object Callee details, as in CDR.
quality Object The full analysis of the call - identical to Call quality.

Caller and callee details go through exactly the same privacy rules as CDR: suppressed numbers stay suppressed, sensitive numbers are hidden below ADMIN, and caller names that look like a CPR number are dropped.

Example

{
  "offset": 0,
  "limit": 50,
  "total": 12,
  "from": "2026-08-23T00:00:00.000Z",
  "to": "2026-08-24T00:00:00.000Z",
  "calls": [
    {
      "_id": "5d035c832d357b369b6f7aff",
      "customer": "52f4fd7734697b28ccaf77ec",
      "pbx": "pbx12.telecomx.dk",
      "started": "2026-08-23T08:36:08.791Z",
      "ended": "2026-08-23T08:39:11.523Z",
      "durationSeconds": 183,
      "caller": { "number": "+4570112233", "name": "Reception", "type": "SIPPHONE" },
      "callee": { "number": "1234", "name": "Sales" },
      "quality": {
        "cdrId": "5d035c832d357b369b6f7aff",
        "verdict": "DEGRADED",
        "measured": true,
        "severity": 2,
        "worst": {
          "code": "INBOUND_DELIVERY_LOW",
          "role": "caller",
          "party": { "kind": "SIP_PHONE", "model": "Mitel-6867i", "raw": "SIPPHONE/Mitel-6867i" },
          "direction": "INBOUND",
          "percentMissing": 16
        },
        "legs": [ ... ],
        "findings": [ ... ]
      }
    }
  ]
}

Errors

Error code Message Description
401 unauthorized Missing or invalid token
403 access_denied Not TX staff: below RESELLER_ADMIN, or RESELLER_ADMIN without the TELE employee feature
404 extension Extension not found
422 from Invalid date range, or window wider than the limit for this scope
500 internal_error <Unspecified>

Notes

The aggregation is a coarse filter: it unwinds every leg, grades it, and returns the ids of the calls that qualify. That page of CDRs is then read back and analysed again in Node, so the verdict shown on a worklist row and the verdict on the call it links to always come from one implementation.

api/pbx/quality/calls.txt · Last modified: by Per Møller

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki