What Could Be Stopping “Disconnect Call” Feature From Working (set In Features.txt)

Home » Asterisk Users » What Could Be Stopping “Disconnect Call” Feature From Working (set In Features.txt)
Asterisk Users 4 Comments

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…

exten => s,1,NoOp()
same => n,Set(LIMIT_WARNING_FILE=time_limit_reached)
same => n,Dial(Local/s@dial-test,3,L(3540000:60000))
same => n,Hangup()

exten => s,1,NoOp()
same => n,Dial(Local/s@dial-dest,,gH)
same => n,Playback(goodbye)
same => n,Hangup()

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.


  • 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