[asterisk-users] parallel dial problem (used to work on Asterisk 13)

Joshua C. Colp jcolp at sangoma.com
Thu Jul 28 08:52:34 CDT 2022


On Thu, Jul 28, 2022 at 10:45 AM Kingsley Tart <kingsley at dns99.co.uk> wrote:

> Hi,
>
> We have instances where we dial multiple destinations simultaneously
> and then an answer 'macro' prompts the callee to press 1 to accept the
> call or 3 to reject.
>
> Previously if they pressed 3 (or just hung up) the other destinations
> would continue to ring.
>
> Now on Asterisk 18.13.0, the first person to answer and reject the call
> causes Asterisk to stop ringing the other destinations, with PJSIP
> sending a CANCEL with the following headers:
>
> Reason: SIP;cause=200;text="Call completed elsewhere"
> Reason: Q.850;cause=26
>
>
> I've created a simplified test dialplan to illustrate the issue; calls
> come in to the test context. Phone numbers and endpoints anonymised:
>
>
> --8<------------------------------------------------------------------
> [test]
> exten => _X.,1,Dial(Local/12345678 at test_dodial&Local/87654321 at test_dodial
> ,20,g)
> same => n,NoOp(########## HANGUPCAUSE=${HANGUPCAUSE},
> DIALSTATUS=${DIALSTATUS})
>
>
> [test_dodial]
> exten => _X.,1,NoOp(Dialling ${EXTEN})
> same => n,Dial(PJSIP/provider/sip:${EXTEN}@endpoint
> :5060,,U(macro-testanswer^${EXTEN})g)
> same => n,NoOp(ENDED ${EXTEN})
>
>
> [macro-testanswer]
> exten => s,1,NoOp(ANSWERING ${ARG1})
> same => n,GotoIf($["${ARG1}"!="12345678"]?end_macro)
> same => n,Set(MACRO_RESULT=CONGESTION)
> same => n,Hangup(21)
> same => n(end_macro),Return()
> --8<------------------------------------------------------------------
>
>
> Both numbers ring at once, but if 12345678 answers my test treats that
> as the callee rejecting the call. What should happen is that 87654321
> should continue to ring, but it doesn't.
>
>
> What comes up in the Asterisk console is this:
>
> --8<------------------------------------------------------------------
>     -- PJSIP/provider-00000004 answered Local/12345678 at test_dodial-00000002
> ;2
>     -- PJSIP/provider-00000004 Internal
> Gosub(macro-testanswer,s,1(12345678)) start
>     -- Executing [s at macro-testanswer:1] NoOp("PJSIP/provider-00000004",
> "ANSWERING 12345678") in new stack
>     -- Executing [s at macro-testanswer:2] GotoIf("PJSIP/provider-00000004",
> "0?end_macro") in new stack
>     -- Executing [s at macro-testanswer:3] Set("PJSIP/provider-00000004",
> "MACRO_RESULT=CONGESTION") in new stack
>     -- Executing [s at macro-testanswer:4] Hangup("PJSIP/provider-00000004",
> "21") in new stack
>   == Spawn extension (macro-testanswer, s, 4) exited non-zero on
> 'PJSIP/provider-00000004'
> [Jul 28 14:30:38] NOTICE[31819][C-00000002]: app_stack.c:1079 gosub_run:
> PJSIP/provider-00000004 Abnormal 'Gosub(macro-testanswer,s,1(12345678))'
> exit.  Popping routine return locations.
>     -- Local/12345678 at test_dodial-00000002;1 answered
> PJSIP/squiresvi-00000003
>     -- Channel PJSIP/provider-00000004 joined 'simple_bridge' basic-bridge
> <8db6d4f7-dac2-4f6e-840a-eaa557f1769a>
>     -- Channel PJSIP/provider-00000004 left 'simple_bridge' basic-bridge
> <8db6d4f7-dac2-4f6e-840a-eaa557f1769a>
>   == Spawn extension (test_dodial, 447919554754, 2) exited non-zero on
> 'Local/447919554754 at test_dodial-00000003;2'
>     -- Executing [12345678 at test_dodial:3]
> NoOp("Local/12345678 at test_dodial-00000002;2", "ENDED 12345678") in new
> stack
>     -- Auto fallthrough, channel 'Local/12345678 at test_dodial-00000002;2'
> status is 'ANSWER'
>     -- Channel Local/12345678 at test_dodial-00000002;1 joined
> 'simple_bridge' basic-bridge <4e7cdff8-3fc6-412e-b11f-ffd95ca75960>
>     -- Channel Local/12345678 at test_dodial-00000002;1 left 'simple_bridge'
> basic-bridge <4e7cdff8-3fc6-412e-b11f-ffd95ca75960>
>     -- Executing [01476292508 at test:2] NoOp("PJSIP/squiresvi-00000003",
> "########## HANGUPCAUSE=21, DIALSTATUS=ANSWER") in new stack
>     -- Auto fallthrough, channel 'PJSIP/squiresvi-00000003' status is
> 'ANSWER'
> --8<------------------------------------------------------------------
>
>
> I also note that the NoOp at the end of [test_dodial] doesn't get
> executed.
>
> Any idea how I can fix this?
>

I haven't tested it, but you're calling it a macro when it's not. You're
invoking a subroutine. As a result MACRO_RESULT won't do anything, it
should be GOSUB_RESULT. You also shouldn't call Hangup in there.

-- 
Joshua C. Colp
Asterisk Project Lead
Sangoma Technologies
Check us out at www.sangoma.com and www.asterisk.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-users/attachments/20220728/bb573591/attachment.html>


More information about the asterisk-users mailing list