В общем колхозный вариант такой
Нужно писать в базу начало и конец разговора.
В
[sub-record-check]
Пишем начало
Выставляем метку проверяя нужный ли нам номер присуствует
Код: Выделить всё
exten => recordcheck,n,Set(__ZTIMESTR=${NOW})
exten => recordcheck,n,ExecIf($["${ARG3}" = "1110" & ${LEN(${FROMEXTEN})} > 6 ]?Set(__VNESHZVONOK=s))
exten => recordcheck,n,ExecIf($["${ARG3}" != "1110" | ${LEN(${FROMEXTEN})} < 6 ]?Set(__VNESHZVONOK=n))
exten => recordcheck,n,ExecIf($["${VNESHZVONOK}" = "s"]?Set(DB(RECORD/${UNIQUEID}/${ZTIMESTR}/0)=${CALLFILENAME}))
Ну и уже в
[macro-hangupcall]
Пишем все окончания звонков для нужных номеров
Код: Выделить всё
exten => s,n,Set(QTIMENOW=${EPOCH})
exten => s,n,Set(QDAY=${STRFTIME(${QTIMENOW},,%d)})
exten => s,n,Set(QMONTH=${STRFTIME(${QTIMENOW},,%m)})
exten => s,n,Set(QYEAR=${STRFTIME(${QTIMENOW},,%Y)})
exten => s,n,Set(QTIMESTR=${QYEAR}${QMONTH}${QDAY}-${STRFTIME(${QTIMENOW},,%H%M%S)})
exten => s,n,ExecIf($[${LEN(${ANSWEREDTIME})} > 0 ]?Set(QANSWEREDTIME=${ANSWEREDTIME}))
exten => s,n,ExecIf($[${LEN(${ANSWEREDTIME})} = 0 ]?Set(QANSWEREDTIME=000000))
exten => s,n,NoOp(${REGEX("^11(21|22|23|24|24|26|27|28|29|31|32|33)" ${DIALEDPEERNUMBER})}==${DIALEDPEERNUMBER})
exten => s,n,ExecIf($["${VNESHZVONOK}" = "s" ]?Set(DB(RECORD/${UNIQUEID}/${QTIMENOW}/${QANSWEREDTIME})=${CALLFILENAME}))
exten => s,n,ExecIf($["${VNESHZVONOK}" = "s" & ${REGEX("^11(21|22|23|24|24|26|27|28|29|31|32|33)" ${DIALEDPEERNUMBER})} = 1 & "${DIALSTATUS}" = "ANSWER" ]?Set(DB(RECORD/${UNIQUEID}/${QTIMENOW}/999999)=${DIALEDPEERNUMBER}-${CALLFILENAME}))
В результате в базе все выглядит вот так
Код: Выделить всё
/RECORD/1503035671.575/1503035684/0 : rg-1110-79519393122-20170818-105431-1503035671.575
/RECORD/1503035671.575/1503035857/000000 : rg-1110-79519393122-20170818-105431-1503035671.575
/RECORD/1503035831.590/1503036013/174 : rg-1110-79519393122-20170818-105431-1503035671.575
/RECORD/1503035831.590/1503036013/999999 : 1131-rg-1110-79519393122-20170818-105431-1503035671.575
/RECORD/1503035856.603/1503036013/324 : rg-1110-79519393122-20170818-105431-1503035671.575
Осталось только с помощью баш скрипта выдрать данные из базы и порезать файл
фигня на 120 строк тихого ужаса
Попадание почти точное - ну может один из 10 на пару секунд раньше обрежется
Начало примерно в таком духе
Код: Выделить всё
#!/bin/sh
#Находим первую запись
first1=`asterisk -rx "database show" | grep RECORD | head -1 | sed -r 's/^[^rg]+//'`
echo $first1
if [ -z "$first1" ];
then
echo "empty"
exit 25
else
echo "not empty"
fi
#echo Фулл `asterisk -rx "database show" | grep RECORD | grep $first1 | cut -d: -f 2- | cut -d' ' -f2`
#Проверяем сколько записей в таблице
rez=`asterisk -rx "database show" | grep RECORD | grep $first1 | wc -l`
echo Колличество строк $rez
#Удаляем если всего одна строка записи
if [ "$rez" -eq 1 ]; then
#Удаляем первый символ и все после пробела
first2=`asterisk -rx "database show" | grep RECORD | head -1 | cut -d' ' -f1 | cut -c 2-`
first31=`asterisk -rx "database show" | grep RECORD | grep $first1 | sed -n -e 1p | cut -d/ -f 4- | cut -d'/' -f1`
echo Удаляем запись при одной строке $first2 Время `date -d@$first31`
asterisk -rx "database deltree $first2"
fi