Имеется Asterisk 11.25.1 и несколько sip-клиентов...
Суть задачи:
звонит абонент А - его ставим в ожидание (даем ему Ringing() и запускаем цикл отслеживания внешней команды), далее в другом куске диалплана делаем вызов абонента Б - если вызов успешный, даем команду сбриджевать абонентов. Перед бриджем аб.А проигрывается сообщение из файла и поднимается бридж...
Всё отрабатывает нормально, за исключением того, что по аб.А не ложится в базу CDR, а только по абоненту Б
Если вместо бриджа аб.Б вызвать с помощью dial - сидиэрка нормально ложится...
Кусок диалплана для аб.А
Код: Выделить всё
same => n(wi),NoOP(wait for ivr )
same => n,Wait(1)
same => n,Set(ARRAY(__bridge_calls,__channelb,__next_trunk,__rec_file)=${a_get_bridge_calls(${channela})})
same => n,NoOP( bridge_calls:${bridge_calls} channelb:${channelb} next_trunk:${next_trunk})
same => n,ExecIf($[ "${next_trunk}" = "yes" ]?Set(a_delete_channela(${channela})=1):NoOP(nothing))
same => n,GotoIf($[ "${next_trunk}" = "yes" ]?redial)
same => n,GotoIf($[ "${bridge_calls}" = "yes" ]?:wi)
same => n,GoSub(checkExistIvrChannelB,s,1)
same => n,ExecIf($[ ${acount} > 120 ]?Hangup():NoOP(nothing))
same => n,Set(__acount=$[ ${acount} + 1])
same => n,GosubIF($["${record_call}"="on"]?call_rec:no_rec)
same => n,Answer()
same => n,Playback(/tmp/${rec_file}-res)
same => n,System(/bin/rm -rf /tmp/${rec_file}*) ; remove tmp record
same => n,Set(a_delete_channela(${channela})=1)
same => n,ForkCDR(v)
same => n,Bridge(${channelb})
same => n,NoOP( BRIDGERESULT:${BRIDGERESULT})
same => n,NoOP(DIALSTATUS:${DIALSTATUS} Cause Code: ${HANGUPCAUSE} ANSWEREDTIME: ${ANSWEREDTIME} DIALEDTIME: ${DIALEDTIME})
same => n,Goto(end_dial)
.....
same => n(end_dial),HangUp()
Код: Выделить всё
exten => s,1,NooP(--> ${CONTEXT} call to ${EXTEN})
;same => n,NoCDR()
same => n,Set(__mcount=0)
same => n,Set(__rec_file=${UNIQUEID})
same => n,Set(a_start_ivr_detect()=${channela},${uniqid})
same => n,Answer()
same => n,Monitor(wav,/tmp/${rec_file},o)
same => n(cm),NoOP(mcount:${mcount})
same => n,Set(a_update_record_i(${channela})=${rec_file},${UNIQUEID})
same => n,Set(module=$[${mcount}%2])
same => n,ExecIf($[ "${module}" = "0" ]?Playback(/home/asterisk/asterisk-bin/lib/asterisk/sounds/custom/play1):Playback(/home/asterisk/asterisk-bin/lib/asterisk/sounds/custom/play2))
;same => n,Wait(5)
same => n,Set(__returnFromCheck=${SHELL(/usr/bin/php56 /home/asterisk/ai-bin/check.php -s -d -i /tmp/${rec_file}-in.wav)})
same => n,NoOP(returnFromCheck:${returnFromCheck} shell:/usr/bin/php56 /home/asterisk/ai-bin/check.php -s -d -i /tmp/${rec_file}-in.wav )
same => n,GotoIf($[ "${returnFromCheck}" = "1"]?nxt) ; Return block ivr
same => n,GotoIf($[ "x${IMPORT(${channela},channela)}" = "x"]?hang) ;Hangup if master channel not exist
;same => n,ExecIf($[ ${mcount} > 4 ]?Hangup():NoOP(nothing))
same => n,GotoIf($[ ${mcount} > 4 ]?end)
same => n,Set(__mcount=$[ ${mcount} + 1])
same => n,Goto(cm)
same => n(end),NoOP()
same => n,StopMonitor()
same => n,Set(a_update_channela_bridge(${channela})=yes)
same => n,System(/usr/bin/sox /tmp/${rec_file}-in.wav /tmp/${rec_file}-res.wav silence 1 0.25 0.3% reverse silence 1 0.25 0.2% trim 0 5 reverse silence 1 0.25 0.3%)
same => n,Wait(7)
same => n(hang),Hangup()
same => n(nxt),NoOP(Goto next trunk)
same => n,StopMonitor()
same => n,Set(a_update_channela_next_trunk(${channela})=yes)
;same => n,System(/bin/rm -rf /tmp/${rec_file}*) ; remove tmp record
same => n,Wait(7)
same => n,Hangup()
Подскажите, плиз, как астера заставить писать CDR для аб.А