2012-01-25 2 views
0

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

[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 @ тест: 19] Подробный («DAHDI/13-1», «1», «User keyed in 1» ») в новом стеке «User keyed in 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. Как исправить это, чтобы он работал?

ответ

0

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

Смежные вопросы