Skip to content
TriedDocs
Post-call analysis and QA

Define extraction fields

Add custom post-call fields of type text, selector, boolean or number, with descriptions, examples, choices, required flags and conditions.

Custom extraction fields tell post-call analysis exactly what to pull out of each call. Every field becomes a key in call_analysis.custom_analysis_data, typed the way you defined it, so you can filter, chart and act on it without parsing transcripts.

Add a field in the dashboard#

Open Post-Call Extraction#

Open the agent and expand Post-Call Extraction in the settings column.

Pick a type#

Click Add and choose Text, Selector, Boolean or Number.

Fill in the field#

Enter the Name and Description, then the type-specific options and an optional Only extract when condition. Tick Required if the model must always return a value.

Save and publish#

Click Save. The field is saved to the agent. Calls handled by an agent version that includes the field get a value for it. To fill it on past calls, backfill them.

The Post-Call Extraction section with a Text and a Selector field

Field types#

Dashboard label type Value in custom_analysis_data Extra options
Text string string Format examples
Selector enum one of your choices Choices (at least one)
Boolean boolean true or false none
Number number number none

The model is constrained by a JSON schema built from your fields, so a selector can only return one of its choices, a boolean is always a boolean and a number is always a number.

Field settings#

Dashboard label API field Type Default Notes
Name name string required The key in custom_analysis_data. The editor accepts letters, numbers and underscores, up to 64 characters, and turns spaces into underscores.
Description description string "" Tells the model what to extract. This is the most important setting.
Choices choices string array none Selector only. Type a choice and press Enter.
Format examples examples string array none Shown for Text fields. Added to the description as "Examples: ...".
Only extract when conditional_prompt string none A condition in plain language. When it does not hold, the field is left out.
Required required boolean false Required fields must get a value.

The names call_summary, call_successful, user_sentiment and in_voicemail are reserved for the presets. A custom field with one of those names is ignored.

Required and optional fields#

An optional field is allowed to be null. When the model returns null, the key is removed from custom_analysis_data, so absent keys mean "could not be determined". A required field without a condition must be filled with a value of its type.

Conditions#

Only extract when limits a field to calls where something happened, for example a refund reason only when the caller asks for a refund. The condition is added to the field's instructions as "Only fill this when: ... Otherwise return null." A field with a condition is always nullable, even when Required is ticked. The field shows an If badge in the list.

In mock mode (no key for the analysis model's provider), a condition counts as met when at least half of its significant words (4 letters or more, minus common words) appear in the transcript.

Writing good descriptions#

The model only sees the field's name, type, description, examples and condition, plus the transcript and the disconnection reason. Write descriptions that:

  • Say what to extract and from whose words: "The date and time the caller agreed to, as spoken."
  • Say what to do in edge cases: "If the caller booked more than one appointment, use the first."
  • Match the type: a Boolean description reads as a yes or no question; a Number description gives the unit ("Number of people in the booking").

Examples#

[
  {
    "type": "boolean",
    "name": "appointment_booked",
    "description": "True if the agent booked or moved an appointment during the call.",
    "required": true
  },
  {
    "type": "enum",
    "name": "call_reason",
    "description": "The main reason the caller called.",
    "choices": ["New booking", "Reschedule", "Cancel", "Question", "Other"]
  },
  {
    "type": "string",
    "name": "appointment_time",
    "description": "The appointment date and time agreed on the call.",
    "examples": ["Tue 21 Oct, 4pm"]
  },
  {
    "type": "number",
    "name": "party_size",
    "description": "How many people the booking is for."
  },
  {
    "type": "string",
    "name": "refund_reason",
    "description": "Why the caller wants a refund, in one sentence.",
    "conditional_prompt": "The caller asks for a refund"
  }
]

Set fields through the API with PATCH /update-agent/:agent_id:

curl -X PATCH https://api.tried.com.au/update-agent/agent_3f9c0a1b2c3d4e5f6a7b8c9d \
  -H "Authorization: Bearer $TRIED_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "post_call_analysis_model": "gpt-5.6-terra",
    "post_call_analysis_data": [
      { "type": "boolean", "name": "appointment_booked", "description": "True if an appointment was booked.", "required": true }
    ],
    "analysis_successful_prompt": "Successful only when an appointment was booked or moved."
  }'

post_call_analysis_data replaces the whole list, so send every field you want to keep.

Agent fields reference#

Field Type Default
post_call_analysis_data array of fields []
post_call_analysis_model model name gpt-5.6-terra
analysis_summary_prompt string, up to 2000 characters none
analysis_successful_prompt string, up to 2000 characters none
analysis_user_sentiment_prompt string, up to 2000 characters none

The same field shape (AnalysisField) is also used by extract variable tools and nodes, and by info collection steps, during the call. Post-call extraction runs after the call on the whole transcript.