我是 asterisk 新手,我有一个关于使用 include 语句的问题。
我有一个来自 FreePBX 的名为“app-calltrace-perform”的上下文,当人们按 *69 来跟踪他们的调用时使用。
[app-calltrace-perform]
include => app-calltrace-perform-custom
exten => s,1,Answer
...
exten => t,n,Macro(hangupcall,)
extensions_additional.conf 中编写的“app-calltrace-perform”,当用户在 Web gui 上提交有关 dialplan 的内容时,该内容将被覆盖。因此,我必须在另一个名为 extensions_custom.conf
[app-calltrace-perform-custom]
exten => s,1,Answer()
same => n,VERBOSE("Something here")
same => n,Playback(hello-world)
same => n,Hangup()
请注意,extensions_additional.conf 和 extensions_custom.conf 已包含在 中扩展.conf
然后我dialplan reload
并重试,但 dialplan 根本不播放我的上下文(没有详细信息,不播放 hello-world)。
我在 https://wiki.asterisk.org/wiki/display/AST/Include+Statements+Basics 中找到了一些有用的东西
Asterisk will always try to find a matching extension in the current context first, and only follow the include statement to a new context if there isn't anything that matches in the current context.
所以现在我不知道如何使用我的自定义上下文来处理这样的事情。抱歉,如果这是一个愚蠢的问题,但如果您有任何想法,请指导我。
编辑
这是 app-calltrace-perform
调用的地方
[应用程序调用跟踪]
包括 => 应用程序调用跟踪自定义
exten => *69,1,Goto(app-calltrace-perform,s,1)
现在我正在使用在上下文 app-calltrace-custom
中定义的另一个扩展 (*12345),它运行良好,但是硬编码的,因此无法由 Web Gui 修改
结束编辑
提前致谢
雷登
最佳答案
Asterisk 拨号方案匹配以这种方式工作
[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 中选择命令,因为它存在于上下文中。如果您使用通配符,则相同。
调用时,将从上下文 2 中选择 2,第一个包含上下文 当调用任何其他号码(例如 3)时,将在上下文 3 中选择“其他”(因为它未出现在上下文中,也未出现在先前包含的上下文中)
如果调用的 12 不存在于任何上下文中,将执行“无效”扩展
关于include - 如何正确使用 Asterisk 包含语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29619049/