Nathan Bell
2006-Sep-20 13:45 UTC
[asterisk-users] macro-dialout-trunk without agi or manager
Hi everybody, I'm working on implementing asterisk to sit between an outside T1 line and an aging pbx (intertel axxess). I've already received much help from the list, from Mimmus in particular, and for that I am very grateful. Right now I'm getting stuck on implementing the macro for dialout-trunk. All of the implementations I have seen seem to come from freePBX. Simply dropping the freePBX macro into my extensions.conf does not result in a working macro as I am not using freePBX, or any other manager/AGI system at all right now. Let's walk through the macro as I see it, and you can give me pointers on what needs to be changed. [macro-dialout-trunk] exten => s,1,Set(DIAL_TRUNK=${ARG1}) exten => s,n,Set(DIAL_NUMBER=${ARG2}) exten => s,n,Set(ROUTE_PASSWD=${ARG3}) exten => s,n,GotoIf($["${ROUTE_PASSWD}" = ""]?noauth) ; arg3 is pattern password exten => s,n(auth),Authenticate(${ROUTE_PASSWD}) exten => s,n(noauth),Set(GROUP()=OUT_${DIAL_TRUNK}) As far as I can tell, this defines macro-dialout-trunk and takes a trunk, a number, and a password. For my implementation I won't need a password as everyone can call all trunks and any long-distance number they choose. I assume I can just chop off the last 4 lines of this part then. exten => s,n,Macro(user-callerid) exten => s,n,Macro(record-enable,${CALLERID(number)},OUT) exten => s,n,Macro(outbound-callerid,${DIAL_TRUNK}) I don't know what any of this is doing, or why it's doing it. I'll want to set the caller ID using a manager at some point in time, but as of right now I'll just be passing the caller id from the outside T1 along to the pbx. exten => s,n,GotoIf($["${OUTMAXCHANS_${DIAL_TRUNK}}foo" = "foo"]?nomax) exten => s,n(checkmax),GotoIf($[ ${GROUP_COUNT()} > ${OUTMAXCHANS_${DIAL_TRUNK}} ]?chanfull) exten => s,n(nomax),AGI(fixlocalprefix) ; this sets DIAL_NUMBER to the proper dial string for this trunk Right here is where I run into some serious problems. As my trunk is not defined by any manager I can only assume that the OUTMAXCHANS would be 24. Is GROUP_COUNT() a function that I can define in extensions.conf to keep track of how many channels are currently used up? Each line could be used by an incoming or an outgoing connection, would this only keeping track of outgoing connections? Lastly, n(nomax) will "fix" the local prefix. What does this actually do? exten => s,n,Set(OUTNUM=${OUTPREFIX_${DIAL_TRUNK}}${DIAL_NUMBER}) ; OUTNUM is the final dial number That seems straightforward enough. exten => s,n,Set(custom=${CUT(OUT_${DIAL_TRUNK},:,1)}) ; Custom trunks are prefixed with "AMP:" exten => s,n,GotoIf($["${custom}" = "AMP"]?customtrunk) exten => s,n,Dial(${OUT_${DIAL_TRUNK}}/${OUTNUM},120,${TRUNK_OPTIONS}) ; Regular Trunk Dial exten => s,n,Goto(s-${DIALSTATUS},1) exten => s,n(customtrunk),Set(pre_num=${CUT(OUT_${DIAL_TRUNK},$,1)}) exten => s,n,Set(the_num=${CUT(OUT_${DIAL_TRUNK},$,2)}) ; this is where we expect to find string OUTNUM exten => s,n,Set(post_num=${CUT(OUT_${DIAL_TRUNK},$,3)}) exten => s,n,GotoIf($["${the_num}" = "OUTNUM"]?outnum:skipoutnum) ; if we didn't find "OUTNUM", then skip to Dial exten => s,n(outnum),Set(the_num=${OUTNUM}) ; replace "OUTNUM" with the actual number to dial exten => s,n(skipoutnum),Dial(${pre_num:4}${the_num}${post_num},120,${TRUNK_OPTIONS}) exten => s,n,Goto(s-${DIALSTATUS},1) Oy vey, what a doozy. I'm quite sure that I won't need the n(customtrunk) part at all. I assume that I'll just be using the Dial and the following Goto. exten => s,n(chanfull),Noop(max channels used up) exten => s-BUSY,1,NoOp(Trunk is reporting BUSY) exten => s-BUSY,2,Busy() exten => s-BUSY,3,Wait(60) exten => s-BUSY,4,NoOp() exten => _s-.,1,NoOp(Dial failed due to ${DIALSTATUS}) Once again, this part is fairly straightforward, and I assume it will be a direct copy over to the end macro definition. Perhaps I'm asking too much all at once, but I'd really like to better understand how I'm actually dialling a group of lines rather than just hacking at until it works. Thanks in advance to anyone that can explain it all to me. Nathan Bell IT Manager Action Target, Inc. nathanb@actarg.com