Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

История изменений [назад]

нажмите, чтобы скрыть/показать версии 1
изначальная версия
редактировать

спросил 2017-02-01 14:31:58 +0400

den-p Gravatar den-p

Macro-stdexten и переадресация

Всем привет!

Использую стандартный макрос stdexten, но есть проблема при трансферах вызова:
1) Приходит звонок из PSTN и попадает на абонента А через макрос
2) Абонент А делает трансфер на абонента В (вызов также уходит через макрос)
3) Абонент В не поднимает трубку 4) Через 20 секунд вызов попадает в войсмейл абонента А, хотя по логике должен попасть в ящик В

Как я понимаю, тут происходит вложение макросов и когда абонент А выпадает из разговора, то что-то происходит с макросом абонента В.
Видимо, Goto(s-${DIALSTATUS},1) перебрасывает во внешний макрос....

Кто-то может уже решал подобную задачу?

[macro-stdexten]
exten => s,1,Dial(${ARG2},20)
exten => s,2,Goto(s-${DIALSTATUS},1)

exten => s-NOANSWER,1,Voicemail(u${ARG1})

Macro-stdexten и переадресация

Всем привет!

Использую стандартный макрос stdexten, но есть проблема при трансферах вызова:
1) Приходит звонок из PSTN и попадает на абонента А через макрос
2) Абонент А делает трансфер на абонента В (вызов также уходит через макрос)
3) Абонент В не поднимает трубку трубку
4) Через 20 секунд вызов попадает в войсмейл абонента А, хотя по логике должен попасть в ящик ВВ

Как я понимаю, тут происходит вложение макросов и когда абонент А выпадает из разговора, то что-то происходит с макросом абонента В.
Видимо, Goto(s-${DIALSTATUS},1) перебрасывает во внешний макрос....

Кто-то может уже решал подобную задачу?

[macro-stdexten]
exten => s,1,Dial(${ARG2},20)
exten => s,2,Goto(s-${DIALSTATUS},1)

exten => s-NOANSWER,1,Voicemail(u${ARG1})

Macro-stdexten и переадресация

Всем привет!

Использую стандартный макрос stdexten, но есть проблема при трансферах вызова:
1) Приходит звонок из PSTN и попадает на абонента А через макрос
2) Абонент А делает трансфер на абонента В (вызов также уходит через макрос)
3) Абонент В не поднимает трубку
4) Через 20 секунд вызов попадает в войсмейл абонента А, хотя по логике должен попасть в ящик В

Как я понимаю, тут происходит вложение макросов и когда абонент А выпадает из разговора, то что-то происходит с макросом абонента В.
Видимо, Goto(s-${DIALSTATUS},1) перебрасывает во внешний макрос....

Кто-то может уже решал подобную задачу?

[macro-stdexten]
exten => s,1,Dial(${ARG2},20)
exten => s,2,Goto(s-${DIALSTATUS},1)

exten => s-NOANSWER,1,Voicemail(u${ARG1})

Дополнение:

1) Модифицировал Макрос:

exten => s,1,NoOp(~~~~~MACRO~~~~~~~)
same => n,NoOp(MACROCONTEXT=${MACROCONTEXT})
same => n,NoOp( ARG1=${ARG1})
same => n,NoOp( ARG2=${ARG2})
same => n,Dial(${ARG2},20,r)

same => n,NoOp(~~~~~AFTER DIAL~~~~~~~)
same => n,NoOp( ARG1=${ARG1})
same => n,NoOp( ARG2=${ARG2})
same => n,Goto(call-${DIALSTATUS})

same => n(call-NOANSWER),NoOp(~~~~~NOANSWER~~~~~~~)
same => n,NoOp(MACROCONTEXT=${MACROCONTEXT})
same => n,NoOp( ARG1=${ARG1})
same => n,NoOp( ARG2=${ARG2})
same => n,Voicemail(${ARG1},u)
same => n,HangUp()

2) PSTN: 2385, A: 9991, B: 9992

Что интересно, после того как В не поднял трубку ( Dial(${ARG2},20,r) ), то вызов вернулся в родительский макрос ( и переменные стали ARG1=9991@NWFH и ARG2=SIP/9991 )

-- Nobody picked up in 20000 ms
-- Executing [s@macro-stdexten:6] NoOp("SIP/SIPGWTEST-00000000", "~~~~~AFTER DIAL~~~~~~~") in new stack
-- Executing [s@macro-stdexten:7] NoOp("SIP/SIPGWTEST-00000000", " ARG1=9991@NWFH") in new stack
-- Executing [s@macro-stdexten:8] NoOp("SIP/SIPGWTEST-00000000", " ARG2=SIP/9991") in new stack

Весь лог:
-- Executing [2385@incoming:1] Answer("SIP/SIPGWTEST-00000000", "") in new stack
-- Executing [2385@incoming:2] Goto("SIP/SIPGWTEST-00000000", "NWFH-int,9991,1") in new stack
-- Goto (NWFH-int,9991,1)
-- Executing [9991@NWFH-int:1] Answer("SIP/SIPGWTEST-00000000", "") in new stack
-- Executing [9991@NWFH-int:2] Macro("SIP/SIPGWTEST-00000000", "stdexten,9991@NWFH,SIP/9991") in new stack
-- Executing [s@macro-stdexten:1] NoOp("SIP/SIPGWTEST-00000000", "~~~~~MACRO~~~~~~~") in new stack
-- Executing [s@macro-stdexten:2] NoOp("SIP/SIPGWTEST-00000000", "MACROCONTEXT=NWFH-int") in new stack
-- Executing [s@macro-stdexten:3] NoOp("SIP/SIPGWTEST-00000000", " ARG1=9991@NWFH") in new stack
-- Executing [s@macro-stdexten:4] NoOp("SIP/SIPGWTEST-00000000", " ARG2=SIP/9991") in new stack
-- Executing [s@macro-stdexten:5] Dial("SIP/SIPGWTEST-00000000", "SIP/9991,20,r") in new stack
== Using SIP RTP CoS mark 5
-- Called SIP/9991
-- SIP/9991-00000001 is ringing
-- SIP/9991-00000001 answered SIP/SIPGWTEST-00000000
-- Started music on hold, class 'default', on channel 'SIP/SIPGWTEST-00000000'
-- Executing [9992@NWFH-int:1] Answer("SIP/9991-00000002", "") in new stack
-- Executing [9992@NWFH-int:2] Macro("SIP/9991-00000002", "stdexten,9992@NWFH,SIP/9992") in new stack
-- Executing [s@macro-stdexten:1] NoOp("SIP/9991-00000002", "~~~~~MACRO~~~~~~~") in new stack
-- Executing [s@macro-stdexten:2] NoOp("SIP/9991-00000002", "MACRO
CONTEXT=NWFH-int") in new stack
-- Executing [s@macro-stdexten:3] NoOp("SIP/9991-00000002", " ARG1=9992@NWFH") in new stack
-- Executing [s@macro-stdexten:4] NoOp("SIP/9991-00000002", " ARG2=SIP/9992") in new stack
-- Executing [s@macro-stdexten:5] Dial("SIP/9991-00000002", "SIP/9992,20,r") in new stack
-- Called SIP/9992
-- SIP/9992-00000003 is ringing

Locally RTP bridged 'SIP/SIPGWTEST-00000000' and 'SIP/9991-00000001' in stack
-- Stopped music on hold on SIP/SIPGWTEST-00000000
== Spawn extension (macro-stdexten, s, 5) exited non-zero on 'SIP/9991-00000002' in macro 'stdexten'
== Spawn extension (NWFH-int, 9991, 2) exited non-zero on 'SIP/9991-00000002'
-- Nobody picked up in 20000 ms
-- Executing [s@macro-stdexten:6] NoOp("SIP/SIPGWTEST-00000000", "~~~~~AFTER DIAL~~~~~~~") in new stack
-- Executing [s@macro-stdexten:7] NoOp("SIP/SIPGWTEST-00000000", " ARG1=9991@NWFH") in new stack
-- Executing [s@macro-stdexten:8] NoOp("SIP/SIPGWTEST-00000000", " ARG2=SIP/9991") in new stack
-- Executing [s@macro-stdexten:9] Goto("SIP/SIPGWTEST-00000000", "call-NOANSWER") in new stack
-- Goto (macro-stdexten,s,10)
-- Executing [s@macro-stdexten:10] NoOp("SIP/SIPGWTEST-00000000", "~~~~~NOANSWER~~~~~~~") in new stack
-- Executing [s@macro-stdexten:11] NoOp("SIP/SIPGWTEST-00000000", "MACRO_CONTEXT=NWFH-int") in new stack
-- Executing [s@macro-stdexten:12] NoOp("SIP/SIPGWTEST-00000000", " ARG1=9991@NWFH") in new stack
-- Executing [s@macro-stdexten:13] NoOp("SIP/SIPGWTEST-00000000", " ARG2=SIP/9991") in new stack
-- Executing [s@macro-stdexten:14] VoiceMail("SIP/SIPGWTEST-00000000", "9991@NWFH,u") in new stack

Macro-stdexten и переадресация

Всем привет!

Использую стандартный макрос stdexten, но есть проблема при трансферах вызова:
1) Приходит звонок из PSTN и попадает на абонента А через макрос
2) Абонент А делает трансфер на абонента В (вызов также уходит через макрос)
3) Абонент В не поднимает трубку
4) Через 20 секунд вызов попадает в войсмейл абонента А, хотя по логике должен попасть в ящик В

Как я понимаю, тут происходит вложение макросов и когда абонент А выпадает из разговора, то что-то происходит с макросом абонента В.
Видимо, Goto(s-${DIALSTATUS},1) перебрасывает во внешний макрос....

Кто-то может уже решал подобную задачу?

[macro-stdexten]
exten => s,1,Dial(${ARG2},20)
exten => s,2,Goto(s-${DIALSTATUS},1)

exten => s-NOANSWER,1,Voicemail(u${ARG1})

Дополнение:

1) Модифицировал Макрос:

exten => s,1,NoOp(~~~~~MACRO~~~~~~~)
same => n,NoOp(MACROCONTEXT=${MACROCONTEXT})
same => n,NoOp( ARG1=${ARG1})
same => n,NoOp( ARG2=${ARG2})
same => n,Dial(${ARG2},20,r)

same => n,NoOp(~~~~~AFTER DIAL~~~~~~~)
same => n,NoOp( ARG1=${ARG1})
same => n,NoOp( ARG2=${ARG2})
same => n,Goto(call-${DIALSTATUS})

same => n(call-NOANSWER),NoOp(~~~~~NOANSWER~~~~~~~)
same => n,NoOp(MACROCONTEXT=${MACROCONTEXT})
same => n,NoOp( ARG1=${ARG1})
same => n,NoOp( ARG2=${ARG2})
same => n,Voicemail(${ARG1},u)
same => n,HangUp()

Фрагмент дайлплана:

exten => 9991,1,Answer()
same = n,Macro(stdexten,9991@NWFH,SIP/9991)

Также и для 9992

2) PSTN: 2385, A: 9991, B: 9992

Что интересно, после того как В не поднял трубку ( Dial(${ARG2},20,r) ), то вызов вернулся в родительский макрос ( и переменные стали ARG1=9991@NWFH и ARG2=SIP/9991 )

-- Nobody picked up in 20000 ms
-- Executing [s@macro-stdexten:6] NoOp("SIP/SIPGWTEST-00000000", "~~~~~AFTER DIAL~~~~~~~") in new stack
-- Executing [s@macro-stdexten:7] NoOp("SIP/SIPGWTEST-00000000", " ARG1=9991@NWFH") in new stack
-- Executing [s@macro-stdexten:8] NoOp("SIP/SIPGWTEST-00000000", " ARG2=SIP/9991") in new stack

Весь лог:
-- Executing [2385@incoming:1] Answer("SIP/SIPGWTEST-00000000", "") in new stack
-- Executing [2385@incoming:2] Goto("SIP/SIPGWTEST-00000000", "NWFH-int,9991,1") in new stack
-- Goto (NWFH-int,9991,1)
-- Executing [9991@NWFH-int:1] Answer("SIP/SIPGWTEST-00000000", "") in new stack
-- Executing [9991@NWFH-int:2] Macro("SIP/SIPGWTEST-00000000", "stdexten,9991@NWFH,SIP/9991") in new stack
-- Executing [s@macro-stdexten:1] NoOp("SIP/SIPGWTEST-00000000", "~~~~~MACRO~~~~~~~") in new stack
-- Executing [s@macro-stdexten:2] NoOp("SIP/SIPGWTEST-00000000", "MACROCONTEXT=NWFH-int") in new stack
-- Executing [s@macro-stdexten:3] NoOp("SIP/SIPGWTEST-00000000", " ARG1=9991@NWFH") in new stack
-- Executing [s@macro-stdexten:4] NoOp("SIP/SIPGWTEST-00000000", " ARG2=SIP/9991") in new stack
-- Executing [s@macro-stdexten:5] Dial("SIP/SIPGWTEST-00000000", "SIP/9991,20,r") in new stack
== Using SIP RTP CoS mark 5
-- Called SIP/9991
-- SIP/9991-00000001 is ringing
-- SIP/9991-00000001 answered SIP/SIPGWTEST-00000000
-- Started music on hold, class 'default', on channel 'SIP/SIPGWTEST-00000000'
-- Executing [9992@NWFH-int:1] Answer("SIP/9991-00000002", "") in new stack
-- Executing [9992@NWFH-int:2] Macro("SIP/9991-00000002", "stdexten,9992@NWFH,SIP/9992") in new stack
-- Executing [s@macro-stdexten:1] NoOp("SIP/9991-00000002", "~~~~~MACRO~~~~~~~") in new stack
-- Executing [s@macro-stdexten:2] NoOp("SIP/9991-00000002", "MACRO
CONTEXT=NWFH-int") in new stack
-- Executing [s@macro-stdexten:3] NoOp("SIP/9991-00000002", " ARG1=9992@NWFH") in new stack
-- Executing [s@macro-stdexten:4] NoOp("SIP/9991-00000002", " ARG2=SIP/9992") in new stack
-- Executing [s@macro-stdexten:5] Dial("SIP/9991-00000002", "SIP/9992,20,r") in new stack
-- Called SIP/9992
-- SIP/9992-00000003 is ringing

Locally RTP bridged 'SIP/SIPGWTEST-00000000' and 'SIP/9991-00000001' in stack
-- Stopped music on hold on SIP/SIPGWTEST-00000000
== Spawn extension (macro-stdexten, s, 5) exited non-zero on 'SIP/9991-00000002' in macro 'stdexten'
== Spawn extension (NWFH-int, 9991, 2) exited non-zero on 'SIP/9991-00000002'
-- Nobody picked up in 20000 ms
-- Executing [s@macro-stdexten:6] NoOp("SIP/SIPGWTEST-00000000", "~~~~~AFTER DIAL~~~~~~~") in new stack
-- Executing [s@macro-stdexten:7] NoOp("SIP/SIPGWTEST-00000000", " ARG1=9991@NWFH") in new stack
-- Executing [s@macro-stdexten:8] NoOp("SIP/SIPGWTEST-00000000", " ARG2=SIP/9991") in new stack
-- Executing [s@macro-stdexten:9] Goto("SIP/SIPGWTEST-00000000", "call-NOANSWER") in new stack
-- Goto (macro-stdexten,s,10)
-- Executing [s@macro-stdexten:10] NoOp("SIP/SIPGWTEST-00000000", "~~~~~NOANSWER~~~~~~~") in new stack
-- Executing [s@macro-stdexten:11] NoOp("SIP/SIPGWTEST-00000000", "MACRO_CONTEXT=NWFH-int") in new stack
-- Executing [s@macro-stdexten:12] NoOp("SIP/SIPGWTEST-00000000", " ARG1=9991@NWFH") in new stack
-- Executing [s@macro-stdexten:13] NoOp("SIP/SIPGWTEST-00000000", " ARG2=SIP/9991") in new stack
-- Executing [s@macro-stdexten:14] VoiceMail("SIP/SIPGWTEST-00000000", "9991@NWFH,u") in new stack

Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией GNU GPL.