<div dir="ltr"><div dir="ltr">On Thu, Jul 28, 2022 at 10:45 AM Kingsley Tart <<a href="mailto:kingsley@dns99.co.uk">kingsley@dns99.co.uk</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi,<br>
<br>
We have instances where we dial multiple destinations simultaneously<br>
and then an answer 'macro' prompts the callee to press 1 to accept the<br>
call or 3 to reject.<br>
<br>
Previously if they pressed 3 (or just hung up) the other destinations<br>
would continue to ring.<br>
<br>
Now on Asterisk 18.13.0, the first person to answer and reject the call<br>
causes Asterisk to stop ringing the other destinations, with PJSIP<br>
sending a CANCEL with the following headers:<br>
<br>
Reason: SIP;cause=200;text="Call completed elsewhere"<br>
Reason: Q.850;cause=26<br>
<br>
<br>
I've created a simplified test dialplan to illustrate the issue; calls<br>
come in to the test context. Phone numbers and endpoints anonymised:<br>
<br>
<br>
--8<------------------------------------------------------------------<br>
[test]<br>
exten => _X.,1,Dial(Local/12345678@test_dodial&Local/87654321@test_dodial,20,g)<br>
same => n,NoOp(########## HANGUPCAUSE=${HANGUPCAUSE}, DIALSTATUS=${DIALSTATUS})<br>
<br>
<br>
[test_dodial]<br>
exten => _X.,1,NoOp(Dialling ${EXTEN})<br>
same => n,Dial(PJSIP/provider/sip:${EXTEN}@endpoint:5060,,U(macro-testanswer^${EXTEN})g)<br>
same => n,NoOp(ENDED ${EXTEN})<br>
<br>
<br>
[macro-testanswer]<br>
exten => s,1,NoOp(ANSWERING ${ARG1})<br>
same => n,GotoIf($["${ARG1}"!="12345678"]?end_macro)<br>
same => n,Set(MACRO_RESULT=CONGESTION)<br>
same => n,Hangup(21)<br>
same => n(end_macro),Return()<br>
--8<------------------------------------------------------------------<br>
<br>
<br>
Both numbers ring at once, but if 12345678 answers my test treats that<br>
as the callee rejecting the call. What should happen is that 87654321<br>
should continue to ring, but it doesn't.<br>
<br>
<br>
What comes up in the Asterisk console is this:<br>
<br>
--8<------------------------------------------------------------------<br>
    -- PJSIP/provider-00000004 answered Local/12345678@test_dodial-00000002;2<br>
    -- PJSIP/provider-00000004 Internal Gosub(macro-testanswer,s,1(12345678)) start<br>
    -- Executing [s@macro-testanswer:1] NoOp("PJSIP/provider-00000004", "ANSWERING 12345678") in new stack<br>
    -- Executing [s@macro-testanswer:2] GotoIf("PJSIP/provider-00000004", "0?end_macro") in new stack<br>
    -- Executing [s@macro-testanswer:3] Set("PJSIP/provider-00000004", "MACRO_RESULT=CONGESTION") in new stack<br>
    -- Executing [s@macro-testanswer:4] Hangup("PJSIP/provider-00000004", "21") in new stack<br>
  == Spawn extension (macro-testanswer, s, 4) exited non-zero on 'PJSIP/provider-00000004'<br>
[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.<br>
    -- Local/12345678@test_dodial-00000002;1 answered PJSIP/squiresvi-00000003<br>
    -- Channel PJSIP/provider-00000004 joined 'simple_bridge' basic-bridge <8db6d4f7-dac2-4f6e-840a-eaa557f1769a><br>
    -- Channel PJSIP/provider-00000004 left 'simple_bridge' basic-bridge <8db6d4f7-dac2-4f6e-840a-eaa557f1769a><br>
  == Spawn extension (test_dodial, 447919554754, 2) exited non-zero on 'Local/447919554754@test_dodial-00000003;2'<br>
    -- Executing [12345678@test_dodial:3] NoOp("Local/12345678@test_dodial-00000002;2", "ENDED 12345678") in new stack<br>
    -- Auto fallthrough, channel 'Local/12345678@test_dodial-00000002;2' status is 'ANSWER'<br>
    -- Channel Local/12345678@test_dodial-00000002;1 joined 'simple_bridge' basic-bridge <4e7cdff8-3fc6-412e-b11f-ffd95ca75960><br>
    -- Channel Local/12345678@test_dodial-00000002;1 left 'simple_bridge' basic-bridge <4e7cdff8-3fc6-412e-b11f-ffd95ca75960><br>
    -- Executing [01476292508@test:2] NoOp("PJSIP/squiresvi-00000003", "########## HANGUPCAUSE=21, DIALSTATUS=ANSWER") in new stack<br>
    -- Auto fallthrough, channel 'PJSIP/squiresvi-00000003' status is 'ANSWER'<br>
--8<------------------------------------------------------------------<br>
<br>
<br>
I also note that the NoOp at the end of [test_dodial] doesn't get<br>
executed.<br>
<br>
Any idea how I can fix this?<br></blockquote><div><br></div><div>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.</div></div><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div style="font-family:tahoma,sans-serif"><font color="#073763">Joshua C. Colp</font></div><div style="font-family:tahoma,sans-serif"><font color="#073763">Asterisk Project Lead</font></div><div style="font-family:tahoma,sans-serif"><font color="#073763">Sangoma Technologies</font></div><div style="font-family:tahoma,sans-serif"><font color="#073763">Check us out at <a href="http://www.sangoma.com" target="_blank">www.sangoma.com</a> and <a href="http://www.asterisk.org" target="_blank">www.asterisk.org</a></font><br></div></div></div></div></div></div></div></div></div></div></div>