Hi Raphael,
Thank you, this was really helpful, and we followed your suggestion all the way through. Sharing the results in case they're useful to others.
1. The SIP Traces API does not expose headers
GET /api/v2/telephony/siptraces returns only per-message metadata (method, ruriUser, ruriDomain, fromUser, toUser, callid, cseq, userAgent). There is no header content, so Diversion / History-Info / Reason cannot be evaluated from this endpoint even if the carrier does send them.
For our unanswered test call it returned just the method sequence:
INVITE → 100 → 180 → 183 → 200 → ACK → BYE → 200
2. So we pulled the PCAP instead
Our trunk is BYOC, so the PCAP was available from the Interactions Detail page. We inspected every message in the dialog.
No Diversion, no History-Info, no Reason anywhere.
The revealing part is that the carrier explicitly advertises support for the extension in every response:
SIP/2.0 180 Ringing
Supported: 100rel,timer,replaces,histinfo
To: "Mobile Number, Colombia" <sip:57XXXXXXXXX@x.x.x.x>;tag=BD2ECEB
histinfo is History-Info (RFC 7044). So this is a signaling policy decision on the carrier's side, not a technical limitation, they can send it and choose not to.
3. Why it ends up indistinguishable
The remote To tag (BD2ECEB) is identical across 180, 183 and 200 OK a single dialog with a single remote endpoint from Genesys' perspective. The forwarding to voicemail happened entirely inside the carrier's network. Genesys never saw a redirect, a retarget, or a change of destination.
Conclusion: at this point there is no viable path for us. The carrier doesn't signal the forwarding, and the SIP data isn't reachable programmatically.
Thanks again for pointing us at the SIP angle.
------------------------------
Omar Sinisterra
NA
------------------------------
Original Message:
Sent: 08-06-2026 18:45
From: Raphael Poliesi
Subject: Detecting "customer did not answer" on callbacks when carrier voicemail picks up
Hi,
Based on the documentation, I believe the main limitation is that agent-first callbacks do not perform Call Analysis (AMD). Without AMD, Genesys has no supported mechanism to distinguish between a live answer and a carrier voicemail. Both scenarios simply result in a successful SIP connection, which is why tCallbackNotReached is not emitted once the voicemail answers.
From the Call Analysis documentation:
Call Analysis is used to classify the outcome of an outbound call (live voice, answering machine, SIT tone, fax, etc.).
https://help.mypurecloud.com/glossary/call-analysis/
Because your scenario uses callbacks rather than an Outbound Dialer campaign, the AMD result is not available.
One possible approach that came to mind (although I haven't validated it yet) would be to inspect the SIP signaling instead of relying on Analytics events.
For example:
Trigger a Workflow from v2.detail.events.conversation.{id}.customer.end.
Retrieve the conversationId.
Call the Telephony SIP Traces API:
This would not provide AMD, and I would not expect it to identify voicemail directly, since both a human answer and carrier voicemail typically produce a SIP 200 OK.
However, depending on the carrier, it may be worth comparing SIP traces from:
a call answered by a person, and
a call forwarded to carrier voicemail,
to see whether any forwarding-related SIP headers (such as Diversion, History-Info, Reason, or other carrier-specific headers) are present.
If the carrier exposes this information consistently, it could potentially be used as a custom heuristic for callback retries. Of course, this would be carrier-dependent and not equivalent to Genesys AMD.
Given that this is a callback scenario rather than an Outbound Dialer campaign, I think that's probably the only technical avenue worth exploring beyond wrap-up codes.
------------------------------
Raphael Poliesi
------------------------------