Asterisk GoSub()函数不适用于我

Asterisk GoSub()函数不适用于我,asterisk,pbx,Asterisk,Pbx,我想在101分机和102分机之间打电话,但打不通。我有以下extensions.conf文件 [general] autofallthrough=no priorityjumping=yes static=yes writeprotect=no clearglobalvars=yes [default] exten => .,1,Hangup() [inbound-schedule] ; #_#_# Phone Number #_#_# exten => 7867086699,1

我想在101分机和102分机之间打电话,但打不通。我有以下extensions.conf文件

[general]
autofallthrough=no
priorityjumping=yes
static=yes
writeprotect=no
clearglobalvars=yes

[default]
exten => .,1,Hangup()

[inbound-schedule]
; #_#_# Phone Number #_#_#
exten => 7867086699,1,Answer
exten => 7867086699,n,NoOp(Office-ANI-${EXTEN})
exten => 7867086699,n,Set(CDR(userfield)=ib_${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}_${EXTEN}_${CALLERID(num)})
exten => 7867086699,n,MixMonitor(ib_${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}_${EXTEN}_${CALLERID(num)}.wav)
exten => 7867086699,n,Goto(schedule,${EXTEN},1)

exten => .,1,Hangup()

[schedule]
exten => _NXXNXXXXXX,1,NoOp(Time-of-Day-Routing)
exten => _NXXNXXXXXX,n,GotoIfTime(8:58-17:02,mon-fri,*,*?inbound,${EXTEN},1)
exten => _NXXNXXXXXX,n,Goto(inbound-closed,${EXTEN},1)

[inbound]
exten => _NXXNXXXXXX,1,NoOp(Office-Open)
exten => _NXXNXXXXXX,n,Set(NUMINVALID=1)
exten => _NXXNXXXXXX,n,Set(TIMEOUT(digit)=3)  ; max wait in-between digits seconds 
exten => _NXXNXXXXXX,n,Set(TIMEOUT(response)=3)  ; max wait for digit entry seconds
exten => _NXXNXXXXXX,n,Ringing
exten => _NXXNXXXXXX,n(menu),Wait(1)
exten => _NXXNXXXXXX,n,Background(custom/open-recording)
exten => _NXXNXXXXXX,n,Wait(3)
exten => _NXXNXXXXXX,n,Background(custom/open-recording)
exten => _NXXNXXXXXX,n,Wait(3)
exten => _NXXNXXXXXX,n,Dial(SIP/101,18)
exten => _NXXNXXXXXX,n,Voicemail(100@default,su)

exten => 0,1,NoOp(Office-Open-Press-Zero)
exten => 0,n,Voicemail(100@default,su)

exten => 2,1,NoOp(Operator-Directory)
exten => 2,n,Directory(default,vm-operator,f)

exten => 200,1,NoOp(External-Voicemail-Dial-From-${CALLERID(num)})
exten => 200,n,Playback(vm-dialout)
exten => 200,n,Wait(1)
exten => 200,n,VoiceMailMain()

exten => _1XX,1,Macro(local-followme,${EXTEN})

exten => t,1,Playback(option-is-invalid)
exten => t,n,Hangup()

exten => i,1,Set(NUMINVALID=$[${NUMINVALID}+1]})
exten => i,n,Playback(option-is-invalid)
exten => i,n,Gotoif($["${NUMINVALID}" < "4"]?:10)
exten => i,n,Goto(_NXXNXXXXXX,menu)
exten => i,10,Playback(vm-goodbye)
exten => i,n,Hangup()

[inbound-closed]
exten => _NXXNXXXXXX,1,NoOp(Office-Closed)
exten => _NXXNXXXXXX,n,Set(NUMINVALID=1)
exten => _NXXNXXXXXX,n,Set(TIMEOUT(digit)=3)
exten => _NXXNXXXXXX,n,Set(TIMEOUT(response)=3)
exten => _NXXNXXXXXX,n,Ringing
exten => _NXXNXXXXXX,n(menu),Wait(1)
exten => _NXXNXXXXXX,n,Background(custom/closed-recording)
exten => _NXXNXXXXXX,n,Wait(3)
exten => _NXXNXXXXXX,n,Background(custom/closed-recording)
exten => _NXXNXXXXXX,n,Wait(3)
exten => _NXXNXXXXXX,n,Dial(SIP/101,18)
exten => _NXXNXXXXXX,n,Voicemail(100@default,su)

exten => 0,1,NoOp(Office-Open-Press-Zero)
exten => 0,n,Voicemail(100@default,su)

exten => 2,1,NoOp(Operator-Directory)
exten => 2,n,Directory(default,vm-operator,f)

exten => 200,1,NoOp(External-Voicemail-Dial-From-${CALLERID(num)})
exten => 200,n,Playback(vm-dialout)
exten => 200,n,Wait(1)
exten => 200,n,VoiceMailMain()

exten => _1XX,1,Macro(local-followme,${EXTEN})

exten => t,1,Playback(option-is-invalid)
exten => t,n,Hangup()

exten => i,1,Set(NUMINVALID=$[${NUMINVALID}+1]})
exten => i,n,Playback(option-is-invalid)
exten => i,n,Gotoif($["${NUMINVALID}" < "4"]?:10)
exten => i,n,Goto(_NXXNXXXXXX,menu)
exten => i,10,Playback(vm-goodbye)
exten => i,n,Hangup()

[outbound]
exten => _NXXNXXXXXX,1,Dial(SIP/${EXTEN}@voip-outbound,120,trwW)
exten => _NXXNXXXXXX,n,Hangup()

exten => .,1,Playback(invalid)
exten => .,n,Hangup()

[internal]
; #_#_#_#_#_#_#_#_# INTERNAL MAIN CONTEXT #_#_#_#_#_#_#_#_#_#

; Extension to Extension Dialing
exten => _1XX,1,Macro(local-followme,${EXTEN})

; Call Pickup
exten => _*971XX,1,SET(GLOBAL(PICKUPMARK)=${EXTEN:2})
exten => _*971XX,n,Pickup(${EXTEN:2}@PICKUPMARK)

; Voicemail Access
exten => 1000,1,VoiceMailMain(${CALLERID(num)}@default)
exten => 2000,1,VoiceMailMain()

; Outbound Dialing
exten => _NXXXXXX,1,Answer
exten => _NXXXXXX,n,Set(CDR(userfield)=ib_${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}_${EXTEN}_${CALLERID(num)})
exten => _NXXXXXX,n,MixMonitor(ob_${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}_${EXTEN}_${CALLERID(num)}.wav)
exten => _NXXXXXX,n,Set(CALLERID(num)=7867086699)
exten => _NXXXXXX,n,Goto(outbound,310${EXTEN},1)

exten => _NXXNXXXXXX,1,Answer
exten => _NXXNXXXXXX,n,Set(CDR(userfield)=ib_${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}_${EXTEN}_${CALLERID(num)})
exten => _NXXNXXXXXX,n,MixMonitor(ob_${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}_${EXTEN}_${CALLERID(num)}.wav)
exten => _NXXNXXXXXX,n,Set(CALLERID(num)=7867086699)
exten => _NXXNXXXXXX,n,Goto(outbound,${EXTEN},1)

exten => _1NXXNXXXXXX,1,Answer
exten => _1NXXNXXXXXX,n,Set(CDR(userfield)=ib_${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}_${EXTEN}_${CALLERID(num)})
exten => _1NXXNXXXXXX,n,MixMonitor(ob_${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}_${EXTEN}_${CALLERID(num)}.wav)
exten => _1NXXNXXXXXX,n,Set(CALLERID(num)=7867086699)
exten => _1NXXNXXXXXX,n,Goto(outbound,${EXTEN:1},1)

exten => t,1,Playback(invalid)
exten => t,n,Hangup()
exten => i,1,Playback(invalid)
exten => i,n,Hangup()
exten => .,1,Playback(invalid)
exten => .,n,Hangup()

[macro-local-followme]
exten => s,1,GotoIf($[${DB_EXISTS(followme/${ARG1})}=0]?nofollow)
exten => s,n,GotoIf($[${DB_RESULT:0:1}=0]?nofollow:follow)
exten => s,n(follow),Dial(SIP/${ARG1},20)
exten => s,n,Followme(${ARG1},n)                      ; Removed sa so no name recording
exten => s,n,Goto(s-${DIALSTATUS},1)
exten => s,n(nofollow),Dial(SIP/${ARG1},20)
exten => s,n,Goto(s-${DIALSTATUS},1)
exten => s-NOANSWER,1,Voicemail(${ARG1},u)            ; If unavailable, send to voicemail
exten => s-BUSY,1,Voicemail(${ARG1},u)                ; I changed b to u. If busy, send to voicemail w/ busy ann
exten => _s-.,1,Goto(s-NOANSWER,1)

[outbound-follow-me]
exten => _NXXNXXXXXX,1,NoOp(follow-me-activated-${EXTEN})
exten => _NXXNXXXXXX,n,Set(CALLERID(num)=${IF($[ ${LEN(${CALLERID(num)})} = 3]?7867086699:${CALLERID(num)})})
exten => _NXXNXXXXXX,n,Goto(outbound,${EXTEN},1)

exten => _1NXXNXXXXXX,1,NoOp(follow-me-activated-${EXTEN})
exten => _1NXXNXXXXXX,n,Set(CALLERID(num)=${IF($[ ${LEN(${CALLERID(num)})} = 3]?7867086699:${CALLERID(num)})})
exten => _1NXXNXXXXXX,n,Goto(outbound,${EXTEN:1},1)

exten => _1XX,1,Dial(SIP/${EXTEN},120,t)
exten => _1XX,n,Hangup()

[vm-operator]
exten => o,1,NoOp(operator-zero-out)
exten => o,n,Goto(vm-zero-menu,s,1)

; Direct Extension Dialing
exten => _1XX,1,Macro(local-followme,${EXTEN})

[vm-zero-menu]
exten => s,1,NoOp(operator-asterisk-out)
exten => s,n,Set(TIMEOUT(digit)=3)
exten => s,n,Set(TIMEOUT(response)=3)
exten => s,n,Background(custom/vm-operator-recording)
exten => s,n,Wait(3)
exten => s,n,Voicemail(100@default,su)

exten => 0,1,Voicemail(100@default,su)

exten => 1,1,NoOp(Operator-Directory)
exten => 1,n,Directory(default,vm-operator,f)

exten => 2,1,Voicemail(100@default,su)
exten => 3,1,Voicemail(100@default,su)
exten => 4,1,Voicemail(100@default,su)
exten => 5,1,Voicemail(100@default,su)
exten => 6,1,Voicemail(100@default,su)
exten => 7,1,Voicemail(100@default,su)
exten => 8,1,Voicemail(100@default,su)
exten => 9,1,Voicemail(100@default,su)

; Direct Extension Dialing
exten => _1XX,1,Macro(local-followme,${EXTEN})

exten => t,1,Playback(invalid)
exten => t,n,Hangup()
exten => i,1,Playback(invalid)
exten => i,n,Hangup()
exten => .,1,Playback(invalid)
exten => .,n,Hangup()
显然已加载app_stack,这是我在CLI上使用命令“像app_stack一样显示模块”时使用的

app_stack.so-拨号计划子例程(Gosub、Return等0-运行-核心


非常感谢您的指导。谢谢。

通过Asterisk CLI中的“dialplan reload”命令确认是否正在重新加载dialplan模块,调用中执行的似乎是GoSub而不是宏。您可以通过执行“dialplan show”或“dialplan show context name”来验证Asterisk中加载的dialplan语句

请避免使用宏应用程序,应改用GoSub应用程序,宏被视为已弃用

下面是一个Gosub示例:

[internal]
exten => _1XX,1,GoSub(local-followme,s,1(${EXTEN}))

[local-followme]
exten => s,1,Verbose(GoSub executing)
same = n,Verbose(Argument 1: ${ARG1})
same = n,Return()

您的错误输出中有什么不清楚?我想知道为什么我无法在分机之间拨打电话。每当我拨打电话时,我都会收到问题中显示的错误消息。可能是因为您根本没有本地followme上下文,不是吗?常见,星号无法为您编写拨号计划,并猜测您想要什么。谢谢,我我是新手,我会继续练习。我真的很感谢你的帮助。这就是问题所在,现在功能齐全了。你的拨号计划中甚至没有一个
Gosub()
呼叫。。。
[internal]
exten => _1XX,1,GoSub(local-followme,s,1(${EXTEN}))

[local-followme]
exten => s,1,Verbose(GoSub executing)
same = n,Verbose(Argument 1: ${ARG1})
same = n,Return()