AF
Asterisk Forum
обсуждения телефонии, VoIP и IP-PBX
12разделов
5 423тем
34 385сообщений
← К списку тем

Перевод звонка в h context

Newbies/FAQ Forum 2 сообщений -
#1

Перевод звонка в h context


У меня asterisk 11.6.0 и есть проблема со сбросом звонка. То есть я делаю исходящий звонок, кладу трубку до того, как вызываемый абонент её подымет и ожидаю что у меня продолжится выполнение макроса, но эта штука не происходит. Вот так я делаю dial:
exten = s,n,Dial(${TRUNK}/${OUTPREFIX}${CALLNUMBER},,gTWFM(SetAnswerTime^${UNIQUEIDOUT})) Я уповал на опцию F, но как оказалось она влияет лишь на тот сценарий, когда вызываемый абонент кладёт трубку. Так например на asterisk 1.4.42 я делаю dial вот так:
exten = s,n,Dial(${TRUNK}/${OUTPREFIX}${CALLNUMBER}${TRUNKOPTIONS},,gTWM(SetAnswerTime^${UNIQUEIDOUT})) и тут всё отрабатывает корректно. И там и там dialstatus я обрабатываю одинаково. А всё я это затеял ради cdr, так как в моей текущей реализации некорректно отрабатывает mixmonitor, соответственно такие звонки в базу не попадают .
Так же отмечу, что такие вызовы я обрабатываю h контекстом вот так:
exten = exit,1,TryExec(Hangup)
exten = exit,n,TryExec(AGI(/management/bin/Asterisk_bin/change_cdr_records.agi.php,noonce))
exten = exit,n,TryExec(MacroExit)
У меня было предположение, что всё таки это не hangup Звонки и под это дело я написал следующую заглушку, но и она не помогает.
exten = s-BUSY,1,Playtones(busy)
exten = s-BUSY,n,StopMixMonitor
exten = s-BUSY,n,TryExec(AGI(/management/bin/Asterisk_bin/change_cdr_records.agi.php,noonce))
exten = s-BUSY,n,Busy(3)
exten = s-BUSY,n,HangUp
exten = s-BUSY,n,Goto(exit,1)
;
exten = s-ISNULLTRUNK,1,Playtones(congestion)
exten = s-ISNULLTRUNK,n,StopMixMonitor
exten = s-ISNULLTRUNK,n,TryExec(AGI(/management/bin/Asterisk_bin/change_cdr_records.agi.php,noonce))
exten = s-ISNULLTRUNK,n,Congestion(3)
exten = s-ISNULLTRUNK,n,HangUp
exten = s-ISNULLTRUNK,n,Goto(exit,1)
;
exten = s-CONGESTION,1,StopMixMonitor
exten = s-CONGESTION,n,TryExec(AGI(/management/bin/Asterisk_bin/change_cdr_records.agi.php,noonce))
exten = s-CONGESTION,n,Congestion(3)
exten = s-CONGESTION,n,HangUp
exten = s-CONGESTION,n,Goto(exit,1)
;
exten = _s-.,1,Goto(s-CONGESTION,1) ;Treat anything else as no answer
;
exten = h,1,NoOp(Drop calls. DialStatus is ${DIALSTATUS})
exten = h,n,GotoIf($[${DIALEND}="1"]?exit,1)
exten = h,n,Set(CLIENTDROPCALL=1)
exten = h,n,Set(DIALSTATUS=${IF($["${DIALSTATUS}"=""]?NOANSWER:${DIALSTATUS})})
exten = h,n,Goto(s,AfterDial)

Повторно акцентирую Ваше внимание на том, что если звонок отбивается на стороне вызываемого абонента, то звонок попадает в h, если же его отбивает звонящий, то макрос завершается. Так же напомню, что в 1.4 с тем же самым макросом(ну разумеется синтаксис от 1.4) всё работает корректно и тот вызов, что отбивается на стороне звонящего попадает в h.