如何正确使用星号包含语句?

问题描述 投票:0回答:3

我是 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

的文件上编写自己的上下文“app-calltrace-perform-custom”

[应用程序调用跟踪执行自定义]
扩展 => s,1,Answer()
相同 => n,VERBOSE("这里有东西")
相同=> n,播放(hello-world)
相同 => n,挂断()

请注意,extensions_additional.confextensions_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 进行修改

结束编辑

提前致谢
雷登

include asterisk
3个回答
4
投票

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 且不存在于任何上下文中,将执行“无效”扩展


2
投票

您需要在所包含的上下文中具有区分性的东西,以便拨号计划知道使用它。由于您在两者中都使用了

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 指出这一点。


0
投票

说有人有:

[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] 中如何做到这一点?

© www.soinside.com 2019 - 2024. All rights reserved.