; 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).
;
; 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 extensions.conf or
; one if its included files, will remain set to the previous value.
;
clearglobalvars=no
;
; 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 "filename.conf"
;
; 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 zapata.conf) to dial, i.e. 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
;
; Seconds before call forward no answer to voicemail
VM_DELAY=20
;
; Seconds before no response message for non-voicemail extensions
NO_VM_TIMEOUT=30
;
;Sip/Voip Provider - This is you DID Provider Like Broadvoice or Voice Pulse
LINE=
USERID=
COMPANY=
PROTOCOL=
;
COMPANYNAME=Company Name Here ; Your Comapny Name here
;
;SipPhone.com user info
SIPLINE= ;your SipPhone.com Number Here
SIPUSERID= ;Your User ID here
SIPPASS= ;Your Password here
;
;IAXTEL user info
IAXLINE=
IAXTELUSER=
IAXTELPASS=
;
;Used for rollover
;
;your Sip Line Phone NMbr
SIPLINENMBR1=
SIPLINENMBR2=
SIPLINENMBR3=
SIPLINENMBR4=
;
;your Hard Line Phone NMbr
ZAPLINENMBR1=
ZAPLINENMBR2=
ZAPLINENMBR3=
ZAPLINENMBR4=
;
;Sip Out-bound Dialing Rollover
;SIPLINE1=Sip Company 1
;SIPLINE2=Sip Company 2
;SIPLINE3=Sip Company 3
;SIPLINE4=Sip Company 4
;
;Zap Out-Bound Dialing Rollover
;LINE1=zap1
;LINE2=zap2
;LINE3=zap3
;LINE4=zap4
;---------------------------------------------------------------------------------------
; 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 (e.g. _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.
;
;-----------------------------------------------------------------------------
; 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
;----------------------------------------------------------------------------
; Zaptel Acceptable Dial Strings
;----------------------------------------------------------------------------
;
; Digits 0 - 9
; Symbols # *
; Wait W
;
; Ranges:
; Apps : *XX
; Corp Exten:10 - 40
; Extensions:1000 - 8500 not currently mapped
; Test Tools:900 - 909
; Call Park :700,701 - 709
; Meetme :8505 - 8507
; ACD :
;--------------------------------------------------------------------
;--------------------------------------------------------------------
; inbound call mapping
;--------------------------------------------------------------------
;
[inbound]
;Old way
;exten => _XXXXXXX,1,Dial(SIP/${EXTEN},30,Tr)
;exten => _XXXXXXX,2,Voicemail(u${EXTEN})
;exten => _XXXXXXX,3,Hangup
;exten => _XXXXXXX,102,Voicemail(b${EXTEN})
;exten => _XXXXXXX,103,Hangup
;
;New way
;Extensions with Voicemail
;exten => s,1,Macro(exten-vm,${EXTEN},${VM_DELAY})
;
; Extensions with no voicemail
;exten => s1,1,Macro(exten-novm,${EXTEN},${NO_VM_TIMEOUT})
;--------------------------------------------------------------------
; outbound mapping
;--------------------------------------------------------------------
[outbound]
;provider
;US LD & Canada
exten => _NXXNXXXXXX,1,SetCallerID(${LINE})
exten => _NXXNXXXXXX,n,SetCIDName(${COMPANYNAME})
exten => _NXXNXXXXXX,n,Dial(${PROTOCOL}/${EXTEN}@${COMPANY})
exten => _NXXNXXXXXX,n,Congestion
exten => _NXXNXXXXXX,n,Hangup
;
; International
exten => _011NXXNXXXXXX,1,SetCallerID(${LINE})
exten => _011NXXNXXXXXX,n,SetCIDName(${COMPANY})
exten => _011NXXNXXXXXX,n,Dial(SIP/${EXTEN}@sip.broadvoice.com)
exten => _011NXXNXXXXXX,n,Congestion
exten => _011NXXNXXXXXX,n,Hangup
;
;[iaxtel]
exten => _1700NXXXXXX,1,SetCallerID(${IAXLINE})
exten => _1700NXXXXXX,n,SetCIDName(${COMPANYNAME})
exten => _1700NXXXXXX,n,Dial(IAX2/${IAXTELUSER}:{IAXTELPASS}@iaxtel.com/${EXTEN}@iaxtel)
exten => _1700NXXXXXX,n,Congestion
exten => _1700NXXXXXX,n,Hangup
;
;[sipphone]
exten => _1747NXXXXXX,1,SetCallerID(${SIPLINE})
exten => _1747NXXXXXX,n,Dial(SIP/${EXTEN:1}@sipphone)
exten => _1747NXXXXXX,n,Playback(invalid)
exten => _1747NXXXXXX,n,Congestion
exten => _1747NXXXXXX,n,Hangup
;
[macro-sip-out-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]?1:8)
exten => s,8,Dial(${sipline4},15,rt)
exten => s,9,Hangup
;
;-------------------------------------------------------
;#zap outbound mapping
;-------------------------------------------------------
;
;ignorepat => 9
;
[zap]; Local
exten => _9NXXXXXX,1,SetCallerID(${ZAPLINE})
exten => _9NXXXXXX,n,Dial(Zap1/${EXTEN})
exten => _9NXXXXXX,n,Playback(invalid)
exten => _9NXXXXXX,n,Congestion
exten => _9NXXXXXX,n,Hangup
;Zap Ld
exten => _8NXXNXXXXXX,1,SetCallerID(${ZAPLINE})
exten => _8NXXNXXXXXX,2,Dial(Zap1/${EXTEN})
exten => _8NXXNXXXXXX,3,Playback(invalid)
exten => _8NXXNXXXXXX,4,Congestion
exten => _8NXXNXXXXXX,5,Hangup
[macro-zap-out-rollover]
exten => s,1,GotoIf($[${zapline1} = Congestion]?3:2)
exten => s,2,Dial(${zapline1},15,rt)
exten => s,3,GotoIf($[${zapline2} = Congestion]?5:4)
exten => s,4,Dial(${zapline2},15,rt)
exten => s,5,GotoIf($[${zapline3} = Congestion]?7:6)
exten => s,6,Dial(${zapline3},15,rt)
exten => s,7,GotoIf($[${zapline4} = Congestion]?1:8)
exten => s,8,Dial(${zapline4},15,rt)
exten => s,9,Hangup
;-------------------------------------------------------
; Blocking 1-900 Calls and 976 Calls -
;-------------------------------------------------------
[blocked]
exten => _900NXXXXXX,1,Playback(ss-noservice)
exten => _NXX976XXXX,1,Playback(ss-noservice)
exten => _976XXXX,1,Playback(ss-noservice)
;--------------------------------------------------------
;Basic *XX exten nmbrs in the US + Canada For Asterisk
;Including macros that go with the exten.
;--------------------------------------------------------
[basic-*XX]
; *228 - Over-the-Air Service Provisioning
; *272 - Access Wireless Priority Service
; *00 - Inward Voice Activated Services (English)
; *01 - Inward Voice Activated Services (French) Canada
; *02 - Deactivation/Activation of In-Session Activation (ISA) on a per line basis
; *03 - Deactivation of In-Session Activation (ISA) on a per call basis
; *1X - Reserved For Local Assignment
; *2X - Reserved for expansion to 3digit VSCs
; *3X - Reserved for expansion to 3-digit VSCs
; *40 - Change Forward-To Number for Customer Programmable Call Forwarding Busy Line
; *41 - Change Forward-To Number for Customer Programmable Call Forwarding Don't Answer
; *42 - Six-Way Conference Calling Activation
; *43 - Drop last member of Six-Way Conference Call
; *44 - Voice Activated Dialing
; *45 - Voice Dialing Extended Dial Tone
; *46 - French Voice Activated Network Control Canada
; *47 - Override Feature Authorization
; *48 - Override Do Not Disturb
; *49 - Long Distance Signal
; *50 - Voice Activated Network Control
; *51 - Who Called Me?
exten => 51,1,Answer
exten => 51,n,Wait(1)
exten => 51,n,SetVar(${DB(LastCaller=LASTCALL/${ARG1})})
exten => 51,n,SayDigits(${LastCaller})
exten => 51,n,Hangup
; *52 - Single Line Variety Package (SVP) - Call Hold
; *53 - Single Line Variety Package (SVP) - Distinctive Ring B
; *54 - Single Line Variety Package (SVP) - Distinctive Ring C
; *55 - Single Line Variety Package (SVP) - Distinctive Ring D
; *56 - Change Forward-To Number for ISDN Call Forwarding
; *57 - Customer Originated Trace
; *58 - ISDN MBKS Manual Exclusion Activation
; *59 - ISDN MBKS Manual Exclusion Deactivation
; *60 - Selective Call Rejection Activation
; *61 - Distinctive Ringing/Call Waiting Activation
; *62 - Selective Call Waiting
; *63 - Selective Call Forwarding Activation
; *64 - Selective Call Acceptance Activation
; *65 - Calling Number Delivery Activation
; *66 - Automatic Callback Activation
; *67 - Calling Number Delivery Blocking
; *68 - Call Forwarding Busy Line/Don't Answer Activation
; *69 - Automatic Recall Activation with macro.
exten => *69,1,Cut(CHANRES=CHANNEL|-|1)
exten => *69,n,Cut(EXTENSION=CHANRES|/|2)
exten => *69,n,Goto(s,1,${EXTENSION})
exten => s,1,Answer
exten => s,2,Wait(1)
exten => s,3,Set(${DB(LastCaller=LASTCALL/${ARG1})})
exten => s,4,GotoIf($[${LastCaller}]?5:10)
exten => s,5,SayDigits(${LastCaller})
exten => s,6,SetVar(TIMEOUT(ditig)=3)
exten => s,7,SetVar(TIMEOUT(response)=7)
exten => s,8,Background(press-one-to-callback)
exten => s,9,Goto(12)
exten => s,10,Playback(unidentified)
exten => s,11,Hangup
exten => s,12,NoOp
exten => 1,1,Goto(all-exten,${LastCaller},1);
exten => i,1,Playback(pbx-invalid)
exten => i,2,Hangup
exten => t,1,Playback(vm-goodbye)
exten => t,2,Hangup
; *70 - Cancel Call Waiting Disable for Current call
; *71 - Usage Sensitive Three-way Calling
; *72 - Call Forwarding Activation
exten => _*72.,1,Set(${DB(CF/${CALLERIDNUM}=${EXTEN:3})})
exten => _*72.,2,Answer
exten => _*72.,3,Wait(1)
exten => _*72.,4,Playback(call-fwd-unconditional)
exten => _*72.,5,Playback(for)
exten => _*72.,6,Playback(extension)
exten => _*72.,7,SayDigits(${CALLERIDNUM})
exten => _*72.,8,Playback(is-set-to)
exten => _*72.,9,SayDigits(${EXTEN:3})
; *73 - Call Forwarding Deactivation
exten => *73,1,Set(${DB(CF/${CALLERIDNUM})})
exten => *73,2,Answer
exten => *73,3,Wait(1)
exten => *73,4,Playback(call-fwd-cancelled)
exten => *73,5,Hangup
; *74 - Speed Calling 8 - Change List
; *75 - Speed Calling 30 - Change List
; *76 - Advanced Call Waiting Deluxe
; *77 - Anonymous Call Rejection Activation
; *78 - Do Not Disturb Activation
exten = *78,1,Answer
exten = *78,2,Set(${DB(DND/${CALLERIDNUM}=YES)})
exten = *78,3,Wait(1)
exten = *78,4,Playback(do-not-disturb)
exten = *78,5,Playback(activated)
exten = *78,6,Hangup
; *79 - Do Not Disturb Deactivation
exten = *79,1,Answer
exten = *79,2,Set(${DB(DND/${CALLERIDNUM})})
exten = *79,3,Wait(1)
exten = *79,4,Playback(do-not-disturb)
exten = *79,5,Playback(de-activated)
exten = *79,6,Hangup
; *80 - Selective Call Rejection Deactivation
; *81 - Distinctive Ringing/Call Waiting Deactivation
; *82 - Line Blocking Deactivation
; *83 - Selective Call Forwarding Deactivation
; *84 - Selective Call Acceptance Deactivation
; *85 - Calling Number Delivery Deactivation
; *86 - Automatic Callback Deactivation
; *87 - Anonymous Call Rejection Deactivation
; *88 - Call Forwarding Busy Line/Don't Answer Deactivation
; *89 - Automatic Recall Deactivation
; *90 - Customer Programmable Call Forwarding Busy Line Activation
; *91 - Customer Programmable Call Forwarding Busy Line Deactivation
; *92 - Customer Programmable Call Forwarding Don't Answer Activation
; *93 - Customer Programmable Call Forwarding Don't Answer Deactivation
; *94 - Reserved For Local Assignment
; *95 - Reserved For Local Assignment
; *96 - Reserved For Local Assignment
; *97 - Reserved For Local Assignment
; *98 - Reserved For Local Assignment
; *99 - Reserved For Local Assignment
;--------------------------------------------------------
;Basic exten nmbrs For Asterisk
;Including macros that go with the exten.
;--------------------------------------------------------
[basic-exten]
; * - 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)
; 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,4,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 - 98 - Reserved For future queue tranfers
; 99 -Login and wait for calls while offhook. When calls arrive, you will he
; a beeping tone and the caller will join automatically
[offhook]
exten => *99,1,Answer
exten => *99,2,SetMusicOnHold(default)
exten => *99,3,Wait,1
exten => *99,4,AgentLogin
; 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 - 299 - Reserved For Local Assignment
; 300 - 310 - Reserved For Local Assignment
; 311 - non-emerg not yet setup for e911 Non Emerg
exten => 311,1,Dial(SIP/${EXTEN})
exten => 311,2,Congestion
exten => 311,102,Playback(ss-noservice)
exten => 311,103,Congestion
; 312 - 399 Reserved For Local Assignment
; 400 - 410 Reserved For Local Assignment
; 411 - Directory Asistance
exten => 411,1,Dial(SIP/411@fort_smith,30)
exten => 411,2,hangup
; 412 - 499 Reserved For Local Assignment
; 500 - Dials Digium Demo via IAX
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 - Dials Digium with out Demo Prompts
exten => 501,1,Dial(IAX2/guest@misery.digium.com/s@default)
; 502 - 510 Reserved For Local Assignment
; 511 Wakeup Service
exten => 511,1,Answer
exten => 511,2,Wait(1)
exten => 511,3,AGI(callback.agi)
exten => 511,4,Wait(1)
exten => 511,5,Hangup
; 512 - 599 Reserved For Local Assignment
; 601 - 610 Reserved For Local Assignment
; 611 - Repair line
exten => 611,1,Dial(SIP/${EXTEN}|18|r)
exten => 611,2,Queue(repair|TtH)
exten => 611,3,WaitMusicOnHold(45)
exten => 611,4,Voicemail(u611)
exten => 611,5,Playback(vm-goodbye)
exten => 611,6,Hangup
; 612 - 6699 Reserved For Local Assignment
; 700 - 709 Call Parking on Asterisk also includes blind 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}
; 700 - Blind Call Parking With Call Back Announce
;exten => _70X,1,Answer
;exten => _70X,n,Wait(1)
;exten => _70X,n,ParkAndAnnounce(pbx-transfer:PARKED|7200|SIP/${EXTEN:1}|default,${EXTEN:1},1)
; 710 - 799 Reserved For Local Assignment
; 800 - 809 Inturnal and Extenal Meet-Me Conference Rooms
[internal-conf]
exten => _80[1-7],1,Answer
exten => _80[1-7],n,Wait(1)
exten => _80[1-7],n,MeetMe({$ARG1},pdcMs)
exten => _80[1-7],n,4,Playback(vm-goodbye)
exten => _80[1-7],n,5,Hangup
[external-conf]
exten => _80[8-9],1,Answer
exten => _80[8-9],n,Wait(1)
exten => _80[8-9],n,MeetMe({$ARG1},pdcMs)
exten => _80[8-9],n,4,Playback(vm-goodbye)
exten => _80[8-9],n,5,Hangup
; 810 - 899 Reserved For Local Assignment
; 900 - 910 Reserved For Local Assignment
; 911 Emergancy
exten => 911,1,Dial(SIP/${EXTEN})
exten => 911,n,Congestion
exten => 911,n,Playback(no-911-1)
exten => 911,n,Congestion
; 912 - 989 Reserved For Local Assignment
; 990 - System Stataus : Agi Requires sysstat.agi
exten => 990,1,AGI(systat.agi)
exten => 990,n,Wait(1)
exten => 990,n,Playback(loadavgis)
exten => 990,n,SayDigits(${LOADAVGPRE})
exten => 990,n,Playback(point)
exten => 990,n,SayDigits(${LOADAVGSUF})
exten => 990,n,Wait(1)
exten => 990,n,Playback(thereare)
exten => 990,n,SayDigits(${NUMUSER})
exten => 990,n,Playback(userson)
exten => 990,n,Wait(1)
exten => 990,n,Hangup
; 991 - Say Phone Number
exten => 991,1,Answer
exten => 991,n,Wait(1)
exten => 991,n,SayDigits(${CALLERIDNUM})
exten => 991,n,Hangup
; 992 - Say Date and Time
exten => 992,1,Answer
exten => 992,n,Wait(1)
exten => 992,n,Datetime
exten => 992,n,Hangup
; 993 - Echo Test
exten => 993,1,Answer
exten => 993,n,Wait(1)
exten => 993,n,Playback(demo-echotest)
exten => 993,n,Playback(beep)
exten => 993,n,Echo
exten => 993,n,Playback(demo-echodone)
exten => 993,n,Hangup
; 994 - Milliwatt Tone
exten => 994,1,Answer
exten => 994,n,Milliwatt
exten => 904,n,Hangup
; 995 - Record Promt Test Format Gsm
exten => 995,1,Answer
exten => 995,n,Wait(1)
exten => 995,n,Record(record:gsm)
exten => 995,n,Wait(1)
exten => 995,n,Playback(record)
exten => 995,n,Hangup
; 996 - 999 Reserved For Assignment
;-------------------------------------
;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 E.164 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
;
;-------------------------------------
;- Auto Attendant Basic Setup
;-------------------------------------
[autoattend]
exten => s,1,GotoIfTime(08:00-17:00on-fri|*|*?vlnx-day,s,1)
exten => s,n,GotoIfTime(17:01-07:99|mon-fri|*|*?vnight,s,1)
exten => s,n,GotoIfTime(09:00-16:00|sat|*|*?day,s1,1)
exten => s,n,Goto(vlnx-night,s,1);
;
[day]
include => selection
include => all-exten
include => disa
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 => disa
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
;
[selection]
exten = -,1,Playback(vm-goodbye)
exten = -,n,Hangup
;
exten = i,1,Playback(invalid)
exten = i,n,Goto(s,5)
;
exten = t,1,Playback(pls-wait-connect-call)
exten = t,n,Goto(operator-queue,s,1)
;
;1.Sales Dept
exten => 1,1,GotoIfTime(08:00-23:59|mon-fri|*|*?selection,3,6)
exten => 1,2,GotoIfTime(00:00-08: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,Playback(pls-wait-connect-call)
exten => 1,7,SetMusicOnHold,default
exten => 1,8,SetCallerID,1
exten => 1,9,SetCIDName,Sales
exten => 1,10,Goto,callqueue|200|1
;
;2.Billing Dept
exten => 2,1,GotoIfTime(08:30-17:29|mon-fri|*|*?selection,4,6)
exten => 2,2,GotoIfTime(17:30-08: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(pls-wait-connect-call)
exten => 2,7,SetMusicOnHold,default
exten => 2,8,SetCallerID,2
exten => 2,9,SetCIDName,Sales
exten => 2,10,Goto,callqueue|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,(pls-wait-connect-call)
exten => 3,7,SetMusicOnHold,default
exten => 3,8,SetCallerID,3
exten => 3,9,SetCIDName,TechSupport
exten => 3,10,Goto,callqueue|202|1
;
;4
exten => 4,1,Playback,vm-goodbye
exten => 4,n,Hangup
;
exten => 5,1,Playback,vm-goodbye
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 Fax Extension
exten => 8,1,SetVar(CALLEDFAX=${EXTEN})
exten => 8,2,Answer
exten => 8,3,Goto(fax,${EXTEN},1)
;
;9
exten => 9,1,Goto(day,s,1)
;
exten => 0,1,Dial(SIP/0|18|Tr)
;-------------------------------------------------------------------------
[all-exten]
exten => 0,1,Macro(stdexten,0) ; Dial Operator
exten => _[1-5]XXX,1,Macro(stdexten,${EXTEN}) ; User Exten / Sip
exten => _[6-8]XXX,1,Macro(stdexten,${EXTEN}) ; User Exten / IAX
;
;Extensions with Voicemail
;exten => ,1,Macro(exten-vm,${EXTEN},${VM_DELAY})
;
; Extensions with no voicemail
;exten => ,1,Macro(exten-novm,${EXTEN},${NO_VM_TIMEOUT})
;
[macro-stdexten]
exten => s,1,GotoIf(${DB(CFIM/${ARG1})}?2:3) ; Get CFIM key
exten => s,2,Dial(Local/${DB(CF/${ARG1})}/n) ; Unconditional forward
exten => s,3,GotoIf(${DB(DND/${ARG1})}?106)
exten => s,4,Set(${DB(LASTCALL/${ARG1})=${CALLERIDNUM})
exten => s,5,Dial(SIP/${ARG1}|20|r) ; 20sec timeout
exten => s,6,Voicemail(u${ARG1})
exten => s,7,Hangup
exten => s,106,Voicemail(b${ARG1})
exten => s,107,Hangup
;
[macro-exten-vm]
; Call extension ${ARG1} for ${ARG2} seconds, divert to voicemail on busy or noreply
exten => s,1,GotoIf(${DB(CFIM/${ARG1})}?2:3) ; Get CFIM key
exten => s,2,Dial(Local/${DB(CF/${ARG1})}/n) ; Unconditional forward
exten => s,3,Set(DNDStatus=DND/${ARG1})
exten => s,4,GotoIf(${DNDStatus}=YES?107:6)
exten => s,5,Set(${DB(LASTCALL/${ARG1})=${CALLERIDNUM})
exten => s,6,Dial(SIP/${ARG1},${ARG2})
exten => s,7,Voicemail(u${ARG1})
exten => s,8,Playback(vm-goodbye)
exten => s,9,Hangup
exten => s,107,Voicemail(b${ARG1})
exten => s,108,Playback(vm-goodbye)
exten => s,109,Hangup
;
[macro-exten-novm]
; Call extension ${ARG1} for ${ARG2} seconds
exten => s,1,GotoIf(${DB(CFIM/${ARG1})}?2:3) ; Get CFIM key
exten => s,2,Dial(Local/${DB(CF/${ARG1})}/n) ; Unconditional forward
exten => s,3,Set(${DB(DNDStatus=DND/${ARG1})})
exten => s,4,GotoIf(${DNDStatus}=1?103:102)
exten => s,102,Dial(SIP/${ARG1},${ARG2})
exten => s,103,Playback(the-party-you-are-calling)
exten => s,104,Playback(is-curntly-unavail)
exten => s,105,Playback(pls-try-call-later)
exten => s,106,Hangup
exten => s,203,Busy
;
[macro-unassigned-number]
; Gives tritone + number unassigned message to vacant numbers
exten => s,1,Answer
exten => s,2,Playback(the-number-u-dialed,noanswer)
exten => s,3,SayDigits(${ARG1})
exten => s,4,Playback(not-yet-assigned,noanswer)
exten => s,5,Busy
;###################################################
;#PBX to PBX ofice to office connections 990-999
;###################################################
;
[pbx-2-pbx]
exten => 990,1,Dial(IAX2/guest@server/s@default)
exten => 990,2,Hangup
;
exten => 991,1,Dial()
exten => 991,2,Hangup
;--------------------------------------------------------
;- System Macro's area.
;--------------------------------------------------------
[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-timestamp.agi)
exten => s,2,SetVar(CALLFILENAME=${timestamp}-${ARG2}-${ARG1})
exten => s,3,Monitor(gsm,${CALLFILENAME})
;
[macro-record-cleanup]
exten => s,1,GotoIf($[${CALLFILENAME} = ${NULL}]?6:2)
exten => s,2,SetVar(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}-in.wav ${CFBASE}-out.wav > ${CFBASE})
exten => s,4,System(/bin/rm ${CFBASE}-in.wav ${CFBASE}-out.wav)
; 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
;
[macro-privacy]
exten => s,1,PrivacyManager
exten => s,2,Macro(record-on,${MYHOMEPHONE},${CALLERIDNUM})
;exten => s,3,Monitor(wav|call-${EPOCH}-${CALLERIDNUM})
;${DATETIME} Current date time in the format: YYYY-MM-DD_HH:MM:SS
;${UNIQUEID} Current call unique identifier
exten => s,3,Dial(SIP/${EXTEN},20,tr)
exten => s,103,Goto,s|6
exten => s,104,Goto,s|6
exten => s,4,Answer
exten => s,5,Wait(1)
exten => s,6,Voicemail2(u0)
exten => s,7,Playback,vm-goodbye
exten => s,8,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-call-intercom]
exten => s,1,AGI(callall|${CALLERIDNUM}|${CALLERIDNUM}|${ARG1}|${ARG1})
exten => s,2,Hangup
exten => h,1,Hangup
;
[add-to-intercom]
exten => start,1,Playback(beep)
exten => start,2,MeetMe(${iConf},${iConfParm})
exten => start,3,Macro(hangupcall)
exten => h,1,Hangup
;
[in-analog] ;used for private line answering machine......
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)
;
[in-pstn] ; under development.....
exten => s,1,Macro(fixcid)
exten => s,2,Answer
exten => s,3,DigitTimeout(3)
exten => s,4,ResponseTimeout(3)
exten => s,5,Wait(1)
exten => s,6,BackGround(pls-wait-connect-call)
exten => s,7,Dial(SIP/${EXTEN},30,Tt)
exten => i,1,Playback(pbx-invalid)
exten => i,2,Hangup
;
[macro-call-intercom]
exten => s,1,AGI(callall|${CALLERIDNUM}|${CALLERIDNUM}|${ARG1}|${ARG1})
exten => s,2,Hangup
exten => h,1,Hangup
;
[add-to-intercom]
exten => start,1,Playback(beep)
exten => start,2,MeetMe(${iConf},${iConfParm})
exten => start,3,Macro(hangupcall)
exten => h,1,Hangup[macro-callerid-fixup]
;
; This macro assumes the following:
; Extensions without a DID number have a CallerID number that is 4 digits
; Extensions with a DID number have their CallerID number set to their 10 digi
; The last 4 digits of a DID number is the same as the extension number
;
; This macro does the following if it is called without any parameters:
; If the Caller*ID number is 4 digits, do nothing
; If the Caller*ID number is not 4 digits, strip off the first 6 digits
;
; This macro does the following if it is called with a parameter
; If the Caller*ID number is 4 digits, reset the Caller*ID number to be the va
; If the Caller*ID number is not 4 digits, do nothing
;
exten => s,1,NoOp(Entering Macro "callerid-fixup")
exten => s,2,NoOp(Variable CALLERIDNUM is equal to ${CALLERIDNUM})
exten => s,3,GoToIf($["${ARG1}" != ""]?external,1)
exten => s,4,GoToIf($["${ARG1}" = ""]?internal,1)
;
exten => internal,1,GoToIf($[${LEN(${CALLERIDNUM})} = 4]?f,1)
exten => internal,2,SetCIDNum(${CALLERIDNUM:6})
exten => internal,3,GoTo(f,1)
;
exten => external,1,GoToIf($[${LEN(${CALLERIDNUM})}! = 4]?f,1)
exten => external,2,SetCIDNum(${ARG1},a)
exten => external,3,GoTo(f,1)
;
exten => f,1,NoOp(Variable CALLERIDNUM is equal to ${CALLERIDNUM})
exten => f,2,NoOp(Leaving Macro "callerid-fixup")
;
[macro-fixcid]
;#################################################################
;# My caller id name often comes in as O. If there is a CID number,
;# use that. Otherwise set the caller ID name to No Caller ID
;# ARGS: none
;# For some reason GotoIf($[${CALLERIDNAME} = O]?true:false) fails so I use
;# this crappy system call instead :( I'm not sure if this is because
;# $CALLERIDNAME is usually 2 words or what but it sucks.
;######################################################################
;
exten => s,1,System(test "${CALLERIDNAME}" = "O")
exten => s,2,GotoIf($[${CALLERIDNUM} = O]?3:5)
exten => s,3,SetCIDName("No Caller ID")
exten => s,4,Goto(6)
exten => s,5,SetCIDName(${CALLERIDNUM})
exten => s,6,NoOp ; landing point for no caller id
exten => s,102,Goto(autoattend,s,1) ; landing point for proper caller ID
;
[macro-system-page] ; Still developing.....
exten => s,1,AbsoluteTimeout(11)
exten => s,2,NoOp,${ARG1}
exten => s,3,AGI,allcall.agi|SIP/${ARG1} ${EX-DESIGN} ${EX-SALES1}
;
[macro-rollover]
; Rollover macro one call per line
; This will limite the calls to one
; per line. (No call waiting).
;
exten => s,1,NoOp
exten => s,2,Ringing
exten => s,3,Wait(2)
exten => s,4,SetGroup(${CALLWAIT1})
exten => s,5,CheckGroup(1)
exten => s,6,Dial(${ARG1})
exten => s,7,SetGroup(${CALLWAIT2})
exten => s,8,CheckGroup(1)
exten => s,9,Dial(${ARG2})
exten => s,10,SetGroup(${CALLWAIT3})
exten => s,11,CheckGroup(1)
exten => s,12,Dial($ARG3})
exten => s,13,SetGroup(${CALLWAIT4})
exten => s,14,CheckGroup(1)
exten => s,15,Dial(${ARG4})
exten => s,16,Congestion
exten => s,107,SetGroup(${CALLWAIT2})
exten => s,108,CheckGroup(1)
exten => s,109,Dial(${ARG2})
exten => s,110,Dial(${ARG3})
exten => s,111,Dial(${ARG4})
exten => s,112,Congestion
exten => s,210,SetGroup(${CALLWAIT3})
exten => s,211,CheckGroup(1)
exten => s,212,Dial(${ARG3})
exten => s,213,Dial(${ARG4})
exten => s,214,Dial(${ARG1})
exten => s,215,Congestion
exten => s,313,SetGroup(${CALLWAIT4})
exten => s,314,CheckGroup(1)
exten => s,315,Dial(${ARG4})
exten => s,316,Dial(${ARG1})
exten => s,317,Dial(${ARG2})
exten => s,318,Dial(${ARG3})
exten => s,319,Congestion
;
;------------------------------------------------------
;- User Permissions/Privilages
;------------------------------------------------------
[Default]
;
[Admin]
;
[Internal-Users]
;
[External-users]
;
[Special-Users]
;
;---------------------------------------------------------
;- Xmas Santa Line & other Special Lines
;-------------------------------------------------------$-
[santa-line]
exten = NXXXXXX,1,Goto(app-xmas-record,s,1)
exten = NXXXXXX,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}:ulaw|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
;
;------------------------------------------------
;not yet used
;------------------------------------------------
;[mainmenu]
;
; Example "main menu" context with submenu
;
;exten => s,1,Answer
;exten => s,n,Background(thanks) ; "Thanks for calling press 1 for sales, 2 for support, ..."
;exten => s,n,WaitExten
;exten => 1,1,Goto(submenu,s,1)
;exten => 2,1,Hangup
;include => default
;
;[submenu]
;exten => s,1,Ringing ; Make them comfortable with 2 seconds of ringback
;exten => s,n,Wait,2
;exten => s,n,Background(submenuopts) ; "Thanks for calling the sales department. Press 1 for steve, 2 for..."
;exten => s,n,WaitExten
;exten => 1,1,Goto(default,steve,1)
;------------------------------------------------
;End Of Conf File
;------------------------------------------------