[asterisk-users] best practices for dialing multiple contacts of multiple extensions

Brian J. Murrell brian at interlinx.bc.ca
Fri Mar 8 08:41:49 CST 2019


On Thu, 2019-02-21 at 11:17 -0500, Brian J. Murrell wrote:
> In the past, I have created variables that hold multiple extensions
> such as:
> 
> HOUSEPHONES=PJSIP/mom&PJSIP&dad&PJSIP/grandma
> 
> so that I can do a Dial(${HOUSEPHONES},...) with it, to ring multiple
> phones.
> 
> But now some of those phones will be registering multiple times and
> thus have multiple contacts, so I want to use ${PJSIP_DIAL_CONTACTS()
> to expand all of the contacts of an endpoint.
> 
> But of course you can't pass a string such as what's in
> ${HOUSEPHONES}
> to ${PJSIP_DIAL_CONTACTS()}.
> 
> I wonder what others are doing about this?
> 
> I had considered:
> 
> HOUSEPHONES=PJSIP/mom&PJSIP&dad&${PJSIP_DIAL_CONTACTS(grandma)}
> 
> but I suspect that that just adds the contacts for grandma at the
> time
> the dialplan is loaded and is not updated as her contacts actually
> change.  Correct?
> 
> I could imagine a bunch of "dialplan" code to break up a & separated
> string, strip off the PJSIP/ and then run each item through
> ${PJSIP_DIAL_CONTACTS()} and concatenate it all back together with
> &s.
> 
> Even in AEL (which is probably what I'd do it in) it seems like this
> could be a bit hairy and possibly somebody else must have invented
> this
> while already.
> 
> Or is there some other best known practice to handle all of this that
> I
> am not considering?

Since nobody offered up any BPs, I will provide the AEL macro that I
wrote to do this expansion:

macro expand_exten(ext) {
    while ("${ext}" != "") {
        Set(e=${SHIFT(ext,&)});
        if ("${e:0:5}" = "PJSIP") {
            Set(e=${PJSIP_DIAL_CONTACTS(${STRREPLACE(e,PJSIP/,)})});
        } 
        if ("${e}" != "") {
            Set(newext=${newext}${e}&);
        }
    }
    // blech!  global variables because there no way to make a
    // function/gosub/etc that returns a value
    Set(newext=${newext:0:-1});
    Return(${newext});
    return;
}

where the first argument passed in is an extention of the format:

PJSIP/<sip_account>

I'm pretty new to AEL, so any constructive criticism would be welcome.

Cheers,
b.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: This is a digitally signed message part
URL: <http://lists.digium.com/pipermail/asterisk-users/attachments/20190308/74454979/attachment.sig>


More information about the asterisk-users mailing list