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

# Post-Call Analysis

> Configure the structured analysis the AI produces after every call: the outcome classification, fifteen standard fields, and up to 20 custom questions answered from the transcript.

## What is Post-Call Analysis?

After every call finishes, Voxworks reads the full transcript and produces a structured analysis: summaries at three lengths, a single **outcome** classification, compliance and behaviour flags, a sentiment score — and, if you configure them, answers to your own custom questions. The results are stored with the call and drive the **Analysis** tab on every call's detail view, the hover summary in the Call Log, and can be referenced from your [automations](/automations/conditions).

The analysis framework is configured per script in the **Post-Call Analysis** tab:

**Call Scripts → *(your script)* → Post-Call Analysis**

The tab has three sections — **Call Outcomes**, **Standard Analysis Fields**, and **Custom Analysis Fields**. Changes take effect when you save the script and apply to calls analysed from then on; each call keeps the results of the framework revision that analysed it (shown in the Analysis tab's footer).

You don't have to configure anything: every call is analysed with the standard fields and the default outcomes even when this tab is untouched.

***

## Call Outcomes

Every analysed call is classified with exactly one outcome. The section shows the default outcome set for your script's call type — as the description puts it, *"Every analyzed call is classified with a single outcome. These are the default outcomes for outbound calls; customize them to match this script's use case."*

### Default outcomes — outbound scripts

| Outcome                   | Chosen when                                                                          |
| ------------------------- | ------------------------------------------------------------------------------------ |
| Appointment booked        | A meeting, appointment or calendar booking was agreed with the contact               |
| Busy — callback requested | The contact asked to be called back at another time                                  |
| Busy — will call back     | The contact said they would call back themselves                                     |
| Not interested            | The contact declined the offer or purpose of the call                                |
| Not interested — opt-out  | The contact asked to be removed from the call list or never contacted again          |
| Wrong number              | The person reached was not the intended contact                                      |
| Completed                 | The call reached a natural end without any of the other outcomes                     |
| No answer                 | The call was not answered *(stamped from telephony status)*                          |
| Voicemail                 | The call reached voicemail or an answering machine *(stamped from telephony status)* |
| Did not connect           | The call failed to connect *(stamped from telephony status)*                         |

### Default outcomes — inbound scripts

| Outcome              | Chosen when                                                           |
| -------------------- | --------------------------------------------------------------------- |
| Appointment booked   | A meeting, appointment or calendar booking was agreed with the caller |
| Inquiry answered     | The caller's question or request was answered on the call             |
| Message taken        | A message was taken for a human to follow up                          |
| Transferred to human | The call was transferred or handed to a human                         |
| Callback requested   | The caller asked to be called back                                    |
| Caller hung up early | The caller hung up before their request was resolved                  |
| Wrong number         | The caller had reached the wrong number or business                   |
| Spam / robocall      | The call was spam, a robocall or an unwanted solicitation             |
| Unresolved           | The caller's request could not be completed                           |

### Custom outcomes

Switch on **Use custom outcomes for this script** to replace the default set with your own rubric. The editor is seeded with the defaults so you can rename, remove and add from there. Each outcome is a row with two columns:

| Column | Description                                                                                                                                                                                                                                                                               |
| ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Code   | A stable identifier in lowercase letters, numbers and underscores (typing formats it automatically, e.g. `quote_requested`). Codes must be unique.                                                                                                                                        |
| Label  | The display name shown wherever the outcome appears — in the Analysis tab, the Call Log hover card, and this editor. For custom outcomes the label is also the instruction the AI uses to decide when to choose it, so write it as a description of the situation, not just a short name. |

**Add Option** appends a row; a rubric holds between 2 and 15 outcomes. Switching the toggle off returns the script to the default set for its call type.

### Telephony stamping

For outbound scripts, three outcomes are never decided by the AI. When the phone network already tells us what happened, the outcome is stamped directly from the call's status and overrides any classification:

* **No answer** (`no_answer`) — the call rang out
* **Voicemail** (`voicemail`) — the call reached voicemail
* **Did not connect** (`did_not_connect`) — the call dropped out or failed

These three appear as greyed-out rows marked *auto* at the bottom of a custom outbound rubric — as the editor notes, *"The greyed-out outcomes are set automatically from telephony status and cannot be removed."* They are always appended to a custom outbound rubric, so a call that never connected is classified correctly even if you forget non-connections when designing your outcomes. See [Call statuses](/calls/statuses) for the statuses behind them.

***

## Standard Analysis Fields

The **Standard Analysis Fields** section lists the fifteen fields produced for every analysed call. They are read-only — you cannot remove or edit them — and their keys are reserved, so a custom field can never reuse one.

| Field                  | Type           | What it captures                                                                        |
| ---------------------- | -------------- | --------------------------------------------------------------------------------------- |
| `summary_long`         | Text           | A four-paragraph CRM-style call summary. This becomes the call's **Call Summary**.      |
| `summary_short`        | Text           | A 2–3 sentence summary of the essentials.                                               |
| `summary_crux`         | Text           | The essence of the call in 8 words or less — the headline of the Analysis tab.          |
| `outcome`              | Classification | The single outcome from the rubric above.                                               |
| `next_steps`           | Text           | The stated or logical next steps.                                                       |
| `opt_out`              | Yes / No       | The contact asked to be removed from the call list. See [Opt-outs](/contacts/opt-outs). |
| `recording_disclosed`  | Yes / No       | The AI informed the contact the call was recorded.                                      |
| `recording_approved`   | Classification | `agreed` / `declined` / `not_disclosed`.                                                |
| `monitoring_disclosed` | Yes / No       | The AI informed the contact the call was monitored.                                     |
| `monitoring_approved`  | Classification | `agreed` / `declined` / `not_disclosed`.                                                |
| `calendar_booking`     | Yes / No       | An appointment was successfully agreed.                                                 |
| `human_requested`      | Yes / No       | The contact asked to speak to a person.                                                 |
| `ai_question`          | Yes / No       | The contact asked whether they were speaking to an AI.                                  |
| `ai_recognised`        | Yes / No       | The contact appeared to realise they were speaking to an AI.                            |
| `sentiment_score`      | Number         | The contact's sentiment from −1.00 (negative) to +1.00 (positive), 0 being neutral.     |

A sentiment **label** is derived from the score automatically: **positive** at +0.20 and above, **negative** at −0.20 and below, **neutral** in between. The recording and monitoring fields give you a per-call audit trail for consent — see [Recording consent](/security/recording-consent) for the disclosure side.

***

## Custom Analysis Fields

Custom fields extend the standard analysis with your own questions. As the section explains: *"After each call, the AI answers them from the transcript and stores the results with the call. The question text is the instruction the AI follows — phrase it as a question about the call."*

Click **Add Field** to append a field (it starts as a Yes / No field named `custom_field_1`), then expand the row to configure it. A script holds up to **20 custom fields**.

| Setting                | Description                                                                                                                                                                                                                                  | Default                |
| ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------- |
| Field Key              | The stable identifier the result is stored under. Lowercase letters, numbers and underscores, starting with a letter, 2–40 characters. Keys must be unique, and the standard field keys are reserved — the editor flags a clash immediately. | `custom_field_1`       |
| Display Label          | The human-readable name shown in the Analysis tab and this list (up to 80 characters).                                                                                                                                                       | `Custom field 1`       |
| Answer Type            | **Yes / No**, **Classification**, **Text**, or **Number**.                                                                                                                                                                                   | Yes / No               |
| Question for the AI    | The instruction the AI follows when answering from the transcript, up to 500 characters — e.g. *"How qualified is this lead based on budget and timeline discussed?"*. Left empty, the Display Label is used as the question instead.        | Empty                  |
| Classification Options | Classification fields only: the allowed answers as **Code** / **Label** rows, 2–15 options with unique codes — exactly like the custom outcomes editor.                                                                                      | `option_1`, `option_2` |

### Writing questions that work

* **Ask about the call, not the world** — the AI only sees the transcript. *"Did the caller mention a competitor by name?"* works; *"Is this company a good prospect?"* asks for knowledge it doesn't have.
* **Match the answer type to the question** — a Yes / No field should be answerable with yes or no; a Number field should ask for a figure (*"How many properties does the caller own?"*); a Classification field should have options that cover every call, including a none-of-the-above code such as `not_discussed`.
* **One fact per field** — two questions in one field get one muddled answer. Split them.
* **Keep keys stable** — the key is how automations and exports refer to the answer, so rename the Display Label freely but treat the Field Key as permanent once automations depend on it.

***

## Where results appear

**The Analysis tab on every call.** Open a call from the [Call Log](/calls/history) and select the **Analysis** tab. The crux renders as the heading with the short summary and next steps beneath it, followed by a **Classification** grid of the standard fields — Yes / No answers as badges, the outcome under its display label, sentiment coloured by its score and label. Your custom fields follow in a **Custom Fields** section under their display labels. A footer records when the call was analysed, which outcome set applied, and the framework revision. Before a call has been analysed the tab reads *"No analysis available for this call."*; if analysis failed it says so and notes the call can be reprocessed.

**The Call Summary.** The four-paragraph `summary_long` becomes the call's **Call Summary**, shown on the call detail view.

**The Call Log hover card.** Hovering a call shows its short summary together with the outcome label and sentiment.

**Automations.** A [Call Completed](/automations/triggers) trigger can start a pipeline once a call finishes. See [Automation conditions](/automations/conditions) and [field mappings](/automations/field-mapping) for how a pipeline references values from a call.

***

## Next Steps

* [Call details](/calls/call-details) — where the Analysis tab, Call Summary and transcript live on each call
* [Automation conditions](/automations/conditions) — branch pipelines on analysis results after each call
* [Data Collection](/scripts/data-collection) — extract structured field values from the transcript alongside the analysis
* [Call Objectives](/scripts/call-objectives) — define per-call goals that are evaluated after each call
