Ошибка при использовании GotoIf в диалплане

Я пытаюсь реализовать сложный диалплан, требующий взаимодействия с пользователем. На основе этого взаимодействия диалплан переходит к другой части. Пример кода приведен ниже:

[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, "Пользователь ввел 1"") в новом стеке "Пользователь ввел 1" -- Выполняется [0@test:20] GotoIf("DAHDI/13-1", "1?eval1:qa1") в новом стеке -- Goto (test,0,21) -- Выполнение [0@test:21] NoOp( "DAHDI/13-1", "") в новом стеке [25 января 10:47:48] ПРЕДУПРЕЖДЕНИЕ [29738]: pbx.c:3677 pbx_extension_helper: Нет приложения "Если" для расширения (тест, 0, 22)

Мои вопросы:

  1. Что означает это сообщение об ошибке?
  2. Как исправить, чтобы работало?

person Sriram    schedule 25.01.2012    source источник


Ответы (1)


GotoIf вызывается правильно. За меткой eval1 следует If операторов. В Asterisk нет операторов If. Замена операторов If на ExecIf помогла. Можно выяснить, какие команды доступны, введя в командной строке Asterisk CLI следующую команду:
core show application <command name here>
Если указанная выше команда возвращает вывод, то эта команда доступна, в противном случае — нет.

person Sriram    schedule 25.01.2012