All pastes #22991 Raw Edit

darwin

public text v1 · immutable
#22991 ·published 2005-09-15 15:41 UTC
rendered paste body
;--------------------------------------------------------------------
;  Begining of Usable Basic Extensions.conf File
;--------------------------------------------------------------------
;
; Static extension configuration file, used by
; the pbx_config module This is where you configure all your
; inbound and outbound calls in Asterisk
;
; This configuration file is reloaded
; - With the "extensions reload" command in the CLI
; - With the "reload" command (that reloads everything) in the CLI
;
; The "General" category is for certain variables
[general]
;
; If static is set to no, or omitted, then the pbx_config will rewrite
; this file when extensions are modified  Remember that all comments
; made in the file will be lost when that happens
;
; XXX Not yet implemented XXX
;
static=yes
;
; if static=yes and writeprotect=no, you can save dialplan by
; CLI command 'save dialplan' too
;
writeprotect=yes
;
; If autofallthrough is set, then if an extension runs out of
; things to do, it will terminate the call with BUSY, CONGESTION
; or HANGUP depending on Asterisk's best guess (strongly recommended)1
;
; If autofallthrough is not set, then if an extension runs out of
; things to do, asterisk will wait for a new extension to be dialed
; (this is the original behavior of Asterisk 1.0 and earlier)
;
autofallthrough=yes
;
; If clearglobalvars is set, global variables will be cleared
; and reparsed on an extensions reload, or Asterisk reload
;
; If clearglobalvars is not set, then global variables will persist
; through reloads, and even if deleted from the extensionsconf or
; one if its included files, will remain set to the previous value
;
clearglobalvars=yes
;
; You can include other config files, use the #include command
;  (without the ';')
; Note that this is different from the "include" command that
; includes contexts within other contexts The #include command
;  works in all asterisk configuration files
; #include "filenameconf"
;
; The "Globals" category contains global variables that can be referenced
; in the dialplan with ${VARIABLE} or ${ENV(VARIABLE)} for Environmental
;  variable ${${VARIABLE}} or ${text${VARIABLE}} or any hybrid
;
[globals]
;CONSOLE=Console/dsp                             ; Console interface for demo
;CONSOLE=Zap/1
;CONSOLE=Phone/phone0
;IAXINFO=guest                                   ; IAXtel username/password
;IAXINFO=myuser:mypass
;TRUNK=Zap/g2       
;
; Note the 'g2' in the TRUNK variable above It specifies which group
; (defined in zapataconf) to dial, ie group 2, and how to choose a
; channel to use in the specified group The four possible options are:
;
; g: select the lowest-numbered non-busy Zap channel (aka ascending
;    sequential hunt group)
; G: select the highest-numbered non-busy Zap channel (aka descending
;    sequential hunt group)
; r: use a round-robin search, starting at the next highest channel
;    than last time (aka ascending rotary hunt group)
; R: use a round-robin search, starting at the next lowest channel
;    than last time (aka descending rotary hunt group)
;
;TRUNKMSD=1  ; MSD digits to strip (usually 1 or 0)
;TRUNK=IAX2/user:pass@provider                   
;
;
DEFAULTTIMEOUT=30 
VERYSHORTTIMEOUT=10 
SHORTTIMEOUT=20 
MEDTIMEOUT=40 
LONGTIMEOUT=70 
;
;Sip/Voip Provider - This is you DID Provider 
LINE=
USERID=
COMPANY=
PROTOCOL=SIP
;
COMPANYNAME=Company Name Here  ; Your Comapny Name here
;
;SipPhonecom user info
;SIPLINE=                    ;your SipPhonecom Number Here
;SIPUSERID=                  ;Your User ID here
;SIPPASS=                    ;Your Password here
;
;IAXTEL user info
;IAXLINE=
;IAXTELUSER=
;IAXTELPASS=
;
;FreeWorld Dialup user info
;FWDLINE=
;FWDUSERID=
;FWDPASSWD=
;
;Used for rollover
;
;Your Sip Line Providers names used for rollover
;LINE1=Sip Company 1
;LINE2=Sip Comapny 2
;LINE3=Sip Company 3
;LINE4=Sip Company 4
;
;---------------------------------------------------------------
; Any category other than "General" and "Globals" represent
; extension contexts, which are collections of extensions
;
; Extension names may be numbers, letters, or combinations
; thereof If an extension name is prefixed by a '_'
; character, it is interpreted as a pattern rather than a
; literal  In patterns, some characters have special meanings:
;
;   X - any digit from 0-9
;   Z - any digit from 1-9
;   N - any digit from 2-9
;   [1235-9] - any digit in the brackets (in this example, 1,2,3,5,6,7,8,9)
;    - wildcard, matches anything remaining (eg _9011 matches
;       anything starting with 9011 excluding 9011 itself)
;   ! - wildcard, causes the matching process to complete as soon as
;       it can unambiguously determine that no other matches are possible
;
; For example the extension _NXXXXXX would match normal 7 digit dialings,
; while _1NXXNXXXXXX would represent an area code plus phone number
; preceeded by a one
;
; Each step of an extension is ordered by priority, which must
; always start with 1 to be considered a valid extension  The priority
; "next" or "n" means the previous priority plus one, regardless of whether
; the previous priority was associated with the current extension or not
; The priority "same" or "s" means the same as the previously specified
; priority, again regardless of whether the previous entry was for the
; same extension  Priorities may be immediately followed by a plus sign
; and another integer to add that amount (most useful with 's' or 'n')
; Priorities may then also have an alias, or label, in
; parenthesis after their name which can be used in goto situations
;
; Contexts contain several lines, one for each step of each
; extension, which can take one of two forms as listed below,
; with the first form being preferred  One may include another
; context in the current one as well, optionally with a
; date and time  Included contexts are included in the order
; they are listed
;
;[context]
;exten => someexten,priority[+offset][(alias)],application(arg1,arg2,...)
;exten => someexten,priority[+offset][(alias)],application,arg1|arg2...
;
; Timing list for includes is 
;
;   <time range>|<days of week>|<days of month>|<months>
;
;include => daytime|9:00-17:00|mon-fri|*|*
;
; ignorepat can be used to instruct drivers to not cancel dialtone upon
; receipt of a particular pattern.  The most commonly used example is
; of course '9' like this:
;
;ignorepat => 9
;
; so that dialtone remains even after dialing a 9.
;
; The SWITCH statement permits a server to share the dialplain with
; another server. Use with care: Reciprocal switch statements are not
; allowed (e.g. both A -> B and B -> A), and the switched server needs
; to be on-line or else dialing can be severly delayed.
;
;[iaxprovider]
;switch => IAX2/user:[key]@myserver/mycontext
;
; For more information on applications, just type "show applications" at your
; friendly Asterisk CLI prompt.
;
; 'show application <command>' will show details of how you
; use that particular application in this file, the dial plan. 
;
;-----------------------------------------------------------------------------
; Magic Extensions to be used within a context
;-----------------------------------------------------------------------------
; s = start
; t = This gets jumped to on timeout waiting for keypress
; i = This gets jumped to on an invalid extension
; h = This gets jumped to when a call in a given context is hung up
; fax = This gets jumped to on fax tone detection
;-----------------------------------------------------------------------------
; Dial Options
;-----------------------------------------------------------------------------
; Dial jumps to priority n+101 on busy if n+101 exists
; 't' -- Allow the user to dial # then an extension to transfer
; 'T' -- to allow the calling user to transfer the call
; 'r' -- indicate ringing to the calling party, pass no audio until answer
; 'm' -- provide hold music to the calling party until answered
; 'd' -- data-quality (modem) call (minimum delay)
; 'c' -- clear-channel data call (PRI-PRI only)
; 'H' -- allow caller to hang up by hitting *
; 'C' -- reset call detail record for this call
; 'P[(x)]' -- privacy mode, using 'x' as database if provided
; 'g' -- goes on in context if the destination channel hangs up
;----------------------------------------------------------------------------
;-------------------------------------------------------------------------------
; Start -  inbound call mapping
;--------------------------------------------------------------------
[inbound]
;#include santaline.conf
;
exten => 9187707036,1,Set(${DB(Last/Caller=${CALLERIDNUM})})
exten => 9187707036,2,Dial(IAX2/1004|20|T) ; 20sec timeout
exten => 9187707036,3,Voicemail(u1004)
exten => 9187707036,4,Hangup
exten => 9187707036,103,Voicemail(b1004)
exten => 9187707036,104,Hangup
;
exten => 8882566214,1,Set(${DB(Last/Caller=${CALLERIDNUM})})
exten => 8882566214,2,Dial(IAX2/1004|20|T)
exten => 8882566214,3,Voicemail(u1004)
exten => 8882566214,4,Hangup
exten => 8882566214,103,Voicemail(b1004)
exten => 8882566214,104,Hangup
;
exten => 1004,1,Dial(IAX2/1004|20|T) ; 20sec timeout
exten => 1004,2,Voicemail(u1004)
exten => 1004,3,Hangup
exten => 1004,102,Voicemail(b1004)
exten => 1004,103,Hangup
;
;exten => s,1,Set(DB(Last/Caller=${CALLERIDNUM})
;exten => s,2,Dial(SIP/1001,45,T)
;exten => s,3,Voicemail(u1001)
;exten => s,4,Hangup
;exten => s,103,Voicemail(b1001)
;exten => s,104,Hangup
;
;This Exten Goes to Automated attendant after putting
;caller ID into the Database
;exten => s,1,Set(BD(Last/Caller=${CALLERIDNUM})
;exten => s,2,Goto(autoattend,s,1)
;
;This exten Dial your ZAP lines 
;exten => s1,1,Set(DB(Last/Caller=${CALLERIDNUM})
;exten => s1,2,Dial(ZAP/#,30,r) ;replace # with exten nmbr
;
;-----------------------------------------------------------
[in-pstn] ; under development..... 
exten => s,1,Macro(fixcid) ;need to rewrite......
exten => s,n,Answer
exten => s,n,DigitTimeout(3)
exten => s,n,ResponseTimeout(3)
exten => s,n,Wait(1)
exten => s,n,BackGround(pls-wait-connect-call)
exten => s,n,Dial(Protocal/${EXTEN},30,Tt)
exten => i,1,Playback(pbx-invalid)
exten => i,n,Hangup
;
;-------------------------------------------------------------
;used for private line answering machine......
;-------------------------------------------------------------
[in-analog] 
exten => s,1,Zapateller(answer|nocallerid)
exten => s,2,NoOp
exten => s,2,Macro(record-on,${MYHOMEPHONE},${CALLERIDNUM})
exten => s,3,PrivacyManager
exten => s,4,Dial(${PHONE1}&${PHONE2},30,Tt)
exten => s,5,Answer
exten => s,6,Wait(1)
exten => s,7,Playback()
exten => s,8,Playback()
exten => s,9,Playback()
exten => s,10,Voicemail(u${EXTEN})
exten => s,11,Hangup
exten => s,108,Wait(2)
exten => s,109,Voicemail(b${EXTEN})
exten => s,110,Hangup
exten => h,1,Macro(record-cleanup)
;--------------------------------------------------------------------
; End - inbound call mapping
;--------------------------------------------------------
;--------------------------------------------------------
; Start - Outbound mapping
;--------------------------------------------------------
;[outbound]
include => teliax
;include => asterlink
;include => iaxtel
;include => sipphone
;include => fwd
;--------------------------------------------------------
;sip rollover  ver 1
;--------------------------------------------------------
;[sip-rollover]
;exten => s,1,GotoIf($[${sipline1} = Congestion]?3:2)
;exten => s,2,Dial(${sipline1},15,rt)
;exten => s,3,GotoIf($[${sipline2} = Congestion]?5:4)
;exten => s,4,Dial(${sipline2},15,rt)
;exten => s,5,GotoIf($[${sipline3} = Congestion]?7:6)
;exten => s,6,Dial(${sipline3},15,rt)
;exten => s,7,GotoIf($[${sipline4} = Congestion]?9:8)
;exten => s,8,Dial(${sipline4},15,rt)
;exten => s,9,Playback(all-outbound-circuts-busy)
;exten => s,10,Hangup
;--------------------------------------------------------
;Begin Providers Area
;--------------------------------------------------------
[teliax]
;US LD & Canada
exten => _1NXXNXXXXXX,1,Set(CALLERID(name)=Richard Neese)
exten => _1NXXNXXXXXX,n,Set(CALLERID(number)=9187707036|a)
exten => _1XXXXXXXXXX,n,DIAL(IAX2/darwin@teliax/${EXTEN}) 
exten => _1NXXNXXXXXX,n,Congestion
exten => _1NXXNXXXXXX,n,Hangup
;
[asterlink]
exten => _1NXXNXXXXXX,1,Set(CALLERID(name)=Richard Neese)
exten => _1NXXNXXXXXX,n,Set(CALLERID(number)=8882566214|a)
exten => _1NXXNXXXXXX,n,Dial(SIP/112603@asterlink/${EXTEN})
exten => _1NXXNXXXXXX,n,Congestion
exten => _1NXXNXXXXXX,n,Hangup
;
;[iaxtel]
;exten => _1700NXXXXXX,1,Set(CALLERID(name)=)
;exten => _1700NXXXXXX,n,Set(CALLERID(number)=|a)
;exten => _1700NXXXXXX,n,Dial(IAX2/${IAXTELUSER}:{IAXTELPASS}@iaxtelcom/${EXTEN}@iaxtel)
;exten => _1700NXXXXXX,n,Congestion
;exten => _1700NXXXXXX,n,Hangup
;
;[sipphone]
;exten => _1747NXXXXXX,1,Set(CALLERID(name)=)
;exten => _1747NXXXXXX,n,Set(CALLERID(number)=|a)
;exten => _1747NXXXXXX,n,Dial(SIP/${EXTEN:1}@sipphone)
;exten => _1747NXXXXXX,n,Playback(invalid)
;exten => _1747NXXXXXX,n,Congestion
;exten => _1747NXXXXXX,n,Hangup
;
;[fwd]
;exten => _#6,1,Set(CALLERID(name)=)
;exten => _#6,n,Set(CALLERID(number)=|a)
;exten => _#6,n,Dial(IAX2/${FWDNUMBER}:${FWDPASSWORD}@iax2fwdnetnet/${EXTEN:1},60,r)
;exten => _#6,n,Congestion
;exten => _#6,n,Hangup
;
;-------------------------------------------------------
;End - Outbound mapping
;-------------------------------------------------------
;-------------------------------------------------------
; Start - 900/976 Blocking                 -
;-------------------------------------------------------
[blocked]
exten => _900NXXXXXX,1,Playback(ss-noservice)
exten => _1NXX976XXXX,1,Playback(ss-noservice)
exten => _976XXXX,1,Playback(ss-noservice)
;--------------------------------------------------------
; End - Blocking Calls    900/976
;--------------------------------------------------------
---------------------------------------------------------
; Start - User Permissions/Privilages
;--------------------------------------------------------
[admin]
include => basic
include => basic-exten
include => exten-test
include => all-exten
include => outbound
;
;[Staff]
;
;[Users]
;
;--------------------------------------------------------
; End - User Permissions/Privilages
;--------------------------------------------------------
;--------------------------------------------------------
;Start Autoattend Menu 
;--------------------------------------------------------
;
[autoattend]
;
exten => s,1,GotoIfTime(*|*|1|jan?holiday,s,1)
exten => s,n,GotoIfTime(*|*|4|jul?holiday,s,1)
exten => s,n,GotoIfTime(*|*|11|nov?holiday,s,1)
exten => s,n,GotoIfTime(*|*|24|nov?holiday,s,1)
exten => s,n,GotoIfTime(*|*|25|dec?holiday,s,1)
exten => s,n,GotoIfTime(08:00-17:00on-fri|*|*?day,s,1)
exten => s,n,GotoIfTime(17:01-07:99|mon-fri|*|*?night,s,1)
exten => s,n,GotoIfTime(09:00-16:00|sat|*|*?day,s,1)
exten => s,n,Goto(night,s,1);
;
[holiday]
;
; provide Holiday greeting and provide emergency access for 
; contract clients 
;
exten => s,1,Playback(office-closed-holiday) ; play the office we are closed message 
exten => s,2,Playback(office-hours) ; play the open hours message 
exten => s,3,Hangup
;
[day]
include => selection
include => all-exten
include => queues
;
exten => s,1,Set(CALLERID(name)=Comapny Name Here)
exten => s,n,Wait,2
exten => s,n,Answer
exten => s,n,Background,day-msg
exten => s,n,DigitTimeout,5
exten => s,n,ResponseTimeout,10
;
[night]
include => selection
include => all-exten
include => queues
;
exten => s,1,Wait,2
exten => s,2,Answer
exten => s,3,Plaback,night-msg
exten => s,4,Voicemail(u######)
exten => s,5,Hangup
;
;--------------------------------------------------------
; END - Autoattend Menu 
;--------------------------------------------------------
;--------------------------------------------------------
; Start - IVR Menu 
;--------------------------------------------------------
[selection]
;
; * - directory ; not setup yet
;exten => *,1,Directory,default
;exten => *,2,Goto,s|1
; # - disconnect
;exten => #,1,Playback,(vm-goodbye)
;exten => #,2,Hangup
; 0 Operator
;exten => 0,1,Macro(stdexten,0,SIP/0)
; 0 - Operator  Queue
;exten => 0,1,Answer
;exten => 0,n,Queue(operator|
;exten => 0,n,Playback(vm-goodbye)
;
;1 Sales Dept
exten => 1,1,GotoIfTime(08:00-16:59|mon-fri|*|*?selection,3,6)
exten => 1,2,GotoIf(Time(17:00-07:29|mon-fri|*|*?selection,3,3)
exten => 1,3,Playback(sales-closed)
exten => 1,4,Playback(vm-goodbye)
exten => 1,5,Hangup
exten => 1,6,BackGround(for-quality-purposes)
exten => 1,7,Playback(this-call-may-be)
exten => 1,8,Playback(recorded)
exten => 1,9,Playback(pls-wait-connect-call)
exten => 1,10,SetMusicOnHold,default
exten => 1,11,SetCallerID,1
exten => 1,12,SetCallerIDName,Sales
exten => 1,13,Goto,queues|200|1
;
;2 Billing Dept
exten => 2,1,GotoIfTime(08:00-16:59|mon-fri|*|*?selection,4,6)
exten => 2,2,GotoIfTime(17:00-07:29|mon-fri|*|*?selection,4,3)
exten => 2,3,Playback(billing-closed)
exten => 2,4,Playback(vm-goodbye)
exten => 2,5,Hangup
exten => 2,6,Playback(for-quality-purposes)
exten => 2,7,Playback(this-call-may-be)
exten => 2,8,Playback(recorded)
exten => 2,9,Playback(pls-wait-connect-call)
exten => 2,10,SetMusicOnHold,default
exten => 2,11,SetCallerID,2
exten => 2,12,SetCallerIDName,Sales
exten => 2,13,Goto,queues|201|1
;
;3 Technical Support Dept
exten => 3,1,GotoIfTime(08:30-17:29|mon-fri|*|*?selection,5,6)
exten => 3,2,GotoIfTime(17:30-08:29|mon-fri|*|*?selection,5,3)
exten => 3,3,Playback(tech-closed)
exten => 3,4,Playback(vm-goodbye)
exten => 3,5,Hangup
exten => 3,6,Playback(for-quality-purposes)
exten => 3,7,Playback(this-call-may-be)
exten => 3,8,Playback(recorded)
exten => 3,9,Playback,(pls-wait-connect-call)
exten => 3,10,SetMusicOnHold,default
exten => 3,11,SetCallerID,3
exten => 3,12,SetCallerIDName,TechSupport
exten => 3,13,Goto,queues|202|1
;
;4
exten => 4,1,Playback,(systemstat)
exten => 4,n,Hangup
;
exten => 5,1,Background(staff-listing)
exten => 5,n,Hangup
;
;5
exten => 6,1,Playback(vm-goodbye)
exten => 6,n,Hangup
;
;7
exten => 7,1,Playback(vm-goodbye)
exten => 7,n,Hangup
;
;8 
exten => 8,1,Playback(vm-goodbye)
exten => 8,n,Hangup
;
;9 Fax Extension
exten => 9,1,Set(CALLEDFAX=${EXTEN})
exten => 9,2,Answer
exten => 9,3,Goto(fax,${EXTEN},1)
;
[macro-fax]
exten => 9,1,Macro(faxreceive) ; requires fax addon and spandsp
exten => h,1,System(/usr/local/share/asterisk/scripts/fax.sh "${CALLERIDNUM}" "${CALLEDFAX}" "${EXTNAME}" "${EXTEMAIL}" "${FAXFILE}" "${EXTCOMPANY}")
;
[macro-faxreceive]
exten => s,1,Set(FAXFILE=/var/spool/asterisk/fax/${CALLEDFAX}/${UNIQUEID})
exten => s,2,Set(${DB(EXTEMAIL=${MACRO_EXTEN}/xEmail)});
exten => s,3,NoOP()
exten => s,4,Set(${DB(EXTNAME=${MACRO_EXTEN}/xName)})
exten => s,5,NoOP()
exten => s,6,Set($DB(EXTCOMPANY=${MACRO_EXTEN}/xCompany)})
exten => s,7,rxfax(${FAXFILE}.tif)
exten => s,103,Set(EXTMAIL=fax@company.com)
exten => s,104,Goto(7)
exten => s,105,Set(EXTNAME=Unknown)
exten => s,106,Goto(7)
exten => s,107,Set(EXTCOMPANY=Company)
exten => s,108,Goto(7)
;
exten => 0,1,Dial(SIP/Operators exten|18|Tr)
;
; Repeat the previous menu 
exten => *,1,Goto(s,9) 
;
; #=hangup 
exten => #,1,Background(goodbye) 
exten => #,2,Hangup 
;
exten => i,1,Background(pbx-invalid)   ; "That's not valid, try again" 
exten => i,2,Wait(1) 
exten => i,3,Goto(s,9) 
;
exten = t,1,Playback(pls-wait-connect-call)
exten = t,n,Goto(operator-queue,s,1)
;
;--------------------------------------------------------
; END - IVR Menu 
;--------------------------------------------------------
;--------------------------------------------------------
; Start Basic *XX Exten Logic
;--------------------------------------------------------
;--------------------------------------------------------
;Basic *XX exten nmbrs in the US + Canada For Asterisk
;Including macros that go with the exten
;--------------------------------------------------------
[basic]
include => acr
include => cidb
include => scw
include => sca
include => cb
include => wcacb
include => cw
include => cf
include => scf
include => cfna
include => cbb
include => dnd
include => hzdwol
include => extended-local
include => wthr-rgnl
include => vm
include => voicemail
;--------------------------------------------------------
; *01 -  Do Not Disturb Over Ride Management only internl exten
;	only works on asterisk DND. will not work if the DND is 
;	in the phone firmware.
;--------------------------------------------------------
[dnd-bypass]
exten => _*01XXXX,1,Dial(SIP/${ARG1}:2|30|r) ; 20sec timeout
exten => _*01XXXX,2,Voicemail(u${ARG1})
exten => _*01XXXX,3,Hangup
exten => _*01XXXX,102,Voicemail(b${ARG1})
exten => _*01XXXX,103,Hangup
;
;---------------------------------------------------------------------------------
; *1 - * System Stataus & exten testing : Agi Requires sysstatagi
;---------------------------------------------------------------------------------
[exten-test]
include => system-stat
include => say-exten
include => say-date-time
include => echo
include => tone
include => rec-playback
include => moh
;
;----------------------------------------------------------------------------------
; *** - Paging via soundcard to a amp or paging system -*** not yet working
;----------------------------------------------------------------------------------
[paging]
;This paging function uses the console and soundcard to do paging they a extenalpaging system
;exten => ***,1,Dial(console/dsp)
;exten => ***,n,Answer
;exten => ***,n,Wait(1)
;exten => ***,n,Playback(touchtone/1)
;exten => ***,n,Playback(touchtone/1)
;exten => ***,n,Playback(touchtone/1)
;exten => ***,n,Wait(1)
;exten => ***,n,Hangup
;
;-------------------------------------------------------------------------------------------------------
; *** - Paging via allcall.agi. This calls the phones listed in the agi and puts them in a confrence room
; you make your announcement then it kicks them.-**** not yet functional
;-------------------------------------------------------------------------------------------------------
;[system-page] ; Still  developing
;exten => ***,1,AbsoluteTimeout(11)
;exten => ***,n,NoOp,${ARG1}
;exten => ***,n,AGI,callall|SIP/${ARG1} ${EX-DESIGN} ${EX-SALES1} 
;
;[call-intercom]
;exten => s,1,AGI(callall|${CALLERIDNUM}|${CALLERIDNUM}|${ARG1}|${ARG1})
;exten => s,n,Hangup
;exten => h,1,Hangup
;
;[add-to-intercom]
;exten => s,1,Playback(beep)
;exten => s,2,MeetMe(${iConf},${iConfParm})
;exten => s,3,Macro(hangupcall)
;exten => h,1,Hangup
;
;----------------------------------------------------------
; Exten *1 - *9 New Exten Line Testing Tools
;----------------------------------------------------------
; *1 - System Status
;----------------------------------------------------------
[system-stat]
exten => *1,1,AGI(systatagi)
exten => *1,n,Wait(1)
exten => *1,n,Playback(loadavgis)
exten => *1,n,SayDigits(${LOADAVGPRE})
exten => *1,n,Playback(point)
exten => *1,n,SayDigits(${LOADAVGSUF})
exten => *1,n,Wait(1)
exten => *1,n,Playback(thereare)
exten => *1,n,SayDigits(${NUMUSER})
exten => *1,n,Playback(userson)
exten => *1,n,Wait(1)
exten => *1,n,Hangup
;
;[sysstat-rec]
;exten => 999,1,Answer
;exten => 999,n,Wait(2)
;exten => 999,n,Record(/var/lib/asterisk/sounds/systemstatus:gsm)
;exten => 999,n,Wait(2)
;exten => 999,n,Playback(/var/lib/asterisk/sounds/systemstatus)
;exten => 999,n,Wait(2)
;exten => 999,n,Hangup
;
;-----------------------------------------------------------
; *2 - Say Phone Number
;-----------------------------------------------------------
[say-exten]
exten => *2,1,Answer
exten => *2,n,Playback(your-exten-num-is)
exten => *2,n,SayDigits(${CALLERIDNUM})
exten => *2,n,Hangup
;
;-----------------------------------------------------------
; *3  - Say Date and Time
;-----------------------------------------------------------
[say-date-time]
exten => *3,1,Answer
exten => *3,n,Playback(the-current-time-is)
exten => *3,n,Datetime
exten => *3,n,Hangup
;
;-----------------------------------------------------------
; *4 - Echo Test
;-----------------------------------------------------------
[echo]
exten => *4,1,Answer
exten => *4,n,Playback(demo-echotest)
exten => *4,n,Playback(beep)
exten => *4,n,Echo
exten => *4,n,Playback(demo-echodone)
exten => *4,n,Hangup
;
;-----------------------------------------------------------
; *5 - Milliwatt Tone
;-----------------------------------------------------------
[tone]
exten => *5,1,Answer
exten => *5,n,Milliwatt
exten => *5,n,Hangup
;
;-----------------------------------------------------------
; *6 - Record Promt Test Format Gsm
;-----------------------------------------------------------
[rec-playback]
exten => *6,1,Answer
exten => *6,n,Wait(1)
exten => *6,n,Record(record:gsm)
exten => *6,n,Wait(1)
exten => *6,n,Playback(record)
exten => *6,n,Hangup; Music On Hold
;
;-----------------------------------------------------------
; *7 - Music On Hold Test
;-----------------------------------------------------------
[moh]
exten => *7,1,Answer
exten => *7,n,MusicOnHold(default)
;
;------------------------------------------------------------
; *8 - Universal Time Clock Stream Not-Working yet 
;      due to stream not online.
;------------------------------------------------------------
exten => *8,1,Answer
exten => *8,n,Playback(UTC Time clock)
exten => *8,n,MP3Player()
exten => *8,n,Hangup
;
;-----------------------------------------------------------
; *9 - Avaible for local mapping
;-----------------------------------------------------------
; Exten *10 - *20 weather & news Under Devlopment 
;-----------------------------------------------------------
;-----------------------------------------------------------
; Hazard Weather Warning
;-----------------------------------------------------------
[hzdwol]
exten => *10,1,Answer
exten => *10,n,Playback(national-weather-service)
exten => *10,n,Playback(hazard-weather-outlook)
exten => *10,n,System(/usr/local/bin/curl -s http://www.srh.noaa.gov/tsa/crs/mp3/OKCHAZARD.mp3 > /tmp/OKCHAZARD.mp3)
exten => *10,n,MP3Player(/tmp/OKCHAZARD.mp3)
exten => *10,n,System(rm /tmp/OKCHAZARD.mp3 -f)
exten => *10,n,Playback(vm-goodbye)
exten => *10,n,Hangup
;
;----------------------------------------------------------------------
; Local 7 day forcast 
;----------------------------------------------------------------------
[extended-local]
exten => *11,1,Answer
exten => *11,n,Playback(national-weather-service)
exten => *11,n,Playback(local-forcast)
exten => *11,n,Playback(fort-smith)
exten => *11,n,Playback(arkansas)
exten => *11,n,Playback(area)
exten => *11,n,System(/usr/local/bin/curl -s http://www.srh.noaa.gov/tsa/crs/mp3/OKCZFPFSM.mp3 > /tmp/OKCZFPFSM.mp3)
exten => *11,n,MP3Player(/tmp/OKCZFPFSM.mp3)
exten => *11,n,System(rm -f /tmp/OKCZFPFSM.mp3)
exten => *11,n,Playback(vm-goodbye)
exten => *11,n,Hangup
;
;------------------------------------------------------------------------
; Reginal Weather Souther Region 7 day forcast
;------------------------------------------------------------------------
[wthr-rgnl]
;regional
exten => *12,1,Answer 
exten => *12,n,Playback(national-weather-service) 
exten => *12,n,Playback(regional-forcast)
exten => *12,n,Playback(arkansas)
exten => *12,n,Playback(texas)
exten => *12,n,Playback(oklahoma)
exten => *12,n,Playback(louisiana)
exten => *12,n,Playback(missouri)
exten => *12,n,Playback(area)
exten => *12,n,System(/usr/local/bin/curl -s http://www.srh.noaa.gov/tsa/crs/mp3/OKCHWRFSM.mp3 > /tmp/OKCHWRFSM.mp3) 
exten => *12,n,MP3Player(/tmp/OKCHWRFSM.mp3) 
exten => *12,n,System(rm -f /tmp/OKCHWRFSM.mp3) 
exten => *12,n,Playback(vm-goodbye)
exten => *12,n,Hangup
;
;-----------------------------------------------------------------------
; This Weather forcast uses festival to conver text to speech and play it back.
; Local txt - speech Not in use right now. Festival not installed.....
;-----------------------------------------------------------------------
[fest-local-wthr] 
;exten => *13,1,Answer 
;exten => *13,n,Playback(national-weather-service)
;exten => *13,n,Playback(local-forcast)
;exten => *13,n,Playback(fort-smith)
;exten => *13,n,Playback(arkansas)
;exten => *13,n,Playback(area)
;exten => *13,n,System(/usr/local/bin/curl -s ftp://weather.noaa.gov/data/forecasts/city/ar/fort_smith.txt > /tmp/weather.txt)
;exten => *13,n,System(/usr/local/bin/convert) 
;exten => *13,n,Playback(/tmp/weather) 
;exten => *13,n,System(rm -f /tmp/weather.*) 
;exten => *13,n,Playback(vm-goodbye)
;exten => *13,n,Hangup 
;
;----------------------------------------------------------
; *14 - CNN = cable network news moving to 
; 	      a rss feed not working
;----------------------------------------------------------
[cnn]
exten => *14X,1,Answer 
exten => *14X,n,Playback(today-on-cnn) 
exten => *14X,n,System(/usr/local/bin/curl -s )
exten => *14X,n,Wait(1) 
exten => *14X,n,MP3Player(/tmp/.mp3) 
exten => *14X,n,System(rm /tmp/ .mp3 -f) 
exten => *14X,n,Playback(vm-goodbye)
exten => *14X,n,Hangup
;
;-----------------------------------------------------------
; *15 - Local News Headlines moving to a rss feed 
;       for local newspapers not yet working
;-----------------------------------------------------------
[local-news]
exten => *15,1,Answer 
exten => *15,n,Playback(today-lcl-news)
exten => *15,n,Playback(fort-smith)
exten => *15,n,Playback(swtimes)
exten => *15,n,System(/usr/local/bin/curl -s )
exten => *15,n,MP3Player(/tmp/.mp3) 
exten => *15,n,System(rm /tmp/ .mp3 -f) 
exten => *15,n,Playback(vm-goodbye)
exten => *15,n,Hangup 
;
;-----------------------------------------------------------
; *16 - *19 Reserved For Local Assignment
;-----------------------------------------------------------
;Current Company Job Listings not yet in use. works.
;-----------------------------------------------------------
[jobs-postings]
exten => *20,1,Answer 
exten => *20,n,Playback(current-job-postings) 
exten => *20,n,System(/usr/local/bin/curl -s )
exten => *20,n,Wait(1) 
exten => *20,n,MP3Player(/tmp/.mp3) 
exten => *20,n,System(rm /tmp/ .mp3 -f) 
exten => *20,n,Playback(vm-goodbye)
exten => *20,n,Hangup
;
;-----------------------------------------------------------
; *21 - *29 - Inturnal and Extenal Meet-Me Conference Rooms
;-----------------------------------------------------------
[internal-conf]
exten => _*2X,1,Answer
exten => _*2X,n,Wait(1)
exten => _*2X,n,MeetMe({$ARG1},pdcMs)
exten => _*2X,n,4,Playback(vm-goodbye)
exten => _*2X,n,5,Hangup
;
;----------------------------------------------------------
; *30 - *39 - Reserved For Local Assignment
;----------------------------------------------------------
; *40 - *46 - Reserved For Local Assignment
;----------------------------------------------------------
;*47 - *48 Anonymous Call Rejection
;----------------------------------------------------------
[acr]
; *47 - Deactivation
exten => *47,1,DBdel(ACR/${CALLERIDNUM})
exten => *47,n,Answer
exten => *47,n,Wait(1)
exten => *47,n,Playback(anon-call-rej)
exten => *47,n,Playback(deactivated)
exten => *47,n,Hangup
;
; *48 - Activation
exten => *48,1,Set(DB(ACR/${CALLERIDNUM}=YES)
exten => *48,n,Answer
exten => *48,n,Wait(1)
exten => *48,n,Playback(anon-call-rej)
exten => *48,n,Playback(activated)
exten => *48,n,Hangup
;-----------------------------------------------------------
; *49 - *50 Caller Id Blocking
;-----------------------------------------------------------
[cidb]
; *49 - Deactivate
exten => *49,1,DBdel(CIDB/${CALLERIDNUM})
exten => *49,n,Answer
exten => *49,n,Wait(1)
exten => *49,n,Playback(caller-id-blk)
exten => *49,n,Playback(deactivated)
exten => *49,n,Hangup
;
; *50 - Activate
exten => *50,1,Set(DB(CIDB/${CALLERIDNUM}=YES)
exten => *50,n,Answer
exten => *50,n,Wait()
exten => *50,n,Playback(caller-id-blk)
exten => *50,n,Playback(activated)
exten => *50,n,Hangup
;-----------------------------------------------------------
;*51 -*52 Call Back Busy 
;-----------------------------------------------------------
[cbb]
; *51 - Dectivate
exten => *51,1,DBdel(CBB/${CALLERIDNUM})
exten => *51,n,Answer
exten => *51,n,Wait(1)
exten => *51,n,Playback(de-activated)
exten => *51,n,Hangup
;
; *52 - Activate 
exten => *52,1,Set(DB(CBB/${CALLERIDNUM}=YES)
exten => *52,n,Answer
exten => *52,n,Wait(1)
exten => *52,n,Playback(activated)
exten => *52,n,Hangup
;----------------------------------------------------------
;*53 - *55 Selective Call Waiting 
;----------------------------------------------------------
[scw]
; *53 - Deactivate
exten => *53,1,DBdel(SCW/${CALLERIDNUM})
exten => *53,n,DBdel(SCWN/${CALLERIDNUM})
exten => *53,n,Answer
exten => *53,n,Wait(1)
exten => *53,n,Playback(deactivated)
exten => *53,n,Hangup
;
; *54 - Activate
exten => *54,1,Set(DB(SCW/${CALLERIDNUM}=YES)
exten => *54,n,Answer
exten => *54,n,Wait(1)
exten => *54,n,Playback(activated)
exten => *54,n,Hangup
;
; *55 - Selective Call Waiting Number 
exten => _*55.,1,Set(DB(SCWN/${EXTEN:3}=${EXTEN})
exten => _*55.,n,Answer
exten => _*55.,n,Wait(1)
exten => _*55.,n,Playback(selective-call-waiting)
exten => _*55.,n,Playback(for)
exten => _*55.,n,Playback(extension)
exten => _*55.,n,SayDigits(${CALLERIDNUM})
exten => _*55.,n,Playback(is-set-to)
exten => _*55.,n,SayDigits(${EXTEN:3})
;--------------------------------------------------------------
; *56 - *58 Selective Call Acceptance 
;--------------------------------------------------------------
[sca]
; *56 -  Deactivation
exten => *56,1,DBdel(SCA/${CALLERIDNUM})
exten => *56,n,DBdel(SCAN/${CALLERIDNUM})
exten => *56,n,Answer
exten => *56,n,Wait(1)
exten => *56,n,Playback(deactivated)
exten => *56,n,Hangup
;
; *57 -  Activation
exten => *57,1,Set(DB(SCA/${CALLERIDNUM}=YES)
exten => *57,n,Answer
exten => *57,n,Wait(1)
exten => *57,n,Playback(activated)
exten => *57,n,Hangup
;
; *58 - Selective Call exten number 
exten => _*58.,n,Playback(pls-entr-sca-numb)
exten => _*58.,n,Set(DB(SCAN/${CALLERIDNUM}=${EXTEN:3})
exten => _*58.,n,Answer
exten => _*58.,n,Wait(1)
exten => _*58.,n,Playback(selective-call-acceptance)
exten => _*58.,n,Playback(for)
exten => _*58.,n,Playback(extension)
exten => _*58.,n,SayDigits(${CALLERIDNUM})
exten => _*58.,n,Playback(is-set-to)
exten => _*58.,n,SayDigits(${EXTEN:3})
;---------------------------------------------------------------------
;*60 - 63 - Reserved For Local Assignment
;---------------------------------------------------------------------
; *64 - *67 Calling Blocking
;---------------------------------------------------------------------
[cb]
; *64 - Deactivation
exten => *64,1,DBdel(DB(CB/${CALLERIDNUM})
exten => *64,n,Answer
exten => *64,n,Wait(1)
exten => *64,n,Playback(call-blocking)
exten => *64,n,Playback(deactivated)
exten => *64,n,Hangup
;
; *65 - Activation  
exten => *65,1,Set(DB(CB/${CALLERIDNUM}=YES)
exten => *65,n,Answer
exten => *65,n,Wait(1)
exten => *65,n,Playback(call-blocking)
exten => *65,n,Playback(activated)
exten => *65,n,Hangup
;
; *66 - Calling  Blocking add nmbr to database
exten => _*66.,1,Answer
exten => _*66.,n,Set(DB(CBN/${EXTEN:3}=${EXTEN:5})
exten => _*66.,n,Wait(1)
exten => _*66.,n,Playback(call-block-num)
exten => _*66.,n,SayDigits(${EXTEN:2:3})
exten => _*66.,n,Playback(has-been-set-to)
exten => _*66.,n,SayDigits(${EXTEN})
exten => _*66.,n,Hangup
;
; *67 - Calling Blocking Clear Number From Database 
exten => _*67.,1,Answer
exten => _*67.,n,Set(DB(CBN/${EXTEN:3})
exten => _*67.,n,Wait(1)
exten => _*67.,n,Playback(call-blocking-num)
exten => _*67.,n,SayDigits(digits/${EXTEN:2:3})
exten => _*67.,n,Playback(has-been-cleared)
exten => _*67.,n,Hangup
;----------------------------------------------------------------
; *68 - Reserved For Local Assignment
;----------------------------------------------------------------
;*69 - Who Called Me & Call Back  
;----------------------------------------------------------------
[wcacb]
exten => *69,1,Cut(CHANRES=CHANNEL|-|1)
exten => *69,n,Cut(EXTENSION=CHANRES|/|2)
exten => *69,n,Macro(calltrace,1,${EXTENSION})
;
[macro-calltrace]
exten => s,1,Answer
exten => s,2,Wait(.5)
exten => s,3,Set(${DB(LastCaller=LASTCALL/${ARG1})})
exten => s,4,GotoIf($[${LastCaller}]?5:10)
exten => s,5,SayDigits(${LastCaller})
exten => s,6,DigitTimeout(3)
exten => s,7,ResponseTimeout(7)
exten => s,8,Background(press-one-to-callback)
exten => s,9,Goto(12)
exten => s,10,Playback(unidentified-no-callback)
exten => s,11,Hangup
exten => s,12,NoOp
exten => 1,1,Goto(outbound,${LastCaller},1)
exten => i,1,Playback(pbx-invalid)
exten => i,2,Hangup
exten => t,1,Playback(vm-goodbye)
exten => t,2,Hangup
;-------------------------------------------------------------------------------
; Call Waiting 
;-------------------------------------------------------------------------------
[cw]
; *70 - Deactivate 
exten => *70,n,Answer
exten => *70,1,DBdel(CW/${CALLERIDNUM})
exten => *70,n,Playback(call-waiting)
exten => *70,n,Playback(de-activated)
exten => *70,n,Hangup
;
; *71 - Activate  
exten => *71,1,Set(DB(CW/${CALLERIDNUM}=YES)
exten => *71,n,Answer
exten => *71,n,Playback(call-waiting)
exten => *71,n,Playback(activated)
exten => *71,n,Hangup
;--------------------------------------------------------------------------------
; *72 - *73 Call Forwarding 
;--------------------------------------------------------------------------------
[cf]
; * 72 - Deactivation
exten => *72,1,Answer
exten => *72,n,DBdel(CF/${CALLERIDNUM})
exten => *72,n,Wait(1)
exten => *72,n,Playback(call-fwd-cancelled)
exten => *72,n,Hangup
;
; *73 - Activation  
exten => _*73.,1,Set(DB(CF/${CALLERIDNUM})=${EXTEN:3})
exten => _*73.,n,Answer
exten => _*73.,n,Playback(call-fwd-unconditional)
exten => _*73.,n,Playback(for)
exten => _*73.,n,Playback(extension)
exten => _*73.,n,SayDigits(${CALLERIDNUM})
exten => _*73.,n,Playback(is-set-to)
exten => _*73.,n,SayDigits(${EXTEN:3})
;--------------------------------------------------------------------------------
; *74 - *76 Selective Call Forwarding
;--------------------------------------------------------------------------------
[scf]
; *74 - DeActivation
exten => *74,1,DBdel(SCF/${CALLERIDNUM})
exten => *74,n,Answer
exten => *74,n,Wait(1)
exten => *74,n,Playback(selective-call-fwd)
exten => *74,n,Wait(1)
exten => *74,n,Playback(deactivated)
exten => *74,n,Hangup
;
; *75 - Selective Call Forwarding  Number matching
;exten => _*75.,1,Set(DB(SCFE/${CALLERIDNUM})=${EXTEN:3})
;exten => _*75.,n,Answer
;exten => _*75.,n,Wait(1)
;exten => _*75.,n,Playback(selective-call-forwarding);
;exten => _*75.,n,Playback(for)
;exten => _*75.,n,Playback(extension)
;exten => _*75.,n,SayDigits(${CALLERIDNUM})
;exten => _*75.,n,Playback(is-set-to)
;exten => _*75.,n,SayDigits(${EXTEN:3})
;
; *76 - Selective Call Forwarding
exten => _*76.,1,Set(DB(SCFN/${EXTEN:3})=${EXTEN:4})
exten => _*76.,n,Answer
exten => _*76.,n,Wait(1)
exten => _*76.,n,Playback(selective-call-waiting)
exten => _*76.,n,Playback(for)
exten => _*76.,n,Playback(extension)
exten => _*76.,n,SayDigits(${CALLERIDNUM})
exten => _*76.,n,Playback(is-set-to)
exten => _*76.,n,SayDigits(${EXTEN:3})
;------------------------------------------------------------------------------
; *77 - *78 Call Forwarding Don't Answer 
;------------------------------------------------------------------------------
[cfna]
; *77 - Deactivation
exten => *77,1,DBdel(CFDNA/${CALLERIDNUM})
exten => *77,n,Answer
exten => *77,n,Wait(1)
exten => *77,n,Playback(call-fwd-no-ans)
exten => *77,n,Playback(de-activated)
exten => *77,n,Hangup

; *78 -  Activation
exten => _*78.,1,Set(DB(CFDNA/${CALLERIDNUM})=${EXTEN:3})
exten => _*78.,n,Answer
exten => _*78.,n,Wait(1)
exten => _*78.,n,Playback(call-fwd-no-ans)
exten => _*78.,n,Playback(for)
exten => _*78.,n,Playback(extension)
exten => _*78.,n,SayDigits(${CALLERIDNUM})
exten => _*78.,n,Playback(is-set-to)
exten => _*78.,n,SayDigits(${EXTEN:3})
;-------------------------------------------------------------------------------
; *79 - *80 Call Forwarding Busy
;-------------------------------------------------------------------------------
[cfb]
; *79 - Deactivation
exten => *79,1,DBdel(CFB/${CALLERIDNUM})
exten => *79,n,Answer
exten => *79,n,Wait(1)
exten => *79,n,Playback(call-fwd-on-busy)
exten => *79,n,Playback(de-activated)
exten => *79,n,Hangup
;
; *80 - Activation
exten => _*80.,1,Set(DB(CFB/${CALLERIDNUM})=${EXTEN:3})
exten => _*80.,n,Answer
exten => _*80.,n,Wait(.5)
exten => _*80.,n,Playback(call-fwd-on-busy)
exten => _*80.,n,Playback(for)
exten => _*80.,n,Playback(extension)
exten => _*80.,n,SayDigits(${CALLERIDNUM})
exten => _*80.,n,Playback(is-set-to)
exten => _*80.,n,SayDigits(${EXTEN:3})
;-------------------------------------------------------------------------------
; *81 - *83 - Reserved For Local Assignment
;-------------------------------------------------------------------------------
; *84 - *85 Voicemail Checking / Retriving
;-------------------------------------------------------------------------------
[voicemail]
;voice mailman Promts for mailbox nmbr and paswwor
exten => *84,1,VoicemailMain
exten => *84,n,Hangup
;
;voice mailman with exten/callerid checking. if callerid/exten match 
;prompts for password eslse prompts for mailbox/password
exten => *85,1,VoicemailMain(${CALLERIDNUM})
exten => *85,n,Hangup
;-------------------------------------------------------------------------------
; *86 - *87 voicemail
;-------------------------------------------------------------------------------
[vm]
; *86 - Deactivation
exten => *86,1,Answer
exten => *86,n,DBdel(VM/${CALLERIDNUM})
exten => *86,n,Wait(1)
exten => *86,n,Playback(deactivated)
exten => *86,n,Hangup
;
; *87 - Activation
exten => *87,1,Answer
exten => *87,n,Set(DB(VM/${CALLERIDNUM})=YES)
exten => *87,n,Wait(.5)
exten => *87,n,Playback(activated)
exten => *87,n,Hangup
;--------------------------------------------------------------------------------
;*88 - *89 Do Not Disturb
;--------------------------------------------------------------------------------
[dnd]
; *88 - Deactivation 
exten => *88,1,Answer
exten => *88,n,DBdel(DND/${CALLERIDNUM})
exten => *88,n,Wait(.5)
exten => *88,n,Playback(do-not-disturb)
exten => *88,n,Playback(de-activated)
exten => *88,n,Hangup
;
; *89 - Activation  
exten => *89,1,Answer
exten => *89,n,Set(DB(DND/${CALLERIDNUM})=YES)
exten => *89,n,Wait(.5)
exten => *89,n,Playback(do-not-disturb)
exten => *89,n,Playback(activated)
exten => *89,n,Hangup
;--------------------------------------------------------
; *90 - *98 - Reserved For Local Assignment 
;--------------------------------------------------------
[pbx-transfer]
exten => *99,1,Playback,pbx-transfer
exten => *99,2,Set(temp=SIP/${ARG1})
exten => *99,3,Goto(all-exten,${temp}|1)
exten => *99,103,Goto(s|4)
exten => *99,4,Set(dnd=DND/${ARG1})
exten => *99,5,Goto(s|7)
exten => *99,105,Goto(s|6)
exten => *99,6,Dial(SIP/${ARG1},60,tr)
exten => *99,7,Hangup
exten => *99,107,Hangup
;
;-------------------------------------------------------------
; *100 aka *1XX  100 - 199 Speed Dial Add/Delete/NotSet/Dial
;-------------------------------------------------------------
;[speeddial]
; *1 <xx> <yyyy> - Set system speed dial <xx> to digits <yyyy>
; *1 <xx> 0      - Delete system speed dial <xx>
; *1 <xx> 1       - Review system speed dial <xx>
;exten => _*1XXX,1,Answer
;exten => _*1XXX,2,Set(${DB(SystemSpeedDial/${EXTEN:1:3}=${EXTEN:5})})
;exten => _*1XXX,3,Wait(1)
;exten => _*1XXX,4,Playback(speed-dial)
;exten => _*1XXX,5,SayDigits(${EXTEN:2:3})
;exten => _*1XXX,6,Playback(has-been-set-to)
;exten => _*1XXX,7,SayDigits(${EXTEN:5})
;exten => _*1XXX,8,Hangup
;
;exten => _*1XX0,1,Answer
;exten => _*1XX0,2,Set(${DB(SystemSpeedDial/${EXTEN:1:3})})
;exten => _*1XX0,3,Wait(1)
;exten => _*1XX0,4,Playback(speed-dial)
;exten => _*1XX0,5,SayDigits(digits/${EXTEN:2:3})
;exten => _*1XX0,6,Playback(has-been-cleared)
;exten => _*1XX0,7,Hangup
;
;exten => _#1XX,1,Answer
;exten => _#1XX,2,Set(${DB(SystemSpeedDial=SystemSpeedDial/${EXTEN:1:3})})
;exten => _#1XX,3,Wait(1)
;exten => _#1XX,4,Playback(speed-dial)
;exten => _#1XX,5,SayDigits(${EXTEN:2:3})
;exten => _#1XX,6,Playback(is-set-to)
;exten => _#1XX,7,SayDigits(${SystemSpeedDial})
;exten => _#1XX,8,Hangup
;exten => _#1XX,103,Playback(speed-dial)
;exten => _#1XX,104,SayDigits(${EXTEN:2:3})
;exten => _#1XX,105,Playback(is-not-set)
;exten => _#1XX,106,Hangup
;
;exten => _*1XX,1,Set(${DB(NumberToCall=SystemSpeedDial/${EXTEN})})
;exten => _*1XX,2,Dial(${TRUNKGROUP}/${NumberToCall},20);
;exten => _*1XX,3,Congestion;
;exten => _*1XX,102,Answer
;exten => _*1XX,103,Wait(1)
;exten => _*1XX,104,Playback(speed-dial)
;exten => _*1XX,105,SayDigits(${EXTEN})
;exten => _*1XX,106,Playback(is-not-set)
;exten => _*1XX,107,Hangup
;
;---------------------------------------------------------
; Speed Dial 2.  Your CHoice wich to use. 
;---------------------------------------------------------
;[app-speeddial]
;exten => _#.,1,SetVar(SPEED_DIAL=${EXTEN:1})
;exten => _#.,2,AGI(speeddial.php)
;exten => _#.,3,GotoIf(foo${DIAL_NUMBER} = foo,50) ; Extra check
;exten => _#.,4,Goto(from-internal,${DIAL_NUMBER},1)
;exten => _#.,50,Playback(pbx-invalid);
;exten => _#.,51,Hangup;
;
;[store-*1xx]
;exten => _#1XX.,1,Answer
;exten => _#1XX.,2,Wait(1)
;exten => _#1XX.,2,Playback(nmbr-to-be-stored)
;exten => _#1XX.,3,Set(${DB(DN/${EXTEN:1:4})} = ${EXTEN:4})
;exten => _#1XX.,4,SayDigits(${EXTEN:1:4})
;exten => _#1XX.,5,SayDigits(${EXTEN:4})
;exten => _#1XX.,6,Playback(vm-goodbye)
;exten => _#1XX.,7,Hangup
;
;[dial-*1xx]
;exten => _*1XX,1,Set(${EXTEN}/${NUMER})
;exten => _*1XX,2,Playback(pls-wait-connect-call)
;exten => _*1XX,3,Dial(${EXTEN}/${NUMER})
;
;--------------------------------------------------------
; End - Basic *XX Exten Logic
;--------------------------------------------------------
;--------------------------------------------------------
; Start Basic Exten Logic
;--------------------------------------------------------
;--------------------------------------------------------
;Basic exten nmbrs For Asterisk
;Including macros that go with the exten
;--------------------------------------------------------
[basic-exten]
include => outbound
include => paging
include => special
include => digium
include => parking
include => internal-conf
include => prompts
include => tranfer-queue
include => agentlogin
include => devconf
;
;---------------------------------------------------------------
;special lines set functions
;---------------------------------------------------------------
[special]
;------------------------------------------------------------
; 211
;------------------------------------------------------------
;exten => 211,1,
;------------------------------------------------------------
; 311 - non-emerg not yet setup for e911 Non Emerg
;------------------------------------------------------------
exten => 311,1,Dial(SIP/local non emergancy nmbr here)
exten => 311,2,Congestion
exten => 311,102,Playback(ss-noservice)
exten => 311,103,Congestion
;------------------------------------------------------------
; 411 - Directory Asistance
;------------------------------------------------------------
exten => 411,1,Dial(SIP/411@gateway,30)
exten => 411,2,Congestion
exten => 411,102,Playback(ss-noservice)
exten => 411,n,hangup
;------------------------------------------------------------
; 511 Wakeup Service
;------------------------------------------------------------
exten => 511,1,Answer
exten => 511,n,AGI(callback.agi)
exten => 511,n,Hangup
;------------------------------------------------------------
; 611 - Repair line
;------------------------------------------------------------
exten => 611,1,Dial(IAX2/1004|18|r)
exten => 611,n,Voicemail(u611)
exten => 611,n,Playback(vm-goodbye)
exten => 611,n,Hangup
;------------------------------------------------------------
; 711
;------------------------------------------------------------
;exten => 711,1,
;-------------------------------------------------------------
; 811
;-------------------------------------------------------------
;exten => 811,1,
;--------------------------------------------------------------
; 911 Emergancy 
;--------------------------------------------------------------
exten => 911,1,Answer
exten => 911,n,Dial(SIP/${EXTEN})
exten => 911,n,Congestion
exten => 911,n,Playback(no-911-1)
exten => 911,n,Congestion
;---------------------------------------------------------------
; 2 - 92 Reserved For Local Assignment
;---------------------------------------------------------------
; 93 - 95 Put call in the queue for the next available agent
;---------------------------------------------------------------
[tranfer-queue]
exten => 93,1,Answer
exten => 93,n,Wait,1
exten => 93,n,Queue(sales)
exten => 93,n,Hangup
;---------------------------------
exten => 94,1,Answer
exten => 94,n,Wait,1
exten => 94,n,Queue(billing)
exten => 94,n,Hangup
;---------------------------------
exten => 95,1,Answer
exten => 95,n,Wait,1
exten => 95,n,Queue(techsupport)
exten => 95,n,Hangup
;------------------------------------------------------------------
; 96 - 99 - Reserved For future queue tranfers
;------------------------------------------------------------------
;------------------------------------------------------------------
; 100-105 Queue Agents Login
; 1 Sales	 Turn on=100  Turn off=101
; 2 Tech Support Turn on=102  Turn off=103
; 3 Billing      Turn on=104  Turn off=105
; 4 other queues Turn on=XXX  Turn off=XXX
;-------------------------------------------------------------------
[agentlogin]
exten => 100,1,AddQueueMember(sales|SIP/${CALLERIDNUM})
exten => 100,n,Playback(agent-loginok)
exten => 100,n,Hangup
exten => 101,1,RemoveQueueMember(sales|SIP/${CALLERIDNUM})
exten => 101,n,Playback(agent-loggedoff)
exten => 101,n,Hangup
;
exten => 102,1,AddQueueMember(billing|SIP/${CALLERIDNUM})
exten => 102,n,Playback(agent-loginok)
exten => 102,n,Hangup
exten => 103,1,RemoveQueueMember(billing|SIP/${CALLERIDNUM})
exten => 103,n,Playback(agent-loggedoff)
exten => 103,n,Hangup
;
exten => 104,1,AddQueueMember(techsupport|SIP/${CALLERIDNUM})
exten => 104,n,Playback(agent-loginok)
exten => 104,n,Hangup
exten => 105,1,RemoveQueueMember(techsupport|SIP/${CALLERIDNUM})
exten => 105,n,Playback(agent-loggedoff)
exten => 105,n,Hangup
;-------------------------------------------------------------------
; 106 - 199 - Reserved For Local Assignment
;-------------------------------------------------------------------
; 200 - 202  Basic Call Queue's 200-202
;-------------------------------------------------------------------
[queues]
exten => 200,1,Answer
exten => 200,n,Queue(sale|TtH)
exten => 200,n,WaitMusicOnHold(45)
exten => 200,n,Voicemail(u200)
exten => 200,n,Playback(vm-goodbye)
exten => 200,n,Hangup
;
exten => 201,1,Answer
exten => 201,n,Queue(billing|TtH)
exten => 201,n,WaitMusicOnHold(45)
exten => 201,n,Voicemail(u201)
exten => 201,n,Playback(vm-goodbye)
exten => 201,n,Hangup
;
exten => 202,1,Answer
exten => 202,n,Queue(techsupport|TtH)
exten => 202,n,WaitMusicOnHold(45)
exten => 202,n,Voicemail(u202)
exten => 202,n,Playback(vm-goodbye)
exten => 202,n,Hangup
;--------------------------------------------------------------------
; 203 - 210 - Reserved For Local Assignment
;--------------------------------------------------------------------
; 211 - used for special function not yet mapped.
;--------------------------------------------------------------------
; 212 - 299 - Reserved For Local Assignment
;-------------------------------------------------------------------------
; 300 - 310 - Reserved For Local Assignment
;-------------------------------------------------------------------------
; 311 - Used in some states for local non-emergancy police/fire/paramedic
;-------------------------------------------------------------------------
; 312 - 399 Reserved For Local Assignment
;-------------------------------------------------------------------------  
; 400 - 410 Reserved For Local Assignment  
;-------------------------------------------------------------------------
; 411 - Directory Service
;--------------------------------------------------------------------------
; 412 - 499 - Reserved For Local Assignment  
;---------------------------------------------------------------------------
; 500 - Dials Digium Demo via IAX
;---------------------------------------------------------------------------
[digium]
exten => 500,1,Playback(demo-abouttotry); Let them know what's going on
exten => 500,n,Dial(IAX2/guest@misery.digium.com/s@default); Call the Asterisk demo
exten => 500,n,Playback(demo-nogo)	; Couldn't connect to the demo site
exten => 500,n,Goto(s,6)		; Return to the start over message.
;---------------------------------------------------------------------------
; 501 - Dial Developers Confrance
;---------------------------------------------------------------------------
[devconf]
exten => 501,1,Dial(SIP/guest@66.250.68.194/996)
exten => 501,n,Hangup
;----------------------------------------------------------------------------
; 502 - 510 - Reserved For Local Assignment
;----------------------------------------------------------------------------
; 511 Call Wake System / Dial Alarm Clock
;----------------------------------------------------------------------------
; 512 - 599  Reserved For Local Assignment
;----------------------------------------------------------------------------
; 601 - 610  Reserved For Local Assignment
;----------------------------------------------------------------------------
; 611 - Repair service.
;------------------------------------------------------------------------------
; 612 - 699  Reserved For Local Assignment
;------------------------------------------------------------------------------
; 700 - 709  Call Parking on Asterisk also includes blind parking
;------------------------------------------------------------------------------
[parking]
exten => 700,1,Answer
exten => 700,n,SetMusicOnHold(default)
exten => 700,n,ParkAndAnnounce(PARKED|60|SIP/${EXTEN}|70|4)
exten => _70X,1,ParkedCall(${EXTEN})
;---------------------------------------------------------------------------------
; 711 - TTY/TDD Stae Relay Service
;---------------------------------------------------------------------------------
; 712 - 799 Reserved For Local Assignmen
;---------------------------------------------------------------------------------
;-------------------------------------------------------------------------------
; 800  - 899 Reserved For Local Assignment
;-------------------------------------------------------------------------------
;-------------------------------------------------------------------------------
; 900 - 910 Reserved For Local Assignment
;-------------------------------------------------------------------------------
;-------------------------------------------------------------------------------
; 912 - 986 Reserved For Local Assignment
;-------------------------------------------------------------------------------
; 987 - Disa using voicemail passowords via agi. 
;       Direct inward system access.
;-------------------------------------------------------------------------------
;[outside-inside]
;exten => 987,1,Answer                  
;exten => 987,n,Wait(1)
;exten => 987,n,Playback(please-enter-the)
;exten => 987,n,Playback(extension)
;exten => 987,n,Read(int_extension,then-press-pound)
;exten => 987,n,Playback(pls-enter-vm-password)
;exten => 987,n,Read(vm_passwd,then-press-pound)
;exten => 987,n,AGI(internal_authphp|${int_extension},${vm_passwd})
;exten => 987,n,Set(CALLERIDNUM=${int_extension})
;exten => 987,n,DISA(no-password|from-internal)
;exten => 987,101,Playback(vm-incorrect)
;exten => 987,102,Goto(3)
;
;[outside-inside]
;exten => *987,1,Answer 
;exten => *987,2,Read(ext_num,vm-extension) 
;exten => *987,3,Wait(1) 
;exten => *987,4,Read(ext_pwd,vm-password) 
;exten => *987,5,Wait(1) 
;exten => *987,6,agi,chk_vm_pwd.agi|/etc/asterisk/voicemail.conf|${ext_num}|${ext_pwd} 
;exten => *987,7,GotoIf($["${result}" = "0"]?20:30) 
;exten => *987,20,Playback(agent-loginok) ;
;exten => *987,21,Hangup() 
;exten => *987,30,PlayBack(invalid) 
;exten => *987,31,Hangup() 
;-------------------------------------------------------------------------------
; 988  Prompt management & 989 Pront recording and special prompt recording + enable disable
;-------------------------------------------------------------------------------
[prompts]
exten => 988,1,Goto(prompt-management,s,1)
exten => 989,1,Goto(special-message,s,1)
;
[prompt-management]
; Flexible prompt recording
exten => s,1,Answer
exten => s,n,Wait(1)
exten => s,n,DigitTimeout(5)
exten => s,n,Read(PROMPT_NUMBER|enter-prompt-number|3)
exten => s,n,SayDigits(${PROMPT_NUMBER})
exten => s,n,BackGround(T-to-hear-cur-ancmnt)
exten => s,n,BackGround(press-1)
exten => s,n,BackGround(T-to-rec-ancmnt)
exten => s,n,BackGround(press-2)
;
exten => t,1,Playback(goodbye)
exten => t,n,Hangup
;
exten => i,1,Playback(pbx-invalid)
exten => i,n,Goto(s,5)
;
exten => 1,1,Playback(beep)
exten => 1,n,Playback(bsky-prompt-${PROMPT_NUMBER})
exten => 1,n,Playback(beep)
exten => 1,n,Goto(s,6)
;
exten => 2,1,Goto(prompt-management-record,s,1)

exten => *,1,Playback(goodbye)
exten => *,n,Hangup
;
[prompt-management-record]
; New prompt recording
exten => s,1,Playback(vm-intro)
exten => s,n,Record(tmp-newprompt:wav)
exten => s,n,Playback(beep)
exten => s,n,BackGround(tmp-newprompt)
exten => s,n,BackGround(save-announce-press)
exten => s,n,BackGround(digits/1)
exten => s,n,BackGround(to-rerecord-announce)
exten => s,n,BackGround(digits/2)
;
exten => i,1,Playback(invalid)
exten => i,n,Goto(s,3)
;
exten => t,1,Goto(s,3)
;
exten => 1,1,System(cp -f /var/lib/asterisk/sounds/tmp-newprompt.wav /var/lib/asterisk/sounds/prompt-${PROMPT_NUMBER}.wav)
exten => 1,n,Playback(your-msg-has-been-saved)
exten => 1,n,Goto(app-prompt-management,s,4)
;
exten => 2,1,Goto(s,1)
;
exten => *,1,Goto(app-prompt-management,s,4)
;
[special-message]
; Record/replay/turn on/off the special message played before ACD queue calls
exten => s,1,Answer
exten => s,n,Wait(1)
exten => s,n,DigitTimeout(5)
exten => s,n,BackGround(T-to-hear-cur-ancmnt)
exten => s,n,BackGround(press-1)
exten => s,n,BackGround(T-to-rec-ancmnt)
exten => s,n,BackGround(press-2)
exten => s,n,BackGround(T-to-enable-ancmnt)
exten => s,n,BackGround(press-3)
exten => s,n,BackGround(T-to-disable-ancmnt)
exten => s,n,BackGround(press-4)
;
exten => t,1,Playback(goodbye)
exten => t,2,Hangup
;
exten => i,1,Playback(pbx-invalid)
exten => i,2,Goto(s,4)
;
exten => 1,1,Playback(special-message)
exten => 1,2,Goto(s,4)
;
exten => 2,1,Goto(special-message-record,s,1)
;
exten => 3,1,Set($DB(SpecialMessage/1=1)})
exten => 3,n,Playback(enabled)
exten => 3,n,Goto(s,4)
;
exten => 4,1,DBdel(SpecialMessage/1)
exten => 4,n,Playback(disabled)
exten => 4,n,Goto(s,4)
;
exten => *,1,Playback(goodbye)
exten => *,2,Hangup
;
[special-message-record]
; Record the new special message
exten => s,1,Playback(vm-intro)
exten => s,n,Record(new-special-message:wav)
exten => s,n,Playback(beep)
exten => s,n,BackGround(new-special-message)
exten => s,n,BackGround(save-announce-press)
exten => s,n,BackGround(digits/1)
exten => s,n,BackGround(to-rerecord-announce)
exten => s,n,BackGround(digits/2)
;
exten => i,1,Playback(invalid)
exten => i,n,Goto(s,3)
;
exten => t,1,Goto(s,3)
;
exten => 1,1,System(cp -f /var/lib/asterisk/sounds/new-special-message.wav /var/lib/asterisk/sounds/special-message.wav)
exten => 1,n,Playback(your-msg-has-been-saved)
exten => 1,n,Goto(app-special-message,s,1)
;
exten => 2,1,Goto(s,1)
;
exten => *,1,Goto(special-message,s,1)
;
[macro-check-special-message]
; If the flag is set, play the special message, otherwise continue
exten => s,1,Set(${DB(SpecialMessage=SpecialMessage/1)})
exten => s,2,Playback(system-status-msg)
exten => s,3,Playback(special-message)
exten => s,4,Ringing
exten => s,5,Wait(4)
exten => s,102,Noop
;
;----------------------------------------------------------------------------------
; 997 - 999 Reserved For Assignment
;----------------------------------------------------------------------------------
;----------------------------------------------------------------------------------
; End - Basic Exten Logic
;----------------------------------------------------------------------------------
;----------------------------------------------------------------------------------
; Start Dundi-e164 Setup
;----------------------------------------------------------------------------------
;[dundi-e164-customers]
;
; If you are an ITSP or Reseller, list your customers here
;
;exten => _12564286000,1,Dial(SIP/customer1)
;exten => _12564286001,1,Dial(IAX2/customer2)
;
;[dundi-e164-via-pstn]
;
; If you are freely delivering calls to the PSTN, list them here
;
;exten => _1256428XXXX,1,Dial(Zap/g2/${EXTEN:7}) ; Expose all of 256-428
;exten => _1256325XXXX,1,Dial(Zap/g2/${EXTEN:7}) ; Ditto for 256-325
;
[dundi-e164-local]
;
; Context to put your dundi IAX2 or SIP user in for
; full access
;
;include => dundi-e164-canonical
;include => dundi-e164-customers
;include => dundi-e164-via-pstn
;
;[dundi-e164-switch]
;
; Just a wrapper for the switch
;
;switch => DUNDi/e164
;
;[dundi-e164-lookup]
;
; Locally to lookup, try looking for a local E164 solution
; then try DUNDi if we don't have one
;
;include => dundi-e164-local
;include => dundi-e164-switch
;
; DUNDi can also be implemented as a Macro instead of using
; the Local channel driver
;
;[macro-dundi-e164]
;
; ARG1 is the extension to Dial
;
;exten => s,1,Goto(${ARG1},1)
;include => dundi-e164-lookup
;
;------------------------------------------------------------------------
; End - Dundi
;------------------------------------------------------------------------
;---------------------------------------------------------
;- Xmas Santa Line & other Special Even Lines
;---------------------------------------------------------
[santa-line]
exten = 1010,1,Goto(app-xmas-record,s,1)
exten = 1011,1,Goto(app-xmas-playback,s,1)
;
[app-xmas-record]
exten = s,1,Ringing
exten = s,2,Wait(4)
exten = s,3,Answer
exten = s,4,Playback(xmas2-welcome)
exten = s,5,Set(${DB(MessageCount=xmas/${CALLERIDNUM})})
exten = s,6,Set(${DB(MessageCount=$[${MessageCount} + 1])})
exten = s,7,Set(${DB(xmas/${CALLERIDNUM}=${MessageCount})})
exten = s,8,Record(xmas/${CALLERIDNUM}-${MessageCount}:gsm|10|60)
exten = s,9,Playback(xmas2-done)
exten = s,10,Hangup
exten = s,106,Set(${DB(MessageCount=1)})
exten = s,107,Goto(s,7)
;
[app-xmas-playback]
exten = s,1,Ringing
exten = s,2,Wait(4)
exten = s,3,Answer
exten = s,4,Set(${DB(MessageCount=xmas/${CALLERIDNUM})})
exten = s,5,Set(${DB(CurrentMessage=1)})
exten = s,6,Playback(xmas2-recorded)
exten = s,7,Playback(xmas/${CALLERIDNUM}-${CurrentMessage})
exten = s,8,Set(${DB(CurrentMessage=$[${CurrentMessage} + 1])})
exten = s,9,GotoIf(${DB([${CurrentMessage}  ${MessageCount}]?12:10)})
exten = s,10,Playback(beep)
exten = s,11,Goto(s,7)
exten = s,12,Playback(xmas2-goodbye)
exten = s,13,Hangup
exten = s,105,Playback(xmas2-notrecorded)
exten = s,106,Hangup
;------------------------------------------------------------------
; End Santa Line &  Other Special Event Lines
;------------------------------------------------------------------
;------------------------------------------------------------------------
; Start - System Macro's area. Macros work but not being used.
;------------------------------------------------------------------------
[macro-add-outbound-caller-id]
exten => s,1,Answer
exten => s,2,Read(EXTENSION|enter-extension-num|4)
exten => s,3,Read(DIALCID|enter-new-outbound-cid|10)
exten => s,4,Set(${DB(CID/${EXTENSION}=${DIALCID})})
exten => s,5,Saydigits(${EXTENSION})
exten => s,6,Playback(has-been-set-to)
exten => s,7,Saydigits(${DIALCID})
exten => s,8,Playback(auth-thankyou)
exten => s,9,Set(AGAIN=0)
exten => s,10,Read(AGAIN|enter-another-value|1) ; one for yes, any other num;
exten => s,11,GotoIf($[${AGAIN} = 1]?2:12)
exten => s,12,Playback(goodbye)
exten => s,13,Hangup()
;
[macro-qualityassure]
exten => s,1,Answer
exten => s,2,Macro(record-on)
exten => s,3,BackGround(for-quality-purposes)
exten => s,4,BackGround(this-call-may-be)
exten => s,5,BackGround(recorded)
exten => s,6,Dial(SIP/${EXTEN:1},120,tm)
exten => s,7,Macro(rg-inbound,10,tr)
exten => s,8,Hangup
;
[macro-record-on]
exten => s,1,AGI(set-timestampagi)
exten => s,2,Set(CALLFILENAME=${timestamp}-${ARG2}-${ARG1})
exten => s,3,Monitor(gsm,${CALLFILENAME})
;
[macro-record-cleanup]
exten => s,1,GotoIf($[${CALLFILENAME} = ${NULL}]?6:2)
exten => s,2,Set(CFBASE=/var/spool/asterisk/monitor/${CALLFILENAME})
; wmix takes the two seperate wavs and mixes them into a single stream
; It is available in my wavetools rpm
exten => s,3,System(/usr/bin/wmix ${CFBASE}-inwav ${CFBASE}-outwav > ${CFBASE})
exten => s,4,System(/bin/rm ${CFBASE}-inwav ${CFBASE}-outwav)
; toast compresses the wav files into a gsm file
; It is available in my gsm rpm
exten => s,5,System(/usr/bin/toast -F ${CFBASE})
exten => s,6,NoOp
;
;---------------------------------------------------------------------------
; 1000 - 9999 Internal SIP/IAX/MGCP/H323/SCCP/SKINNY/ECT USER EXTEN
;---------------------------------------------------------------------------
[all-exten]
exten => _1XXX,1,Macro(stdexten,${EXTEN})
;
;-------------------------------------------------------------------------------
; stdexten Dial Info 
;-------------------------------------------------------------------------------
;[macro-dial]
; add some abilities to Dial(Technology/resource[&Technology2/resource2...][|timeout][|options][|URL]):
;       ${ARG1} - Technology/resource[&Technology2/resource2...] (like SIP/2201)
;       ${ARG2} - timeout in seconds
;       ${ARG3} - Dial command options 
;       ${ARG4} - URL (see Dial command for info)
;       ${ARG5} - Group name (used if you want to limit the number of calls in any way)
;       ${ARG6} - Max. group number (maximum number of concurrent calls you want to allow for that group)
;       ${ARG7} - Caller ID name (typically for outgoing calls only)
;       ${ARG8} - Caller ID number (typically for outgoing calls only)
;       ${ARG9} - CDR account name (over-rides account group setting in sip.conf or iax.conf)
;       ${ARG10} - voicemail to send to if noanswer (typically for incoming calls only)
; Usage instructions:
;       for an outgoing call, in extensions.conf you just list multiple lines like: 
;       exten => s,1,Macro(superdial,IAX2/voipjet/${tfnumber},,,,voip,${MAXVOIPCALLS},yourname,8005551234,voipjet) 
;       exten => s,2,Macro(superdial,IAX2/alpeh-com/${tfnumber},,,,voip,${MAXVOIPCALLS},yourname,8005551234,aleph) 
;       and it will take the first one that is available
;
;       it also works for incoming like so .. 
;       exten => s,1,Wait(2)
;       exten => s,2,Macro(superdial,${PHONE1},15,Ttm,,pstn,${MAXPSTNCALLS},${CALLERIDNAME},${CALLERIDNUM},pstn,u${GENERALVM})
;       exten => s,3,Macro(superdial,${PHONE1},15,Ttm,,pstn,${MAXPSTNCALLS},${CALLERIDNAME},${CALLERIDNUM},pstn,u${GENERALVM})
;       exten => s,4,Voicemail(b${GENERALVM})
;       and then goes to unavailable voicemail if one times out .. otherwise (eg if busy) it tries the next extension 
;       if all are busy or unavailable .. it gets to the last priority which is the busy voicemail
;
;exten => s,1,SetGroup(${ARG5})
;exten => s,2,CheckGroup(${ARG6})        ; jump to 103 if count on group ${ARG5} is already at ${ARG6}
;exten => s,3,GotoIf($["${ARG7}" = ""]?macro-superdial,s,5)
;exten => s,4,SetCallerIDName(${ARG7})        ; skip this if ARG7 is empty
;exten => s,5,GotoIf($["${ARG8}" = ""]?macro-superdial,s,7)
;exten => s,6,SetCIDNum(${ARG8})         ; skip this if ARG8 is empty
;exten => s,7,GotoIf($["${ARG9}" = ""]?macro-superdial,s,9)
;exten => s,8,SetAccount(${ARG9})        ; skip this if ARG9 is empty
;exten => s,9,Dial(${ARG1},${ARG2},${ARG3},${ARG4})
;exten => s,10,Goto(s-${DIALSTATUS},1)
;exten => s,103,Goto(s-CHANUNAVAIL,1)
;exten => s-BUSY,1,Noop
;exten => s-NOANSWER,1,GotoIf($["${ARG10}" = ""]?macro-superdial,s-NOANSWER,3)
;exten => s-NOANSWER,2,Voicemail(${ARG10})
;exten => s-NOANSWER,3,Noop
;exten => _s-.,1,Noop
;
;------------------------------------------------------------
; stdexten Dial end End 
;------------------------------------------------------------
-------------------------------------------------------------
; Start - Internal Extension Dialing config / Macro
;------------------------------------------------------------
[macro-stdexten]				;This is the old ver I am using now  while I fix my new one with more features.
exten => s,1,Set((DNDStatus=DND/${ARG1})
exten => s,2,GotoIf(${DNDStatus}=YES?105:3)
exten => s,3,Set(${DB(LASTCALL/${ARG1})=${CALLERIDNUM})})
exten => s,4,Dial(IAX2/${ARG1}|20|Tr) ; 20sec timeout
exten => s,5,Voicemail(u${ARG1})
exten => s,6,Hangup
exten => s,105,Voicemail(b${ARG1})
exten => s,106,Hangup
;
;------------------------------------------------------------
[macro-stdexten-new] ; still working on issues
;
exten => s,1,GotoIf(${DB(CF/${ARG1})}?2:3)                ;Gets Call Forward Number
exten => s,2,Dial(SIP/${DB(CF/${ARG1})}/n)                ;Dials the Forward Number
;
exten => s,3,Set(${DB(SCFE/${ARG1})=${CALLERIDNUM})       ;Sets the nmbr that if they call in it gets forwarded to another nmbr/exten
exten => s,4,GotoIf(${DB(SCFE/${ARG1})}?5:6)              ;Get Selective Call Forward Number
exten => s,5,Dial(SIP/${DB(SCFN/${ARG1})}/n)              ;Selective Call Forward
;
exten => s,6,Set(${DB(SCRN/${ARG1})=${CALLERIDNUM})       ;Reads the Database for for nmbrs it should not allow threw.
exten => s,7,GotoIf(${DB(SCRN/${ARG1})}?8:9)              ;Get Selective Call Rejection Status
exten => s,8,Hangup                                       ;Sends Rejected calls to a all extensions are busy macro.
;
exten => s,9,Set(${DB(ACRStatus=ACR/${ARG1})})
exten => s,10,GotoIf(${ACRStatus}=YES?11:12)              ;Get Anonymous Call Rejection Status
exten => s,11,Macro(no-callerid)
;
exten => s,12,Set(${DB(DNDStatus=DND/${ARG1})})           ;Sets the variable for the Do not disturb responce
exten => s,13,GotoIf($DB({DNDStatus}=YES?18:14)           ;Checks the Database for the status/ responce
;
exten => s,14,Set(${DB(LASTCALL/${ARG1})=${CALLERIDNUM})  ;Places Current caller ID into the Database 
exten => s,15,Dial(${ARG1}|${ARG2}|t)                 ;Dials the extension and waits for the time out 
;
exten => s,16,GotoIf(${DB(CFNA/${ARG1})}?16:17)           ;Call Forwarding On No Answer
exten => s,17,Dial(SIP/${DB(CFNA/${ARG1})}/n)             ;Dials the No Answer forward Number 
 
exten => s,18,Set(${DB(VMStatus=VM/${ARG1})})             ;Checks to see if user has voice mail active or disabled.
exten => s,19,GotoIf(${VMStatus}=YES?20:118)              :If active it goes to voice mail. If not active it goes to busy- call checking macro.
 
exten => s,20,Voicemail(u${ARG1})                         ;Goes to the unavaible Voicemail
exten => s,21,Playback(vm-goodbye)                        ;Plays Voicemail Goodbye
exten => s,22,Hangup                                      ;Does a hard hangup
;
exten => s,116,GotoIf(${DB(CFB/${ARG1})}?117:118)         ;Gets the Call Forwading On Busy status/number 
exten => s,117,Dial(Local/${DB(CFB/${ARG1})}/n)           ;Dials the CallForwarding nmber/exten
;
exten => s,118,Set(${DB(CBBStatus=CBB/${ARG1})})
exten => s,119,GotoIf(${CBBStatus}=YES?120:121)           ;Checks to see if call back busy is activated. then if activated it
exten => s,120,Macro(busy-callback)                       ;goes to the busy-call back macro below
;
exten => s,121,Voicemail(b${ARG1})                        ;Goes to the Busy Voicemail 
exten => s,122,Playback(vm-goodbye)                       ;Plays Voicemail Goodbye
exten => s,123,Hangup                                     ;Does a hard hangup
;
;------------------------------------------------------------------
;stdexten-new Macros
;------------------------------------------------------------------
[macro-unassigned-number]				;If extension does not exist it gives tritone + number unassigned message to unasigned numbers
exten => i,1,Zapateller					;Send Zaptone to block telemarketers
exten => i,1,Answer
exten => i,n,Playback(the-number-u-dialed,noanswer)
exten => i,n,SayDigits(${ARG1})
exten => i,n,Playback(not-yet-assigned,noanswer)
exten => i,n,Busy
exten => i,n,Hangup
;
[macro-fastbusy]                                          ; I use this to send people I dont want to deal with
exten => s,1,Answer
exten => s,2,Wait 1
exten => s,3,Playback(all-circuits-busy)
exten => s,4,Wait(30)
exten => s,5,Hangup
;
[macro-caller-id]                                          ;Checks the status of inbound CallerID and directs the call.
exten => s,1,System(test "${CALLERIDNAME}" = "O")
exten => s,2,GotoIf($[${CALLERIDNUM} = O]?3:102)
exten => s,3,SetCallerIDName("No Caller ID")
exten => s,4,Macro(no-callerid,s,1)                         ;Sends Callers with no id to no-callerid macro below.
exten => s,102,Macro(stdexten,s,12)                         ;landing point with caller id
;
[macro-no-callerid]					    ;I use this to send people I dont want to deal with
exten => s,1,Answer
exten => s,n,Playback(no-callerid)
exten => s,n,Playback(vm-goodbye)
exten => s,n,Congestion
exten => s,n,Hangup
;
[macro-busy-callback]
exten => s,1,Answer
exten => s,n,Background(exten-busy-callback)
exten => s,n,Background(pres-star-one-for-callback,,callback-kipper)
exten => s,n,DigitTimeout,5
exten => s,n,ResponseTimeout,1
;
[callback-kipper]
exten => *1,1,Set(${DB(CALLBACK/${SCB}=1)           	; put 1 into this exten callback to indicate active
exten => *1,n,Set(${DB(CALLBACK2/${SCB}=${SCB2})    	; put who is was that called
exten => *1,n,Playback(conf-muted)               	; play some sound to tell the user callback is active
exten => *1,n,Hangup 
; 
exten => h,1,Set(CB=0)                                     ; Set default value for CB (CB =1 callback active)
exten => h,2,Set(CB=CALLBACK/${CALLERIDNUM})             ; Get CB
exten => h,3,Set(CB2=CALLBACK2/${CALLERIDNUM})           ; Get Who called
exten => h,4,NOOP(${CB})                                   ; Display CB (not really required)
exten => h,5,GotoIf($["${CB}" = "1"]?6:99)                 ; Check if CB=1 if it does to the callback stuff at 6 else jump to 99
exten => h,6,NOOP ;Wait(2)
exten => h,7,Set(${DB(CALLBACK/${CALLERIDNUM}=0)              ; set CB to 0 cos we don;t want a loop.
exten => h,8,System(echo "Channel: Local/${CB2}@sip" >/var/spool/asterisk/outgoing/${UNIQUEID}.callback) ; fill the
exten => h,9,System(echo "Context: sip" >>/var/spool/asterisk/outgoing/${UNIQUEID}.callback)             ; call file
exten => h,10,System(echo "Extension: ${CALLERIDNUM}" >>/var/spool/asterisk/outgoing/${UNIQUEID}.callback) ;with data
exten => h,11,System(echo "CallerID: ${CB2}" >>/var/spool/asterisk/outgoing/${UNIQUEID}.callback)
exten => h,99,NoOp
;
; you might want to play with timeouts, and perhaps use waitexten...
; 
exten => s,102,Set(CB=0)                                     ; Set default value for CB (CB =1 callback active)
exten => s,103,Set(CB=CALLBACK/${CALLERIDNUM})               ; Get CB
exten => s,104,GotoIf($["${CB}" = "1"]?99:105)               ; Check if CB=1 if it does tell them they can't else jump to 99
exten => s,105,ResponseTimeout(3)
exten => s,106,Set(SCB=${ARG2},SCB2=${ARG3}) ;we need to set these because you might exit the macro and we need the values.
exten => s,107,Background(vm-tocallback,,,callback-activate) ; play sound jump to callback-activate if key pressed
;
exten => s,99,Playback(you-cant-do-this-there-is-a-callback-already)
exten => s,100,Hangup
; 
; Catch dross
exten => i,1,goto(h,1)
exten => t,1,goto(h,1)
exten => h,1,NoOP
;
;----------------------------------------
[macro-find-me]
;----------------------------------------
; Dials the localextention then as many as 
; 2 remote numbers to find a subscriber. 
;
; ARG1 = local estension 
; ARG2 = remote number 1 to try (cell?) 
; ARG3 = remote number 2 to try (home?) 
; ARG4 = time out value for each call 
; ARG5 = Voicemail box if all else fails 
; ARG6 = File announcing the name of the called party 
;
;
; here we figure out what inbound circuit is being used 
; and if available, what the caller ID is. 
;
; ${RINGINGLINE} = Name of file announcing the ringing line 
; ${CALLERIDNUM} = calling party caller ID number 
;
exten => s,1,SetVar(LineAnnounce=${RINGINGLINE}) 
exten => s,2,SetVar(InCID=${CALLERIDNUM}) 
exten => s,3,SetGlobalVar(FOUNDME=foo) 
;
exten => s,4,Background(custom/locating) 
exten => s,5,Background(${ARG6}) 
exten => s,6,Wait(1) 
exten => s,7,Background(custom/confirm-abort) 
exten => s,8,DigitTimeout,1 ; give them 1 seconds between digits 
exten => s,9,ResponseTimeout,10 ; give them 10 seconds to make a choice 
;
exten => #,1,NoOp ; they chose not to proceed 
exten => #,2,SetGlobalVar(FOUNDME=ABORT) 
;
exten => *,1,NoOp ; they chose to go for it 
exten => *,2,NoOp 
exten => *,3,NoOp 
;
; try localextension first 
;
; first we need to make sure that we have something 
; to dial that looks like it might be a valid 
; localextension 
;
exten => *,4,GoToIf($[${LEN(${ARG1})} = 2]?5:7) 
exten => *,5,Macro(pana-announce,${ARG1},${ARG6},${LineAnnounce}) 
;
; if we still have control over the caller then the line 
; was not picked up so we try a "Page All" 
;
exten => *,6,Macro(pana-announce,${PAGEALL},${ARG6},${LineAnnounce}) 
;
; if we still have control over the caller then the line 
; was not picked up so we try to transfer to first remote 
; phone number. 
;
;
exten => *,7,SetVar(NumToDial=${ARG2}) 
exten => *,8,NoOp 
;
; if we dont get an answer on the first remote number we 
; will loop back here with the second remote number ready 
; to try again. 
;
;
exten => *,9,NoOp 
exten => *,10,SetGlobalVar(FOUNDME=foo) 
;
; local calls in our area require 10 digits. A simple 
; way to test for a valid number is to make sure the 
; number to dial is at least 10 characters long. 
;
exten => *,11,GoToIf($[${LEN(${NumToDial})} > 9]?14:12) 
exten => *,12,NoOp(${NumToDial}) 
exten => *,13,Goto(s-NOANSWER,1) 
; 
exten => *,14,Background(transfer) 
exten => *,15,Macro(dial-pstn-sip-iax,${NumToDial},${ARG4}) 
; 
exten => *,16,Goto(s-${FOUNDME}) 
; 
exten => s-ANSWER,1,NoOp 
exten => s-ANSWER,2,NoOp 
exten => s-ANSWER,3,NoOp 
exten => s-ANSWER,4,SetGlobalVar(FOUNDME=bar) 
; 
exten => s-BUSY,1,BackGround(the-party-you-are-calling) 
exten => s-BUSY,2,BackGround(is-curntly-busy) 
exten => s-BUSY,3,NoOp 
exten => s-BUSY,4,Wait(1) 
exten => s-BUSY,5,Goto(s-FINISHED,3) 
; 
exten => s-CANCEL,1,BackGround(canceled) 
exten => s-CANCEL,2,NoOp 
exten => s-CANCEL,3,Wait(1) 
exten => s-CANCEL,4,Goto(s-FINISHED,1) 
; 
exten => s-CHANUNAVAIL,1,BackGround(channel) 
exten => s-CHANUNAVAIL,2,BackGround(is-curntly-unavail) 
exten => s-CHANUNAVAIL,3,Wait(1) 
exten => s-CHANUNAVAIL,4,Goto(s-FINISHED,1) 
; 
exten => s-NOANSWER,1,GoToIf($[${NumToDial} = ${ARG2}]?2:5) 
exten => s-NOANSWER,2,SetVar(NumToDial=${ARG3}) 
exten => s-NOANSWER,3,GoToIf($[${LEN(${NumToDial})} < 9]?5:4) 
exten => s-NOANSWER,4,Goto(s,9) 
exten => s-NOANSWER,5,Goto(s-FINISHED,1) 
; 
exten => s-FINISHED,1,VoiceMail(u${ARG5}) 
exten => s-FINISHED,2,Goto(s-FINISHED,4) 
exten => s-FINISHED,3,VoiceMail(b${ARG5}) 
exten => s-FINISHED,4,SetGlobalVar(FOUNDME=foo) 
exten => s-FINISHED,5,Hangup 
;
; here if we got something undocumented 
; back from the DIAL command 
;
exten => s-.,1,BackGround(something-terribly-wrong) 
exten => s-.,2,GoTo(s-FINISHED,1) 
;
exten => t,1,Goto(i,1) ; If they take too long, give up 
;
exten => i,1,Background(custom/is-invalid) ; "That's not valid, try again" 
exten => i,2,Wait(1) 
exten => i,3,Goto(s,4) 
;------------------------------------------------------
; End Find me
;------------------------------------------------------
;--------------------------------------------------------------------
; End - Dialing config / stdexten Macro area
;--------------------------------------------------------------------
;
;------------------------------------------------------
;items to be tested & fixed & implamented.
;-------------------------------------------------------
;
;Desc: Call forward application allows CLASS type call forward features with Selective Call Forward capabilities.  Users can enable and disable
;convention call forwarding and additionally specify up to five callers who will be the only callers forwarded (Selective call forwarding).
;This is based upon the callers 10 digit caller id number information.  Given that, SCFE entries should be specified in the 10 digit caller
;id format to provide the best reliability. Any format other than 10 digit us CID nubmer format will be considered invalid.
;
;Commands are relative to the station they are issued from:
;
;*72 - Enable call forwarding and specify call forward number
;*73 - Disable call forwarding and clear any selective call forward entries
;*83 - Disable selective call forward and lear all selective call forward entries
;*63 - Set selective call forward entries (allowed up to 5)
;
;Incoming detection will largely depend on your incoming dial plan, but you should be able to use the following statements with minor changes
;
;If CALLERIDNUM/CFWD is Null (disabled) then continue to dial extension, if CALLERIDNUM/CFWD has a value then continue to check SCFE
;exten => 100,1,GotoIf($["${DB(${CALLERIDNUM}/CFWD)}" = ""]?100:2)
;
;If MAINCOUNT is set then check SCFE variables, if not the continue to dial extension
;exten => 100,2,GotoIf($["${DB(${CALLERIDNUM}/MAINCOUNT)}" = ""]?100:3)
;
;Check SCFE 1-5 against Callers caller ID num, if there is a match then continue to dial extension.
;exten => 100,3,GotoIf($["${DB($SCFE{CALLERIDNUM}/1)}" = "${CALLERIDNUM}"]?100:4)
;exten => 100,4,GotoIf($["${DB($SCFE{CALLERIDNUM}/2)}" = "${CALLERIDNUM}"]?100:5)
;exten => 100,5,GotoIf($["${DB($SCFE{CALLERIDNUM}/3)}" = "${CALLERIDNUM}"]?100:6)
;exten => 100,6,GotoIf($["${DB($SCFE{CALLERIDNUM}/4)}" = "${CALLERIDNUM}"]?100:7)
;exten => 100,7,GotoIf($["${DB($SCFE{CALLERIDNUM}/5)}" = "${CALLERIDNUM}"]?100:8)
;exten => 100,8,Voicemail(u100@context) ; If no SCFE entries match then goto voicemail
;
;Dial the extension
;exten => 100,100,Dial.......
;
;-----------------------------------------------------------------------------
;       Call Forwarding Activation/Deactivation
;-----------------------------------------------------------------------------
;
[cfwd-act] ; Activate call forwarding and specify the CFWD number
exten => *72,1,Background(call-forward)
exten => *72,2,Set(TIMEOUT(response)=10)
exten => t,1,Playback(vm-goodbye)
exten => t,2,Hangup()
exten => _X.,1,Set(DB(${CALLERIDNUM}/CFWD)=${EXTEN})
exten => _X.,2,Playback(call-forward)
exten => _X.,3,Playback(activated)
exten => _X.,4,Hangup()
;
[cfwd-deact] ; Deactivate call forwarding and clear any existing selective call forward (SCFE) entries
exten => *73,1,DBdel(${CALLERIDNUM}/CFWD)
exten => *73,2,DBdel(${CALLERIDNUM}/MAINCOUNT)
exten => *73,3,DBdel(SCFE${CALLERIDNUM}/1)
exten => *73,4,DBdel(SCFE${CALLERIDNUM}/2)
exten => *73,5,DBdel(SCFE${CALLERIDNUM}/3)
exten => *73,6,DBdel(SCFE${CALLERIDNUM}/4)
exten => *73,7,DBdel(SCFE${CALLERIDNUM}/5)
exten => *73,8,Playback(call-forward)
exten => *73,9,Playback(de-activated)
exten => *73,10,Hangup()
;
;-----------------------------------------------------------------------------
;       Selective Call Forward Activation/Entry and Deactivation/Clear
;-----------------------------------------------------------------------------
;
[enter-scfe] ; SCFE entry.  Checks that cfwd is enabled and SCFE count and proceeds accordingly
:exten => *63,1,GotoIf($["${DB(${CALLERIDNUM}/CFWD)}" = ""]?97:2) ; Check if CFWD is activated
;exten => *63,2,GotoIf($["${DB(${CALLERIDNUM}/MAINCOUNT)}" = "0"]?100:3) ; If MAINCOUNT=0 all 5 SCFE are used
;exten => *63,3,GotoIf($["${DB(${CALLERIDNUM}/MAINCOUNT)}" = ""]?101:4) ; If MAINCOUNT=NULL 5 SCFE entries are available
;exten => *63,4,Goto(add-scfe,*63,2) ; Continue with current SCFE count
;exten => *63,3,GotoIf($["${DB(${CALLERIDNUM}/MAINCOUNT)}" = ""]?101:4) ; If MAINCOUNT=NULL 5 SCFE entries are available
;exten => *63,4,Goto(add-scfe,*63,2) ; Continue with current SCFE count
;exten => *63,97,Playback(call-forward)
;exten => *63,98,Playback(de-activated)
;exten => *63,99,Hangup()
;exten => *63,100,Goto(scfe-count,1,100)
;exten => *63,101,Goto(add-scfe,*63,1)
;
;
;[add-scfe]
;exten => *63,1,Set(DB(${CALLERIDNUM}/MAINCOUNT)=123450)    ;Set Total allowed SCFE's in the Database
;exten => *63,2,Set(COUNT=${DB(${CALLERIDNUM}/MAINCOUNT)})     ;Set a channel variable to match
;exten => *63,3,Background(scfe-add)    ;Playback menu like "Please enter selective call forward number now."
;exten => *63,4,Set(TIMEOUT(response)=10)
;exten => t,1,Playback(vm-gooodbye)
;exten => t,2,Hangup()
;exten => i,1,Goto(add-scfe,*63,3)
;exten => _NXXXXXXXXX,1,Set(DB(SCFE${CALLERIDNUM}/${COUNT:0:1})=${EXTEN}) ; Add unique SCFE to database
;exten => _NXXXXXXXXX,2,Set(DB(${CALLERIDNUM}/MAINCOUNT)=${COUNT:1}) ; Increment (rather decrease) the SCFE total avail count
;exten => _NXXXXXXXXX,3,Goto(scfe-count,s,1) ; Jump to the counter
;
;
;[scfe-count] ; Determines the current count of SCFE numbers based on MAINCOUNT
;exten => s,1,Background(scfe-another) ; Another menu prompt asking us if we want to add another number 1=Y 2=N
;exten => s,2,Set(TIMEOUT(response)=10)
;exten => t,1,Playback(vm-goodbye)
;exten => t,2,Hangup()
;exten => i,1,Goto(scfe-count,s,1)
;exten => 1,1,GotoIf($["${DB(${CALLERIDNUM}/MAINCOUNT)}" = "0"]?100:2)
;exten => 1,2,Goto(add-scfe,*63,2) ; If COUNT is not 0 jump back to add-scfe context at priority *63,2
;exten => 2,1,Playback(vm-goodbye) ; If 2 (NO) is entered playback goodbye
;exten => 2,2,Hangup()
;exten => 1,100,Playback(scfe-count-exceeded)      ; playback message indicating you have 5 scf numbers entered
;exten => 1,101,Hangup()                           ; Hangup
;
;
;[scfe-clear] ; Clear all SCFE database entries but does not change overall cfwd status
;exten => *83,1,DBdel(${CALLERIDNUM}/MAINCOUNT)
;exten => *83,2,DBdel(SCFE${CALLERIDNUM}/1)
;exten => *83,3,DBdel(SCFE${CALLERIDNUM}/2)
;exten => *83,4,DBdel(SCFE${CALLERIDNUM}/3)
;exten => *83,5,DBdel(SCFE${CALLERIDNUM}/4)
;exten => *83,6,DBdel(SCFE${CALLERIDNUM}/5)
;exten => *83,7,Playback(call-forward)
;exten => *83,8,Playback(de-activated)
;exten => *83,9,Hangup()
-----------------------------------------
; 900 - used to transfer analog phone calls to other exten.
;       needs work.
;[hook-flash] 
;exten => _900,1,Flash ; hook flash 
;exten => _900,n,background(silence/1) ; wait for KSU 
;exten => _900,n,SendDTMF(26) ; send KSU the extension 
;exten => _900,n,background(silence/1) ; wait for KSU 
;exten => _900,n,Hangup ; was SoftHangup
;----------------------------------------
;------------------------------------------------------
;End Of extensions.conf File
;------------------------------------------------------