Me again. 👋 Talking about Salesforce Chat… again. One of my chief complaints from a previous chat tool we were using was that I couldn’t access data for everything I wanted to be able to report on. One of the biggest gaps was being able to calculate how many chats an agent was actually involved with. With the other chat tool we could only say they were part of a chat if they were the first agent or the last agent. This made resource management more difficult because we couldn’t tell how many chats were transferred or conferenced beyond those first and last people. And I could never say for sure how many people it took to close a chat. But those days are long gone! Salesforce Chat has an event object that tracks all the little in between things that happen and you can even add custom events! Using these Chat Events, I can now determine things like:
- How many chats were transferred
- How many agents decline transfer requests
- How many chats have conference requests
- How many conference requests are declined
- How many agents interacted with a chat
- How many chats have more than one agent
- How many chats had critical wait time alerts (and which agents triggered them)
- How many file requests were initiated, cancelled, completed or failed
- Go here for the full list of tracked events
Whoa! Now I’m not only reporting on my chat volume, but I can also report on different features you may or may not have enabled like file transfers, conferencing, and transfers between agents. This is super helpful for both road mapping and managing your team. The most interesting event metric for me so far has been the file requests. We spent HOURS before rollout debating the file transfer process because we thought it was such a big deal, but it turns out only about 15% of our chats have used it! So maybe not such a big deal after all. 😃
Let’s Sync This Thing!
Picking up where we left off with our other Omni and Chat related datasets, let’s head over to our Data Manager in Tableau CRM. We’re going to add another digest node to the same dataflow we were playing with before, and we’re going to digest the LiveChatTranscriptEvent object.
I grabbed most fields from this, but the important ones will be the AgentId, the Type, the LiveChatTranscriptId, the Created Date, and the Detail. And now that we have the Event records, we need to join some other data to make them make more sense…. starting with the actual Chat Transcript. Since we’ve already built our Chat Transcript dataset, most of the work is already done. We’re going to add an augment node and join the Chat Transcript using the Transcript Id to the LiveChatTranscriptId of the Chat Event. The last node for me from the Transcript dataset (before we register it) is where I join the User to the Transcript. This might be different for you if you’ve added additional things.
And now so that we know which agents were responsible for which events, we need to join our user data to the AgentId.
Remember that you can reuse the same digest node that we used in previous steps in this dataflow! And now all we need to do is register this bad boy!
Save and run your dataflow and then your new dataset will be ready for use! And once you start exploring the dataset, we can create visualizations around those cool things I mentioned earlier!
We can even dig deeper into things like declined transfers to see if the Chats were declined manually or if they timed out automatically.
To answer my questions like how many agents interacted with a particular chat, I can filter out any events that would mean they didn’t interact (like declines) and then count the unique number of Agents from the remaining events. And boom! We can now see that this particular chat had let’s say 4 agents associated with it. That’s cool! I’ve already found some other neat things too. Like I noticed that on some chats that are owned by the Automated Process User, there were actually agents involved, but they left the chat prior to the customer and before the chat officially ended. That meant there were no agents in the chat and so the ownership of the Transcript transferred back to the Automated Process User. Now I know I need to put some sort of automation in place to grab the last Agent that was involved and set them as the owner. I’m looking forward to playing with this data more and seeing what other interesting things I can see!