如何正确使用星号包含语句?
How to use asterisk Include statement the right way?
我是 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"当用户在网络图形用户界面。所以我必须在另一个名为 extensions_custom.conf
[=18 的文件上编写自己的上下文 "app-calltrace-perform-custom" =]
[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 已经包含在 extensions.conf
然后我 dialplan reload
再试一次,但是拨号规则根本不播放我的上下文(不冗长,不播放 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
从
调用的地方
[app-calltrace]
include => app-calltrace-custom
exten => *69,1,Goto(app-calltrace-perform,s,1)
现在我正在使用在上下文 app-calltrace-custom
中定义的另一个扩展 (*12345),它运行良好但是是硬编码的,因此不能被 Web Gui 修改
结束编辑
提前致谢
来党
为了让拨号方案知道使用它,您需要在包含的上下文中有一些与众不同的东西。由于您在两者中都使用了 s
扩展名,因此它首先在当前上下文中使用匹配的扩展名。正如您在文档中找到的那样。
s
分机是 "start" 分机,在没有已知的已拨分机时使用。
首先,仔细检查您的文件包含在 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()
结束每个包含的上下文被认为是一种很好的做法(干得好)。以防止可能的错误导致盗用话费。只是想为将来的 Whosebugers 注意这一点。
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 context
当调用任何其他号码(例如 3)时,将在上下文 3 中选择 "other"(因为它没有出现在上下文中,也没有出现在之前包含的上下文中)
如果调用的 12 不存在于任何上下文中,将执行 "invalid" extension
我是 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"当用户在网络图形用户界面。所以我必须在另一个名为 extensions_custom.conf
[=18 的文件上编写自己的上下文 "app-calltrace-perform-custom" =]
[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 已经包含在 extensions.conf
然后我 dialplan reload
再试一次,但是拨号规则根本不播放我的上下文(不冗长,不播放 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
从
[app-calltrace]
include => app-calltrace-custom
exten => *69,1,Goto(app-calltrace-perform,s,1)
现在我正在使用在上下文 app-calltrace-custom
中定义的另一个扩展 (*12345),它运行良好但是是硬编码的,因此不能被 Web Gui 修改
结束编辑
提前致谢
来党
为了让拨号方案知道使用它,您需要在包含的上下文中有一些与众不同的东西。由于您在两者中都使用了 s
扩展名,因此它首先在当前上下文中使用匹配的扩展名。正如您在文档中找到的那样。
s
分机是 "start" 分机,在没有已知的已拨分机时使用。
首先,仔细检查您的文件包含在 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()
结束每个包含的上下文被认为是一种很好的做法(干得好)。以防止可能的错误导致盗用话费。只是想为将来的 Whosebugers 注意这一点。
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 context 当调用任何其他号码(例如 3)时,将在上下文 3 中选择 "other"(因为它没有出现在上下文中,也没有出现在之前包含的上下文中)
如果调用的 12 不存在于任何上下文中,将执行 "invalid" extension