Вот такой вот возник вопрос:
В описании Goto есть такие строки:
Собственно есть некий Макрос:If the location that is put into the channel information is bogus, and asterisk cannot
find that location in the dialplan,
then the execution engine will try to find and execute the code in the 'i' (invalid)
extension in the current context. If that does not exist, it will try to execute the
'h' extension. If either or neither the 'h' or 'i' extensions have been defined, the
channel is hung up, and the execution of instructions on the channel is terminated.
Код: Выделить всё
[macro-test]
exten => s,1,NoOp()
same => n,----[Назначаем переменные и всякое такое]----
same => n,Goto(ext-${MACRO_EXTEN},1)
same => n(backnoexist),NoOp()
same => n,Dial(SIP/${MACRO_EXTEN},${DIALTIMEOUT},XxTtr)
same => n(back),NoOp()
same => n, --- [тут тоже некий диалплан]---
same => n(end),NoOp()
exten => ext-123,1,NoOp()
same => n,Set(CDR(userfield)=test)
same => n,Dial(SIP/${MACRO_EXTEN},${DIALTIMEOUT},XxTtr)
same => n,Goto(s,back)
exten => i,1,NoOp()
same => n,Goto(s,backnoexist)
при наборе добавочного вызывается макрос, выполняется некий общий диалплан. Затем совершается переход на екстеншн, в котором может быть описан индивидуальный кусочек для определенного екстеншена и возвращется на определенную мету в екстеншене s.
По задумке, если нет описан индивидуальный кусочек, по после отработки goto, должен сработать екстенш i и вернуть обратно в диалплан как описано в нем. Но возврата не происходит, даже не пытается найти обработать екстеншн i, а сразу завершает звонок, т.е выходит из макроса.
Почему так? Свойства работы Goto не распространяются на макросы? Или там есть какие-то особенности?
П.С. Если набрать добавочный 123, то все отлично работает: переходит на ext-123 обрабатывает его, возвращается в s доделывает его, выходит из Макроса.
Если набрать, предположим 124, то переходит на ext-124, не находит его, не пытается найти i, а просто выходит из Макроса.
Спасибо.