Перевод звонка в h context
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.
https://wiki.asterisk.org/wiki/display/AST/Hangup+Handlers