Understand conversation transcripts from Power Apps
You can view, export, and download transcripts of customer interactions with your copilot in both Power Apps and Copilot Studio. The information that each app exports is slightly different. This article covers downloading conversation transcripts in Power Apps and using them to create reports in Power BI. For more information, see Analyze session information in Copilot Studio.
By default, Power Apps downloads conversation transcripts from the last 30 days. You can change the retention period.
Note
If you no longer have access to your environment, you'll need to create a support request in the Power Platform admin center.
Prerequisites
- To view conversation transcripts, one needs to have the transcript viewer security role. Only admins can grant this role by Assign the Copilot transcript viewer security role during copilot sharing.
View and export copilot conversation transcripts from the Power Apps portal
You can view and export copilot conversation transcripts from the Power Apps portal.
First, you must sign in to https://www.powerapps.com with your credentials.
View conversation transcripts
In the side pane, select the Tables node, and then select All.
Enter conversation in the Search box.
Select ConversationTranscript under Tables.
A page for the ConversationTranscript table opens.
Export conversation transcripts
In the side pane, select the Tables node, and then select All.
Enter conversation in the Search box.
Select ConversationTranscript under Tables.
Select Export > Export data.
It takes a few minutes for the data to be compiled for export.
To download the content, select Download exported data.
Download copilot conversation transcripts
In the Power Apps navigation menu, select Dataverse > Tables, and then select All.
Enter conversation in the Search box.
Select the ConversationTranscript table.
Select Export > Export data.
Allow a couple of minutes for Power Apps to prepare the data for export, and then select Download exported data.
The file is saved as a zipped archive to your browser's default download location.
Understand conversation transcripts
The conversation transcript is a CSV (comma-separated values) file. The following table describes the most important fields in your conversation transcripts.
Field | Description | Example |
---|---|---|
Content |
The entire transcript in JSON format | Refer to the Content field section. |
ConversationStartTime |
The time the conversation started (not the time the transcript record was written to the data store) | 2021-04-19T20:39:09Z |
ConversationTranscript |
The unique identifier of the row in the Dataverse table | 28eccb77-xxxx-4a63-985f-ffaaadd6f391 |
Metadata |
JSON that includes the copilot ID, tenant ID, and copilot name | {"BotId": "198eca5f-xxxx-4ae6-8c08-835d884a8688", "AADTenantId": "72f988bf-xxxx-41af-91ab-2d7cd011db47", "BotName": "Test Bot"} |
Name |
The name of the custom row created from ConversationId followed by BotId followed by a batch number . The batch number indicates the order when there are multiple analytic sessions for the conversation. Classic bots don't include the batch number. |
8YYe8iif49ZKkycZLe7HUO-o_198eca5f-xxxx-4ae6-8c08-835d884a8688_0 |
Bot_ConversationTranscript |
The copilot ID | 198eca5f-xxxx-4ae6-8c08-835d884a8688 |
Created on |
The date and time the transcript record was created | 2021-04-20T02:40:13Z |
Content field
The Content
field is a raw log of all the activities that users had with the copilot. Common activity types include message and event:
- Message activities represent the content shown in a conversation. Message activities can contain text, speech, interactive cards, and binary or unknown attachments.
- Event activities communicate programmatic information from a client or channel to the copilot.
For more information on activity types, see Bot Framework Activity schema.
The following table describes some of the key fields in the content JSON:
Key | Description |
---|---|
ID |
The unique GUID of the activity object |
valueType |
The type of value stored in the activity; dictates what information the activity is providing (Common activity value types) |
timestamp |
The timestamp of when the activity was generated, in Epoch format (the number of seconds since midnight UTC January 1, 1970) |
type |
The type of activity; for example, message , event , or trace |
replyToId |
The ID of the activity that the current activity is responding to |
from |
Contains fields id and role :
The id can be used to calculate the number of active users that are interacting with the copilot if the canvas is passing in a unique ID of the user. If the canvas doesn't pass an ID, a unique ID per conversation is passed. For security and privacy, the ID is hashed before it's written to the transcript. |
channelId |
The ID of the channel where the activity is coming from; for example, directline , msteams , or facebook |
textFormat |
The format of the text; for example, plain or markdown |
attachments |
Dynamic rich data associated with the activity; for example, AdaptiveCards , HeroCards , or Carousel data |
text |
The text for message activities |
value |
Fields specific to the activity based on the value type; this field is where most of the useful information exists |
channeldata |
|
name |
The name of the event activity; for example, SetPVAContext |
Common activity value types
Activity value type | Description |
---|---|
ConversationInfo |
Whether the conversation is from the Copilot Studio test pane (isDesignMode ) and the locale of the conversation |
CSATSurveyRequest |
The user is presented with a customer satisfaction (CSAT) survey |
CSATSurveyResponse |
The user responds to a CSAT survey |
DialogRedirect |
The user is redirected to another topic |
ImpliedSuccess |
The user reached a question node in the topic, where one of the conditions points to the Confirmed Success CSAT system topic or calls the End of Conversation system topic |
IntentRecognition |
The user triggered a topic |
PRRSurveyRequest |
The user was asked if the topic answered their question from the End of Conversation topic |
PRRSurveyResponse |
The user's response to whether the topic answered their question from the End of Conversation topic |
SessionInfo |
The type (unengaged or engaged ), outcome (Escalated , Resolved , Abandon ), and the turn count of the session |
VariableAssignment |
A value is assigned to a variable |
Build custom Power BI reports from conversation transcripts
A useful way to approach building custom reports from conversation transcripts is to look at the number of messages that need to be processed.
Lightweight approach
Connect Power BI to Dataverse with a Power BI dataflow. Other infrastructure isn't required and all records are retrieved from Dataverse with every refresh.
Pros | Cons |
---|---|
Easiest implementation. | Refresh time might increase as transcripts increase. High cost for storage in Dataverse. |
Standard Azure Data Lake Storage approach
Export Dataverse data to Azure Data Lake Storage. This method requires an Azure Data Lake Storage account, but no other Azure infrastructure.
Use a Power Platform dataflow on the transcripts to prepare the data, and extract the data into a structured form.
Power BI refreshes data from the dataflow. Power Platform and Power BI manage all compute infrastructure. Records for a certain day are retrieved from Dataverse with every refresh.
Pros | Cons |
---|---|
Low storage cost in Azure Data Lake Storage. Moderately simple implementation. No Azure Compute required. |
Refresh time might increase as transcripts increase each day. |
Azure Data Lake Storage + Synapse approach
The data size in the Standard Azure Data Lake Storage approach can cause slow refreshes or other operational problems. In that case, you can use Azure Synapse Analytics and integrate it into Power BI.
Pros | Cons |
---|---|
Refresh time is constant. Moderately simple implementation. Low storage cost in Azure Data Lake Storage. |
Compute cost for Azure Synapse. |
Change the default retention period
A Power Apps bulk-delete job automatically removes copilot transcripts that are older than 30 days. To keep the transcripts longer, cancel the existing job and create a new one that runs on a different schedule.
Cancel the existing bulk delete job
In Power Apps, select Settings > Advanced settings.
The Dynamics 365 portal opens in a new tab.
Select the caret next to Settings, and then under System, select Data Management.
Select Bulk Record Deletion.
In the View list, select Recurring Bulk Deletion System Jobs.
Select the Bulk Delete Conversation Transcript Records Older Than 1 Month job.
In the More Actions list, select Cancel.
Create a new bulk delete job
To start the Bulk Deletion Wizard, select New and then, in the wizard, select Next.
Set the following search criteria:
- In the Look for list, select ConversationTranscripts.
- Select ConversationStartTime, select Older Than X Months, and enter "12".
This setting keeps the transcripts for 12 months. Choose a different comparison and value if you like. - Select SchemaType, leave equals, and enter "powervirtualagents".
Select Next.
Enter a name for the job, select Run this job after every, and enter 1. Choose a different schedule if you don't want the job to run every day.
Select Next, and then select Submit.
Tips for getting the most out of your conversation transcripts
Variables can be used to store data relevant to your copilot content or copilot user. Parsing the variable and its value from the conversation transcript lets you filter or slice the data by the variable.
In many places, the conversation transcripts refer to content by its ID. For example, the ID of the topic that's being redirected to by the current topic is only referred to by its ID. To get the name of the topic, look up its name in the copilot content.