[HELP] Delay After DTMF Key is Pressed in Multilevel IVR

I need help in building a multilevel IVR.
There is a 5 seconds delay after a DTMF key is pressed till the next appropriate action which is playing the sound.
I did some searches and changed some configurations such as the codec (gsm, ulaw), the db driver (from odbc to mysql).
Lastly I modified the app_speech_utils.c file to reduce the DTMF timeout from 5 seconds to 1 second. But it still has the delay. Here is the code of app_speech_utils.c which I modified:

/* Change timeout to be 5 seconds for DTMF input */ timeout = (ast_channel_pbx(chan) && ast_channel_pbx(chan)->dtimeoutms) ? ast_channel_pbx(chan)->dtimeoutms : 1000;

And here is some of my dialplan:

exten => 100,1,Answer()
exten => 100,2,Background(main_menu)
exten => 100,3,Background(silence/3)
exten => 100,4,Goto(2)

exten => 0,1,Dial(SIP/113)
exten => 1,1,Goto(menu_div_mkt,_12[3-8],1)
exten => i,1,Background(sorry)

exten => _12[3-8],1,Background(menu_div_mkt)
exten => _12[3-8],2,Background(silence/3)
exten => _12[3-8],3,Goto(1)

exten => 0,1,Dial(SIP/123)
exten => 1,1,Goto(info_pmb,_12[3-8],1)
exten => i,1,Background(sorry)
exten => 9,1,Goto(main_menu,100,2)

exten => _12[3-8],1,Background(menu_info_pmb)
exten => _12[3-8],2,Background(silence/3)
exten => _12[3-8],3,Goto(1)

exten => 0,1,Dial(SIP/123)
exten => 1,1,Goto(juk,_12[3-8],1)
exten => i,1,Background(sorry)
exten => 9,1,Goto(menu_div_mkt,_12[3-8],1)

Is there anyway I can reduce this delay? Please kindly help me…
Thank you.


I am having same. I did’t did any changes in app_speech_utils.c. My point is, if I will do any changes in app_speech_utils.c then do I need to reinstall Asterisk or is any way to reinstalled only modified file/app?

I have multi level IVR. Using Sangoma PRI card. Call coming on PRI card and going to IVR. Before Asterisk we have Panasonic PBX device. They had IVR facility and no such issue was on Panasonic. After installing Asterisk this delay issue started. I think Asterisk have default 5sec time to process next process after receiving DTMF.

Please let us know how we can decrease this time.


You should not add to such an old existing thread as the behaviour of the code may well have changed since it was written, such that the thread is no longer valid.

You should make sure that no number in the context used for the IVR starts with the same number as an IVR option and is longer than it.

I think using patterns ending in ! may work in some cases, but I don’t know the fine details of how these work.