如何正确使用星号Include语句



我是星号的新手,在使用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.confextenitions_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指出这一点。

相关内容

  • 没有找到相关文章

最新更新