Вход | Регистрация
Вы здесь: Главная / Форум / Главный форум по Asterisk / Конфигурация и настройка / 'i' invalid в Macro

'i' invalid в Macro

asterisk-1.6
Сообщений: 14

'i' invalid в Macro

Рисую макрос для IVR, ибо слишком много каналов входящих:
[ Context 'macro-hello' created by 'pbx_config' ]

's' => 1. Answer() [pbx_config]
2. Wait(1) [pbx_config]
3. Read(RESPONSE,dial-exten-tone&vm-reachoper,3,,,10) [pbx_config]
4. Goto(s-${RESPONSE:0:1},1) [pbx_config]
5. Verbose(${GOSUB_RESULT}) [pbx_config]
6. Macro(dahdilg,226) [pbx_config]
's-2' => 1. Macro(dahdilg,${RESPONSE}) [pbx_config]

[ Context 'testing' created by 'pbx_config' ]
'500' => 1. Macro(hello) [pbx_config]
'i' => 1. Answer() [pbx_config]
2. Playback(pbx-invalid) [pbx_config]


Хочу получить обработку неверно введённого номера, к примеру, начинающегося на 5 в макросе hello. К сожалению, экстеншн 'i' в этом макросе не обрабатывается:
[ Context 'macro-hello' created by 'pbx_config' ]

'i' => 1. Answer() [pbx_config]
2. Playback(pbx-invalid) [pbx_config]
's' => 1. Answer() [pbx_config]
2. Wait(1) [pbx_config]
3. Read(RESPONSE,dial-exten-tone&vm-reachoper,3,,,10) [pbx_config]
4. Goto(s-${RESPONSE:0:1},1) [pbx_config]
5. Verbose(${GOSUB_RESULT}) [pbx_config]
6. Macro(dahdilg,226) [pbx_config]
's-2' => 1. Macro(dahdilg,${RESPONSE}) [pbx_config]


с сообщением:
[Oct 11 16:16:28]     -- Goto (macro-hello,s-5,1)

[Oct 11 16:16:28] -- Auto fallthrough, channel 'SIP/102-0000002a' status is 'UNKNOWN'


Прочитав про invalid extension, я понял, что просто так нельзя получить доступ к этому экстеншну.

Тогда я обратил своё внимание на команду Gosub. Из описания:
Jump to a particular priority, extension, or context, saving the return address.
Т.е., если я правильно понимаю, сия команда прыгает по адресу, а потом, возвращается назад. При этом
Return Codes
Returns 0, or -1 if the given context, extension, or priority is invalid.
1.6 if return is called with a value it is stored in ${GOSUB_RETVAL}
, т.е. если не найдётся экстеншн s-${RESPONSE:0:1}, то после входа в эту команду, мы должны как-то получить 0 или -1. Смотрим:
[ Context 'macro-hello' created by 'pbx_config' ]

's' => 1. Answer() [pbx_config]
2. Wait(1) [pbx_config]
3. Read(RESPONSE,dial-exten-tone&vm-reachoper,3,,,10) [pbx_config]
4. Gosub(s-${RESPONSE:0:1},1) [pbx_config]
5. Verbose(${GOSUB_RESULT}) [pbx_config]
6. Macro(dahdilg,226) [pbx_config]
's-2' => 1. Macro(dahdilg,${RESPONSE}) [pbx_config]
и пытаемся позвонить:
[Oct 11 16:26:23]     -- Executing [s@macro-hello:4] Gosub("SIP/102-0000002b", "s-5,1") in new stack

[Oct 11 16:26:23] ERROR[866]: app_stack.c:402 gosub_exec: Attempt to reach a non-existent destination for gosub: (Context:macro-hello, Extension:s-5, Priority:1)
на этом выполнение команды прерывается. Т.о. не только не наблюдается возврат в точку 5. экстеншна 's', но и непонятно, как вообще получить этот самый код возврата.

В чём моя ошибка?
2010-10-11 16:28

Сообщений: 14

Re: 'i' invalid в Macro

Хотя, отбой.

Решил диалплан для IVR вынести в отдельный контекст и переходить в него при необходимости по goto.
2010-10-11 17:58

Добавить страницу в закладки:  Delicious Google Slashdot Yahoo Yandex.ru Reddit Digg Technorati Bobrdobr.ru Newsland.ru Smi2.ru Rumarkz.ru Vaau.ru Memori.ru Rucity.com Moemesto.ru News2.ru Mister-Wong.ru Myscoop.ru 100zakladok.ru