Here is the output pf ztcfg -vvvv:
Zaptel Configuration
======================
Channel map:
Channel 01: FXO Kewlstart (Default) (Slaves: 01)
Channel 04: FXS Kewlstart (Default) (Slaves: 04)
2 channels configured.
I do get a dialtone on the zap extension, and if I try to dial out, it works. It can call internally and externally.
Here is my extensions.conf:
; Asterisk Management Portal (AMP)
; Copyright (C) 2004 Coalescent Systems Inc
; dialparties.agi (http://www.sprackett.com/
; Asterisk::AGI (http://asterisk.gnuinter.
; gsm (http://www.ibiblio.org/pu
; loligo sounds (http://www.loligo.com/ast
; mpg123 (http://voip-info.org/wiki
; 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.sam
#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
exten => s,2,GotoIf($[${IN_OVERRIDE
exten => s,3,GotoIfTime(${REGTIME}|
exten => s,4,Goto(from-pstn-afthour
[from-pstn-reghours]
exten => s,1,GotoIf($[${FAX_RX} = disabled]?from-pstn-reghou
exten => s,2,Answer
exten => s,3,Wait(1)
exten => s,4,SetVar(intype=${INCOMI
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,${INCOM
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,${INCO
exten => s,12,GotoIf($[${intype} = QUE]?13:15)
exten => s,13,Wait(3)
exten => s,14,Goto(ext-queues,${INC
exten => s,15,Goto(${INCOMING},s,1)
exten => fax,1,Goto(ext-fax,in_fax,
exten => h,1,Hangup
[from-pstn-reghours-nofax]
exten => s,1,SetVar(intype=${INCOMI
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,${INCOM
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,${INCOM
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,${INC
exten => s,11,Answer ; answer call before auto attendant
exten => s,12,Wait(1)
exten => s,13,Goto(${INCOMING},s,1)
exten => fax,1,Goto(ext-fax,in_fax,
exten => h,1,Hangup
[from-pstn-afthours]
exten => s,1,GotoIf($[${FAX_RX} = disabled]?from-pstn-afthou
exten => s,2,Answer
exten => s,3,Wait(1)
exten => s,4,SetVar(intype=${AFTER_
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
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,${AFTE
exten => s,12,GotoIf($[${intype} = QUE]?13:15)
exten => s,13,Wait(3)
exten => s,14,Goto(ext-queues,${AFT
exten => s,15,Goto(${AFTER_INCOMING
exten => fax,1,Goto(ext-fax,in_fax,
exten => h,1,Hangup
[from-pstn-afthours-nofax]
exten => s,1,SetVar(intype=${AFTER_
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
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
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,${AFT
exten => s,11,Answer ; answer call before auto attendant
exten => s,12,Wait(1)
exten => s,13,Goto(${AFTER_INCOMING
exten => fax,1,Goto(ext-fax,in_fax,
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,$DI
[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($[${CALLERIDNAM
exten => s,3,SetCIDName(${CALLERIDN
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
exten => s,11,Playback(the-number-u
exten => s,12,Playback(is-curntly-u
exten => s,13,Playback(goodbye)
exten => s,14,Hangup
; 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=ext
exten => s,2,Macro(record-enable,${
exten => s,3,Macro(dial,${RINGTIMER
exten => s,4,GotoIf($[${CHANNEL:0:5
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},${DIA
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
exten => s-BUSY,2,Hangup()
exten => _s-.,1,Voicemail(u${ARG1})
exten => _s-.,2,Hangup()
exten => o,1,Background(one-moment-
exten => o,2,GotoIf($["foo${FROM_DI
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(${CALLERIDN
; Ring groups of phones
; ARGS: comma separated extension list
; 1 - ringtimer
; 2 - preifx
; 3 - extension list
[macro-rg-group]
exten => _s-.,1,Hangup()
exten => s,1,GotoIf($[${CALLERIDNAM
exten => s,2,SetCIDName(${CALLERIDN
exten => s,3,Setvar(RGPREFIX=${ARG2
exten => s,4,SetCIDName(${RGPREFIX}
exten => s,5,Setvar(RecordMethod=Gr
exten => s,6,Macro(record-enable,${
exten => s,7,Macro(dial,${ARG1},${D
;exten => s,1,GotoIf($[${CALLERIDNAM
;exten => s,2,SetCIDName(${CALLERIDN
;exten => s,3,Setvar(RGPREFIX=${ARG2
;;exten => s,4,Noop(${RGPREFIX} ${CALLERIDNAME})
;exten => s,4,SetCIDName(${RGPREFIX}
;;exten => s,6,Noop(Dial group ${ARG3})
;exten => s,5,Macro(dial,${ARG1},${D
;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-
;exten => s,4,SetCIDName(${PRE}${CAL
;exten => s,5,Macro(dial,${RINGTIMER
;
; Outgoing channel(s) are busy ... inform the client
;
[macro-outisbusy]
exten => s,1,Playback(allison7/all-
exten => s,2,Playback(allison7/pls-
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/sp
exten => s,2,SetVar(EMAILADDR=${FAX
exten => s,3,rxfax(${FAXFILE})
exten => s,103,SetVar(EMAILADDR=${F
exten => s,104,Goto(3)
; dialout and strip the prefix
[macro-dialout]
exten => s,1,GotoIf($[foo${ECID${CA
exten => s,2,SetCallerID(${ECID${CA
exten => s,3,Goto(6)
exten => s,4,GotoIf($[foo${OUTCID_$
exten => s,5,SetCallerID(${OUTCID_$
exten => s,6,SetVar(length=${LEN(${
exten => s,7,Dial(${OUT_${ARG1}}/${
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,${
exten => s,2,GotoIf($[foo${ECID${CA
exten => s,3,SetCallerID(${ECID${CA
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,${
exten => s,4,GotoIf($[foo${ECID${CA
exten => s,5,SetCallerID(${ECID${CA
exten => s,6,Goto(9)
exten => s,7,GotoIf($[foo${OUTCID_$
exten => s,8,SetCallerID(${OUTCID_$
exten => s,9,SetGroup(OUT_${ARG1})
exten => s,10,CheckGroup(${OUTMAXCH
; if we've used up the max channels, continue at 109 (n+101)
exten => s,11,SetVar(DIAL_NUMBER=${
exten => s,12,SetVar(DIAL_TRUNK=${A
exten => s,13,AGI(fixlocalprefix) ; this sets DIAL_NUMBER to the proper dial string for this trunk
exten => s,14,SetVar(OUTNUM=${OUTPR
exten => s,15,Cut(custom=OUT_${ARG1
exten => s,16,GotoIf($[${custom} = AMP]?19)
exten => s,17,Dial(${OUT_${ARG1}}/$
exten => s,18,Goto(s-${DIALSTATUS},
; This is a custom trunk. Substitute $OUTNUM$ with the actual number and rebuild the dialstring
; example trunks: "AMP:CAPI/XXXXXXXX:b$OUTNU
exten => s,19,Cut(pre_num=OUT_${ARG
exten => s,20,Cut(the_num=OUT_${ARG
exten => s,21,Cut(post_num=OUT_${AR
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=${OUTN
exten => s,24,Dial(${pre_num:4}${th
exten => s,25,Goto(s-${DIALSTATUS},
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
exten => s,4,GotoIf($[foo${CALLBACK
exten => s,5,SetVar(CALLBACKNUM=${C
exten => s,6,GotoIf($[foo${CALLBACK
exten => s,7,GotoIf($[foo${ARG2} = foo]?9:8)) ; arg2 is queue password
exten => s,8,Authenticate(${ARG2})
exten => s,9,AddQueueMember(${ARG1}
exten => s,10,Wait(1)
exten => s,11,Playback(agent-logino
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
exten => s,4,GotoIf($[foo${CALLBACK
exten => s,5,SetVar(CALLBACKNUM=${C
exten => s,6,GotoIf($[foo${CALLBACK
exten => s,7,RemoveQueueMember(${AR
exten => s,8,Wait(1)
exten => s,9,Playback(agent-loggedo
exten => s,10,Hangup()
; arg1 = trunk number, arg2 = number
[macro-dialout-enum]
exten => s,1,Macro(record-enable,${
exten => s,2,GotoIf($[foo${ECID${CA
exten => s,3,SetCallerID(${ECID${CA
exten => s,4,Goto(7)
exten => s,5,GotoIf($[foo${OUTCID_$
exten => s,6,SetCallerID(${OUTCID_$
exten => s,7,SetGroup(OUT_${ARG1})
exten => s,8,CheckGroup(${OUTMAXCHA
exten => s,9,SetVar(DIAL_NUMBER=${A
exten => s,10,SetVar(DIAL_TRUNK=${A
exten => s,11,AGI(fixlocalprefix) ; this sets DIAL_NUMBER to the proper dial string for this trunk
exten => s,12,EnumLookup(${DIAL_NUM
exten => s,13,GotoIf($[$[${ENUM:0:3
exten => s,14,Dial(${ENUM})
exten => s,15,Goto(s-${DIALSTATUS},
; 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(${BLINDTR
exten => s,2,ResetCDR(w)
exten => s,3,StopMonitor()
exten => s,4,GotoIf($["${ARG2}" = "OUT"]?5:8)
exten => s,5,DBGet(RecEnable=RECORD
exten => s,6,SetVar(CALLFILENAME=OU
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
exten => s,11,Goto(s,14)
exten => s,12,DBGet(RecEnable=RECOR
exten => s,13,SetVar(CALLFILENAME=$
exten => s,14,GotoIf($["${RecEnable
exten => s,15,Monitor(wav49,${CALLF
exten => s,99,Noop(NO RECORDING NEEDED)
;exten => s,3,BackGround(for-quality
;exten => s,4,BackGround(this-call-m
;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=${ACC
exten => s,2,Noop(ANSWEREDTIME=${AN
exten => s,3,Noop(BLINDTRANSFER=${B
exten => s,4,Noop(CALLERID=${CALLER
exten => s,5,Noop(CALLERIDNAME=${CA
exten => s,6,Noop(CALLERIDNUM=${CAL
exten => s,7,Noop(CALLINGPRES=${CAL
exten => s,8,Noop(CHANNEL=${CHANNEL
exten => s,9,Noop(CONTEXT=${CONTEXT
exten => s,10,Noop(DATETIME=${DATET
exten => s,11,Noop(DIALEDPEERNAME=$
exten => s,12,Noop(DIALEDPEERNUMBER
exten => s,13,Noop(DIALEDTIME=${DIA
exten => s,14,Noop(DIALSTATUS=${DIA
exten => s,15,Noop(DNID=${DNID})
exten => s,16,Noop(EPOCH=${EPOCH})
exten => s,17,Noop(EXTEN=${EXTEN})
exten => s,18,Noop(HANGUPCAUSE=${HA
exten => s,19,Noop(INVALID_EXTEN=${
exten => s,20,Noop(LANGUAGE=${LANGU
exten => s,21,Noop(MEETMESECS=${MEE
exten => s,22,Noop(PRIORITY=${PRIOR
exten => s,23,Noop(RDNIS=${RDNIS})
exten => s,24,Noop(SIPDOMAIN=${SIPD
exten => s,25,Noop(SIP_CODEC=${SIP_
exten => s,26,Noop(SIPCALLID=${SIPC
exten => s,27,Noop(SIPUSERAGENT=${S
exten => s,28,Noop(TIMESTAMP=${TIME
exten => s,29,Noop(TXTCIDNAME=${TXT
exten => s,30,Noop(UNIQUEID=${UNIQU
exten => s,31,Noop(TOUCH_MONITOR=${
exten => s,32,Noop(MACRO_CONTEXT=${
exten => s,33,Noop(MACRO_EXTEN=${MA
exten => s,34,Noop(MACRO_PRIORITY=$
; ##########################
; Applications [app]
; ##########################
;
[app-directory]
;DIR-CONTEXT set in Digital Receptionist
exten => #,1,Wait(1)
exten => #,2,AGI(directory,${DIR-CO
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,gener
exten => *411,4,Playback(vm-goodbye
exten => *411,5,Hangup
exten => h,1,Hangup
exten => o,1,GotoIf($["foo${FROM_DI
[app-dnd]
exten => *78,1,Answer
exten => *78,2,Wait(1)
exten => *78,3,DBput(DND/${CALLERID
exten => *78,4,Playback(allison7/do
exten => *78,5,Playback(activated)
exten => *78,6,Macro(hangupcall)
exten => *79,1,Answer
exten => *79,2,Wait(1)
exten => *79,3,DBdel(DND/${CALLERID
exten => *79,4,Playback(allison7/do
exten => *79,5,Playback(de-activate
exten => *79,6,Macro(hangupcall)
[app-messagecenter]
exten => *98,1,Answer
exten => *98,2,Wait(1)
exten => *98,3,VoiceMailMain(defaul
exten => *98,4,Macro(hangupcall)
exten => _*98X.,1,Answer ; can dial *98<exten> to skip 'mailbox' prompt. Useful for speedial.
exten => _*98X.,2,Wait(1)
exten => _*98X.,3,VoiceMailMain(${E
exten => _*98X.,4,Macro(hangupcall)
exten => *97,1,Answer
exten => *97,2,Wait(1)
exten => *97,3,VoicemailMain(${CALL
exten => *97,4,Macro(hangupcall)
[app-callwaiting]
exten => *70,1,Answer
exten => *70,2,Wait(1)
exten => *70,3,DBput(CW/${CALLERIDN
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/${CALLERIDN
exten => *71,4,Playback(callwaiting
exten => *71,5,Playback(de-activate
exten => *71,6,Macro(hangupcall)
[app-callforward]
; dialed call forward app - forwards calling extension
exten => _*72.,1,DBput(CF/${CALLERI
exten => _*72.,2,Answer
exten => _*72.,3,Wait(1)
exten => _*72.,4,Playback(loligo/ca
exten => _*72.,5,Playback(loligo/fo
exten => _*72.,6,Playback(loligo/ex
exten => _*72.,7,SayDigits(${CALLER
exten => _*72.,8,Playback(loligo/is
exten => _*72.,9,SayDigits(${EXTEN:
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/
exten => *72,4,Playback(extension)
exten => *72,5,Read(fromext,then-pr
exten => *72,6,Wait(1)
exten => *72,7,BackGround(ent-targe
exten => *72,8,Read(toext,then-pres
exten => *72,9,Wait(1)
exten => *72,10,DBput(CF/${fromext}
exten => *72,11,Playback(call-fwd-u
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:
exten => _*73.,5,Playback(call-fwd-
exten => _*73.,6,Macro(hangupcall)
; cancels call forward for calling extension
exten => *73,1,DBdel(CF/${CALLERIDN
exten => *73,2,Answer
exten => *73,3,Wait(1)
exten => *73,4,Playback(loligo/call
exten => *73,5,Macro(hangupcall)
; dialed call forward on busy app - forwards calling extension when busy
exten => _*90.,1,DBput(CFB/${CALLER
exten => _*90.,2,Answer
exten => _*90.,3,Wait(1)
exten => _*90.,4,Playback(loligo/ca
exten => _*90.,5,Playback(loligo/fo
exten => _*90.,6,Playback(loligo/ex
exten => _*90.,7,SayDigits(${CALLER
exten => _*90.,8,Playback(loligo/is
exten => _*90.,9,SayDigits(${EXTEN:
exten => _*90.,10,Macro(hangupcall)
; cancels call forward on busy for calling extension
exten => *91,1,DBdel(CFB/${CALLERID
exten => *91,2,Answer
exten => *91,3,Wait(1)
exten => *91,4,Playback(call-fwd-on
exten => *91,5,Playback(de-activate
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-p
[app-calltrace-perform]
exten => s,1,Answer
exten => s,2,Wait(1)
exten => s,3,Background(allison7/in
exten => s,4,Background(allison7/te
exten => s,5,Dbget(lastcaller=CALLT
exten => s,6,GotoIf($[${lastcaller}
exten => s,7,SayDigits(${lastcaller
exten => s,8,DigitTimeout(3)
exten => s,9,ResponseTimeout(7)
exten => s,10,Background(loligo/to-
exten => s,11,Background(allison7/p
exten => s,12,Goto(15)
exten => s,13,Playback(loligo/from-
exten => s,14,Macro(hangupcall)
exten => s,15,NoOp
exten => 1,1,Goto(from-internal,${l
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(${CALLERIDN
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($[${CALLERIDN
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($[${CALLERID
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($[${CALLERI
exten => _8XXX,4,MeetMe(${EXTEN}|sM
exten => _8XXX,5,MeetMe(${EXTEN}|as
exten => _8XXXX,1,Answer
exten => _8XXXX,2,Wait(1)
exten => _8XXXX,3,GotoIf($[${CALLER
exten => _8XXXX,4,MeetMe(${EXTEN}|s
exten => _8XXXX,5,MeetMe(${EXTEN}|a
[ext-fax]
exten => s,1,Answer
exten => s,2,Goto(in_fax,1)
exten => in_fax,1,GotoIf($[${FAX_RX
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-const
exten => in_fax,5,system(rm ${FAXFILE} ${FAXFILE}.pdf)
exten => in_fax,6,Hangup
exten => analog_fax,1,GotoIf($[${FA
exten => analog_fax,2,Dial(${FAX_RX
exten => analog_fax,3,Hangup
;exten => out_fax,1,wait(7)
exten => out_fax,1,txfax(${TXFAX_NA
exten => out_fax,2,Hangup
exten => h,1,Hangup()
[ext-record]
exten => *77,1,Wait(2)
exten => *77,2,Record(${CALLERIDNUM
exten => *77,3,Wait(2)
exten => *77,4,Hangup
exten => *99,1,Playback(${CALLERIDN
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,
exten => h,1,Macro(hangupcall)
;echo test
exten => *43,1,Answer
exten => *43,2,Wait(2)
exten => *43,3,Playback(demo-echote
exten => *43,4,Echo
exten => *43,5,Playback(demo-echodo
exten => *43,6,Hangup
Main Topics
Browse All Topics





by: ripariusPosted on 2005-10-17 at 06:54:28ID: 15099365
There is a quirk in the zaptel driver loading as I recall.... The order in which the wcfxs and wcfxo are loaded can reverse the zap/1 and zap/2 assignments in your dialplan. Here is the reference from VOIP-Info.org
onf it would help.
"If you had just the Wildcard X100P installed in your computer, you would be first loading the zaptel module, then the wcfxo module (and then running the ztcfg program). Your Wildcard X100P would show up as Zap/1. If you bought and installed a Wildcard TDM400P with modules FXO,FXO,FXS,FXS plugged into it, you would also need to load the wcfxs kernel module driver for this card (somewhat confusingly, it handles both the FXO and the FXS modules installed on the Wildcard TDM400P). If you load your kernel modules in the order zaptel, wcfxo, wcfxs, then your Wiildcard X100P interface will be Zap/1, and your Wildcard TDM400P interfaces will be Zap/2 through to Zap/5. If, on the other hand, you load your kernel modules in the order zaptel, wcfxs, wcfxo, then your Wildcard TDM400P interfaces will be Zap/1 through to Zap/4, and your Wildcard X100P interface will be Zap/5, and you would need to change your dialplan (extensions.conf) accordingly. "
Could you post the output of "ztcfg -vvvv" ? that will show the asignments.
Also, do you get dialtone on the zap extension? what happens if you try to dial out from it? (if not..it is could be the fxs/fxo reversal above)
Is your dial plan different for the two extensions? If you could post /etc/asterisk/extensions.c