What Could Be Stopping “Disconnect Call” Feature From Working (set In Features.txt)
Asterisk 14.1
Here’s a bit of test dialplan, which works as expected and simulates exactly what I’m doing at the top of my large dialplan…
[dial-pre-test]
exten => s,1,NoOp()
same => n,Set(LIMIT_PLAYAUDIO_CALLER=yes)
same => n,Set(LIMIT_WARNING_FILE=time_limit_reached)
same => n,Dial(Local/s@dial-test,3,L(3540000:60000))
same => n,Hangup()
[dial-test]
exten => s,1,NoOp()
same => n,Dial(Local/s@dial-dest,,gH)
same => n,Playback(goodbye)
same => n,Hangup()
[dial-dest]
exten => s,1,Answer()
same => n,MusicOnHold()
same => n,Hangup()
See what I’m doing here? I’m using a little fiddle to allow the caller to stop listening to music on hold. And it works….. the gH means that the caller can hang up the remote end. Great!
BUT…. I have a large dialplan, and something, somehow, somewhere, is messing with “Disconnect Call”.
Because once through, nothing, not even star, does anything. It’s like the receiving end (dial-dest in the example above) has become deaf!
I’ve turned on debug and verbose to level 9, and there’s nothing. It connects, starts music on hold, and then just ignores everything.
Anything else I can add to the dialplan to see what might be causing this? (I’ve also tried dumpchan, too).
It USED to work, and some point in the last week, it stopped working.
(But the test dialplan above works). Mind boggled!
Just to double check, yes, it’s all set OK
features show Builtin Feature Default Current
————— ——- —–
4 thoughts on - What Could Be Stopping “Disconnect Call” Feature From Working (set In Features.txt)
Beware of local channel optimization. You are putting state on local channels that can optimize out. When the local channels optimize out they take the state with them.
In the dialplan above you are creating the channel chain below.
PJSIP/caller –> Local/s@dial-test;1 — Local/s@dial-test;2 –>
Local/s@dial-dest;1 — Local/s@dial-dest;2
PJSIP/caller gets the L() duration and sounds put on it. The Local/s@dial-test;1 gets the L() duration put on it. The Local/s@dial-test;2 gets the H dial option put on it.
There is a bridge connecting PJSIP/caller and Local/s@dial-test;1
There is a bridge connecting Local/s@dial-test;2 and Local/s@dial-dest;1
When Local/s@dial-dest;2 executes Answer it will allow Local/s@dial-test;1
and ;2 to optimize out because both ends are in a bridge. Thus the H dial option will disappear from the channel chain.
Richard
Thank you – that makes sense. I’ve seen something about swapping and optimizing channels on the console, but I didn’t realise “optimize”
meant “not do what you wanted”.
OK, so here’s why I’m dialling anything at all:
The first dial is because I MUST limit the incoming call to less than
60 minutes.
The second dial, which carries the gH option, is because I want someone to be able to listen to a radio stream
From previous discussion here, it seems the only way to do that is the gH workaround above.
If I’m not missing a trick here and there’s no better way to do those to things, is there any way to force Asterisk to NOT “optimize” those channels?
In article, Jonathan H wrote:
Yes, append /n to the local channel:
same => n,Dial(Local/s@dial-test/n,3,L(3540000:60000))
Cheers Tony
You, sir, are a genius. Thank you!
I spent ages staring at https://wiki.asterisk.org/wiki/display/AST/Asterisk+14+Application_Dial but as soon as you gave than /n, everything is working again and I
found https://wiki.asterisk.org/wiki/display/AST/Local+Channel+Optimization which explains more.
Thank you again.