Столкнулся с неожиданной для себя ситуацией: когда пользователь подключен к астеру, то CDR нормально пишутся в БД и в файл /var/log/asterisk/cdr-csv/Master.csv. Но когда пользователь отключен, входящие звонки никаким образом не фиксируются ни в базе ни в файле. И таким образом теряется информация о пропущенном звонке.
Кто-нибудь решал такую проблему?
Надо смотреть диалплан - что такового вы там накрутили .
_________________
платный суппорт по мере возможностей
[default]
[globals]
RECORDING=2; вариант записи в wav
DIR_RECORDS=/var/calls/; директория куда пишем файл с записью разговоров
[internal]
exten => 101,1,Dial(IAX2/101&SIP/101,70,t)
exten => 102,1,Dial(IAX2/102&SIP/102,70,t)
exten => _1XX,n,Hangup();
[multifon_7920XXXXXXX];
exten => 7920XXXXXXX,1,GotoIf($["${DB(blacklist/${CALLERID(num)})}" = "1"]?black,s,1); Проверка в БД blacklist
exten => 7920XXXXXXX,n,NoOp(${CALLERID(num)} - Not in blacklist); Если номер не в blacklist, то пишем об этом в консоли
exten => 7920XXXXXXX,n,Macro(recording,${CALLERID(num)},${EXTEN})
exten => 7920XXXXXXX,n,Dial(IAX2/101&SIP/101,70,t) ; сюда приходят входящие звонки
exten => 7920XXXXXXX,n,Hangup() ;
exten => _+7XXXXXXXXXX,1,Macro(recording,${CALLERID(num)},${EXTEN})
exten => _+7XXXXXXXXXX,n,Dial(SIP/multifon-out/${EXTEN},60,t)
exten => _+7XXXXXXXXXX,n,Hangup()
exten => _[78]XXXXXXXXXX,1,Macro(recording,${CALLERID(num)},${EXTEN})
exten => _[78]XXXXXXXXXX,n,Dial(SIP/multifon-out/${EXTEN},60,t)
exten => _[78]XXXXXXXXXX,n,Hangup()
exten => _XXXXXX,1,Macro(recording,${CALLERID(num)},${EXTEN})
exten => _XXXXXX,n,Dial(SIP/multifon-out/${EXTEN},60,t)
exten => _XXXXXX,n,Hangup()
include => internal
[telphin]
exten => _+7XXXXXXXXXX,1,Macro(recording,${CALLERID(num)},${EXTEN})
exten => _+7XXXXXXXXXX,n,Dial(SIP/telphin-out/${EXTEN},60,t)
exten => _+7XXXXXXXXXX,n,Hangup()
exten => _8XXXXXXXXXX,1,Macro(recording,${CALLERID(num)},${EXTEN})
exten => _8XXXXXXXXXX,n,Dial(SIP/telphin-out/${EXTEN},60,t)
exten => _8XXXXXXXXXX,n,Hangup()
include => internal
[black]; Контекст, в который направляется абонент из черного списка
exten => s,1,Answer(); Поднимаем трубку при входящем вызове
exten => s,n,Playback(tt-weasels); нашу телефонную систему съели совы
exten => s,n,Hangup()
[macro-recording]; макрос осуществляет запись разговоров
;exten => s,1,GoToIf($["${RECORDING}" = "1"]?mp3:no)
exten => s,1,GoToIf($["${RECORDING}" = "2"]?wav:no)
exten => s,n(mp3),Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${ARG1}-${ARG2});
exten => s,n,Set(monopt=nice -n 19 /usr/bin/lame -b 32 --silent "${DIR_RECORDS}${fname}.wav" "${DIR_RECORDS}${fname}.mp3" && rm -f "${DIR_RECORDS}${fname}.wav" && chmod o+r "${DIR_RECORDS}${fname}.mp3");
exten => s,n,Set(CDR(filename)=${fname}.mp3);
exten => s,n,Set(CDR(realdst)=${ARG2});
exten => s,n,Set(CDR(remoteip)=${CHANNEL(recvip)});
exten => s,n,MixMonitor(${DIR_RECORDS}${fname}.wav,b,${monopt});
exten => s,n,Goto(no);
exten => s,n(wav),Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${ARG1}-${ARG2});
exten => s,n,Set(CDR(filename)=${fname}.wav);
exten => s,n,Set(CDR(realdst)=${ARG2});
exten => s,n,MixMonitor(${DIR_RECORDS}${fname}.wav,b);
exten => s,n,Goto(no);
exten => s,n(no),Verbose(Exit record);
пихать надо по другому
тогда и будет писать только отвеченные
exten => _17XX,1,NoOp(= Номер = ${CALLERID(num)} =)
exten => _17XX,n,Set(calling=${CALLERID(num)})
exten => _17XX,n,Set(called=${EXTEN})
exten => _17XX,n,Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${calling}-${called});
exten => _17XX,n,Set(monopt=nice -n 19 /usr/local/bin/lame -b 32 --silent "${DIR_RECORDS}${fname}.wav" "${DIR_RECORDS}${fname}.mp3" && rm -f "${DIR_RECORDS}${fname}.wav" && chmod o+r "${DIR_RECORDS}${fname}.mp3");
exten => _17XX,n,Set(CDR(filename)=${fname}.mp3);
exten => _17XX,n,Set(CDR(realdst)=${called});
exten => _17XX,n,MixMonitor(${DIR_RECORDS}${fname}.wav,b,${monopt});
exten => _17XX,n,Dial(IAX2/name:password@london/${EXTEN},30,tT)
exten => _17XX,n,NoOp(=DialStatus=${DIALSTATUS}=)
exten => _17XX,n,Hangup()
и добавить в конце
exten => h,1,NoOp(== Положили трубку == DialStatus=${DIALSTATUS} = HANGUPCAUSE=${HANGUPCAUSE} = Разговор был ${ANSWEREDTIME} секунд )
а по поводу записи в файл - включайте полный sip set debug 1
и смотрите когда происходит запись
_________________
платный суппорт по мере возможностей