jr@kahari.com
2005-Jul-11 06:18 UTC
[Asterisk-Users] ASterisk@home + Broadvoice = Almost working installation...
Hello Guys,
I'm somewhat of a newbie and am desperately seeking for some help...
I've managed to get asterisk up and running on my server, and signed up with
a
broadvoice account...
I'm having no problem dialing and communicating between extensions, but
whenever
anyone tries to call my broadvoice account, they are greeted by no ring or
anything, but rather simply a direct to voicemail...
Also, the most annoying is when I try to place an outside call...
At that point, if the call is to a regular phone number, I'll get a message
asking me to enter my password... followed by pound...
Any idea, how I can resolve this issue? I feel like i'm very close to
getting
this thing working, but I'm pretty frustrated because I don't know what
to edit
or change at this point...
Below is my configurational files..
+++++++++++++++++++++++++++++++++++++
; Note: If your SIP devices are behind a NAT and your Asterisk
; server isn't, try adding "nat=1" to each peer definition to
; solve translation problems.
[general]
externip=69.165.XXX.XXX
localnet=192.168.1.105/255.255.255.0
port = 5060 ; Port to bind to (SIP is 5060)
bindaddr = 0.0.0.0 ; Address to bind to (all addresses on machine)
disallow=all
allow=ulaw
allow=alaw
context = from-sip-external ; Send unknown SIP callers to this context
callerid = Unknown
register =>
3055741428@sip.broadvoice.com:MYSECRETPASS:3055741428@sip.broadvoice.com/200
[sip.broadvoice.com]
type=peer
;Enter your closest proxy server
host=proxy.mia.broadvoice.com
fromdomain=sip.broadvoice.com
fromuser=3055741428
secret=MYSECRETPASS
context=from-broadvoice
;Disable canreinvite if you are behind a NAT
canreinvite=no
;Don't try to authenticate on incoming calls
insecure=very
#include sip_nat.conf
#include sip_custom.conf
#include sip_additional.conf
+++++ EXTENSIONS+++++ EXTENSIONS+++++ EXTENSIONS+++++ EXTENSIONS+++++
EXTENSIONS+++++ EXTENSIONS+++++ EXTENSIONS+++++ EXTENSIONS+++++ EXTENSIONS+++++
EXTENSIONS+++++ EXTENSIONS+++++ EXTENSIONS+++++ EXTENSIONS+++++ EXTENSIONS+++++
EXTENSIONS+++++ EXTENSIONS+++++ EXTENSIONS+++++ EXTENSIONS+++++ EXTENSIONS+++++
EXTENSIONS+++++ EXTENSIONS+++++ EXTENSIONS+++++ EXTENSIONS+++++ EXTENSIONS+++++
EXTENSIONS+++++ EXTENSIONS+++++ EXTENSIONS+++++ EXTENSIONS+++++ EXTENSIONS
; Asterisk Management Portal (AMP)
; Copyright (C) 2004 Coalescent Systems Inc
; dialparties.agi (?www.sprackett.com/asterisk/)
; Asterisk::AGI (?asterisk.gnuinter.net/)
; gsm (?www.ibiblio.org/pub/Linux/utils/compre..)
; loligo sounds (?www.loligo.com/asterisk/sounds/)
; mpg123 (?voip-info.org/wiki-Asterisk+config+mus..)
; include extension contexts generated from AMP
#include extensions_additional.conf
; Customizations to this dialplan should be made in extensions_custom.conf
; See extensions_custom.conf.sample for an example
#include extensions_custom.conf
[from-trunk] ; just an alias since VoIP shouldn't be called PSTN
include => from-pstn
[from-pstn]
include => from-pstn-custom ; create this context in extensions_custom.conf
to
include customizations
include => ext-did
include => from-pstn-timecheck ; this has to be included otherwise it
overrides
ext-did
[from-pstn-timecheck]
exten => .,1,Goto(s,1) ; catch-all matching for calls that have DID info (if
a
DID route hasn't matched them)
exten => s,1,GotoIf($[${IN_OVERRIDE} = forcereghours]?from-pstn-reghours,s,1
exten => s,2,GotoIf($[${IN_OVERRIDE} = forceafthours]?from-pstn-afthours,s,1
exten => s,3,GotoIfTime(${REGTIME}|${REGDAYS}|*|*?from-pstn-reghours,s,1
exten => s,4,Goto(from-pstn-afthours,s,1)
[from-pstn-reghours]
exten => s,1,GotoIf($[${FAX_RX} = disabled]?from-pstn-reghours-nofax,s,1:2) ;
if
fax detection is disabled, then jump to from-pstn-nofax - else continue
exten => s,2,Answer
exten => s,3,Wait(1)
exten => s,4,SetVar(intype=${INCOMING})
exten => s,5,Cut(intype=intype,-,1)
exten => s,6,GotoIf($[${intype} = EXT]?7:9) ; If INCOMING starts with EXT,
then
assume its an extension
exten => s,7,Wait(3) ;wait 3 more second to make sure this isn't a fax
before
dialing someone
exten => s,8,Goto(ext-local,${INCOMING:4},1)
exten => s,9,GotoIf($[${intype} = GRP]?10:12) ; If INCOMING starts with GRP,
then assume its a ring group
exten => s,10,Wait(3)
exten => s,11,Goto(ext-group,${INCOMING:4},1)
exten => s,12,GotoIf($[${intype} = QUE]?13:15)
exten => s,13,Wait(3)
exten => s,14,Goto(ext-queues,${INCOMING:4},1)
exten => s,15,Goto(${INCOMING},s,1) ; not EXT or GR1 - it's an auto
attendant
exten => fax,1,Goto(ext-fax,in_fax,1)
exten => h,1,Hangup
[from-pstn-reghours-nofax]
exten => s,1,SetVar(intype=${INCOMING})
exten => s,2,Cut(intype=intype,-,1)
exten => s,3,GotoIf($[${intype} = EXT]?4:5) ; If INCOMING starts with EXT,
then
assume its an extension
exten => s,4,Goto(ext-local,${INCOMING:4},1)
exten => s,5,GotoIf($[${intype} = GRP]?6:7) ; If INCOMING starts with GRP,
then
assume its a ring group
exten => s,6,Goto(ext-group,${INCOMING:4},1)
exten => s,7,GotoIf($[${intype} = QUE]?8:11) ;queue
exten => s,8,Answer ; answer call before queue
exten => s,9,Wait(1)
exten => s,10,Goto(ext-queues,${INCOMING:4},1)
exten => s,11,Answer ; answer call before auto attendant
exten => s,12,Wait(1)
exten => s,13,Goto(${INCOMING},s,1) ; not EXT or GR1 - it's an auto
attendant
exten => fax,1,Goto(ext-fax,in_fax,1)
exten => h,1,Hangup
[from-pstn-afthours]
exten => s,1,GotoIf($[${FAX_RX} = disabled]?from-pstn-afthours-nofax,s,1:2) ;
if
fax detection is disabled, then jump to from-pstn-nofax - else continue
exten => s,2,Answer
exten => s,3,Wait(1)
exten => s,4,SetVar(intype=${AFTER_INCOMING})
exten => s,5,Cut(intype=intype,-,1)
exten => s,6,GotoIf($[${intype} = EXT]?7:9) ; If INCOMING starts with EXT,
then
assume its an extension
exten => s,7,Wait(3) ;wait 3 more second to make sure this isn't a fax
before
dialing someone
exten => s,8,Goto(ext-local,${AFTER_INCOMING:4},1)
exten => s,9,GotoIf($[${intype} = GRP]?10:12) ; If INCOMING starts with GRP,
then assume its a ring group
exten => s,10,Wait(3)
exten => s,11,Goto(ext-group,${AFTER_INCOMING:4},1)
exten => s,12,GotoIf($[${intype} = QUE]?13:15)
exten => s,13,Wait(3)
exten => s,14,Goto(ext-queues,${AFTER_INCOMING:4},1)
exten => s,15,Goto(${AFTER_INCOMING},s,1) ; not EXT or GR1 - it's an auto
attendant
exten => fax,1,Goto(ext-fax,in_fax,1)
exten => h,1,Hangup
[from-pstn-afthours-nofax]
exten => s,1,SetVar(intype=${AFTER_INCOMING})
exten => s,2,Cut(intype=intype,-,1)
exten => s,3,GotoIf($[${intype} = EXT]?4:5) ; If INCOMING starts with EXT,
then
assume its an extension
exten => s,4,Goto(ext-local,${AFTER_INCOMING:4},1)
exten => s,5,GotoIf($[${intype} = GRP]?6:7) ; If INCOMING starts with GRP,
then
assume its a ring group
exten => s,6,Goto(ext-group,${AFTER_INCOMING:4},1)
exten => s,7,GotoIf($[${intype} = QUE]?8:11) ;queue
exten => s,8,Answer ; answer call before queue
exten => s,9,Wait(1)
exten => s,10,Goto(ext-queues,${AFTER_INCOMING:4},1)
exten => s,11,Answer ; answer call before auto attendant
exten => s,12,Wait(1)
exten => s,13,Goto(${AFTER_INCOMING},s,1) ; not EXT or GR1 - it's an auto
attendant
exten => fax,1,Goto(ext-fax,in_fax,1)
exten => h,1,Hangup
; ############################################################################
; Macros [macro]
; ############################################################################
; Rings one or more extensions. Handles things like call forwarding and DND
; We don't call dial directly for anything internal anymore.
; ARGS: $TIMER, $OPTIONS, $EXT1, $EXT2, $EXT3, ...
; Use a Macro call such as the following:
; Macro(dial,$DIAL_TIMER,$DIAL_OPTIONS,$EXT1,$EXT2,$EXT3,...)
[macro-dial]
exten => s,1,GotoIf($[ "${MACRO_CONTEXT}" =
"macro-rg-group" ]?4:2) ; if this is
from rg-group, don't strip prefix
exten => s,2,GotoIf($[${CALLERIDNAME:0:${LEN(${RGPREFIX})}} !=
${RGPREFIX}]?4:3)
; check for ring-group prefix
exten => s,3,SetCIDName(${CALLERIDNAME:${LEN(${RGPREFIX})}}) ; strip off
prefix
exten => s,4,AGI,dialparties.agi
exten => s,5,NoOp(Returned from dialparties with no extensions to call)
exten => s,6,SetVar(DIALSTATUS=BUSY)
exten => s,10,Dial(${ds}) ; dialparties will set the priority to 10 if $ds is
not null
; Ring an extension, if the extension is busy or there is no answer send it
; to voicemail
; ARGS: $VMBOX, $EXT
[macro-exten-vm]
exten => s,1,Setvar(FROMCONTEXT=exten-vm)
exten => s,2,Macro(record-enable,${ARG2},IN)
exten => s,3,Macro(dial,${RINGTIMER},${DIAL_OPTIONS},${ARG2})
exten => s,4,GotoIf($[${CHANNEL:0:5} = Local]?s-${DIALSTATUS},1) ; if the
channel is Local, then do not go to voicemail. This is primarily to avoid vm for
call-forwarded extensions in ring groups
exten => s,5,GotoIf($[${ARG1} = novm]?s-${DIALSTATUS},1) ; no voicemail in
use
for this extension
exten => s,6,NoOp(Sending to Voicemail box ${ARG1})
exten => s,7,Macro(vm,${ARG1},${DIALSTATUS})
exten => s-BUSY,1,NoOp(Extension is reporting BUSY and has no Voicemail)
exten => s-BUSY,2,Busy()
exten => s-BUSY,3,Wait(60)
exten => s-BUSY,4,NoOp()
exten => _s-.,1,Congestion()
[macro-vm]
exten => s,1,Goto(s-${ARG2},1)
exten => s-BUSY,1,Voicemail(b${ARG1}) ; Voicemail Busy message
exten => s-BUSY,2,Hangup()
exten => _s-.,1,Voicemail(u${ARG1}) ; Voicemail Unavailable message
exten => _s-.,2,Hangup()
exten => o,1,Background(one-moment-please) ; 0 during vm message will hangup
exten => o,2,GotoIf($["foo${FROM_DID}"
"foo"]?from-pstn,s,1:from-pstn,${FROM_DID},1)
exten => a,1,VoiceMailMain(${ARG1})
exten => a,2,Hangup
; For some reason, if I don't run setCIDname, CALLERIDNAME will be blank in
my AGI
; ARGS: none
[macro-fixcid]
exten => s,1,SetCIDName(${CALLERIDNAME})
; Ring groups of phones
; ARGS: comma separated extension list
; 1 - ringtimer
; 2 - preifx
; 3 - extension list
[macro-rg-group]
exten => s,1,GotoIf($[${CALLERIDNAME:0:${LEN(${RGPREFIX})}} !=
${RGPREFIX}]?3:2)
; check for old prefix
exten => s,2,SetCIDName(${CALLERIDNAME:${LEN(${RGPREFIX})}}) ; strip off old
prefix
exten => s,3,Setvar(RGPREFIX=${ARG2}) ; set new prefix
exten => s,4,SetCIDName(${RGPREFIX}${CALLERIDNAME}) ; add prefix to callerid
name
exten => s,5,Setvar(RecordMethod=Group) ; set new prefix
exten => s,6,Macro(record-enable,${MACRO_EXTEN},${RecordMethod})
exten => s,7,Macro(dial,${ARG1},${DIAL_OPTIONS},${ARG3})
;exten => s,1,GotoIf($[${CALLERIDNAME:0:${LEN(${RGPREFIX})}}
!${RGPREFIX}]?3:2) ; check for old prefix
;exten => s,2,SetCIDName(${CALLERIDNAME:${LEN(${RGPREFIX})}}) ; strip off old
prefix
;exten => s,3,Setvar(RGPREFIX=${ARG2}) ; set new prefix
;;exten => s,4,Noop(${RGPREFIX} ${CALLERIDNAME})
;exten => s,4,SetCIDName(${RGPREFIX}${CALLERIDNAME}) ; add prefix to callerid
name
;;exten => s,6,Noop(Dial group ${ARG3})
;exten => s,5,Macro(dial,${ARG1},${DIAL_OPTIONS},${ARG3})
;exten => s,1,Setvar(GRP=${GRP}) ;my original choice of variable GROUP is now
overwritten by SetGroup. Copy contents to GRP
;exten => s,2,SetGroup(${CALLERIDNUM})
;exten => s,3,Setvar(FROMCONTEXT=rg-group)
;exten => s,4,SetCIDName(${PRE}${CALLERIDNAME})
;exten => s,5,Macro(dial,${RINGTIMER},${DIAL_OPTIONS},${GRP})
;
; Outgoing channel(s) are busy ... inform the client
;
[macro-outisbusy]
exten => s,1,Playback(allison7/all-circuits-busy-now)
exten => s,2,Playback(allison7/pls-try-call-later)
exten => s,3,Macro(hangupcall)
; What to do on hangup.
[macro-hangupcall]
exten => s,1,ResetCDR(w)
exten => s,2,NoCDR()
exten => s,3,Wait(5)
exten => s,4,Hangup
[macro-faxreceive]
exten => s,1,SetVar(FAXFILE=/var/spool/asterisk/fax/${UNIQUEID}.tif)
exten => s,2,SetVar(EMAILADDR=${FAX_RX_EMAIL})
exten => s,3,rxfax(${FAXFILE})
exten => s,103,SetVar(EMAILADDR=${FAX_RX_EMAIL})
exten => s,104,Goto(3)
; dialout and strip the prefix
[macro-dialout]
exten => s,1,GotoIf($[foo${ECID${CALLERIDNUM}} = foo]?4) ;check for CID
override
for exten
exten => s,2,SetCallerID(${ECID${CALLERIDNUM}})
exten => s,3,Goto(6)
exten => s,4,GotoIf($[foo${OUTCID_${ARG1}} = foo]?6) ;check for CID override
for
trunk
exten => s,5,SetCallerID(${OUTCID_${ARG1}})
exten => s,6,SetVar(length=${LEN(${DIAL_OUT_${ARG1}})})
exten => s,7,Dial(${OUT_${ARG1}}/${ARG2:${length}})
exten => s,8,Congestion
exten => s,108,Macro(outisbusy)
; dialout using default OUT trunk - no prefix
[macro-dialout-default]
exten => s,1,Macro(record-enable,${CALLERIDNUM},OUT)
exten => s,2,GotoIf($[foo${ECID${CALLERIDNUM}} = foo]?5) ;check for CID
override
for exten
exten => s,3,SetCallerID(${ECID${CALLERIDNUM}})
exten => s,4,Goto(7)
exten => s,5,GotoIf($[foo${OUTCID} = foo]?7) ;check for CID override for
trunk
exten => s,6,SetCallerID(${OUTCID})
exten => s,7,Dial(${OUT}/${ARG1})
exten => s,8,Congestion
exten => s,108,Macro(outisbusy)
; dialout using a trunk, using pattern matching (don't strip any prefix)
; arg1 = trunk number, arg2 = number, arg3 = route password
[macro-dialout-trunk]
exten => s,1,GotoIf($[foo${ARG3} = foo]?3:2)) ; arg3 is pattern password
exten => s,2,Authenticate(${ARG3})
exten => s,3,Macro(record-enable,${CALLERIDNUM},OUT)
exten => s,4,GotoIf($[foo${ECID${CALLERIDNUM}} = foo]?7) ;check for CID
override
for exten
exten => s,5,SetCallerID(${ECID${CALLERIDNUM}})
exten => s,6,Goto(9)
exten => s,7,GotoIf($[foo${OUTCID_${ARG1}} = foo]?9) ;check for CID override
for
trunk
exten => s,8,SetCallerID(${OUTCID_${ARG1}})
exten => s,9,SetGroup(OUT_${ARG1})
exten => s,10,CheckGroup(${OUTMAXCHANS_${ARG1}})
; if we've used up the max channels, continue at 109 (n+101)
exten => s,11,SetVar(DIAL_NUMBER=${ARG2})
exten => s,12,SetVar(DIAL_TRUNK=${ARG1})
exten => s,13,AGI(fixlocalprefix) ; this sets DIAL_NUMBER to the proper dial
string for this trunk
exten => s,14,SetVar(OUTNUM=${OUTPREFIX_${ARG1}}${DIAL_NUMBER}) ; OUTNUM is
the
final dial number
exten => s,15,Cut(custom=OUT_${ARG1},:,1) ; Custom trunks are prefixed with
"AMP:"
exten => s,16,GotoIf($[${custom} = AMP]?19)
exten => s,17,Dial(${OUT_${ARG1}}/${OUTNUM}) ; Regular Trunk Dial
exten => s,18,Goto(s-${DIALSTATUS},1)
; This is a custom trunk. Substitute $OUTNUM$ with the actual number and rebuild
the dialstring
; example trunks: "AMP:CAPI/XXXXXXXX:b$OUTNUM$,30,r",
"AMP:OH323/$OUTNUM$@XX.XX.XX.XX:XXXX"
exten => s,19,Cut(pre_num=OUT_${ARG1},$,1)
exten => s,20,Cut(the_num=OUT_${ARG1},$,2) ; this is where we expect to find
string OUTNUM
exten => s,21,Cut(post_num=OUT_${ARG1},$,3)
exten => s,22,GotoIf($[${the_num} = OUTNUM]?23:24) ; if we didn't find
"OUTNUM",
then skip to Dial
exten => s,23,SetVar(the_num=${OUTNUM}) ; replace "OUTNUM" with the
actual
number to dial
exten => s,24,Dial(${pre_num:4}${the_num}${post_num})
exten => s,25,Goto(s-${DIALSTATUS},1)
exten => s,111,Noop(max channels used up)
exten => s-BUSY,1,NoOp(Trunk is reporting BUSY)
exten => s-BUSY,2,Busy()
exten => s-BUSY,3,Wait(60)
exten => s-BUSY,4,NoOp()
exten => _s-.,1,NoOp(Dial failed due to ${DIALSTATUS})
; Adds a dynamic agent/member to a Queue
; Prompts for call-back number - in not entered, uses CIDNum
[macro-agent-add]
exten => s,1,Wait(1)
exten => s,2,NoOp
exten => s,3,Read(CALLBACKNUM,agent-user) ; get callback number from user
exten => s,4,GotoIf($[foo${CALLBACKNUM} = foo]?5:7)) ; if user just pressed #
or
timed out, use cidnum
exten => s,5,SetVar(CALLBACKNUM=${CALLERIDNUM})
exten => s,6,GotoIf($[foo${CALLBACKNUM} = foo]?2)) ; if still no number,
start over
exten => s,7,GotoIf($[foo${ARG2} = foo]?9:8)) ; arg2 is queue password
exten => s,8,Authenticate(${ARG2})
exten => s,9,AddQueueMember(${ARG1}|Local/${CALLBACKNUM}@from-internal) ;
using
chan_local allows us to have agents over trunks
exten => s,10,Wait(1)
exten => s,11,Playback(agent-loginok)
exten => s,12,Hangup()
; Removes a dynamic agent/member from a Queue
; Prompts for call-back number - in not entered, uses CIDNum
[macro-agent-del]
exten => s,1,Wait(1)
exten => s,2,NoOp
exten => s,3,Read(CALLBACKNUM,agent-user) ; get callback number from user
exten => s,4,GotoIf($[foo${CALLBACKNUM} = foo]?5:7)) ; if user just pressed #
or
timed out, use cidnum
exten => s,5,SetVar(CALLBACKNUM=${CALLERIDNUM})
exten => s,6,GotoIf($[foo${CALLBACKNUM} = foo]?2)) ; if still no number,
start over
exten => s,7,RemoveQueueMember(${ARG1}|Local/${CALLBACKNUM}@from-internal)
exten => s,8,Wait(1)
exten => s,9,Playback(agent-loggedoff)
exten => s,10,Hangup()
; arg1 = trunk number, arg2 = number
[macro-dialout-enum]
exten => s,1,Macro(record-enable,${CALLERIDNUM},OUT)
exten => s,2,GotoIf($[foo${ECID${CALLERIDNUM}} = foo]?3) ;check for CID
override
for exten
exten => s,3,SetCallerID(${ECID${CALLERIDNUM}})
exten => s,4,Goto(7)
exten => s,5,GotoIf($[foo${OUTCID_${ARG1}} = foo]?7) ;check for CID override
for
trunk
exten => s,6,SetCallerID(${OUTCID_${ARG1}})
exten => s,7,SetGroup(OUT_${ARG1})
exten => s,8,CheckGroup(${OUTMAXCHANS_${ARG1}}) ; if we've used up the
max
channels, continue at 108 (n+101)
exten => s,9,SetVar(DIAL_NUMBER=${ARG2})
exten => s,10,SetVar(DIAL_TRUNK=${ARG1})
exten => s,11,AGI(fixlocalprefix) ; this sets DIAL_NUMBER to the proper dial
string for this trunk
exten => s,12,EnumLookup(${DIAL_NUMBER})
exten => s,13,GotoIf($[$[${ENUM:0:3} = SIP] | $[${ENUM:0:3} = IAX]]?14:63)
exten => s,14,Dial(${ENUM})
exten => s,15,Goto(s-${DIALSTATUS},1)
; if dial fails (ie, all channels are busy), continue at 116 (n+101)
; exit points for macro
exten => s,63,NoOp(EnumLookup failed)
exten => s,109,NoOp(max channels used up)
exten => s-BUSY,1,NoOp(Trunk is reporting BUSY)
exten => s-BUSY,2,Busy()
exten => s-BUSY,3,Wait(60)
exten => s-BUSY,4,NoOp()
exten => _s-.,1,NoOp(Dial failed due to ${DIALSTATUS})
[macro-record-enable]
exten => s,1,GotoIf(${LEN(${BLINDTRANSFER})} > 0?2:4)
exten => s,2,ResetCDR(w)
exten => s,3,StopMonitor()
exten => s,4,GotoIf($["${ARG2}" = "OUT"]?5:8)
exten => s,5,DBGet(RecEnable=RECORD-OUT/${ARG1})
exten => s,6,SetVar(CALLFILENAME=OUT${ARG1}-${TIMESTAMP}-${UNIQUEID})
exten => s,7,Goto(s,14)
exten => s,8,GotoIf($["${ARG2}" = "Group"]?9:12)
exten => s,9,AGI(recordingcheck)
exten => s,10,SetVar(CALLFILENAME=g${ARG1}-${TIMESTAMP}-${UNIQUEID})
exten => s,11,Goto(s,14)
exten => s,12,DBGet(RecEnable=RECORD-IN/${ARG1})
exten => s,13,SetVar(CALLFILENAME=${TIMESTAMP}-${UNIQUEID})
exten => s,14,GotoIf($["${RecEnable}" = "ENABLED"]?15:99)
exten => s,15,Monitor(wav49,${CALLFILENAME}, mb)
exten => s,99,Noop(NO RECORDING NEEDED)
;exten => s,3,BackGround(for-quality-purposes)
;exten => s,4,BackGround(this-call-may-be)
;exten => s,5,BackGround(recorded)
; This macro is for dev purposes and just dumps channel/app variables. Useful
when designing new contexts.
[macro-dumpvars]
exten => s,1,Noop(ACCOUNTCODE=${ACCOUNTCODE})
exten => s,2,Noop(ANSWEREDTIME=${ANSWEREDTIME})
exten => s,3,Noop(BLINDTRANSFER=${BLINDTRANSFER})
exten => s,4,Noop(CALLERID=${CALLERID})
exten => s,5,Noop(CALLERIDNAME=${CALLERIDNAME})
exten => s,6,Noop(CALLERIDNUM=${CALLERIDNUM})
exten => s,7,Noop(CALLINGPRES=${CALLINGPRES})
exten => s,8,Noop(CHANNEL=${CHANNEL})
exten => s,9,Noop(CONTEXT=${CONTEXT})
exten => s,10,Noop(DATETIME=${DATETIME})
exten => s,11,Noop(DIALEDPEERNAME=${DIALEDPEERNAME})
exten => s,12,Noop(DIALEDPEERNUMBER=${DIALEDPEERNUMBER})
exten => s,13,Noop(DIALEDTIME=${DIALEDTIME})
exten => s,14,Noop(DIALSTATUS=${DIALSTATUS})
exten => s,15,Noop(DNID=${DNID})
exten => s,16,Noop(EPOCH=${EPOCH})
exten => s,17,Noop(EXTEN=${EXTEN})
exten => s,18,Noop(HANGUPCAUSE=${HANGUPCAUSE})
exten => s,19,Noop(INVALID_EXTEN=${INVALID_EXTEN})
exten => s,20,Noop(LANGUAGE=${LANGUAGE})
exten => s,21,Noop(MEETMESECS=${MEETMESECS})
exten => s,22,Noop(PRIORITY=${PRIORITY})
exten => s,23,Noop(RDNIS=${RDNIS})
exten => s,24,Noop(SIPDOMAIN=${SIPDOMAIN})
exten => s,25,Noop(SIP_CODEC=${SIP_CODEC})
exten => s,26,Noop(SIPCALLID=${SIPCALLID})
exten => s,27,Noop(SIPUSERAGENT=${SIPUSERAGENT})
exten => s,28,Noop(TIMESTAMP=${TIMESTAMP})
exten => s,29,Noop(TXTCIDNAME=${TXTCIDNAME})
exten => s,30,Noop(UNIQUEID=${UNIQUEID})
exten => s,31,Noop(TOUCH_MONITOR=${TOUCH_MONITOR})
exten => s,32,Noop(MACRO_CONTEXT=${MACRO_CONTEXT})
exten => s,33,Noop(MACRO_EXTEN=${MACRO_EXTEN})
exten => s,34,Noop(MACRO_PRIORITY=${MACRO_PRIORITY})
; ############################################################################
; Applications [app]
; ############################################################################
;
[app-directory]
;DIR-CONTEXT set in Digital Receptionist
exten => #,1,Wait(1)
exten =>
#,2,AGI(directory,${DIR-CONTEXT},ext-local,${DIRECTORY:0:1}${DIRECTORY_OPTS}o)
exten => #,3,Playback(vm-goodbye)
exten => #,4,Hangup
; *411 will access the entire directory (not just a single context)
exten => *411,1,Answer
exten => *411,2,Wait(1)
exten =>
*411,3,AGI(directory,general,ext-local,${DIRECTORY:0:1}${DIRECTORY_OPTS})
exten => *411,4,Playback(vm-goodbye)
exten => *411,5,Hangup
exten => h,1,Hangup
exten => o,1,GotoIf($["foo${FROM_DID}"
"foo"]?from-pstn,s,1:from-pstn,${FROM_DID},1)
[app-dnd]
exten => *78,1,Answer
exten => *78,2,Wait(1)
exten => *78,3,DBput(DND/${CALLERIDNUM}=YES)
exten => *78,4,Playback(allison7/do-not-disturb)
exten => *78,5,Playback(activated)
exten => *78,6,Macro(hangupcall)
exten => *79,1,Answer
exten => *79,2,Wait(1)
exten => *79,3,DBdel(DND/${CALLERIDNUM})
exten => *79,4,Playback(allison7/do-not-disturb)
exten => *79,5,Playback(de-activated)
exten => *79,6,Macro(hangupcall)
[app-messagecenter]
exten => *98,1,Answer
exten => *98,2,Wait(1)
exten => *98,3,VoiceMailMain(default)
exten => *98,4,Macro(hangupcall)
exten => _*98X.,1,Answer ; can dial *98 to skip 'mailbox' prompt.
Useful for
speedial.
exten => _*98X.,2,Wait(1)
exten => _*98X.,3,VoiceMailMain(${EXTEN:3}@default)
exten => _*98X.,4,Macro(hangupcall)
exten => *97,1,Answer
exten => *97,2,Wait(1)
exten => *97,3,VoicemailMain(${CALLERIDNUM}@default)
exten => *97,4,Macro(hangupcall)
[app-callwaiting]
exten => *70,1,Answer
exten => *70,2,Wait(1)
exten => *70,3,DBput(CW/${CALLERIDNUM}=ENABLED)
exten => *70,4,Playback(callwaiting)
exten => *70,5,Playback(activated)
exten => *70,6,Macro(hangupcall)
exten => *71,1,Answer
exten => *71,2,Wait(1)
exten => *71,3,DBdel(CW/${CALLERIDNUM})
exten => *71,4,Playback(callwaiting)
exten => *71,5,Playback(de-activated)
exten => *71,6,Macro(hangupcall)
[app-callforward]
; dialed call forward app - forwards calling extension
exten => _*72.,1,DBput(CF/${CALLERIDNUM}=${EXTEN:3})
exten => _*72.,2,Answer
exten => _*72.,3,Wait(1)
exten => _*72.,4,Playback(loligo/call-fwd-unconditional)
exten => _*72.,5,Playback(loligo/for)
exten => _*72.,6,Playback(loligo/extension)
exten => _*72.,7,SayDigits(${CALLERIDNUM})
exten => _*72.,8,Playback(loligo/is-set-to)
exten => _*72.,9,SayDigits(${EXTEN:3})
exten => _*72.,10,Macro(hangupcall)
; prompting call forward app - forwards entered extension
exten => *72,1,Answer
exten => *72,2,Wait(1)
exten => *72,3,BackGround(allison7/please-enter-your)
exten => *72,4,Playback(extension)
exten => *72,5,Read(fromext,then-press-pound)
exten => *72,6,Wait(1)
exten => *72,7,BackGround(ent-target-attendant)
exten => *72,8,Read(toext,then-press-pound)
exten => *72,9,Wait(1)
exten => *72,10,DBput(CF/${fromext}=${toext})
exten => *72,11,Playback(call-fwd-unconditional)
exten => *72,12,Playback(for)
exten => *72,13,Playback(extension)
exten => *72,14,SayDigits(${fromext})
exten => *72,15,Playback(is-set-to)
exten => *72,16,SayDigits(${toext})
exten => *72,17,Macro(hangupcall)
; cancels dialed extension call forward
exten => _*73.,1,DBdel(CF/${EXTEN:3})
exten => _*73.,2,Answer
exten => _*73.,3,Wait(1)
exten => _*73.,4,SayDigits(${EXTEN:3})
exten => _*73.,5,Playback(call-fwd-cancelled)
exten => _*73.,6,Macro(hangupcall)
; cancels call forward for calling extension
exten => *73,1,DBdel(CF/${CALLERIDNUM})
exten => *73,2,Answer
exten => *73,3,Wait(1)
exten => *73,4,Playback(loligo/call-fwd-cancelled)
exten => *73,5,Macro(hangupcall)
; dialed call forward on busy app - forwards calling extension when busy
exten => _*90.,1,DBput(CFB/${CALLERIDNUM}=${EXTEN:3})
exten => _*90.,2,Answer
exten => _*90.,3,Wait(1)
exten => _*90.,4,Playback(loligo/call-fwd-on-busy)
exten => _*90.,5,Playback(loligo/for)
exten => _*90.,6,Playback(loligo/extension)
exten => _*90.,7,SayDigits(${CALLERIDNUM})
exten => _*90.,8,Playback(loligo/is-set-to)
exten => _*90.,9,SayDigits(${EXTEN:3})
exten => _*90.,10,Macro(hangupcall)
; cancels call forward on busy for calling extension
exten => *91,1,DBdel(CFB/${CALLERIDNUM})
exten => *91,2,Answer
exten => *91,3,Wait(1)
exten => *91,4,Playback(call-fwd-on-busy)
exten => *91,5,Playback(de-activated)
exten => *91,6,Macro(hangupcall)
exten => h,1,Hangup
[app-calltrace]
; We can't have our timeouts or dial digits collide with other applications
; or extensions, so we build the app in pieces
exten => *69,1,Goto(app-calltrace-perform,s,1)
[app-calltrace-perform]
exten => s,1,Answer
exten => s,2,Wait(1)
exten => s,3,Background(allison7/info-about-last-call)
exten => s,4,Background(allison7/telephone-number)
exten => s,5,Dbget(lastcaller=CALLTRACE/${CALLERIDNUM})
exten => s,6,GotoIf($[${lastcaller}]?7:13)
exten => s,7,SayDigits(${lastcaller})
exten => s,8,DigitTimeout(3)
exten => s,9,ResponseTimeout(7)
exten => s,10,Background(loligo/to-call-this-number)
exten => s,11,Background(allison7/press-1)
exten => s,12,Goto(15)
exten => s,13,Playback(loligo/from-unknown-caller)
exten => s,14,Macro(hangupcall)
exten => s,15,NoOp
exten => 1,1,Goto(from-internal,${lastcaller},1);
exten => i,1,Playback(vm-goodbye)
exten => i,2,Macro(hangupcall)
exten => t,1,Playback(vm-goodbye)
exten => t,2,Macro(hangupcall)
; ############################################################################
; Inbound Contexts [from]
; ############################################################################
[from-sip-external]
;give external sip users congestion and hangup
exten => _.,1,AbsoluteTimeout(15)
exten => _.,2,Congestion
exten => _.,3,Hangup
[from-internal]
;allow phones to use applications
include => app-directory
include => app-dnd
include => app-callforward
include => app-callwaiting
include => app-messagecenter
include => app-calltrace
include => parkedcalls
include => from-internal-custom
;allow phones to dial other extensions
include => ext-fax
include => ext-local
include => ext-group
include => ext-queues
include => ext-zapbarge
include => ext-meetme
include => ext-record
include => ext-test
;allow phones to access trunks
include => outbound-allroutes
exten => s,1,Macro(hangupcall)
exten => h,1,Macro(hangupcall)
; ############################################################################
; Extension Contexts [ext]
; ############################################################################
[ext-zapbarge]
exten => 888,1,SetGroup(${CALLERIDNUM})
exten => 888,2,Answer
exten => 888,3,Wait(1)
exten => 888,4,ZapBarge
exten => 888,5,Hangup
[ext-meetme]
exten => _8X,1,Answer
exten => _8X,2,Wait(1)
exten => _8X,3,GotoIf($[${CALLERIDNUM} = ${EXTEN:1}]?5:4)
exten => _8X,4,MeetMe(${EXTEN}|sM)
exten => _8X,5,MeetMe(${EXTEN}|asM)
exten => _8XX,1,Answer
exten => _8XX,2,Wait(1)
exten => _8XX,3,GotoIf($[${CALLERIDNUM} = ${EXTEN:1}]?5:4)
exten => _8XX,4,MeetMe(${EXTEN}|sM)
exten => _8XX,5,MeetMe(${EXTEN}|asM)
exten => _8XXX,1,Answer
exten => _8XXX,2,Wait(1)
exten => _8XXX,3,GotoIf($[${CALLERIDNUM} = ${EXTEN:1}]?5:4)
exten => _8XXX,4,MeetMe(${EXTEN}|sM)
exten => _8XXX,5,MeetMe(${EXTEN}|asM)
exten => _8XXXX,1,Answer
exten => _8XXXX,2,Wait(1)
exten => _8XXXX,3,GotoIf($[${CALLERIDNUM} = ${EXTEN:1}]?5:4)
exten => _8XXXX,4,MeetMe(${EXTEN}|sM)
exten => _8XXXX,5,MeetMe(${EXTEN}|asM)
[ext-fax]
exten => s,1,Answer
exten => s,2,Goto(in_fax,1)
exten => in_fax,1,GotoIf($[${FAX_RX} = system]?2:analog_fax,1)
exten => in_fax,2,Macro(faxreceive)
exten => in_fax,3,system(tiff2ps -2eaz -w 8.5 -h 11 ${FAXFILE} | ps2pdf -
${FAXFILE}.pdf)
exten => in_fax,4,system(mime-construct --to ${EMAILADDR} --subject "Fax
from
${CALLERIDNUM} ${CALLERIDNAME}" --attachment ${CALLERIDNUM}.pdf --type
application/pdf --file ${FAXFILE}.pdf)
exten => in_fax,5,system(rm ${FAXFILE} ${FAXFILE}.pdf)
exten => in_fax,6,Hangup
exten => analog_fax,1,GotoIf($[${FAX_RX} = disabled]?3:2) ;if fax is
disabled,
just hang up
exten => analog_fax,2,Dial(${FAX_RX},20,d)
exten => analog_fax,3,Hangup
;exten => out_fax,1,wait(7)
exten => out_fax,1,txfax(${TXFAX_NAME}|caller)
exten => out_fax,2,Hangup
exten => h,1,Hangup()
[ext-record]
exten => *77,1,Wait(2)
exten => *77,2,Record(${CALLERIDNUM}ivrrecording:wav)
exten => *77,3,Wait(2)
exten => *77,4,Hangup
exten => *99,1,Playback(${CALLERIDNUM}ivrrecording)
exten => *99,2,Wait(2)
exten => *99,3,Hangup
;this is where parked calls go if they time-out. Should probably re-ring
[default]
include => ext-local
exten => s,1,Playback(vm-goodbye)
exten => s,2,Macro(hangupcall)
[ext-test]
exten => 7777,1,Goto(from-pstn,s,1)
exten => 666,1,Goto(ext-fax,in_fax,1)
exten => h,1,Macro(hangupcall)
;echo test
exten => *43,1,Answer
exten => *43,2,Wait(2)
exten => *43,3,Playback(demo-echotest)
exten => *43,4,Echo
exten => *43,5,Playback(demo-echodone)
exten => *43,6,Hangup
-------------------------------------------------
This mail sent through IMP: http://horde.org/imp/
Tom Rymes
2005-Jul-11 07:29 UTC
[Asterisk-Users] ASterisk@home + Broadvoice = Almost working installation...
Is your server behind a NAT? If so, make sure that you have configured /etc/asterisk/sip_nat.conf with your proper settings (change the localnet and externip settings to match your setup): nat=yes externip=xxx.xxx.xxx.xxx localnet=10.0.0.0/255.255.255.0 sip_nat.conf may only affect your extensions, not Broadvoice, but you also need to make sure that your NAT is forwarding the relevant ports through to your server for SIP (5060, 10000-20000, if I remember correctly) Finally, look at the geekgazette article for the proper way to set up your Broadvoice Trunk in AMP: <http://geekgazette.com/index.php? option=com_content&task=view&id=20&Itemid=31> Also, it would help to double-check that your system is indeed registering with Broadvoice by running the command "sip show registry" at the command asterisk prompt. Tom On Jul 11, 2005, at 9:18 AM, jr@kahari.com wrote:> Hello Guys, > > I'm somewhat of a newbie and am desperately seeking for some help... > > I've managed to get asterisk up and running on my server, and signed > up with a > broadvoice account... > > I'm having no problem dialing and communicating between extensions, > but whenever > anyone tries to call my broadvoice account, they are greeted by no > ring or > anything, but rather simply a direct to voicemail... > > Also, the most annoying is when I try to place an outside call... > > At that point, if the call is to a regular phone number, I'll get a > message > asking me to enter my password... followed by pound... > > Any idea, how I can resolve this issue? I feel like i'm very close to > getting > this thing working, but I'm pretty frustrated because I don't know > what to edit > or change at this point... > > Below is my configurational files.. > +++++++++++++++++++++++++++++++++++++ > > ; Note: If your SIP devices are behind a NAT and your Asterisk > ; server isn't, try adding "nat=1" to each peer definition to > ; solve translation problems. > > [general] > externip=69.165.XXX.XXX > localnet=192.168.1.105/255.255.255.0 > > port = 5060 ; Port to bind to (SIP is 5060) > bindaddr = 0.0.0.0 ; Address to bind to (all addresses on machine) > disallow=all > allow=ulaw > allow=alaw > context = from-sip-external ; Send unknown SIP callers to this context > callerid = Unknown > > register => > 3055741428@sip.broadvoice.com:MYSECRETPASS: > 3055741428@sip.broadvoice.com/200 > > [sip.broadvoice.com] > type=peer > ;Enter your closest proxy server > host=proxy.mia.broadvoice.com > fromdomain=sip.broadvoice.com > fromuser=3055741428 > secret=MYSECRETPASS > context=from-broadvoice > ;Disable canreinvite if you are behind a NAT > canreinvite=no > ;Don't try to authenticate on incoming calls > insecure=very > > #include sip_nat.conf > #include sip_custom.conf > #include sip_additional.conf > > +++++ EXTENSIONS+++++ EXTENSIONS+++++ EXTENSIONS+++++ EXTENSIONS+++++ > EXTENSIONS+++++ EXTENSIONS+++++ EXTENSIONS+++++ EXTENSIONS+++++ > EXTENSIONS+++++ > EXTENSIONS+++++ EXTENSIONS+++++ EXTENSIONS+++++ EXTENSIONS+++++ > EXTENSIONS+++++ > EXTENSIONS+++++ EXTENSIONS+++++ EXTENSIONS+++++ EXTENSIONS+++++ > EXTENSIONS+++++ > EXTENSIONS+++++ EXTENSIONS+++++ EXTENSIONS+++++ EXTENSIONS+++++ > EXTENSIONS+++++ > EXTENSIONS+++++ EXTENSIONS+++++ EXTENSIONS+++++ EXTENSIONS+++++ > EXTENSIONS > > ; Asterisk Management Portal (AMP) > ; Copyright (C) 2004 Coalescent Systems Inc > > ; dialparties.agi (?www.sprackett.com/asterisk/) > ; Asterisk::AGI (?asterisk.gnuinter.net/) > ; gsm (?www.ibiblio.org/pub/Linux/utils/compre..) > ; loligo sounds (?www.loligo.com/asterisk/sounds/) > ; mpg123 (?voip-info.org/wiki-Asterisk+config+mus..) > > ; include extension contexts generated from AMP > #include extensions_additional.conf > > ; Customizations to this dialplan should be made in > extensions_custom.conf > ; See extensions_custom.conf.sample for an example > #include extensions_custom.conf > > [from-trunk] ; just an alias since VoIP shouldn't be called PSTN > include => from-pstn > > [from-pstn] > include => from-pstn-custom ; create this context in > extensions_custom.conf to > include customizations > include => ext-did > include => from-pstn-timecheck ; this has to be included otherwise it > overrides > ext-did > > [from-pstn-timecheck] > exten => .,1,Goto(s,1) ; catch-all matching for calls that have DID > info (if a > DID route hasn't matched them) > exten => s,1,GotoIf($[${IN_OVERRIDE} = > forcereghours]?from-pstn-reghours,s,1 > exten => s,2,GotoIf($[${IN_OVERRIDE} = > forceafthours]?from-pstn-afthours,s,1 > exten => > s,3,GotoIfTime(${REGTIME}|${REGDAYS}|*|*?from-pstn-reghours,s,1 > exten => s,4,Goto(from-pstn-afthours,s,1) > > [from-pstn-reghours] > exten => s,1,GotoIf($[${FAX_RX} = > disabled]?from-pstn-reghours-nofax,s,1:2) ; if > fax detection is disabled, then jump to from-pstn-nofax - else continue > exten => s,2,Answer > exten => s,3,Wait(1) > exten => s,4,SetVar(intype=${INCOMING}) > exten => s,5,Cut(intype=intype,-,1) > exten => s,6,GotoIf($[${intype} = EXT]?7:9) ; If INCOMING starts with > EXT, then > assume its an extension > exten => s,7,Wait(3) ;wait 3 more second to make sure this isn't a fax > before > dialing someone > exten => s,8,Goto(ext-local,${INCOMING:4},1) > exten => s,9,GotoIf($[${intype} = GRP]?10:12) ; If INCOMING starts > with GRP, > then assume its a ring group > exten => s,10,Wait(3) > exten => s,11,Goto(ext-group,${INCOMING:4},1) > exten => s,12,GotoIf($[${intype} = QUE]?13:15) > exten => s,13,Wait(3) > exten => s,14,Goto(ext-queues,${INCOMING:4},1) > exten => s,15,Goto(${INCOMING},s,1) ; not EXT or GR1 - it's an auto > attendant > exten => fax,1,Goto(ext-fax,in_fax,1) > exten => h,1,Hangup > > [from-pstn-reghours-nofax] > exten => s,1,SetVar(intype=${INCOMING}) > exten => s,2,Cut(intype=intype,-,1) > exten => s,3,GotoIf($[${intype} = EXT]?4:5) ; If INCOMING starts with > EXT, then > assume its an extension > exten => s,4,Goto(ext-local,${INCOMING:4},1) > exten => s,5,GotoIf($[${intype} = GRP]?6:7) ; If INCOMING starts with > GRP, then > assume its a ring group > exten => s,6,Goto(ext-group,${INCOMING:4},1) > exten => s,7,GotoIf($[${intype} = QUE]?8:11) ;queue > exten => s,8,Answer ; answer call before queue > exten => s,9,Wait(1) > exten => s,10,Goto(ext-queues,${INCOMING:4},1) > exten => s,11,Answer ; answer call before auto attendant > exten => s,12,Wait(1) > exten => s,13,Goto(${INCOMING},s,1) ; not EXT or GR1 - it's an auto > attendant > exten => fax,1,Goto(ext-fax,in_fax,1) > exten => h,1,Hangup > > [from-pstn-afthours] > exten => s,1,GotoIf($[${FAX_RX} = > disabled]?from-pstn-afthours-nofax,s,1:2) ; if > fax detection is disabled, then jump to from-pstn-nofax - else continue > exten => s,2,Answer > exten => s,3,Wait(1) > exten => s,4,SetVar(intype=${AFTER_INCOMING}) > exten => s,5,Cut(intype=intype,-,1) > exten => s,6,GotoIf($[${intype} = EXT]?7:9) ; If INCOMING starts with > EXT, then > assume its an extension > exten => s,7,Wait(3) ;wait 3 more second to make sure this isn't a fax > before > dialing someone > exten => s,8,Goto(ext-local,${AFTER_INCOMING:4},1) > exten => s,9,GotoIf($[${intype} = GRP]?10:12) ; If INCOMING starts > with GRP, > then assume its a ring group > exten => s,10,Wait(3) > exten => s,11,Goto(ext-group,${AFTER_INCOMING:4},1) > exten => s,12,GotoIf($[${intype} = QUE]?13:15) > exten => s,13,Wait(3) > exten => s,14,Goto(ext-queues,${AFTER_INCOMING:4},1) > exten => s,15,Goto(${AFTER_INCOMING},s,1) ; not EXT or GR1 - it's an > auto attendant > exten => fax,1,Goto(ext-fax,in_fax,1) > exten => h,1,Hangup > > [from-pstn-afthours-nofax] > exten => s,1,SetVar(intype=${AFTER_INCOMING}) > exten => s,2,Cut(intype=intype,-,1) > exten => s,3,GotoIf($[${intype} = EXT]?4:5) ; If INCOMING starts with > EXT, then > assume its an extension > exten => s,4,Goto(ext-local,${AFTER_INCOMING:4},1) > exten => s,5,GotoIf($[${intype} = GRP]?6:7) ; If INCOMING starts with > GRP, then > assume its a ring group > exten => s,6,Goto(ext-group,${AFTER_INCOMING:4},1) > exten => s,7,GotoIf($[${intype} = QUE]?8:11) ;queue > exten => s,8,Answer ; answer call before queue > exten => s,9,Wait(1) > exten => s,10,Goto(ext-queues,${AFTER_INCOMING:4},1) > exten => s,11,Answer ; answer call before auto attendant > exten => s,12,Wait(1) > exten => s,13,Goto(${AFTER_INCOMING},s,1) ; not EXT or GR1 - it's an > auto attendant > exten => fax,1,Goto(ext-fax,in_fax,1) > exten => h,1,Hangup > > ; > ####################################################################### > ##### > ; Macros [macro] > ; > ####################################################################### > ##### > > ; Rings one or more extensions. Handles things like call forwarding > and DND > ; We don't call dial directly for anything internal anymore. > ; ARGS: $TIMER, $OPTIONS, $EXT1, $EXT2, $EXT3, ... > ; Use a Macro call such as the following: > ; Macro(dial,$DIAL_TIMER,$DIAL_OPTIONS,$EXT1,$EXT2,$EXT3,...) > [macro-dial] > exten => s,1,GotoIf($[ "${MACRO_CONTEXT}" = "macro-rg-group" ]?4:2) ; > if this is > from rg-group, don't strip prefix > exten => s,2,GotoIf($[${CALLERIDNAME:0:${LEN(${RGPREFIX})}} != > ${RGPREFIX}]?4:3) > ; check for ring-group prefix > exten => s,3,SetCIDName(${CALLERIDNAME:${LEN(${RGPREFIX})}}) ; strip > off prefix > exten => s,4,AGI,dialparties.agi > exten => s,5,NoOp(Returned from dialparties with no extensions to call) > exten => s,6,SetVar(DIALSTATUS=BUSY) > exten => s,10,Dial(${ds}) ; dialparties will set the priority to 10 if > $ds is > not null > > ; Ring an extension, if the extension is busy or there is no answer > send it > ; to voicemail > ; ARGS: $VMBOX, $EXT > [macro-exten-vm] > exten => s,1,Setvar(FROMCONTEXT=exten-vm) > exten => s,2,Macro(record-enable,${ARG2},IN) > exten => s,3,Macro(dial,${RINGTIMER},${DIAL_OPTIONS},${ARG2}) > exten => s,4,GotoIf($[${CHANNEL:0:5} = Local]?s-${DIALSTATUS},1) ; if > the > channel is Local, then do not go to voicemail. This is primarily to > avoid vm for > call-forwarded extensions in ring groups > exten => s,5,GotoIf($[${ARG1} = novm]?s-${DIALSTATUS},1) ; no > voicemail in use > for this extension > exten => s,6,NoOp(Sending to Voicemail box ${ARG1}) > exten => s,7,Macro(vm,${ARG1},${DIALSTATUS}) > exten => s-BUSY,1,NoOp(Extension is reporting BUSY and has no > Voicemail) > exten => s-BUSY,2,Busy() > exten => s-BUSY,3,Wait(60) > exten => s-BUSY,4,NoOp() > exten => _s-.,1,Congestion() > > [macro-vm] > exten => s,1,Goto(s-${ARG2},1) > exten => s-BUSY,1,Voicemail(b${ARG1}) ; Voicemail Busy message > exten => s-BUSY,2,Hangup() > exten => _s-.,1,Voicemail(u${ARG1}) ; Voicemail Unavailable message > exten => _s-.,2,Hangup() > exten => o,1,Background(one-moment-please) ; 0 during vm message will > hangup > exten => o,2,GotoIf($["foo${FROM_DID}" > "foo"]?from-pstn,s,1:from-pstn,${FROM_DID},1) > exten => a,1,VoiceMailMain(${ARG1}) > exten => a,2,Hangup > > ; For some reason, if I don't run setCIDname, CALLERIDNAME will be > blank in my AGI > ; ARGS: none > [macro-fixcid] > exten => s,1,SetCIDName(${CALLERIDNAME}) > > ; Ring groups of phones > ; ARGS: comma separated extension list > ; 1 - ringtimer > ; 2 - preifx > ; 3 - extension list > [macro-rg-group] > exten => s,1,GotoIf($[${CALLERIDNAME:0:${LEN(${RGPREFIX})}} != > ${RGPREFIX}]?3:2) > ; check for old prefix > exten => s,2,SetCIDName(${CALLERIDNAME:${LEN(${RGPREFIX})}}) ; strip > off old prefix > exten => s,3,Setvar(RGPREFIX=${ARG2}) ; set new prefix > exten => s,4,SetCIDName(${RGPREFIX}${CALLERIDNAME}) ; add prefix to > callerid name > exten => s,5,Setvar(RecordMethod=Group) ; set new prefix > exten => s,6,Macro(record-enable,${MACRO_EXTEN},${RecordMethod}) > exten => s,7,Macro(dial,${ARG1},${DIAL_OPTIONS},${ARG3}) > > ;exten => s,1,GotoIf($[${CALLERIDNAME:0:${LEN(${RGPREFIX})}} !> ${RGPREFIX}]?3:2) ; check for old prefix > ;exten => s,2,SetCIDName(${CALLERIDNAME:${LEN(${RGPREFIX})}}) ; strip > off old prefix > ;exten => s,3,Setvar(RGPREFIX=${ARG2}) ; set new prefix > ;;exten => s,4,Noop(${RGPREFIX} ${CALLERIDNAME}) > ;exten => s,4,SetCIDName(${RGPREFIX}${CALLERIDNAME}) ; add prefix to > callerid name > ;;exten => s,6,Noop(Dial group ${ARG3}) > ;exten => s,5,Macro(dial,${ARG1},${DIAL_OPTIONS},${ARG3}) > > ;exten => s,1,Setvar(GRP=${GRP}) ;my original choice of variable GROUP > is now > overwritten by SetGroup. Copy contents to GRP > ;exten => s,2,SetGroup(${CALLERIDNUM}) > ;exten => s,3,Setvar(FROMCONTEXT=rg-group) > ;exten => s,4,SetCIDName(${PRE}${CALLERIDNAME}) > ;exten => s,5,Macro(dial,${RINGTIMER},${DIAL_OPTIONS},${GRP}) > > ; > ; Outgoing channel(s) are busy ... inform the client > ; > [macro-outisbusy] > exten => s,1,Playback(allison7/all-circuits-busy-now) > exten => s,2,Playback(allison7/pls-try-call-later) > exten => s,3,Macro(hangupcall) > > ; What to do on hangup. > [macro-hangupcall] > exten => s,1,ResetCDR(w) > exten => s,2,NoCDR() > exten => s,3,Wait(5) > exten => s,4,Hangup > > [macro-faxreceive] > exten => s,1,SetVar(FAXFILE=/var/spool/asterisk/fax/${UNIQUEID}.tif) > exten => s,2,SetVar(EMAILADDR=${FAX_RX_EMAIL}) > exten => s,3,rxfax(${FAXFILE}) > exten => s,103,SetVar(EMAILADDR=${FAX_RX_EMAIL}) > exten => s,104,Goto(3) > > ; dialout and strip the prefix > [macro-dialout] > exten => s,1,GotoIf($[foo${ECID${CALLERIDNUM}} = foo]?4) ;check for > CID override > for exten > exten => s,2,SetCallerID(${ECID${CALLERIDNUM}}) > exten => s,3,Goto(6) > exten => s,4,GotoIf($[foo${OUTCID_${ARG1}} = foo]?6) ;check for CID > override for > trunk > exten => s,5,SetCallerID(${OUTCID_${ARG1}}) > exten => s,6,SetVar(length=${LEN(${DIAL_OUT_${ARG1}})}) > exten => s,7,Dial(${OUT_${ARG1}}/${ARG2:${length}}) > exten => s,8,Congestion > exten => s,108,Macro(outisbusy) > > ; dialout using default OUT trunk - no prefix > [macro-dialout-default] > exten => s,1,Macro(record-enable,${CALLERIDNUM},OUT) > exten => s,2,GotoIf($[foo${ECID${CALLERIDNUM}} = foo]?5) ;check for > CID override > for exten > exten => s,3,SetCallerID(${ECID${CALLERIDNUM}}) > exten => s,4,Goto(7) > exten => s,5,GotoIf($[foo${OUTCID} = foo]?7) ;check for CID override > for trunk > exten => s,6,SetCallerID(${OUTCID}) > exten => s,7,Dial(${OUT}/${ARG1}) > exten => s,8,Congestion > exten => s,108,Macro(outisbusy) > > ; dialout using a trunk, using pattern matching (don't strip any > prefix) > ; arg1 = trunk number, arg2 = number, arg3 = route password > [macro-dialout-trunk] > exten => s,1,GotoIf($[foo${ARG3} = foo]?3:2)) ; arg3 is pattern > password > exten => s,2,Authenticate(${ARG3}) > exten => s,3,Macro(record-enable,${CALLERIDNUM},OUT) > exten => s,4,GotoIf($[foo${ECID${CALLERIDNUM}} = foo]?7) ;check for > CID override > for exten > exten => s,5,SetCallerID(${ECID${CALLERIDNUM}}) > exten => s,6,Goto(9) > exten => s,7,GotoIf($[foo${OUTCID_${ARG1}} = foo]?9) ;check for CID > override for > trunk > exten => s,8,SetCallerID(${OUTCID_${ARG1}}) > exten => s,9,SetGroup(OUT_${ARG1}) > exten => s,10,CheckGroup(${OUTMAXCHANS_${ARG1}}) > ; if we've used up the max channels, continue at 109 (n+101) > exten => s,11,SetVar(DIAL_NUMBER=${ARG2}) > exten => s,12,SetVar(DIAL_TRUNK=${ARG1}) > exten => s,13,AGI(fixlocalprefix) ; this sets DIAL_NUMBER to the > proper dial > string for this trunk > exten => s,14,SetVar(OUTNUM=${OUTPREFIX_${ARG1}}${DIAL_NUMBER}) ; > OUTNUM is the > final dial number > exten => s,15,Cut(custom=OUT_${ARG1},:,1) ; Custom trunks are prefixed > with "AMP:" > exten => s,16,GotoIf($[${custom} = AMP]?19) > exten => s,17,Dial(${OUT_${ARG1}}/${OUTNUM}) ; Regular Trunk Dial > exten => s,18,Goto(s-${DIALSTATUS},1) > > ; This is a custom trunk. Substitute $OUTNUM$ with the actual number > and rebuild > the dialstring > ; example trunks: "AMP:CAPI/XXXXXXXX:b$OUTNUM$,30,r", > "AMP:OH323/$OUTNUM$@XX.XX.XX.XX:XXXX" > exten => s,19,Cut(pre_num=OUT_${ARG1},$,1) > exten => s,20,Cut(the_num=OUT_${ARG1},$,2) ; this is where we expect > to find > string OUTNUM > exten => s,21,Cut(post_num=OUT_${ARG1},$,3) > exten => s,22,GotoIf($[${the_num} = OUTNUM]?23:24) ; if we didn't find > "OUTNUM", > then skip to Dial > exten => s,23,SetVar(the_num=${OUTNUM}) ; replace "OUTNUM" with the > actual > number to dial > exten => s,24,Dial(${pre_num:4}${the_num}${post_num}) > exten => s,25,Goto(s-${DIALSTATUS},1) > > exten => s,111,Noop(max channels used up) > exten => s-BUSY,1,NoOp(Trunk is reporting BUSY) > exten => s-BUSY,2,Busy() > exten => s-BUSY,3,Wait(60) > exten => s-BUSY,4,NoOp() > > exten => _s-.,1,NoOp(Dial failed due to ${DIALSTATUS}) > > ; Adds a dynamic agent/member to a Queue > ; Prompts for call-back number - in not entered, uses CIDNum > [macro-agent-add] > exten => s,1,Wait(1) > exten => s,2,NoOp > exten => s,3,Read(CALLBACKNUM,agent-user) ; get callback number from > user > exten => s,4,GotoIf($[foo${CALLBACKNUM} = foo]?5:7)) ; if user just > pressed # or > timed out, use cidnum > exten => s,5,SetVar(CALLBACKNUM=${CALLERIDNUM}) > exten => s,6,GotoIf($[foo${CALLBACKNUM} = foo]?2)) ; if still no > number, start over > exten => s,7,GotoIf($[foo${ARG2} = foo]?9:8)) ; arg2 is queue password > exten => s,8,Authenticate(${ARG2}) > exten => > s,9,AddQueueMember(${ARG1}|Local/${CALLBACKNUM}@from-internal) ; using > chan_local allows us to have agents over trunks > exten => s,10,Wait(1) > exten => s,11,Playback(agent-loginok) > exten => s,12,Hangup() > > ; Removes a dynamic agent/member from a Queue > ; Prompts for call-back number - in not entered, uses CIDNum > [macro-agent-del] > exten => s,1,Wait(1) > exten => s,2,NoOp > exten => s,3,Read(CALLBACKNUM,agent-user) ; get callback number from > user > exten => s,4,GotoIf($[foo${CALLBACKNUM} = foo]?5:7)) ; if user just > pressed # or > timed out, use cidnum > exten => s,5,SetVar(CALLBACKNUM=${CALLERIDNUM}) > exten => s,6,GotoIf($[foo${CALLBACKNUM} = foo]?2)) ; if still no > number, start over > exten => > s,7,RemoveQueueMember(${ARG1}|Local/${CALLBACKNUM}@from-internal) > exten => s,8,Wait(1) > exten => s,9,Playback(agent-loggedoff) > exten => s,10,Hangup() > > ; arg1 = trunk number, arg2 = number > [macro-dialout-enum] > exten => s,1,Macro(record-enable,${CALLERIDNUM},OUT) > exten => s,2,GotoIf($[foo${ECID${CALLERIDNUM}} = foo]?3) ;check for > CID override > for exten > exten => s,3,SetCallerID(${ECID${CALLERIDNUM}}) > exten => s,4,Goto(7) > exten => s,5,GotoIf($[foo${OUTCID_${ARG1}} = foo]?7) ;check for CID > override for > trunk > exten => s,6,SetCallerID(${OUTCID_${ARG1}}) > exten => s,7,SetGroup(OUT_${ARG1}) > exten => s,8,CheckGroup(${OUTMAXCHANS_${ARG1}}) ; if we've used up the > max > channels, continue at 108 (n+101) > exten => s,9,SetVar(DIAL_NUMBER=${ARG2}) > exten => s,10,SetVar(DIAL_TRUNK=${ARG1}) > exten => s,11,AGI(fixlocalprefix) ; this sets DIAL_NUMBER to the > proper dial > string for this trunk > exten => s,12,EnumLookup(${DIAL_NUMBER}) > exten => s,13,GotoIf($[$[${ENUM:0:3} = SIP] | $[${ENUM:0:3} = > IAX]]?14:63) > exten => s,14,Dial(${ENUM}) > exten => s,15,Goto(s-${DIALSTATUS},1) > ; if dial fails (ie, all channels are busy), continue at 116 (n+101) > > ; exit points for macro > exten => s,63,NoOp(EnumLookup failed) > exten => s,109,NoOp(max channels used up) > > exten => s-BUSY,1,NoOp(Trunk is reporting BUSY) > exten => s-BUSY,2,Busy() > exten => s-BUSY,3,Wait(60) > exten => s-BUSY,4,NoOp() > > exten => _s-.,1,NoOp(Dial failed due to ${DIALSTATUS}) > > [macro-record-enable] > exten => s,1,GotoIf(${LEN(${BLINDTRANSFER})} > 0?2:4) > exten => s,2,ResetCDR(w) > exten => s,3,StopMonitor() > exten => s,4,GotoIf($["${ARG2}" = "OUT"]?5:8) > exten => s,5,DBGet(RecEnable=RECORD-OUT/${ARG1}) > exten => s,6,SetVar(CALLFILENAME=OUT${ARG1}-${TIMESTAMP}-${UNIQUEID}) > exten => s,7,Goto(s,14) > exten => s,8,GotoIf($["${ARG2}" = "Group"]?9:12) > exten => s,9,AGI(recordingcheck) > exten => s,10,SetVar(CALLFILENAME=g${ARG1}-${TIMESTAMP}-${UNIQUEID}) > exten => s,11,Goto(s,14) > exten => s,12,DBGet(RecEnable=RECORD-IN/${ARG1}) > exten => s,13,SetVar(CALLFILENAME=${TIMESTAMP}-${UNIQUEID}) > exten => s,14,GotoIf($["${RecEnable}" = "ENABLED"]?15:99) > exten => s,15,Monitor(wav49,${CALLFILENAME}, mb) > exten => s,99,Noop(NO RECORDING NEEDED) > ;exten => s,3,BackGround(for-quality-purposes) > ;exten => s,4,BackGround(this-call-may-be) > ;exten => s,5,BackGround(recorded) > > ; This macro is for dev purposes and just dumps channel/app variables. > Useful > when designing new contexts. > [macro-dumpvars] > exten => s,1,Noop(ACCOUNTCODE=${ACCOUNTCODE}) > exten => s,2,Noop(ANSWEREDTIME=${ANSWEREDTIME}) > exten => s,3,Noop(BLINDTRANSFER=${BLINDTRANSFER}) > exten => s,4,Noop(CALLERID=${CALLERID}) > exten => s,5,Noop(CALLERIDNAME=${CALLERIDNAME}) > exten => s,6,Noop(CALLERIDNUM=${CALLERIDNUM}) > exten => s,7,Noop(CALLINGPRES=${CALLINGPRES}) > exten => s,8,Noop(CHANNEL=${CHANNEL}) > exten => s,9,Noop(CONTEXT=${CONTEXT}) > exten => s,10,Noop(DATETIME=${DATETIME}) > exten => s,11,Noop(DIALEDPEERNAME=${DIALEDPEERNAME}) > exten => s,12,Noop(DIALEDPEERNUMBER=${DIALEDPEERNUMBER}) > exten => s,13,Noop(DIALEDTIME=${DIALEDTIME}) > exten => s,14,Noop(DIALSTATUS=${DIALSTATUS}) > exten => s,15,Noop(DNID=${DNID}) > exten => s,16,Noop(EPOCH=${EPOCH}) > exten => s,17,Noop(EXTEN=${EXTEN}) > exten => s,18,Noop(HANGUPCAUSE=${HANGUPCAUSE}) > exten => s,19,Noop(INVALID_EXTEN=${INVALID_EXTEN}) > exten => s,20,Noop(LANGUAGE=${LANGUAGE}) > exten => s,21,Noop(MEETMESECS=${MEETMESECS}) > exten => s,22,Noop(PRIORITY=${PRIORITY}) > exten => s,23,Noop(RDNIS=${RDNIS}) > exten => s,24,Noop(SIPDOMAIN=${SIPDOMAIN}) > exten => s,25,Noop(SIP_CODEC=${SIP_CODEC}) > exten => s,26,Noop(SIPCALLID=${SIPCALLID}) > exten => s,27,Noop(SIPUSERAGENT=${SIPUSERAGENT}) > exten => s,28,Noop(TIMESTAMP=${TIMESTAMP}) > exten => s,29,Noop(TXTCIDNAME=${TXTCIDNAME}) > exten => s,30,Noop(UNIQUEID=${UNIQUEID}) > exten => s,31,Noop(TOUCH_MONITOR=${TOUCH_MONITOR}) > exten => s,32,Noop(MACRO_CONTEXT=${MACRO_CONTEXT}) > exten => s,33,Noop(MACRO_EXTEN=${MACRO_EXTEN}) > exten => s,34,Noop(MACRO_PRIORITY=${MACRO_PRIORITY}) > > ; > ####################################################################### > ##### > ; Applications [app] > ; > ####################################################################### > ##### > ; > [app-directory] > ;DIR-CONTEXT set in Digital Receptionist > exten => #,1,Wait(1) > exten => > #,2,AGI(directory,${DIR-CONTEXT},ext-local,${DIRECTORY:0: > 1}${DIRECTORY_OPTS}o) > exten => #,3,Playback(vm-goodbye) > exten => #,4,Hangup > ; *411 will access the entire directory (not just a single context) > exten => *411,1,Answer > exten => *411,2,Wait(1) > exten => > *411,3,AGI(directory,general,ext-local,${DIRECTORY:0: > 1}${DIRECTORY_OPTS}) > exten => *411,4,Playback(vm-goodbye) > exten => *411,5,Hangup > exten => h,1,Hangup > exten => o,1,GotoIf($["foo${FROM_DID}" > "foo"]?from-pstn,s,1:from-pstn,${FROM_DID},1) > > [app-dnd] > exten => *78,1,Answer > exten => *78,2,Wait(1) > exten => *78,3,DBput(DND/${CALLERIDNUM}=YES) > exten => *78,4,Playback(allison7/do-not-disturb) > exten => *78,5,Playback(activated) > exten => *78,6,Macro(hangupcall) > exten => *79,1,Answer > exten => *79,2,Wait(1) > exten => *79,3,DBdel(DND/${CALLERIDNUM}) > exten => *79,4,Playback(allison7/do-not-disturb) > exten => *79,5,Playback(de-activated) > exten => *79,6,Macro(hangupcall) > > [app-messagecenter] > exten => *98,1,Answer > exten => *98,2,Wait(1) > exten => *98,3,VoiceMailMain(default) > exten => *98,4,Macro(hangupcall) > exten => _*98X.,1,Answer ; can dial *98 to skip 'mailbox' prompt. > Useful for > speedial. > exten => _*98X.,2,Wait(1) > exten => _*98X.,3,VoiceMailMain(${EXTEN:3}@default) > exten => _*98X.,4,Macro(hangupcall) > exten => *97,1,Answer > exten => *97,2,Wait(1) > exten => *97,3,VoicemailMain(${CALLERIDNUM}@default) > exten => *97,4,Macro(hangupcall) > > [app-callwaiting] > exten => *70,1,Answer > exten => *70,2,Wait(1) > exten => *70,3,DBput(CW/${CALLERIDNUM}=ENABLED) > exten => *70,4,Playback(callwaiting) > exten => *70,5,Playback(activated) > exten => *70,6,Macro(hangupcall) > exten => *71,1,Answer > exten => *71,2,Wait(1) > exten => *71,3,DBdel(CW/${CALLERIDNUM}) > exten => *71,4,Playback(callwaiting) > exten => *71,5,Playback(de-activated) > exten => *71,6,Macro(hangupcall) > > [app-callforward] > ; dialed call forward app - forwards calling extension > exten => _*72.,1,DBput(CF/${CALLERIDNUM}=${EXTEN:3}) > exten => _*72.,2,Answer > exten => _*72.,3,Wait(1) > exten => _*72.,4,Playback(loligo/call-fwd-unconditional) > exten => _*72.,5,Playback(loligo/for) > exten => _*72.,6,Playback(loligo/extension) > exten => _*72.,7,SayDigits(${CALLERIDNUM}) > exten => _*72.,8,Playback(loligo/is-set-to) > exten => _*72.,9,SayDigits(${EXTEN:3}) > exten => _*72.,10,Macro(hangupcall) > ; prompting call forward app - forwards entered extension > exten => *72,1,Answer > exten => *72,2,Wait(1) > exten => *72,3,BackGround(allison7/please-enter-your) > exten => *72,4,Playback(extension) > exten => *72,5,Read(fromext,then-press-pound) > exten => *72,6,Wait(1) > exten => *72,7,BackGround(ent-target-attendant) > exten => *72,8,Read(toext,then-press-pound) > exten => *72,9,Wait(1) > exten => *72,10,DBput(CF/${fromext}=${toext}) > exten => *72,11,Playback(call-fwd-unconditional) > exten => *72,12,Playback(for) > exten => *72,13,Playback(extension) > exten => *72,14,SayDigits(${fromext}) > exten => *72,15,Playback(is-set-to) > exten => *72,16,SayDigits(${toext}) > exten => *72,17,Macro(hangupcall) > ; cancels dialed extension call forward > exten => _*73.,1,DBdel(CF/${EXTEN:3}) > exten => _*73.,2,Answer > exten => _*73.,3,Wait(1) > exten => _*73.,4,SayDigits(${EXTEN:3}) > exten => _*73.,5,Playback(call-fwd-cancelled) > exten => _*73.,6,Macro(hangupcall) > ; cancels call forward for calling extension > exten => *73,1,DBdel(CF/${CALLERIDNUM}) > exten => *73,2,Answer > exten => *73,3,Wait(1) > exten => *73,4,Playback(loligo/call-fwd-cancelled) > exten => *73,5,Macro(hangupcall) > ; dialed call forward on busy app - forwards calling extension when > busy > exten => _*90.,1,DBput(CFB/${CALLERIDNUM}=${EXTEN:3}) > exten => _*90.,2,Answer > exten => _*90.,3,Wait(1) > exten => _*90.,4,Playback(loligo/call-fwd-on-busy) > exten => _*90.,5,Playback(loligo/for) > exten => _*90.,6,Playback(loligo/extension) > exten => _*90.,7,SayDigits(${CALLERIDNUM}) > exten => _*90.,8,Playback(loligo/is-set-to) > exten => _*90.,9,SayDigits(${EXTEN:3}) > exten => _*90.,10,Macro(hangupcall) > ; cancels call forward on busy for calling extension > exten => *91,1,DBdel(CFB/${CALLERIDNUM}) > exten => *91,2,Answer > exten => *91,3,Wait(1) > exten => *91,4,Playback(call-fwd-on-busy) > exten => *91,5,Playback(de-activated) > exten => *91,6,Macro(hangupcall) > exten => h,1,Hangup > > [app-calltrace] > ; We can't have our timeouts or dial digits collide with other > applications > ; or extensions, so we build the app in pieces > exten => *69,1,Goto(app-calltrace-perform,s,1) > > [app-calltrace-perform] > exten => s,1,Answer > exten => s,2,Wait(1) > exten => s,3,Background(allison7/info-about-last-call) > exten => s,4,Background(allison7/telephone-number) > exten => s,5,Dbget(lastcaller=CALLTRACE/${CALLERIDNUM}) > exten => s,6,GotoIf($[${lastcaller}]?7:13) > exten => s,7,SayDigits(${lastcaller}) > exten => s,8,DigitTimeout(3) > exten => s,9,ResponseTimeout(7) > exten => s,10,Background(loligo/to-call-this-number) > exten => s,11,Background(allison7/press-1) > exten => s,12,Goto(15) > exten => s,13,Playback(loligo/from-unknown-caller) > exten => s,14,Macro(hangupcall) > exten => s,15,NoOp > exten => 1,1,Goto(from-internal,${lastcaller},1); > exten => i,1,Playback(vm-goodbye) > exten => i,2,Macro(hangupcall) > exten => t,1,Playback(vm-goodbye) > exten => t,2,Macro(hangupcall) > > ; > ####################################################################### > ##### > ; Inbound Contexts [from] > ; > ####################################################################### > ##### > > [from-sip-external] > > ;give external sip users congestion and hangup > exten => _.,1,AbsoluteTimeout(15) > exten => _.,2,Congestion > exten => _.,3,Hangup > > [from-internal] > ;allow phones to use applications > include => app-directory > include => app-dnd > include => app-callforward > include => app-callwaiting > include => app-messagecenter > include => app-calltrace > include => parkedcalls > include => from-internal-custom > ;allow phones to dial other extensions > include => ext-fax > include => ext-local > include => ext-group > include => ext-queues > include => ext-zapbarge > include => ext-meetme > include => ext-record > include => ext-test > ;allow phones to access trunks > include => outbound-allroutes > exten => s,1,Macro(hangupcall) > exten => h,1,Macro(hangupcall) > > ; > ####################################################################### > ##### > ; Extension Contexts [ext] > ; > ####################################################################### > ##### > > [ext-zapbarge] > exten => 888,1,SetGroup(${CALLERIDNUM}) > exten => 888,2,Answer > exten => 888,3,Wait(1) > exten => 888,4,ZapBarge > exten => 888,5,Hangup > > [ext-meetme] > exten => _8X,1,Answer > exten => _8X,2,Wait(1) > exten => _8X,3,GotoIf($[${CALLERIDNUM} = ${EXTEN:1}]?5:4) > exten => _8X,4,MeetMe(${EXTEN}|sM) > exten => _8X,5,MeetMe(${EXTEN}|asM) > > exten => _8XX,1,Answer > exten => _8XX,2,Wait(1) > exten => _8XX,3,GotoIf($[${CALLERIDNUM} = ${EXTEN:1}]?5:4) > exten => _8XX,4,MeetMe(${EXTEN}|sM) > exten => _8XX,5,MeetMe(${EXTEN}|asM) > > exten => _8XXX,1,Answer > exten => _8XXX,2,Wait(1) > exten => _8XXX,3,GotoIf($[${CALLERIDNUM} = ${EXTEN:1}]?5:4) > exten => _8XXX,4,MeetMe(${EXTEN}|sM) > exten => _8XXX,5,MeetMe(${EXTEN}|asM) > > exten => _8XXXX,1,Answer > exten => _8XXXX,2,Wait(1) > exten => _8XXXX,3,GotoIf($[${CALLERIDNUM} = ${EXTEN:1}]?5:4) > exten => _8XXXX,4,MeetMe(${EXTEN}|sM) > exten => _8XXXX,5,MeetMe(${EXTEN}|asM) > > [ext-fax] > exten => s,1,Answer > exten => s,2,Goto(in_fax,1) > exten => in_fax,1,GotoIf($[${FAX_RX} = system]?2:analog_fax,1) > exten => in_fax,2,Macro(faxreceive) > exten => in_fax,3,system(tiff2ps -2eaz -w 8.5 -h 11 ${FAXFILE} | > ps2pdf - > ${FAXFILE}.pdf) > exten => in_fax,4,system(mime-construct --to ${EMAILADDR} --subject > "Fax from > ${CALLERIDNUM} ${CALLERIDNAME}" --attachment ${CALLERIDNUM}.pdf --type > application/pdf --file ${FAXFILE}.pdf) > exten => in_fax,5,system(rm ${FAXFILE} ${FAXFILE}.pdf) > exten => in_fax,6,Hangup > exten => analog_fax,1,GotoIf($[${FAX_RX} = disabled]?3:2) ;if fax is > disabled, > just hang up > exten => analog_fax,2,Dial(${FAX_RX},20,d) > exten => analog_fax,3,Hangup > ;exten => out_fax,1,wait(7) > exten => out_fax,1,txfax(${TXFAX_NAME}|caller) > exten => out_fax,2,Hangup > exten => h,1,Hangup() > > [ext-record] > exten => *77,1,Wait(2) > exten => *77,2,Record(${CALLERIDNUM}ivrrecording:wav) > exten => *77,3,Wait(2) > exten => *77,4,Hangup > exten => *99,1,Playback(${CALLERIDNUM}ivrrecording) > exten => *99,2,Wait(2) > exten => *99,3,Hangup > > ;this is where parked calls go if they time-out. Should probably > re-ring > [default] > include => ext-local > exten => s,1,Playback(vm-goodbye) > exten => s,2,Macro(hangupcall) > > [ext-test] > exten => 7777,1,Goto(from-pstn,s,1) > exten => 666,1,Goto(ext-fax,in_fax,1) > exten => h,1,Macro(hangupcall) > > ;echo test > exten => *43,1,Answer > exten => *43,2,Wait(2) > exten => *43,3,Playback(demo-echotest) > exten => *43,4,Echo > exten => *43,5,Playback(demo-echodone) > exten => *43,6,Hangup > > ------------------------------------------------- > This mail sent through IMP: http://horde.org/imp/ > > _______________________________________________ > Asterisk-Users mailing list > Asterisk-Users@lists.digium.com > http://lists.digium.com/mailman/listinfo/asterisk-users > To UNSUBSCRIBE or update options visit: > http://lists.digium.com/mailman/listinfo/asterisk-users