[Fixed] Copilot Studio Analytics Showing “Abandoned” Instead of “Resolved”? How to Correctly End Conversations

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.
Copilot Studio analytics session outcomes interface showing conversation results
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”

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.
Screenshot showing the generative AI response settings turned off in Copilot Studio

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:
Topic configuration with End Conversation action
When you end the conversation using only this topic:
Conversation flow ending with the End Conversation action
The result will be marked as “Abandoned” (neither resolved nor escalated).
Analytics showing Abandoned outcome status

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 here

Implementation 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
Screenshot showing how to navigate to Topic Management and select Go to another topic
Screenshot showing the End Conversation system topic selection
Once this system topic is called:
Screenshot of the End Conversation system topic flow in action
The outcome will be recorded.
Note: It may take 30 minutes to 1 hour for the results to appear in the analytics tab.
Analytics tab showing the recorded conversation outcome

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 documentation

To specify an outcome, first open the topic’s source code:
Screenshot showing how to access the topic source code in Copilot Studio
Then simply specify the conversationOutcome for the node where you want to set the analytics result (in this case, the “End Conversation” node).
Screenshot showing how to add the conversationOutcome parameter to 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:
Screenshot of the conversation flow using the modified topic
The outcome will be marked as "Resolved".
Analytics showing the Resolved outcome status
Similarly, you can create a topic that ends with an escalation:
Screenshot showing the creation of an escalation topic
Specify "Escalated" for the conversationOutcome:
Screenshot showing how to set the conversationOutcome to Escalated
When this topic is called:
Screenshot of the conversation flow using the escalation topic
The "Escalated" count increases by one in the analytics.
Analytics showing the increased Escalated outcome count

Note: The values that can be specified are as follows:

conversationOutcome: Escalated
conversationOutcome: ResolvedImplied
conversationOutcome: ResolvedConfirmed
conversationOutcome: Abandoned

As such, when using "Analytics" to improve Copilot Studio, you need to pay attention to how conversations are ended.

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:
Screenshot showing how to access the code editor for the End Conversation system topic
You can see that "Resolved" is configured.
Screenshot showing the ResolvedConfirmed conversationOutcome setting in the End Conversation topic code
Incidentally, if the user is not satisfied with the answer, the system topic "Escalate" is called:
Screenshot showing the Escalate system topic being called when a user is not satisfied
Looking at the source code of this system topic:
Screenshot showing how to access the code editor for the Escalate system topic
You can see that conversationOutcome is set to "Escalated".
Screenshot showing the Escalated conversationOutcome setting in the Escalate topic code

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.
Screenshot showing how to download session data from Copilot Studio analytics
You can view the session outcomes and conversation content.
Screenshot of the downloaded CSV file showing session outcomes and conversation data

2. From Power Apps (Dataverse)

Copilot Studio conversation history is stored in the "ConversationTranscript" table:
Screenshot showing the ConversationTranscript table in Dataverse
By referencing this table, you can view detailed data such as the reason for ending (outcomeReason), number of events (turnCount), and other granular information.
Screenshot showing detailed conversation data in the Dataverse table

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.

コメント

  1. Jake Mannion says:

    Very clever discoveries here. Thank you for a detailed and enjoyable write-up.

    • Ippu Ito Ippu Ito says:

      Hi Jake! Thanks for the kind words.
      I’m glad to hear that! Dealing with Copilot Studio analytics can be tricky, right?
      Thanks for dropping by!

Copied title and URL