Post call analysis
Post call analysis collects insights, summaries, and structured data after conversations. For example, for agents that performs a job interview, you may collect answers to all questions asked during the interview. Or, you can evaluate user sentiment during the call, and perform call summarization.
Collected information may be consumed via one of the following ways:
- It can be sent to the WebHook URL specified by customer.
- It can be seen in the Live Hub portal:
- In the Post Call Analysis screen, switch to the Results tab.
- In the Logs screen, look for the 'post_call_analysis' log entry at the end of the conversation.
- It can be read over the REST API — per conversation, or as a filterable listing.
Modes of operation
Post call analysis can operate in one of the following modes:
Structured data extraction
Use this mode when you want AI Agent to extract specific information from the conversation.
To configure this:
- Open the Post Call Analysis configuration screen.
- Set Type to 'Extract variables'.
- Define one or more variable. For each variable, specify:
- Name – a unique name.
- Description – detailed guidance on what data should be captured for this parameter.
- Type – the expected data type (e.g., string, number, boolean).
- Optionally, configure a custom Extract prompt, or leave it empty to use default extraction prompt. If you provide a custom prompt avoid including parameter-specific extraction instructions within it; instead, define those instructions in each parameter’s Description field.
To restrict a variable to a fixed set of allowed values, add an ENUM: directive to its Description, followed by a comma-separated list of the allowed values. The directive must begin a line — the first line or any later one — and its value list ends at the first dot (.) or end of line; the rest of the text is the description used by the LLM. This is supported for variables of type String, Integer, List of strings and List of integers; for the integer-based types the values are converted to integers, and any non-numeric entry is dropped. For example:
ENUM: yes, no
Customer agreed to participate
or, equivalently:
ENUM: yes, no. Customer agreed to participate.
Call summarization
Use this mode when you need a structured or insightful summary of the conversation.
To configure this:
- Set Type to 'Summarize conversation'.
- Configure the Summarization prompt by specifying the desired structure, key insights, and any important items that should be included in the summary.
Conversation insights
Use this mode when you want to score every conversation on the same well-typed set of measures, so the results stay comparable across calls and can be aggregated. You choose what to measure – for example, the customer's sentiment, whether their request was resolved, or an estimated CSAT.
To configure this:
- Set Type to
Insights. -
Define one or more variable, exactly as for Structured data extraction above. Only Integer, Float, Boolean and String are supported, and a String must be narrowed to an enumeration with an
ENUM:directive in its Description. For example, for asentimentvariable:ENUM: negative, neutral, positive Overall customer sentiment during the call. -
Optionally, set a Display name on each variable – a human-friendly label shown in the UI.
- Optionally, configure a custom Extract prompt, or leave it empty to use the default.
Collected insight values are reported at the end of every call, and may be viewed or consumed via one of the following ways:
- In the Metrics screen.
- In the Logs screen, under the
INSIGHTSblock of the conversation summary entry. - In the
insightslist of the conversation record and of the finish webhook payload.
Conversation transcript
Use this mode when you need only a transcript of the conversation, without any summarization or data extraction.
To configure this:
- Set Type to 'Conversation log'.
Note: This mode will generate only the call transcript. The same result can also be achieved by configuring the finish webhook, as described in Post call analysis WebHook section.
Add post call analysis to the agent
After creating the post call analysis in the Post call analysis screen, you must assign it to the specific agent. To do this, use the Post call analysis tab in the Agent Configuration screen.
Defining a post call analysis in the Post Call Analysis screen alone is not enough, you must also assign it to the specific agent in the Agent Configuration screen.
You can add multiple post call analysis instances to the same agent. These instances may operate in different modes, for example, one is may perform structured data extraction while another summarizes the call. Alternatively, they may use the same mode but generate different content, for example, a detailed call summary and an executive summary.
You can also reuse the same post call analysis instances across multiple agents.
Post call analysis WebHook
The Post call analysis WebHook uses the following format:
{
"account_id": ..., # account ID
"conversation_id": ..., # conversation ID
"agent": ..., # agent name
"post_call_analysis": ..., # post call analysis name
"start_time": ..., # conversation start time
"end_time": ..., # conversation end time
"duration ": ..., # conversation duration
"conversation_data": { # conversation data as populated by Live Hub
"caller": ... # calling and called number, as the REST API's
"callee": ... # conversation record carries them
}, # (may be missing for chats)
"variables ": {}, # conversation variables
"data": ... # extracted post call analysis data
# or plain-text LLM response, if it couldn't be parsed
# or conversation history, if no params are defined
}
The data field is populated based on the selected operation mode:
- Structured data extraction mode - contains a dictionary of all extracted parameters.
- Call summarization mode - contains the generated conversation summary.
- Conversation transcript mode - contains the full conversation transcript.
The status of the WebHook transmission is included in the Post call analysis log entry recorded in the conversation history and displayed in the Logs screen:
response_status– contains HTTP status of the response to WebHook; statuses 2xx indicate successful WebHook transmission; statuses 4xx-5xx indicate error returned by the receiving endpoint; status 700 indicates transmission timeout.response_text– contains additional information that may help with troubleshooting.
Advanced configuration
You may further customize the Post call analysis behavior via the post_call_analysis advanced configuration parameter:
| Parameter | Type | Description |
|---|---|---|
post_call_analysis
|
PostCallAanalysisConfig | Configuration of post-call analysis behavior. |
PostCallAnalysisConfig
| Parameter | Type | Description |
|---|---|---|
include_logs
|
bool | Include logs in the Post call analysis transcript. |
timeout
|
int | LLM call timeout, in seconds, for the post-call analysis request. Default: 30 |
join
|
bool | Join data from all Post call analysis instances into a single webhook call. The post_call_analysis field will be removed. And the data field will contain a dictionary of all post call analysis names and their outputs. |
last_agent
|
bool | Multi-agent topologies use Post call analysis configuration of the main agent, that starts the conversation. Post call analysis configuration of the sub-agents is ignored. You may change this default behavior at by enabling the last_agent parameter. When enabled, Post call analysis configuration of the last agent – the one that ends the conversation – will be used. |
conditions
|
list[str] | You may specify logical conditions for running Post call analysis. Use variable names and comparison operators, for example:user_utterance_count > 1If multiple conditions are specified they are concatenated using AND Boolean operator. Alternatively, you may include Boolean operators in your conditions, for example: sex == "male" and age > 18 |
transcript_format
|
enum | Format of the transcript for post-call analysis input. Supported values: jsontextDefault value: json for “extract” and “summarize” modestext for “transcript” mode. |
no_user_input
|
enum | How to handle NO-USER-INPUT in the transcript. Supported values: drop (default)keep |
webhook_headers
|
dict[str, dict[str,str]] | Custom headers for webhook calls. key: post call analysis name value: dict of header names and values You may include variables and conversation data, for example, {caller}, in header values. |
webhook_content
|
dict[str,str] | Custom content for webhook calls. key: post call analysis name value: content body You may include variables, conversation data and {data} element from standard post call analysis webhook content. |
If you customize webhook headers or content, make sure to properly quote the provided values.
For example:
{
"post_call_analysis": {
"webhook_headers": {
"my-pca": {
"api-key": "{apiKey}"
}
},
"webhook_content": {
"my-pca": "{\"caller\": \"{caller}\", \"transcript\": {data}}"
}
}
}