我是星号的新手,在使用include语句时遇到了问题
我有一个来自FreePBX的名为"app calltrace perform"的上下文,当人们按*69追踪他们的呼叫时使用。
〔应用程序调用跟踪执行〕
include=>应用程序调用追踪执行自定义
extent=>s,1,Answer
extend=>t,n,宏(挂起呼叫)
在extensions_addition.conf中编写的"应用程序调用跟踪执行",当用户在Web gui上提交有关拨号计划的内容时,它将被覆盖。因此,我必须在另一个名为extensions_custom.conf
的文件上编写自己的上下文"应用程序调用跟踪执行自定义">
[app calltrace perform custom]
extend=>s,1,Answer()
same=>n,VERBOSE("Something here")
same=>n,Playback(hello world)
1same=>n,Hangup()
请注意,extensions_addition.conf和extenitions_custom.conf已经包含在extending.conf
中
然后我执行dialplan reload
并重试,但拨号计划根本不播放我的上下文(没有冗长的内容,没有播放你好世界)
我发现了一些有用的东西https://wiki.asterisk.org/wiki/display/AST/Include+报表+基础
Asterisk总是首先尝试在当前上下文中找到匹配的扩展,只有在当前上下文没有匹配的内容的情况下,才跟随include语句到新上下文。
所以现在我不知道如何使用我的自定义上下文来处理这样的事情。很抱歉,如果这是一个愚蠢的问题,但如果你有任何想法,请引导我通过。
编辑
这是从
调用app-calltrace-perform
的地方
[app-calltrace]
include => app-calltrace-custom
exten => *69,1,Goto(app-calltrace-perform,s,1)
现在我正在使用上下文app-calltrace-custom
中定义的另一个扩展名(*12345),它工作得很好,但是硬编码的,因此不能被Web Gui 修改
结束编辑
提前感谢
Loi Dang
星号拨号计划匹配工作方式
[context1]
exten => 1,1,Noop(1)
include =>context2
include =>context3
exten => i,1,Noop(invalid extension)
[context2]
exten => 1,1,Noop(2)
exten => 2,1,Noop(3)
[context3]
exten => 1,1,Noop(4)
exten => 2,1,Noop(5)
exten => _X,1,Noop(other)
假设您调用context1
当调用1时,将从上下文1中选择命令,因为它在上下文中EXIST。如果使用通配符也是如此。
当调用2时,将从context2中选择2,首先包含上下文当被调用时,任何其他号码(例如3)都将在上下文3中选择"其他"(因为它既没有在上下文中出现,也没有在先前包含的上下文中出现)
如果调用的12不存在于任何上下文中,将执行"无效"扩展
您需要在包含的上下文中有一些区别,以便拨号计划知道如何使用它。由于您在两者中都使用了s
扩展,因此它首先在当前上下文中使用匹配的扩展。正如您在文档中所发现的。
s
分机是"开始"分机,在没有已知的拨号分机时使用。
首先,仔细检查您的文件include是否在extensions.conf
中的[globals]
上下文中
[globals]
#include extensions_custom.conf
然后,包括您所做的:
[app-calltrace-perform]
include => app-calltrace-perform-custom
exten => s,1,Answer
same => n,Noop(Testing 1234)
same => n,Hangup()
但是,您需要在包含的上下文中进行区分。例如:
[app-calltrace-perform-custom]
exten => *69,1,Answer()
same => n,Playback(hello-world)
same => n,Hangup()
因此,如果你有一个使用[app-calltrace-perform]
的设备,他们拨打*69
,他们将接受[app-calltrace-perform-custom]
分机。
此外,让Hangup()
结束每个包含的上下文也是一种很好的做法(做得很好)。为了防止可能的错误导致通行费欺诈。我只是想为未来的Stackoverflows指出这一点。