【问题标题】:Asterisk GoSub() function not working for meAsterisk GoSub() 函数对我不起作用
【发布时间】:2021-05-19 00:54:46
【问题描述】:

我正在尝试在分机 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()

我收到以下错误:

Executing [102@internal:1] Gosub("SIP/101-00000002", "local-followme,s,1(102)") in new stack
[2021-05-18 20:26:16] ERROR[19823][C-0000000a]: app_stack.c:593 gosub_exec: Attempt to reach a non-existent destination for Gosub: (Context:local-followme, Extension:s, Priority:1)
  == Spawn extension (internal, 102, 1) exited non-zero on 'SIP/101-00000002'
  == Using SIP RTP CoS mark 5

app_stack 显然已加载,这就是我在 CLI 上使用命令“module show like app_stack”所拥有的

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

我将非常感谢任何指导。谢谢。

【问题讨论】:

  • 您的错误输出中有哪些不清楚的地方?
  • 我想知道为什么我无法在分机之间拨打电话。每当我拨打电话时,我都会收到问题中显示的错误消息。
  • 可能是因为您根本没有本地关注上下文,不是吗?常见的,星号不能为你写拨号方案,猜你想要什么。
  • 谢谢,我是新手,我会继续练习。我真的很感谢你的帮助。这就是问题所在,现在功能齐全。
  • 您的拨号方案中甚至没有Gosub() 呼叫...

标签: asterisk pbx


【解决方案1】:

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

请避免使用宏应用程序,您应该改用 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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 2020-11-11
    • 2013-02-13
    相关资源
    最近更新 更多