VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

Возвраты из макросов.

Новичком считается только что прочитавший «Астериск - будущее телефонии»
http://asterisk.ru/knowledgebase/books
и пытающийся сделать большее

Модераторы: april22, Zavr2008

Ответить
rioakaanhell
Сообщения: 16
Зарегистрирован: 26 мар 2014, 17:35

Возвраты из макросов.

Сообщение 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ХХ с третьей строки!
Почему? Это нормально? Разве * не должен был завершить этот звонок?
Почему он вернулся из макроса в другой екстеншн?
ded
Сообщения: 15628
Зарегистрирован: 26 авг 2010, 19:00

Re: Возвраты из макросов.

Сообщение ded »

Очень рекомендую почитать книжку про будущее телефонии. Ваши вопросы выдают Ваш безграмотный подход.
Примерно как "смотрю на алфавит, после буквы П идё Р, С, Т, разве это правильно?"
Без обид?
rioakaanhell
Сообщения: 16
Зарегистрирован: 26 мар 2014, 17:35

Re: Возвраты из макросов.

Сообщение rioakaanhell »

Подскажите в чем.

Это кстати не выход из Макроса. Оно продолжает выполнение екстеншена 100, но уже из _1ХХ.
Почему?
у него же есть жестко описаное поведение для екстеншена 100, в котором описано что делать, описание закончилось.
В моем понимании должен быть -- Auto fallthrough, channel блабла
ded
Сообщения: 15628
Зарегистрирован: 26 авг 2010, 19:00

Re: Возвраты из макросов.

Сообщение 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)

то возврата на третий шаг тоже не будет.
rioakaanhell
Сообщения: 16
Зарегистрирован: 26 мар 2014, 17:35

Re: Возвраты из макросов.

Сообщение 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

Разве оно не должно было завершить звонок автоматом ибо больше нечего?
ded
Сообщения: 15628
Зарегистрирован: 26 авг 2010, 19:00

Re: Возвраты из макросов.

Сообщение ded »

Нет не должно. Смотрите по другому: при возврате откуда угодно в текущий контекст надо себе задавать вопрос; а как выполнится диалплан 313@ext-local в этом текущем контексте для шага N? и увидим, что выполнение шага №5 для 313@ext-local вполне попадает под шаблон _[1234568]XX
И Вы можете это проверить
CLI> dialplan show 313@ext-local
rioakaanhell
Сообщения: 16
Зарегистрирован: 26 мар 2014, 17:35

Re: Возвраты из макросов.

Сообщение rioakaanhell »

Да, действительно.

Вы поменяли мое мировозрение :))

За 5 лет работы с * с такой проблемой не сталкивался...

Спасибо Вам :)
Ответить
© 2008 — 2025 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH