[asterisk-users] Dial(${PJSIP_DIAL_CONTACTS(Alice)} & ${PJSIP_DIAL_CONTACTS(Bob)}) how not to fail if one endpoint has no registered AOR?

Administrator TOOTAI admin at tootai.net
Sun Jun 9 08:07:43 CDT 2019


Le 09/06/2019 à 13:19, Benoit Panizzon a écrit :
> Dear List

Hello

> 
> It's probably been more than a year now I switched from chan_sip to
> pjsip. pjsip works much cleaner than chan_sip.
> 
> But!
> 
> I have come across a Problem I was not able to solve with Asterisk
> Dialplan Logic.
> 
> With pjsip an endpoint can have multiple AOR, so you need to expand
> them with ${PJSIP_DIAL_CONTACTS()} to be able to Dial() all of them
> simultaneously.
> 
> But there are also situation where you need to Dial() not only one
> endpoint, but multiple ones, even mixing technologies like IAX and SIP.
> 
> You can specify those multiple endpoints with the & separator in the
> Dial() function.
> 
> Unfortunately if an pjsip endpoint has NO registered AORs,
> ${PJSIP_DIAL_CONTACTS()} returns an empty sting.
> 
> So consider:
> 
> same => n,Dial(IAX2/guest at pbx.digium.com/s at default &
> ${PJSIP_DIAL_CONTACTS(Guest)})
> 
> If there is no Guest registered, the resulting string to dial passed to
> Dial() is: "IAX2/guest at pbx.digium.com/s at default &" which Dial complains
> is not valid, because of a missing second line to dial after the &.

What about to put eveything in a variable and the remove the last 
character if it equal &

Something like

same = 
n,Set(toDial=IAX2/guest at pbx.digium.com/s at default&${PJSIP_DIAL_CONTACTS(Guest)})
same = n,ExecIf($["${toDial:-1}"=="&"]?Set(toDial=${toDial:0:-1}))
same = n,Dial(${toDial})

[...]
-- 
Daniel



More information about the asterisk-users mailing list