WebRTC softphone audio drops on DTMF collection node breaking containment metrics

The new WebRTC softphone implementation isn’t doing jack all for our containment targets. Clients want that creative IVR path where agents monitor the call while the caller navigates the menu, but the audio leg severs exactly when the flow hits the DTMF collection block. It’s running on Genesys Cloud WebRTC SDK version 2.1.4 alongside the latest Architect build. The browser console throws RTC_PEER_CONNECTION_FAILED alongside a 408 Request Timeout on /api/v2/interaction/participants. Containment drops straight to forty-two percent because callers get routed to voicemail instead of the queue. The team tried adjusting the jitter buffer in the softphone config, but the result stays the same. The audio stream stays hot for the initial TTS greeting, then cuts dead. Saw a similar thread last month about SIP INVITE drops on custom DTMF menus, but this is pure WebRTC signaling. The flow architecture uses a parallel path to keep the agent leg active, yet the media server seems to think the caller disconnected. Switching to the legacy desktop softphone fixes the routing instantly. The WebRTC handshake completes fine. The iceConnectionState flips to disconnected right at the prompt node. Network traces show the STUN server responding without delay. Maybe the media server is dropping the WebRTC track when it expects a DTMF event payload. The containment dashboard updates every minute and shows a steep decline during peak hours. The user experience tanks when the menu repeats itself. Callers press zero twice and get transferred to an empty queue. Testing on Chrome 122 in Berlin EU1 region.

PureCloudPlatformClientV2 kills the audio track when the DTMF node switches to RFC 2833, so you’ll need to force a renegotiation right before the tone collection starts. Just patch your connection object like this:

const peerConfig = {
 iceServers: [{ urls: 'turn:turn.genesys.cloud:3478', username: 'softphone', credential: 'genesys' }],
 sdpSemantics: 'unified-plan',
 dtmfRelay: 'sdp',
 keepAliveInterval: 8000
};

The dtmfRelay: 'sdp' flag keeps the media stream alive while the parser runs.