[asterisk-users] SIP Trunk groups

Nicholas Blasgen nicholas at refractivedialer.com
Wed May 27 18:39:11 CDT 2009


I've improved this since this revision, but now a days I don't use limited
systems.  But my code has been used in places that need 100 concurrent
outgoing lines.

[macro-which-line]
exten => s,1,set(TRIES=0)
exten => s,n(nextone),set(TRIES=$[${TRIES} + 1]) ; increment TRIES by 1
exten => s,n,set(DIALSTRING=${TRY${TRIES}}) ; assign TRYn to DIALSTRING
exten => s,n,gotoif($["${DIALSTRING}" = ""]?donehere) ; see if we've run out
of things to try
exten => s,n,ChanIsAvail(${DIALSTRING}) ; it will be up or down, no need for
this to be exclusive
exten => s,n,gotoif($[${AVAILSTATUS} = 0]?:nextone)
exten => s,n,gotoif($[${GROUP_COUNT(${DIALSTRING})} >= 2]?nextone) ; have we
used up the allowed calls on this channel
exten => s,n,set(GROUP()=${DIALSTRING}) ; Lock the line! Yay...
exten => s,n,Dial(${DIALSTRING}/1${ARG1}) ; dial the phone
exten => s,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?donehere) ; Don't keep
dialing
exten => s,n,NoOp("Moving to the next one...");
exten => s,n,goto(nextone) ; TEMP
exten => s,n(donehere),MacroExit() ; we only get here if everything failed

Then in GLOBALS you just set things like:

TRY0=SIP/trunk1
TRY1=SIP/trunk2
TRY3=SIP/other1

The above code is limited to 2 lines per channel.  The code I used
originally (not sure where I found it anymore, might have been this mailing
list or might have been Voip-Info) support defining how many channels you
wanted to use for each provider (ie, provider1 has 2 lines free, but
provider2 has 5 lines).  The original code didn't hold up though since if
multiple lines were being dialed at the exact same instance they would both
return the same availability before dialing the line.  So in this one, I try
to lock the line early and if I get some other kind of error I move on to
the next group because I might have failed due to another race condition.

Anyways, tons of problems when you're limited on channels.  Mine is the best
and one of a very few I've ever seen.  SuperDial, I feel, is a silly idea.
It's exactly the same as a regular Dial string.  No clue why you'd use it
over Dial.  And the reason Dial doesn't work is because if the Dial'ed line
hangs up it returns back to the orginal Dial Plan.  Doesn't help at all.
You hang up on the person, the person goes to the next line in the dial
plan, and you get called again.  You hang up, they call you back again.
Soulds like a good way to use up air time.

Nicholas Blasgen
Partner / Network Operations
Refractive Dialer LLC
415.692-5277 (w)
408.497.9796 (c)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.digium.com/pipermail/asterisk-users/attachments/20090527/e39a354f/attachment.htm 


More information about the asterisk-users mailing list