When a call ends, Tried reads the transcript with an LLM and writes structured results to the call's call_analysis. Four preset fields are always produced: a summary, the caller's sentiment, whether the call succeeded, and whether it reached voicemail. On top of those you define your own fields (text, selector, boolean, number) to pull out the facts your business needs, such as whether an appointment was booked or why the person called.
Use post-call analysis to:
- Read a one-line summary instead of a full transcript in Call history.
- Filter and chart calls by outcome in Analytics.
- Send extracted data to your systems through the
call_analyzedwebhook. - Fill contact fields from what was said. See Contacts.
- Choose which calls AI QA scores. See AI QA overview.
Where to configure it#
Open an agent and expand Post-Call Extraction in the settings column. The section shows:
- The three presets, Call Summary, Call Successful and User Sentiment, each marked Preset.
- Call Summary prompt, Call Successful prompt and User Sentiment prompt, each showing Default or Custom. Click one to write your own instructions.
- Your custom fields with their type, an If badge when the field has a condition, and edit and delete buttons.
- Add to create a field, Backfill to re-run analysis on past calls, and the analysis model selector.
Analysis settings are part of the agent, so they are versioned with it. Each call uses the settings of the agent version that handled it.
What analysis produces#
{
"call_summary": "The caller booked a check-up for Tuesday at 4pm and asked about parking.",
"in_voicemail": false,
"user_sentiment": "Positive",
"call_successful": true,
"custom_analysis_data": {
"appointment_booked": true,
"call_reason": "New booking",
"caller_name": "Sam Taylor"
}
}| Field | Type | How it is decided |
|---|---|---|
call_summary |
string | A concise 1 to 3 sentence summary. Change the style with Call Summary prompt. |
user_sentiment |
Positive, Negative, Neutral, Unknown |
The caller's sentiment. Change the rules with User Sentiment prompt. |
call_successful |
boolean | Whether the agent achieved the goal of the call. Define success with Call Successful prompt. |
in_voicemail |
boolean | Whether the call reached voicemail or an answering machine. Not shown in the editor; always produced. |
custom_analysis_data |
object | One key per custom field. Fields that could not be determined are left out. |
Preset prompts#
Each preset prompt is optional, up to 2000 characters, and is added to the analysis instructions:
| Dashboard label | Agent field | Example |
|---|---|---|
| Call Summary prompt | analysis_summary_prompt |
"Summarise in 2 sentences, mention the appointment time if one was booked." |
| Call Successful prompt | analysis_successful_prompt |
"Successful only when an appointment was booked or moved." |
| User Sentiment prompt | analysis_user_sentiment_prompt |
"Negative if the caller asked for a manager or complained twice." |
The Call Successful prompt is phrased as the condition for success: the model is told that call_successful is true only when it holds. Leave a prompt empty to use the default behaviour.
Custom fields#
Custom fields live in the agent's post_call_analysis_data array. Each has a type, a name, a description, optional examples or choices, a Required flag and an optional Only extract when condition. See Define extraction fields.
The analysis model#
post_call_analysis_model picks the LLM that runs analysis. The default is gpt-5.6-terra. Any model in the agent model list can be used: OpenAI, Anthropic Claude or Google Gemini models. The selector sits next to Backfill in the section.
Needs keys Analysis calls the provider of the chosen model (OpenAI, Anthropic or Google). Without that provider's key, a deterministic mock fills the fields so the rest of the platform keeps working: the summary is the first 200 characters of the transcript, sentiment is Neutral, call_successful is true when there is a transcript and the disconnection reason is not a failure (and, if you set a Call Successful prompt, at least half of its significant words appear in the transcript), and custom fields get placeholders: the first choice for a selector, false, 0, or the first 50 characters of the transcript for text.
When analysis runs#
- The call ends and
call_endedis sent to your webhook. - Analysis runs on the full transcript together with the disconnection reason.
call_analysisis saved.user_sentimentandcall_successfulare also stored for filtering and charts. For a batch call, the batch's successful count is updated.call_analyzedis sent, always aftercall_ended.- In the background: AI QA scores the call for every cohort it matches, the post-call workflow runs, and contact field mappings, contact memory and CRM sync run.
Analysis runs whenever a call ends through a runtime or telephony event, including calls that never connected (busy, no answer, a web caller who never joined). Calls that are stored as failed at creation without an end event (dial_failed with call_status: error, and batch attempts refused with no_valid_payment) are not analysed.
Calls with no conversation#
If the transcript is empty, no LLM request is made. The summary reads "The call ended before any conversation took place.", sentiment is Unknown, and call_successful is false.
When the LLM fails#
A failed request is retried once. If it fails again, the result says so instead of guessing: the summary reads "Post-call analysis could not be generated because the AI request failed.", sentiment is Unknown, call_successful is false and custom_analysis_data is empty. in_voicemail still follows the disconnection reason. You can re-run analysis later. See Re-run and backfill analysis.
Chats#
Chat agents use the same engine when a chat ends, with post_chat_analysis_data and post_chat_analysis_model. The result is chat_analysis with chat_summary, chat_successful, user_sentiment and custom_analysis_data. See Chat history.