> ## 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.

# Satisfaction

> How a caller is asked to rate a call, and why a spoken score and a pressed digit are counted separately.

**Satisfaction** is a 1-to-5 rating per call, reported by agent and by team.
It is an **app**: the organisation switches it on, and then a virtual agent
or an IVR flow can ask for a score.

## Asking for one

There is one way to collect a score and two ways to reach it, which is the
point of the app model: the same action, whether a model decided to ask or a
flow step did.

<Steps>
  <Step title="A virtual agent asks">
    Give the profile the **collect\_csat** action. The agent asks before it
    ends the call or hands over to a person. If the caller has already said
    something clear — *"yeah, that was great"* — the agent passes that as the
    score rather than asking again.
  </Step>

  <Step title="A flow asks">
    Use an **app action** node. The caller is asked to press a digit.
  </Step>
</Steps>

When the agent has nothing usable in words, it falls back to the keypad: one
digit, one attempt, six seconds. A caller who presses nothing, or something
outside 1 to 5, has **declined**, which is a recorded outcome and not an
error.

The keypad wording is a stock prompt you can replace with your own recording.

<Note>
  **One score per call, and the first answer is the one kept.** A caller
  re-asked until they change their mind is not a better measurement, it is a
  worse one. An agent that has already collected a score will not survey the
  same caller again at the end of the call.
</Note>

## Spoken and keypad are never pooled silently

A score the model read out of *"yeah, pretty good"* is its interpretation. A
pressed digit is the caller's own statement. Averaging the two without saying
so produces a number that looks like a measurement and is partly an opinion.

So the method travels with every score, and **the split sits beside the
total everywhere** — on the screen, in the summary and in the API. Beside
each average is its count, and a distribution across 1 to 5, because two
averages of 3.0 can mean *everyone is lukewarm* or *half love it and half
hate it*.

## Attribution

A score is stamped with the agent and the team **as they were when it was
given**, not resolved through today's roster later. An agent moves teams and
a team's members change; recalculating afterwards would silently rewrite last
quarter's numbers for two teams at once.

## Reading the numbers

Reading needs `csat:read` — a supervisor, an admin, not an agent. The default
window is the last 30 days, which is the window somebody means by "how are we
doing".

Nothing can submit a score through the API. A score anyone can post is not a
measurement.

Individual ratings also appear on the call they came from and on that
customer's timeline, with the caller's own comment where they gave one.
