Страница 1 из 1
Возвраты из макросов.
Добавлено: 26 мар 2014, 17:46
rioakaanhell
Заметил сегодня интересную штуковину при использовании Макросов.
Есть * 11.2
Есть контекст например [local]
в нем описано два екстеншена:
exten => _1XX,1,NoOp()
same => n,blabla
same => n,blabla
same => n.blabla
exten => 100,1,NoOp()
same => n,Macro(blabla)
В макросе и в естеншена хангапов в конце нет ибо часто они не нужны по диалплану, да и * сам хорошо сбрасывает вызовы у которых закончился диалплан.
вызываю 100 екстеншн таким образом: Dial(Local/100@local,XxTtr)
Собственно звонок заходит в local, находит екстеншн 100, делает NoOp(), выполняет макрос, выходит из макроса и! начинает выполнять екстеншн _1ХХ с третьей строки!
Почему? Это нормально? Разве * не должен был завершить этот звонок?
Почему он вернулся из макроса в другой екстеншн?
Re: Возвраты из макросов.
Добавлено: 26 мар 2014, 18:04
ded
Очень рекомендую почитать книжку про будущее телефонии. Ваши вопросы выдают Ваш безграмотный подход.
Примерно как "смотрю на алфавит, после буквы П идё Р, С, Т, разве это правильно?"
Без обид?
Re: Возвраты из макросов.
Добавлено: 26 мар 2014, 18:11
rioakaanhell
Подскажите в чем.
Это кстати не выход из Макроса. Оно продолжает выполнение екстеншена 100, но уже из _1ХХ.
Почему?
у него же есть жестко описаное поведение для екстеншена 100, в котором описано что делать, описание закончилось.
В моем понимании должен быть -- Auto fallthrough, channel блабла
Re: Возвраты из макросов.
Добавлено: 26 мар 2014, 18:14
ded
Используйте Gosub тогда не будет такого поведения.
И если описано два екстеншена в РАЗНЫХ контекстах:
[contex1]
exten => _1XX,1,NoOp()
same => n,blabla
same => n,blabla
same => n.blabla
[context2]
exten => 100,1,NoOp()
same => n,Macro(blabla)
то возврата на третий шаг тоже не будет.
Re: Возвраты из макросов.
Добавлено: 26 мар 2014, 18:28
rioakaanhell
Проблема не в макросах, приношу свои извинения.
Давайте перейдем к реальным конфигам.
есть:
[ext-local]
exten => _[123458]XX,1,NoOp()
same => n,Macro(mixmon)
same => n,NoOp(OMG 0_o)
same => n,NoOp(Call is From IVR?? -- ${CALLFROMIVR})
same => n,Set(__INDOOR=${IF($[LEN(${CALLERID(num)})=3]?yes:no)}) <=== ПЯТАЯ СТРОКА!
same => n,Set(DIALTIMEOUT=${IF(${DB_EXISTS(mobtimeouts/${EXTEN})}?${DB(mobtimeouts/${EXTEN})}:20)})
same => n,NoOp(Context is ${CONTEXT})
same => n(continue),Dial(SIP/${EXTEN},${DIALTIMEOUT},XxTtr)
same => блаблаблабла
exten => 313,1,NoOp()
same => n,Macro(блабла,арг)
same => n,Macro(dialstatus)
same => n,NoOp(End This Call) <== Тут их всего четыре.
Выхлоп в кли:
[Mar 26 18:00:23] -- Called Local/313@ext-local
[Mar 26 18:00:23] -- Executing [313@ext-local:1] NoOp("Local/313@ext-local-000036af;2", "") in new stack
[Mar 26 18:00:23] -- Executing [313@ext-local:2] Macro("Local/313@ext-local-000036af;2", "блабла,арг") in new stack
[Mar 26 18:00:23] -- Executing [s@macro-блабла:1] Verbose("Local/313@ext-local-000036af;2", " 20140326-180023 ---=== Call from бла to 313") in new stack
[Mar 26 18:00:23] 20140326-180023 ---=== Call from бла to 313
[Mar 26 18:00:23] -- Executing [s@macro-блабла:2] GotoIf("Local/313@ext-local-000036af;2", "1?callengineer") in new stack
ну и так далее в этом макросе.
Mar 26 18:00:25] -- Executing [s@macro-блабла:46] Verbose("Local/313@ext-local-000036af;2", " 20140326-180025) ---=== End Call To Engineer") in new stack
[Mar 26 18:00:25] 20140326-180025) ---=== End Call To Engineer
вышли из первого макроса и входим во второй:
[Mar 26 18:00:25] -- Executing [313@ext-local:3] Macro("Local/313@ext-local-000036af;2", "dialstatus") in new stack
[Mar 26 18:00:25] -- Executing [s@macro-dialstatus:1] Goto("Local/313@ext-local-000036af;2", "status-BUSY,1") in new stack
выполняем второй макрос и выхдим из него.
[Mar 26 18:00:28] -- Executing [status-BUSY@macro-dialstatus:8] NoOp("Local/313@ext-local-000036af;2", "End Dialstatus BUSY") in new stack
[Mar 26 18:00:28] -- Executing [313@ext-local:4] NoOp("Local/313@ext-local-000036af;2", "End This Call") in new stack <== последняя строка в описании екстеншена 313
И вот оно пошло выполнять диалплан из екстеншена exten => _[123458]XX с ПЯТОЙ строки!
[Mar 26 18:00:28] -- Executing [313@ext-local:5] Set("Local/313@ext-local-000036af;2", "__INDOOR=yes") in new stack
[Mar 26 18:00:28] -- Executing [313@ext-local:6] Set("Local/313@ext-local-000036af;2", "DIALTIMEOUT=20") in new stack
И далее пошло выполнение диалплана для exten => _[123458]XX
Разве оно не должно было завершить звонок автоматом ибо больше нечего?
Re: Возвраты из макросов.
Добавлено: 26 мар 2014, 18:43
ded
Нет не должно. Смотрите по другому: при возврате откуда угодно в текущий контекст надо себе задавать вопрос; а как выполнится диалплан 313@ext-local в этом текущем контексте для шага N? и увидим, что выполнение шага №5 для 313@ext-local вполне попадает под шаблон _[1234568]XX
И Вы можете это проверить
CLI> dialplan show 313@ext-local
Re: Возвраты из макросов.
Добавлено: 26 мар 2014, 18:50
rioakaanhell
Да, действительно.
Вы поменяли мое мировозрение
)
За 5 лет работы с * с такой проблемой не сталкивался...
Спасибо Вам