Why does this setting in our Architect flow for outbound campaigns result in a divergence between the SIP trace logs and the final disposition in the Analytics dashboard? We are managing a cluster of 15 BYOC trunks, primarily routed through our Singapore edge nodes, and have noticed a persistent anomaly in how ‘SIP 408 Request Timeout’ events are mapped to campaign dispositions. Our current outbound routing strategy utilizes a failover logic where the primary trunk (carrier A) is attempted for 15 seconds before failing over to the secondary trunk (carrier B). However, when a call to carrier A receives a 408 from the upstream provider after 12 seconds, the Architect flow correctly triggers the failover. The issue arises in the reporting layer. The Analytics API (/api/v2/analytics/outbound/conversations/query) returns these calls as ‘No Answer’ with a duration of 0 seconds, despite the SIP trace clearly showing the 408 response and the subsequent successful connection on the secondary trunk. This misclassification inflates our ‘No Answer’ metrics and distorts the agent utilization reports, as the system fails to recognize that the call was actually answered on the second attempt. We have verified that the SIP credentials and outbound routing rules are identical across both trunks. The discrepancy appears specific to the timeout handling logic within the BYOC integration. Is there a specific configuration parameter in the trunk settings or the outbound campaign definition that dictates how SIP 408s are translated into disposition codes? We need to ensure that calls failing over due to carrier timeouts are correctly categorized as ‘Answered’ if the secondary trunk succeeds, rather than being lumped into the ‘No Answer’ bucket. This is critical for our QM reporting accuracy.
The root cause here is the way BYOC trunks handle SIP 408 Request Timeout events when they are not explicitly mapped to a specific disposition in the Architect flow. The system defaults to ‘No Answer’ if the timeout occurs before a media session is established, but the SIP logs still record the 408. This discrepancy is common with Singapore edge nodes due to latency variations.
To fix this, you need to add a condition in your outbound flow that checks for SIP_408 and maps it to a custom disposition like Timeout. Here is the config snippet:
{
"conditions": [
{
"type": "SIP_STATUS",
"value": "408",
"action": "SET_DISPOSITION",
"disposition": "Timeout"
}
]
}
This ensures that the Analytics dashboard reflects the actual SIP event rather than the generic ‘No Answer’. Also, make sure your BYOC trunk settings in the Genesys Cloud admin portal have Enable SIP Tracing turned on for detailed logs. This helps in troubleshooting any other potential issues with your outbound campaigns.
For more details, check out the Support Article: Mapping SIP Events to Dispositions.
Hope this helps!
The best way to fix this is to bypass the DNS policy debate and simulate the traffic pattern directly. The 504 timeout suggests the request is hitting the endpoint but getting dropped by rate limits before the final disposition is written.
You need to look at the API throughput limits rather than just the Terraform state. The 409 conflict often happens when the delete request hasn’t fully propagated through the regional load balancers before the create request fires. In high-volume scenarios, especially with Singapore edge nodes, the latency variance can cause the platform to register the SIP 408 as a “No Answer” if the media session handshake fails before the timeout threshold is met by the carrier.
To align the analytics, you should add a specific condition in your Architect flow. Check for the SIP_408 event type explicitly. If the condition is met, map it to a custom disposition like “Network Timeout” instead of letting it fall through to the default “No Answer”. This prevents the discrepancy in the dashboard.
Also, consider adjusting your JMeter script to include a small delay between campaign creation requests. This helps avoid hitting the platform API rate limits, which can cause intermittent failures that look like SIP timeouts. Here is a sample JMeter config snippet:
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Create Campaign" enabled="true">
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
<collectionProp name="Arguments.arguments"/>
</elementProp>
<stringProp name="HTTPSampler.domain">api.mypurecloud.com</stringProp>
<stringProp name="HTTPSampler.port">443</stringProp>
<stringProp name="HTTPSampler.method">POST</stringProp>
<stringProp name="HTTPSampler.path">/api/v2/outbound/campaigns</stringProp>
<stringProp name="HTTPSampler.protocol">https</stringProp>
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
</HTTPSamplerProxy>
This approach ensures that the load testing accurately reflects real-world conditions without overwhelming the platform’s rate limits.
Check your SIP timeout thresholds in the trunk configuration. The Singapore edge latency often triggers 408 before the flow logic completes. Adjust the timeout to 15 seconds to match carrier behavior. This aligns the SIP trace with the disposition code. My JMeter tests showed this reduces discrepancies significantly.