Salesforce Service Cloud Voice – A Closer Look at the Data

If you haven’t checked out my other posts on Service Cloud Voice, you can check those out with the links below:

In this installment, we’ll try to peel another layer of the magical onion and understand a little more about how the voice call related data is stored within Salesforce.

First, a bit of background. My quest started with one of my colleagues asking about the Voice Call Transcription – you know, the catchy feature that you see in all the marketing demos, where the voice conversation between the customer and the agent is transcribed into text, near real-time with surprising accuracy!

Service Cloud Voice – (Near) Real-Time Transcription

I must admit – this is a neat feature. For instance, the agent can scroll-up and look at earlier parts of the conversation, perhaps even pick out a frequent-flyer number or an address or another key piece of data that was asked of the customer and already provided, without having to re-ask the customer again. This transcript is also available after the call and it will certainly provide certainly richer notes for after-call workflows. It’s also accessible to managers and quality assurance supervisors to ensure that the agents are doing their work effectively.

But what if I want to run some custom processing on this text? Where is it? I opened up the Object Manager and looked high and low within the Voice Call record and to my surprise, the transcript data is not there! I brought up the Schema Builder and tried to look at related tables. I can’t seem to find it anywhere!

Jeff Grosse from Traction on Demand (checkout his talk on Service Cloud Voice to the Madison, WI user group on YoutTube, here) was gracious enough in pointing me to some resources that helped me understand some of the innards of Service Cloud Voice. Namely, the Service Cloud Voice Implementation Guide. Paging through this guide, I soon realized that there are many data structures that are hiding behind the scenes, objects that you don’t see in the Object Manager listing. Objects like Conversation, ConversationEntry and ConversationParticipant. Although I am still unable to locate an exact object and field where the text transcript is stored, I was able to drill down through these above mentioned objects to get to a ConversationIdentifier that I was then able to plug into the Connect REST API, to get programmatic access to that transcription text.

Get Voice Call Transcription Text via the Connect API

Let’s start in the Salesforce UI. Pull up a voice call record with some text transcription. Grab the database ID for it, from the address bar:

Voice Call ID in the URL

Next, fire up you r favorite SOQL query running tool and run the following query:

SELECT ConversationId FROM VoiceCall WHERE Id = 'the-voice-call-id-i-got-from-the-address-bar'

Next, get the ConversationIdentifier using that ConversationID:

SELECT ConversationIdentifier FROM Conversation WHERE Id = 'my-conversation-id'

With that ConversationIdentifier, you can now run an API call on the Connect REST API, like so:


Drill into the results and you’ll see the text-transcription that you were looking for.

voice call text transcription through the Connect REST API

Parting Thoughts

Being able to get at this text transcription through the Connect REST API is a good start. It would be easier in many regards to be able to simply fire up a SOQL query and get at that data. I have open tickets with Salesforce Support asking for such access and still waiting on a response.

As another approach, I have seen at least one example in the wild where a user was able to create a custom report using the ConversationEntry object. Unfortunately, I personally didn’t have success doing so as the ConversationEntry object is not accessible to me via the Object Manager nor the Report Type creation tool. I have another ticket with Salesforce Support asking why that is the case.

Stay tuned for updates, if/when I receive more information on this from Salesforce support or from the community.

Leave a Comment

Your email address will not be published. Required fields are marked *