我是星号的新手,我有一个关于使用include语句的问题。
我有一个名为" app-calltrace-perform"来自FreePBX,当人们按* 69跟踪他们的电话时使用。
[APP-呼叫追踪-执行]
include => APP-呼叫追踪,进行定制
exten => S,1,答案
...
exten => T,N,微距(hangupcall,)
" app-calltrace-perform"用 extensions_additional.conf 编写,当用户在Web gui上提交有关dialplan的内容时,将覆盖该内容。所以我必须编写自己的上下文" app-calltrace-perform-custom"在另一个名为 extensions_custom.conf 的文件上
[APP-呼叫追踪-执行定制]
exten => S,1,回答()
相同=> n,VERBOSE("这里的东西")
相同=> N,播放(你好世界)
相同=> N,挂断()
请注意 已包含 extensions_additional.conf 和 extensions_custom.conf extensions.conf
然后我做dialplan reload
并再试一次,但是拨号方案根本没有播放我的背景(没有详细,没有播放你好世界)。
我在https://wiki.asterisk.org/wiki/display/AST/Include+Statements+Basics
中找到了有用的内容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
答案 0 :(得分:3)
Asterisk dialplan匹配工作方式
[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时将从context1中选择命令,因为它在上下文中是EXIST。如果使用通配符,则相同。
当从上下文2中选择2时,第一个包括上下文 当被调用时,任何其他数字(例如3)将在context3中被选为“other”(因为它没有在上下文中呈现,也没有在流行的包含上下文中呈现)
如果在任何上下文中不存在,则调用12将执行“无效”扩展
答案 1 :(得分:2)
您需要在所包含的上下文中区分一些内容,以便拨号方案知道如何使用它。由于您在两者中都使用了s
扩展名,因此首先使用当前上下文中的匹配扩展名。正如您在文档中找到的那样。
s
扩展名为" start"扩展,并在没有已知拨号扩展时使用。
首先,仔细检查您的文件包含在[globals]
extensions.conf
上下文中
[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()
结束每个包含的上下文,这被认为是一种良好做法。为了防止可能的错误导致收费欺诈。只想注意未来的stackoverflowers。