【问题标题】:Error using GotoIf in a dialplan在拨号方案中使用 GotoIf 时出错
【发布时间】:2012-01-25 16:00:13
【问题描述】:

我正在尝试实现一个需要与用户交互的复杂拨号方案。基于这种交互,拨号方案跳转到另一部分。部分示例代码如下:

[test]
;This is a test.

exten => 0,n(qa1),NoOp()
exten => 0,1,Verbose(1, "This is a test")
exten => 0,n,Set(USER_ANSWER=0)
exten => 0,n,Read(USER_ANSWER,,1,,2,10)
exten => 0,n,Verbose(1, "User keyed in ${USER_ANSWER}")

exten => 0,n,GotoIf($[$["${USER_ANSWER}"="1"] | $["${USER_ANSWER}"="2"]]?eval1:qa1)
exten => 0,n,Verbose(1, "User keyed in ${USER_ANSWER}")

exten => 0,n(eval),NoOp()
...
  1. 在运行上述代码时,星号在评估上述GotoIf 条件后挂断。错误信息如下:

    -- 用户输入 '1' -- 在新堆栈中执行 [0@test:19] Verbose("DAHDI/13-1", "1, "User keyed in 1"") “用户键入 1” -- 在新堆栈中执行 [0@test:20] GotoIf("DAHDI/13-1", "1?eval1:qa1") -- 转到 (test,0,21) -- 在新堆栈中执行 [0@test:21] NoOp("DAHDI/13-1", "") [Jan 25 10:47:48] WARNING[29738]: pbx.c:3677 pbx_extension_helper: No application 'If' for extension (test, 0, 22)

我的问题是:

  1. 该错误消息是什么意思?
  2. 如何更正它以使其正常工作?

【问题讨论】:

    标签: asterisk telephony goto


    【解决方案1】:

    GotoIf 被正确调用。标签 eval1 后面有 If 语句。 Asterisk 没有If 语句。用ExecIf 替换If 语句就可以了。可以通过在 Asterisk CLI 提示符下键入以下命令来找出可用的命令:
    core show application <command name here>
    如果上述命令返回输出,则该命令可用,否则不可用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多