[general] static = yes writeprotect = no autofallthrough = yes clearglobalvars = no priorityjumping = no [globals] ;default IAXCHAN for outbound dialing with 2Talk. IAXCHAN = 099129100 [macro-stdexten] exten => s,1,Dial(${ARG2},20) exten => s,2,Goto(s-${DIALSTATUS},1) exten => s-NOANSWER,1,Voicemail(${ARG1},u) exten => s-NOANSWER,2,Goto(default,s,1) exten => s-BUSY,1,Voicemail(${ARG1},b) exten => s-BUSY,2,Goto(default,s,1) exten => _s-.,1,Goto(s-NOANSWER,1) exten => a,1,VoicemailMain(${ARG1}) [numberplan-flexible] ;; plancomment => Flexible handle all, with or without leading 1. include => numberplan-flexible-knownexternal3-5digit include => numberplan-flexible-internal include => numberplan-flexible-external [numberplan-flexible-knownexternal3-5digit] include = default include => numberplan-internal-helper exten => _111,1,Dial(IAX2/${IAXCHAN}/111) ;; comment => Set of emergency numbers exten => _1111,1,Dial(IAX2/${IAXCHAN}/111) ;; comment => Set of emergency numbers exten => _911,1,Dial(IAX2/${IAXCHAN}/111) ;; comment => Set of emergency numbers exten => _1911,1,Dial(IAX2/${IAXCHAN}/111) ;; comment => Set of emergency numbers exten => _999,1,Dial(IAX2/${IAXCHAN}/111) ;; comment => Set of emergency numbers exten => _1999,1,Dial(IAX2/${IAXCHAN}/111) ;; comment => Set of emergency numbers exten => _0XX,1,Dial(IAX2/${IAXCHAN}/${EXTEN:0}) ;; comment => Set of telecom short code numbers, 3 digits exten => _0XXX,1,Dial(IAX2/${IAXCHAN}/${EXTEN:0}) ;; comment => Set of telecom short code numbers, 4 digits exten => _0XXXX,1,Dial(IAX2/${IAXCHAN}/${EXTEN:0}) ;; comment => Set of telecom short code numbers, 5 digits exten => _08XXXX,1,Dial(IAX2/${IAXCHAN}/${EXTEN:0}) ;; comment => Set of telecom short code numbers, 5 digits [numberplan-internal-helper] exten => _4737,1,Dial(SIP/702) exten => _4645,1,Dial(SIP/703) exten => _4783,1,Dial(SIP/704) exten => _4866,1,Dial(SIP/705) exten => _4284,1,Dial(SIP/706) exten => _4241,1,Dial(SIP/707) exten => _4237,1,Dial(SIP/708) exten => _4467,1,Dial(SIP/709) exten => _4642,1,Dial(SIP/710) exten => _4788,1,Dial(SIP/711) exten => _4264,1,Dial(SIP/713) exten => _715,1,Dial(SIP/713) exten => _4663,1,Dial(SIP/717) exten => _9000,1,Goto(dialoutapp2,s,1) [numberplan-flexible-internal] exten => _[2-9]XX,1,Dial(SIP/${EXTEN:0}) ;; comment => All other 3 digit numbers, not starting with 0 or 1 are internal... exten = _909!,1, Dial (SIP/${EXTEN:3}@909) [numberplan-IAX2-SetDDI] exten = _X.,1,NoOp(callerid num is ${CALLERID(num)}) ;The following code should be set once for every extension which has a DDI (only), and only if we want them to call out using it... ;exten = _X.,n,GoToIf($[${CALLERID(num)} = 701]?yesDDI) exten = _X.,n,GoToIf($[${CALLERID(num)} = 702]?yesDDI) exten = _X.,n,GoToIf($[${CALLERID(num)} = 703]?yesDDI) exten = _X.,n,GoToIf($[${CALLERID(num)} = 704]?yesDDI) exten = _X.,n,GoToIf($[${CALLERID(num)} = 705]?yesDDI) exten = _X.,n,GoToIf($[${CALLERID(num)} = 706]?yesDDI) exten = _X.,n,GoToIf($[${CALLERID(num)} = 707]?yesDDI) exten = _X.,n,GoToIf($[${CALLERID(num)} = 708]?yesDDI) exten = _X.,n,GoToIf($[${CALLERID(num)} = 709]?yesDDI) exten = _X.,n,GoToIf($[${CALLERID(num)} = 710]?yesDDI) exten = _X.,n,GoToIf($[${CALLERID(num)} = 711]?yesDDI) exten = _X.,n,GoToIf($[${CALLERID(num)} = 712]?yesDDI) exten = _X.,n,GoToIf($[${CALLERID(num)} = 713]?yesDDI) exten = _X.,n,GoToIf($[${CALLERID(num)} = 717]?yesDDI) exten = _X.,n(noDDI),NoOp(Caller does not have an outbound DDI) exten = _X.,n,GoTo(exitDDI) exten = _X.,n(yesDDI),Set(IAXCHAN=0991291${CALLERID(num):1}) ;exten = _X.,n(yesDDI),Set(IAXCHAN=099720052) exten = _X.,n(exitDDI),Goto(numberplan-cost-efficient,${EXTEN},1) exten = _*X.,1,NoOp(callerid num is ${CALLERID(num)}) exten = _*X.,n,GoToIf($[${CALLERID(num)} = 707]?yesDDI) exten = _*X.,n(noDDI),NoOp(Caller does not have an outbound DDI) exten = _*X.,n,GoTo(exitDDI) exten = _*X.,n(yesDDI),Set(IAXCHAN=0991291${CALLERID(num):1}) exten = _*X.,n(exitDDI),Goto(numberplan-cost-efficient,${EXTEN},1) [from-trunk] ; This is the generic, non-DDI 2Talk inbound trunk. ;exten = _0800773342.,1,Goto(HolidayMenu,s,1) ;exten = 099129109,1,Goto(voicemenu-custom-1,s,1) exten = _X.,1,Set(CALLERID(number)=${CALLERID(number)}) ;The following option programmed for the 2009-2010 Christmas and NYE break. All inbound calls through the IAX trunk (0800 calls) to be sent to the Holdiay Menu which covers call out cost, and tries to contact oncall staff. ;Then dumps the caller into the Support voicemail box. ;exten = _X.,n,Goto(HolidayMenu,s,1) ;exten = _X.,n,Goto(FollowMeCover,s,1) ;The following is the normal pathway for inbound calls. exten = _X.,n,Goto(voicemenu-custom-1,s,1) exten = i,1,Set(CALLERID(number)=${CALLERID(number)}) exten = i,n,Goto(voicemenu-custom-1,s,1) [from-099129107] exten = _X.,1,Set(CALLERID(number)=${CALLERID(number)}) exten = _X.,n,Goto(default,707,1) [default] include => stdexten exten = i,1,Answer exten = i,2,Goto(voicemenu-custom-2,s,1) exten = 714,1,Goto(default,705,1) exten = 750,1,ConfBridge(750) exten = 751,1,ConfBridge(751) exten = 752,1,ConfBridge(752) exten = 753,1,ConfBridge(753) exten = 754,1,ConfBridge(754) exten = 755,1,ConfBridge(755) exten = 801,1,Goto(ringroups-custom-2,s,1) exten = 802,1,Goto(ringroups-custom-3,s,1) exten = 803,1,Goto(ringroups-custom-4,s,1) exten = 804,1,Goto(ringroups-custom-5,s,1) exten = 805,1,Goto(ringroups-custom-1,s,1) exten = 888,1,Set(mailbox=${CALLERID(num)}) exten = 888,2,VoicemailMain(s${CALLERID(num)}) exten = 888,3,Hangup exten = 889,1,VoicemailMain() exten = 890,1,Goto(voicemenu-custom-2,s,1) exten = 900,1,Goto(recordPrompts,s,1) exten = 901,1,Goto(playbackPrompts,s,1) exten = 991,1,Goto(FollowMeCover,s,1) exten = 992,1,Goto(aussieInboundLateAfternoon,s,1) exten = 993,1,Goto(aussieInboundMain,s,1) exten = 994,1,Goto(aussieOutsideHours,s,1) exten = 995,1,Goto(DebugDialingParty,s,1) exten = 996,1,Goto(HolidayMenu2014,s,1) exten = 997,1,Goto(voicemenu-custom-6,s,1) ; Music on hold test exten = 998,1,Goto(voicemenu-custom-1,s,1) exten = _9998XXXXXXX.,1,Dial(IAX2/099129100/${EXTEN:4},25,rM(screen)) ; without r it seems to pass a second or two of audio first exten = _9999XXXXXXX.,1,Dial(IAX2/099129100/${EXTEN:4},25,rM(screen)) ; without r it seems to pass a second or two of audio first ;exten = _9999XXXXXXX.,2,Hangup ; You can also substitute this with a Voicemail destination or other alternative destination [stdexten] ; ; Standard extension subroutine: ; ${EXTEN} - Extension ; ${ARG1} - Device(s) to ring ; ${ARG2} - Optional context in Voicemail ; ; Note that the current version will drop through to the next priority in the ; case of their pressing '#'. This gives more flexibility in what do to next: ; you can prompt for a new extension, or drop the call, or send them to a ; general delivery mailbox, or... ; ; The use of the LOCAL() function is purely for convenience. Any variable ; initially declared as LOCAL() will disappear when the innermost Gosub context ; in which it was declared returns. Note also that you can declare a LOCAL() ; variable on top of an existing variable, and its value will revert to its ; previous value (before being declared as LOCAL()) upon Return. ; exten => _X.,50000(stdexten),NoOp(Start stdexten) exten => _X.,n,Answer exten => _X.,n,Set(LOCAL(ext)=${EXTEN}) exten => _X.,n,Set(LOCAL(dev)=${ARG1}) exten => _X.,n,Set(LOCAL(cntx)=${ARG2}) exten => _X.,n,Set(LOCAL(mbx)=${ext}${IF($[!${ISNULL(${cntx})}]?@${cntx})}) exten => _X.,n,Dial(${dev},20) ; Ring the interface, 20 seconds maximum exten => _X.,n,Goto(stdexten-${DIALSTATUS},1) ; Jump based on status (NOANSWER,BUSY,CHANUNAVAIL,CONGESTION,ANSWER) exten => stdexten-NOANSWER,1,Voicemail(${mbx},u) ; If unavailable, send to voicemail w/ unavail announce exten => stdexten-NOANSWER,n,Goto(voicemenu-custom-1,s,1) ; If they press #, return to start exten => stdexten-BUSY,1,Voicemail(${mbx},b) ; If busy, send to voicemail w/ busy announce exten => stdexten-BUSY,n,Goto(voicemenu-custom-1,s,1) ; If they press #, return to start exten => _stde[x]te[n]-.,1,Goto(stdexten-NOANSWER,1) ; Treat anything else as no answer exten => a,1,VoicemailMain(${mbx}) ; If they press *, send the user into VoicemailMain exten => a,n,Return()