Is it possible to suppress audible DTMF in a bridge, but still get events?

I’d like to know if there’s a way to have a bridge where channel DTMF events are still raised (through ChannelDtmfReceivedEvent), but where the tones are not audible to other channels. I’ve created a bridge using ARI with “mixing,dtmf_events,proxy_media”, and I get the events, but other channels hear the tones. I get the same result with “mixing,proxy_media”, but I gather from the wiki that proxy_media also implies dtmf_events (basically send DTMF through the mixer). Is there a way to completely suppress DTMF passthrough and still have the events raised? That way I could conditionally replay those DTMF tones to another channel in the conference, but they wouldn’t be heard by default.

which type of DTMF is your devices / accounts configured to use ?

I was looking at where to configure this, and I’m not quite sure where to change it to see if that makes a difference. Where can I set this on the ARI application, or on my SBC trunk? I haven’t configured anything specific, so assume the Asterisk 18.6 defaults (which is likely RFC 4733).

That is the default for chan_sip (I don’t know my way around chan_pjsip’s code). However, it is dependent on the peer, and also, if the DTMF is ever in band, there may be a short burst at the beginning of a digit before the digit is detected by whatever does the transition to out of band. One would need to delay the audio by several time the length of an RTP frame to avoid that.

And of course, right after that reply, I found the setting for my trunk. Changing this to INFO does what I need, although this may just be based on how my audiocodes SBC is configured. 4733 is audible though.

If anyone else is looking for this, it’s in /etc/asterisk/pjsip.conf, or pjsip.endpoint.conf if you’re using a freepbx distro.

Actually-scratch that. Not sure why this changed, but I restarted asterisk, and now INFO DTMF is playing into the bridge, so that doesn’t seem to change anything from a mixing standpoint. I did verify that the trunk dtmf mode is set to info.

So, back to the original question-is there a way in ARI to intercept and block DTMF from a conference while still getting the events? I’d like to conditionally relay to specific channels within a bridge.

Slightly more progress. I’ve managed to get a version of this working with the help of the absorbDTMF flag in the bridges API (under addChannel). If I set the trunk to auto for DTMF, and create the bridge with “mixing,dtmf_events,proxy_media”, then I get DTMF events for channels without the tones going to the mix…almost.

If I make a call between extensions using microSip, it seems that every DTMF tone is correctly masked, and the tones are all exactly 200ms. Calling out through my Audiocodes SBC however, the durations are different (as low as 110 and as high as 390 from a small sample), but every time a clipped version of the tone is heard by other channels. It seems like the mix is trying to suppress it, but not quite getting all of it. I’ve also forced my trunk to use 4733. If I set it to INFO I got full tones in the bridge, and no events in ARI, so I suspect that’s an Audiocodes config to investigate. In the meantime, any other ideas on how to accomplish this would be appreciated!

absorbDTMF doesn’t suppress the audio or anything, it just doesn’t forward the DTMF start and stop. For out of band DTMF it’s up to the device doing the conversion to squelch any audio, and sometimes a small amount can end up getting through.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.