> ## Documentation Index
> Fetch the complete documentation index at: https://docs.firetone.com.au/llms.txt
> Use this file to discover all available pages before exploring further.

# Call history

> Every call the organisation has made or taken, and the page that answers how one of them went and why it went there.

**Call history** is the record of calls. The list answers *which call*; a
call's own page answers *what happened on it*.

## The list

Five columns as most people see them: **when**, **from → to**, the
**direction**, how long the call was **billed** for, and what it was
**charged**.

An operator has a **Columns** button and four more to turn on — the codec,
whether the call had to be transcoded, the hangup cause and the AI tokens.
Those are the switch's own diagnostics rather than secrets, and they are off
until somebody asks for them.

A sixth column, **margin**, exists only for an operator, and it is absent
rather than blank for everybody else: see [reading a withheld
figure](#withheld-is-not-zero).

### Finding a call

| Filter             |                                                                                                                                      |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------ |
| **Search**         | matches the caller's number or the number dialled                                                                                    |
| **From** / **To**  | dates. "To 14 Sep" includes the 14th                                                                                                 |
| **Direction**      | inbound, outbound, internal                                                                                                          |
| **Transport**      | SIP or WhatsApp                                                                                                                      |
| **Extension**      | every call on one desk, which is the first question when a handset is suspected                                                      |
| **Number dialled** | typed, and matched as **part** of a number: everything ending 7231, everything on a range, a number half-remembered from a complaint |

Number dialled also catches an outbound call *to* that number. Pair it with
**Direction → Inbound** for arrivals only.

<Note>
  There is deliberately no filter for billing mode. The list would look
  filtered and would not be. A control that silently does nothing is worse
  than one that is not there.
</Note>

The API accepts several narrower questions the screen does not draw — by
contact, campaign, team, agent, trunk, hangup cause, minimum duration,
answered or not, and by how the audio sounded.

### The four figures above the table

Calls, talk time, how many were answered, and what they came to. They follow
the same organisation and the same dates as the table below them.

An operator sees the share of calls that had to be **transcoded** in place of
the answered share, and **margin** in place of charges.

## A call's own page

Four figures across the top answer *how did this call go* without reading
anything: started, talk time, billed, charged. Everything above them is a
measurement; everything below is a record.

<Note>
  **Talk time and billed are not the same number.** Talk time is measured;
  billed is charged. A call answered for six seconds can bill zero under a
  plan with a minimum.
</Note>

### The call

The direction and transport, the codec each side used, when it ended and what
the far end said. Three rows appear only when they have something to say, and
they are the ones worth knowing about:

* **They offered** — what the other side asked for, when it differs from what
  was agreed. On a call that agreed nothing this is the whole story: a
  carrier offering one set of codecs to a trunk that allows another is refused
  before it can ring, and every other field says *incompatible* without
  saying why.
* **Audio** — a verdict in words: *clean*, *lost on the network*, *arrived
  unevenly*, *nothing arrived*, *sent in a burst*. It says **network**
  rather than "bad audio" on purpose. The reflex on hearing a call was choppy
  is to go looking in your own configuration, and these are statistics of
  what arrived, so the damage was done before it got here.
* **Far end** — the carrier's own answer, which is often the real one.

The customer is a link to their whole history, or the words *not resolved to
a contact*. A number the platform has never seen resolves to nobody, and
saying so beats a blank.

### How the call travelled

The **journey** is the answer to *why did this call go there*. Each row is a
step the runtime actually took, in order, with the branch it left by and how
long it took since the step before.

It names the flow **and the revision the caller actually met**, so a journey
read months later is not the graph as it exists now.

What it can tell you, among other things: which menu outlet was never wired,
that the call was blocked and by which rule, that a process was closed, that
the node refused it for load, whether recording armed and whether the file
was written, what the audio layer concluded and which firewall to look at,
which AI profile answered, and **whether a supervisor listened in, in which
mode, and who they were**.

<Note>
  A call with no journey is ordinary, not an error. Journeys began at a point
  in time, and a call that went straight from one extension to another walked
  no flow.
</Note>

Reading a journey sits with reading call history rather than with a higher
permission, because *why did this call go there* is a question the person who
took the call asks.

### What the call produced

The recording, any ticket, a satisfaction score, a voicemail, and anything
the customer's record learned.

**A section you cannot read is left out rather than shown empty.** An empty
list would say this call raised no tickets, which is a different and possibly
untrue statement.

### Listening to the recording

Needs `recordings:listen`, which a supervisor holds and an agent does not. A
call record is metadata; a recording is the customer's conversation.

Nothing is fetched with the page. Pressing **Fetch recording** is a
deliberate step, because it is an access to somebody's conversation. Once
fetched there is a player and a **download**, because a recording gets
attached to a complaint or sent to a supervisor and neither is possible from
a play button. The file is named after the call rather than the caller: a
filename survives being forwarded, and a customer's number should not travel
with it.

Three answers that are not the same:

| What you see                              | What it means                                                                                                         |
| ----------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| no Recording row                          | this call was not recorded                                                                                            |
| *taken, but the file is not on this node* | recording ran and the file is not here. Somebody has to be told, rather than left to click a player that does nothing |
| *you do not have permission to listen*    | it is there and it is not yours to hear                                                                               |

## Withheld is not zero

Where a reader may not see a figure, FireTone leaves it out and the panel
draws it as withheld. It never substitutes zero.

This applies in more places than money:

* **Cost and margin** are the operator's commercial position. A zero would
  misreport the business.
* **AI tokens** are absent when no AI touched the call. A zero would say an
  AI answered and spent nothing.
* **The audio figures** are absent when there was too little audio to judge,
  because the switch scores a leg that received *nothing* as perfect. Showing
  them would draw a silent call as a flawless one.

A margin shown as **?** is a third thing again: the carrier charged in a
currency with no exchange rate, so the number would be one currency
subtracted from another. Add the rate under Billing.

## Taking the records away

`GET /cdrs/export` streams a period as CSV or one JSON object per line, up to
31 days at a time, oldest first. It carries the call's identity, its times,
its outcome and what it was charged; it does not carry the recording, the
journey, the audio figures or anything about cost. There is no export button
in the panel — this is for a nightly sync into a warehouse or a CRM.
