Best Practices For Dialing Multiple Contacts Of Multiple Extensions

Home » Asterisk Users » Best Practices For Dialing Multiple Contacts Of Multiple Extensions
Asterisk Users 1 Comment

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?

Cheers, b.

One thought on - Best Practices For Dialing Multiple Contacts Of Multiple Extensions

  • 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/

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

    Cheers, b.