【问题标题】:How to use asterisk Include statement the right way?如何正确使用星号包含语句?
【发布时间】:2015-04-14 04:12:04
【问题描述】:

我是星号的新手,我在使用 include 语句时遇到了问题。

我有一个来自 FreePBX 的名为“app-calltrace-perform”的上下文,当人们按 *69 来跟踪他们的呼叫时使用。

[应用程序调用跟踪执行]
包括 => 应用程序调用跟踪执行自定义
exten => s,1,答案
...
exten => t,n,宏(hangupcall,)

extensions_additional.conf 中编写的“app-calltrace-perform”将在用户在 Web gui 上提交有关拨号方案的内容时被覆盖。所以我必须在另一个名为 extensions_custom.conf

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

[app-calltrace-perform-custom]
exten => s,1,Answer()
相同 => n,VERBOSE("这里有东西")
相同 => n,播放(hello-world)
相同 => n,Hangup()

请注意,extensions_additional.confextensions_custom.conf 已包含在 中extensions.conf

然后我 dialplan reload 再试一次,但拨号方案根本不播放我的上下文(不冗长,不播放 hello-world)。

我在https://wiki.asterisk.org/wiki/display/AST/Include+Statements+Basics 中发现了一些有用的东西

Asterisk 总是会首先尝试在当前上下文中找到匹配的扩展,并且只有在当前上下文中没有任何匹配的内容时才会跟随包含语句到新上下文。

所以现在我不知道如何将我的自定义上下文用于此类内容。对不起,如果这是一个愚蠢的问题,但如果你有任何想法,请指导我。

编辑
这是 app-calltrace-perform 调用的地方

[app-calltrace] include => app-calltrace-custom exten => *69,1,Goto(app-calltrace-perform,s,1)

现在我正在使用在上下文 app-calltrace-custom 中定义的另一个扩展名 (*12345),它运行良好,但经过硬编码,因此无法被 Web Gui 修改

结束编辑

提前致谢
来当

【问题讨论】:

    标签: include asterisk


    【解决方案1】:

    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 时,将从 context1 中选择命令,因为它在 context 中存在。如果您使用通配符,则相同。

    当调用 2 时会从 context2 中选择 2,第一个 included 上下文 当调用任何其他数字(例如 3)时,将在 context3 中选择“其他”(因为它既没有出现在上下文中,也没有出现在先前包含的上下文中)

    如果调用 12 且不存在于任何上下文中,将执行“无效”扩展

    【讨论】:

    • 包含在 freepbx 中只是从以前的版本中剩下的。如果你想改变它,你应该使用 extensions_ovverride_freepbx.conf 和 app-calltrace 上下文。否则只能添加一些东西。
    【解决方案2】:

    您需要在包含的上下文中具有可区分的内容,以便拨号计划知道使用它。由于您在两者中都使用了 s 扩展名,因此它首先在当前上下文中使用匹配的扩展名。正如您在文档中找到的那样。

    s 分机是“开始”分机,在没有已知的已拨分机时使用。

    首先,仔细检查您的文件包含在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() 结束每个包含的上下文被认为是一种很好的做法(干得好)。为了防止可能的错误导致收费欺诈。只是想为将来的 stackoverflowers 说明这一点。

    【讨论】:

    • 嗯,感谢您的回答,但我需要澄清一下,因为很遗憾,您的建议对我不起作用。当用户拨打 *69 时,他们会受到带有扩展名 s 的 app-calltrace-perform 的影响(请参阅我的问题编辑)因此将扩展名 *69 放在 app-calltrace-perform-custom 中根本没有意义。我现在在 app-calltrace-custom 中使用了另一个扩展 *12345,但它是硬编码的,不能被 GUI 修改
    • 有趣。也许这是一个freebpx的东西? ...我应该给出一个我知道星号但对 freepbx 不太熟悉的免责声明。很高兴你把它收紧了。
    猜你喜欢
    • 2022-07-05
    • 2014-12-13
    • 2020-09-04
    • 2022-06-13
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    • 2015-09-15
    • 1970-01-01
    相关资源
    最近更新 更多