我正在尝试实现一个需要与用户交互的复杂拨号计划。基于这种交互,拨号计划跳转到另一个部分。下面给出了一些示例代码:
[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()
...
在运行上面的代码时,星号在评估上面的
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")--转到(测试,0,21)--在新堆栈中执行[0@test:21]NoOp("DAHDI/13-1",")[1月25日10:47:48]警告[29738]:pbx.c:33677 pbx_extension_helper:没有用于扩展(测试,0,22)的应用程序"If"
我的问题是:
- 这个错误信息是什么意思
- 我如何纠正它,使其工作
GotoIf
。标签eval1
后面有If
语句。Asterisk没有If
语句。用ExecIf
替换If
语句就成功了。可以通过在Asterisk CLI提示符下键入以下命令来确定哪些命令可用:core show application <command name here>
如果上面的命令返回输出,则该命令可用,否则不可用。