我是 asterisk 的新手,我有一个关于使用 include 语句的问题。
我有一个来自 FreePBX 的名为“app-calltrace-perform”的上下文,当人们按 *69 来跟踪他们的呼叫时使用。
[应用程序调用跟踪执行]
包括 => app-calltrace-perform-custom
扩展 => s,1,答案
...
扩展 => t,n,宏(hangupcall,)
extensions_additional.conf中编写的“app-calltrace-perform”,当用户在 Web gui 上提交有关 dialplan 的内容时,该内容将被覆盖。所以我必须在另一个名为 extensions_custom.conf
[应用程序调用跟踪执行自定义]
扩展 => s,1,Answer()
相同 => n,VERBOSE("这里有东西")
相同=> n,播放(hello-world)
相同 => n,挂断()
请注意,extensions_additional.conf和extensions_custom.conf已包含在extensions.conf
然后我做
dialplan reload
并重试,但 dialplan 根本不播放我的上下文(没有详细信息,不播放 hello-world)。我在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)
现在我正在使用上下文中定义的另一个扩展(*12345)
app-calltrace-custom
,它运行良好,但是硬编码的,因此无法通过 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时会从context2中选择2,第一个included上下文 当调用任何其他号码(例如 3)时,将在上下文 3 中选择“其他”(因为它未出现在上下文中,也未出现在先前包含的上下文中)
如果调用 12 且不存在于任何上下文中,将执行“无效”扩展
您需要在所包含的上下文中具有区分性的东西,以便拨号计划知道使用它。由于您在两者中都使用了
s
扩展,因此它首先使用当前上下文中的匹配扩展。正如您在文档中找到的那样。
s
分机是“开始”分机,在没有已知的拨打分机时使用。
首先,仔细检查您的文件是否包含在
[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 指出这一点。
说有人有:
[ext-miscdests]
include => ext-miscdests-custom
exten => 5,1,Noop(MiscDest: [some destination])
exten => 5,n,Goto(from-internal,[some number],1)
并想挤进去作为第二步:
exten => 5,2,Log("NOTICE", "some notice")
在上下文 [ext-mistdests-custom] 中如何做到这一点?