Solved DTMF input not recognized by dialer app IVR when calling outbound

Status
Not open for further replies.

nextcx

Customer
Joined
Apr 20, 2022
Messages
33
Reaction score
3
Hello All,

I'm trying to make an dialer app IVR (Outbound call by 3CX over SIPtrunk) that can recognize DTMF input, but as seen in screenshot it does not register the DTMF input.

When I make a call to the IVR DTMF input is registered.

Call flow apps:
Dialer CFD:
Make call from IVR (906) to Mobile extension (301)
Menu CFD:
Option 1 (Prompt playback 1)
Option 2 (Disconnect call)
Invalid (Disconnect call)
Extensions:
906 (IVR):
Prompt = Welcome
Menu options = none
Destination for invalid or no DTMF input = Send to CFD (Menu CFD)
301:
Forward to mobile number

The SIPtrunk sends DTMF by RFC2833 (see also screenshot of the DTMF event and SDP of initial invite)

trace.png
trace1.png

trace2.png

Many thanks
 
Hi @nextcx

As a test point the call to a normal 3CX Digital receptionist and send some DTMF signals. Are those recognized?

Also I cannot be sure from your screenshot but I only see 1 DTMF packet for each packet coming from the provider.
RFC2833 sends multiple instances of the same digit with increasing duration followed by 3 End messages.

Filter your capture with "rtpevent" and check what you see from your provider. You should see something like the attached screenshot. If not then you might have an issue there.
 

Attachments

  • 1650466435051.png
    1650466435051.png
    190.7 KB · Views: 10
Thank you for your answer @YiannisH_3CX,

To answer your question, yes a normal call to a 3CX Digital Receptionist works and input is recognized.
Only when an IVR calls outbound the input is not registered.

I will provide you with new screenshots...

Looks like it logs the input, but when for example 1 is pressed no prompt plays.
 

Attachments

  • 2022-04-20 17_14_50-Window.png
    2022-04-20 17_14_50-Window.png
    62.4 KB · Views: 12
Last edited:
Hi @YiannisH_3CX
Maybe I can clarify what I want to achieve, to give you a better look of what I want to make.

1. customer calls 3cx
2. 3cx parks customer in parking orbit 1
3. 3cx calls agent on mobilephone via the dialer in the callflow app
4. callflow app requests DTMF input
5. When no dtmf present, 3cx will try to call the next agent on his cellphone, if DTMF 1 is present it'll unpark the customer and play prompt.
 
I am not sure how this will work with the CFD dialer so I will move this thread to the CFD section so our experts in CFD can take a look at this.
 
  • Like
Reactions: nextcx
Hello @nextcx,

If I've not misunderstood your description, the scenario is overcomplicated with additional transfers that are not necessary. I would simplify this in the first place, to keep the solution as simple as possible. For example, why do you use the IVR at extension 906 to play a welcome prompt and then transfer the call to a CFD callflow? Why don't you configure the dialer to call the CFD callflow directly, so it can play the welcome prompt and then wait for DTMF input. Also, you should call the external number first, and then the IVR / CFD callflow, otherwise the IVR will start playing the prompt before the call has been handled by the external party. So you probably need to invert the Origin and Destination in the Make Call component.

Please check that, and let me know if the issue persists after you have simplified this to avoid the transfer between the IVR and the CFD callflow.
 
Hi @edossantos,

This scenario is a simplified version just in order to identify the DTMF issue.
The actual application we've built is a "copy" of the Asterisk followme application since we're migrating from Asterisk towards 3CX.

Call flow:

Inbound call from a customer.
This inbound call will be parked automatically.
Trigger an outbound call from the dialer app towards a list of numbers sequentially.
On connect, the dialed number needs to press 1 in order to retrieve the call. The reason to press 1 is to be sure the call did not end up in a voicemail box.

But in order to fix the DTMF issue, we created this simplified call flow in order not to over-complicate things.
 
Please describe how you're triggering the call with the Make Call component in your CFD dialer. Are you calling the external mobile first or second? The other endpoint is a Digital Receptionist or a CFD callflow?
 
@edossantos
The inbound call is routed towards a queue first, when nobody answers within X seconds, it's forwarded using "Connect to Queue / Ring Group" internal DID. From that ringgroup the Call Flow App is invoked.
 
Last edited:
Why try to fake Follow Me when 3CX has statuses and things like that to do exactly that?
 
  • Like
Reactions: edossantos
But for testing purposes, I trigger this application by just dialing a ringgroup which triggers the "debug" application.
 
@ConceptsWeb Because the exact scenario is not supported by using external numbers instead of the app as far as we've tested.
 
@ConceptsWeb Because the exact scenario is not supported by using external numbers instead of the app as far as we've tested.
Maybe not but there are ways to avoid using CFD for that.

Or if you have to, it would be a dialer and a CFD app separately from one another. That being said, your method of parking the call will probably not work as the CFD cannot unpark a call.

You'd be better off using other methods IMO.
 
  • Like
Reactions: edossantos
@ConceptsWeb Our scenario is working fine when we dial the flow internally. As soon as this DTMF recognition issue is fixed we're good to go with the application we've developed. Hopefully, someone has a good suggestion on how to fix the DTMF issue.
 
How's the Callflow connected to the caller? And DTMF works but only internally? If so, the issue would be from the trunk or other end's device.
 
  • Like
Reactions: edossantos
@ConceptsWeb
The callflow is:
Internal softphone => ringgroup with option "Destination if no answer" Send call to call flow apps ==> callflowapp.

The callflowapp uses the dialer in order to setup a outbound call from "Digital receptionist" towards the outbound number. The call is setup correctly but the DTMF is not recognised.It looks like proper RFC2833 DTMF within the packetcapture.

When routing a external inbound call directly to the Digital receptionist it works fine, so only when the dialer initiates the call it doesn't work. For regular outbound (and inbound) calls DTMF (RFC2833) works fine, so we don't expect the issue on that side.
 
@ConceptsWeb
The callflow is:
Internal softphone => ringgroup with option "Destination if no answer" Send call to call flow apps ==> callflowapp.

The callflowapp uses the dialer in order to setup a outbound call from "Digital receptionist" towards the outbound number. The call is setup correctly but the DTMF is not recognised.It looks like proper RFC2833 DTMF within the packetcapture.

When routing a external inbound call directly to the Digital receptionist it works fine, so only when the dialer initiates the call it doesn't work. For regular outbound (and inbound) calls DTMF (RFC2833) works fine, so we don't expect the issue on that side.
What's the source and destination in your MakeCall component of the dialer?

I've seen stuff like this in the past. Thinking of a few things.

Also, what's the DR set to? Regular or DTMF?
 
  • Like
Reactions: edossantos
@ConceptsWeb
Source: 906 (DR)
Destination: 301 >> (mobile number)
DR setting: DTMF (we've also tried regular but this doesn't work as well).
 
@ConceptsWeb
Source: 906 (DR)
Destination: 301 >> (mobile number)
DR setting: DTMF (we've also tried regular but this doesn't work as well).
Try to reverse source and destination.
 
  • Like
Reactions: edossantos
@ConceptsWeb

This does not work, because it is an mobile extension and not an internal extension.
 
Status
Not open for further replies.