Callback Queue Interval Metrics Show Zero Handle Time Despite Completed Callbacks

We have callbacks enabled on three of our sales queues and the agents are definitely completing them - I can see the conversations in the interaction detail view. But when I pull the queue interval report via /api/v2/analytics/queues/observations/query with a 30-minute granularity, every callback interaction shows tHandle: 0 and tTalk: 0.

The voice calls on the same queues report handle time correctly. Only callbacks are zeroed out.

Here is a stripped-down version of the query body I am sending:

{
  "filter": {
    "type": "and",
    "clauses": [
      { "type": "dimension", "dimension": "queueId", "operator": "matches", "value": "a]b12c34d-5678-9abc-def0-1234567890ab" },
      { "type": "dimension", "dimension": "mediaType", "operator": "matches", "value": "callback" }
    ]
  },
  "metrics": ["tHandle", "tTalk", "nOffered", "nConnected"]
}

nOffered and nConnected return correct counts. It is only the duration metrics that come back as zero. We are on the US-East-1 (N. Virginia) region. Has anyone seen this behavior before?

This is a known gap in the observations API for callback media types. The issue is that the callback interaction actually spans two separate conversation segments internally - the initial callback request segment and the actual connected voice segment.

When you query observations by mediaType: callback, you are pulling metrics from the callback scheduling segment, which has zero talk time because the agent has not connected yet at that point. The actual handle and talk time lives on the voice segment that gets created when the callback fires and the agent picks up.

You need to use the /api/v2/analytics/conversations/details/query endpoint instead, and filter by originatingDirection: outbound combined with requestedRoutings: CALLBACK. That will give you the full conversation lifecycle including accurate tHandle and tTalk.

Alternatively, if you must use the queue-level aggregate view, drop the mediaType filter entirely and just look at total queue metrics. The callback durations will be rolled up under the voice media type in the aggregate.

We ran into a similar situation in our staging org when we were trying to build separate callback dashboards. What ended up working for us was the conversation detail approach mentioned above, but we also had to account for the fact that abandoned callbacks - where the customer hangs up before the agent connects - still show up as nOffered in the observations query.

That was inflating our offered count relative to connected, and making our callback answer rate look terrible on the executive dashboard. We ended up filtering those out by checking for segments.segmentType: interact in the detail query to only count callbacks where an actual conversation happened.