I’m a contractor trying to untangle a reporting mess. The previous admin built a custom dashboard using the v2.analytics.conversations.aggregates.query API.
The dashboard pulls the tHandle metric to show Average Handle Time. However, the business is complaining that the numbers are way lower than reality. I tested a call: 2 minutes talk, 3 minutes hold, 1 minute wrap-up. The total interaction was 6 minutes, but tHandle is reporting 3 minutes (Talk + Wrap). It’s completely ignoring the Hold time! Is this a bug in the API? Why would standard AHT not include the time the agent had the customer on hold?
I’ve filed issues about metric definitions on the SDK repo before! It’s not a bug, it’s just a very specific Genesys definition.
In Genesys Cloud, tHandle strictly equals tTalk + tAcw (After Call Work). It explicitly excludes tHeld. If you want a ‘Total Handle Time’ that includes hold, you cannot rely on the pre-calculated tHandle aggregate metric. You have to pull the individual buckets (tTalk, tHeld, tAcw) and sum them together in your script.
I build real-time dashboards using the WebSockets, and this drives me insane.
Be very careful when you write your script to sum those metrics! tHeld is not a simple block of time. If an agent places the customer on hold multiple times during a single interaction, the aggregate API will sum all those hold segments into one total tHeld value for the conversation. But if you are using the detail API instead, you have to loop through every segment of the participant array to find all the individual hold durations.
We only have 20 agents, so I just use the standard UI mostly.
If you want to see the ‘True’ handle time without doing API math, tell your business unit to look at the ‘Interaction Time’ metric in the standard Agent Performance views instead of Handle Time. Interaction Time includes the Hold time natively in the UI. But yeah, if you’re pulling raw API aggregates, you gotta do the addition yourself!