This article was originally published on My Tech Blog.
Is your Copilot Studio analytics dashboard showing too many "Abandoned" sessions? You might be ending conversations incorrectly. In this guide, I will show you how to properly configure conversationOutcome to ensure your Resolution Rate is accurate.
Analytics Session Outcomes
Conversational agents in Copilot Studio can record "conversation outcomes (Analytics metrics)" during interactions.
The types of outcomes are as follows:
- Escalated: When the "Escalation" system topic is called or the "Transfer to Agent" node is executed
- Resolved: When the "End Conversation" topic is called and the user enters the resolved branch
- Abandoned: When the session times out and is neither "Escalated" nor "Resolved"
Note: A single conversation can contain one or more analytics sessions.
Note: Conversations that are not in the "Engaged" state (conversations in the "Unengaged" state) will be marked as "Not Engaged".Reference: For more details about "Conversations," "Analytics Sessions," and "Engagement," please refer here:
🔗 Analytics Overview
🔗 Measuring Engagement
This time, I investigated how to record "analytics session outcomes" (referred to as "outcomes" below).
Preliminary Setup
To ensure our prepared topics are reliably called, we'll turn off the generative AI responses.
The "End Conversation" Node Alone Doesn't Result in "Resolved" Status
For example, if you create a topic that calls the "End Conversation" action as shown below:
When you end the conversation using only this topic:
The result will be marked as "Abandoned" (neither resolved nor escalated).
This happens because the conversation ended without explicitly specifying an outcome such as "Resolved" or "Escalated" within the topic (session), and the session subsequently timed out.
Below, I'll introduce two methods to specify these outcomes.
Method 1: Redirect to the "End Conversation" Topic
The first method is to use the system topic "End Conversation". This is likely the standard approach, as officially documented:Properly ending conversations to measure outcomes It's important to end conversations with the End Conversation topic, which allows users to confirm whether their issue was resolved (and if escalation might be needed). When the agent confirms success, a CSAT survey is presented to the user and a score from 0-5 is collected. If the conversation outcome is certain based on your topic logic, you can either directly flag it as success-confirmed or redirect to the escalate topic. Official documentation hereImplementation is simple: when the conversation reaches a natural conclusion (where you want to segment your analytics), select [Topic Management] → [Go to another topic], then choose the system topic "End Conversation". Note: System topic "End Conversation" ≠"End Conversation" node
Once this system topic is called:
The outcome will be recorded.
Note: It may take 30 minutes to 1 hour for the results to appear in the analytics tab.
Method 2: Explicitly Specify conversationOutcome
The second method is to explicitly specify either "Resolved" or "Escalated".You can also set the outcome of actions using the conversationOutcome parameter in the action code editor. For example, use conversationOutcome: ResolvedConfirmed for confirmed success, and conversationOutcome: ResolvedImplied for implicit success. From official documentationTo specify an outcome, first open the topic's source code:
Then simply specify the conversationOutcome for the node where you want to set the analytics result (in this case, the "End Conversation" node).
kind: AdaptiveDialog
beginDialog:
kind: OnRecognizedIntent
id: main
actions:
- kind: SendActivity
id: sendActivity_1
activity: "Ending conversation..."
conversationOutcome: ResolvedConfirmed # <--- This is the key!
When this topic is called:
The outcome will be marked as "Resolved".
Similarly, you can create a topic that ends with an escalation:
Specify "Escalated" for the conversationOutcome:
When this topic is called:
The "Escalated" count increases by one in the analytics.
Note: The values that can be specified are as follows:
conversationOutcome: Escalated conversationOutcome: ResolvedImplied conversationOutcome: ResolvedConfirmed conversationOutcome: AbandonedAs such, when using "Analytics" to improve Copilot Studio, you need to pay attention to how conversations are ended.
Official documentation
https://learn.microsoft.com/en-us/microsoft-copilot-studio/guidance/measuring-outcomes
https://learn.microsoft.com/en-us/microsoft-copilot-studio/analytics-improve-agent-effectiveness?wt.mc_id=copilotstudio_inproduct_analytics#outcomes-and-engagement
Deep Dive: How System Topics Handle conversationOutcome in Code
The system topic "End Conversation" also sets conversationOutcome. If you click [Open Code Editor] to view the source:
You can see that "Resolved" is configured.
Incidentally, if the user is not satisfied with the answer, the system topic "Escalate" is called:
Looking at the source code of this system topic:
You can see that conversationOutcome is set to "Escalated".
How to Check Session Outcomes
1. From Copilot Studio
To check from Copilot Studio, go to the [Analytics] tab, click [View details], then [Download sessions] to download a CSV file.

You can view the session outcomes and conversation content.

2. From Power Apps (Dataverse)
Copilot Studio conversation history is stored in the "ConversationTranscript" table:

By referencing this table, you can view detailed data such as the reason for ending (outcomeReason), number of events (turnCount), and other granular information.

When you call the operation to set conversationOutcome consecutively
Create a topic like this,
Edit the code so that conversationOutcome is set when sending the "End" message.
If you call this topic from the user's side in rapid succession,
The number of sessions increases according to the number of times it is called. *The reason the number is 6 is because a test run was performed once before this test.

Top comments (0)