Hello everyone!
I want to execute some dialplan logic on callee channel regardless who initiate hangup. More than that, I need to playback some sound file to callee if calling hangup. So I use ‘F’ option of application Dial, like in dialplan bellow:
extensions.conf
[local_call]
exten => _X.,1, Verbose(local call processing);
same => n, Dial(SIP/${EXTEN},30,F(local_call,after_dial,1));
same => n, Hangup();
exten => after_dial,1, Verbose(after dial);
same => n, Playback(hello-world);
same => n, Hangup();
exten => h,1, Verbose(hangup exten);
But in such case no code will be executed on callee channel if callee will hangup:
1000 calls 8086 and 8086 hangs up.
Executing [8086@local_call:1] Verbose("SIP/1000-0000004e", "local call processing") in new stack
Executing [8086@local_call:2] Dial("SIP/1000-0000004e", "SIP/8086,30,F(local_call,after_dial,1)") in new stack
-- Called SIP/8086
-- SIP/8086-0000004f is ringing
-- SIP/8086-0000004f answered SIP/1000-0000004e
-- Locally bridging SIP/1000-0000004e and SIP/8086-0000004f
Executing [h@local_call:1] Verbose("SIP/1000-0000004e", "hangup exten") in new stack
== Spawn extension (local_call, 8086, 2) exited non-zero on 'SIP/1000-0000004e'
Alright then, I add ‘e’ Dial option, as accordiing to documentation it will execute h-exten for callee.
But although documentation does not warn about using this two options in the same time, in such case ‘F’ option is silently ignored:
In extensions.conf Dial string replaced with:
same => n, Dial(SIP/${EXTEN},30,eF(local_call,after_dial,1));
1000 calls 8086 and then hangs up.
Executing [8086@local_call:1] Verbose("SIP/1000-00000050", "local call processing") in new stack
Executing [8086@local_call:2] Dial("SIP/1000-00000050", "SIP/8086,30,eF(local_call,after_dial,1)") in new stack
-- Called SIP/8086
-- SIP/8086-00000051 is ringing
-- SIP/8086-00000051 answered SIP/1000-00000050
-- Locally bridging SIP/1000-00000050 and SIP/8086-00000051
Executing [h@local_call:1] Verbose("SIP/1000-00000050", "hangup exten") in new stack
Executing [h@local_call:1] Verbose("SIP/8086-00000051", "hangup exten") in new stack
== Spawn extension (local_call, 8086, 2) exited non-zero on 'SIP/1000-00000050'
I don’t know is it a bug or expected behavior but it makes me unable to provide logic I want.
So what I want is:
- To be able to play audio to callee if calling hangs up
- To be able to execute some dialplan instructions on callee channel if callee hangs up. I have to execute them on callee channel for sure. So executing them on calling channel in h-exten will be insufficient.
Any suggestions?
Asterisk version:
core show version
Asterisk 11.13.1~dfsg-2+b1 built by buildd @ brahms on a x86_64 running Linux on 2015-01-05 21:34:10 UTC