Страница 2 из 2

Re: Запись после перевода вызова

СообщениеДобавлено: 11 авг 2017, 11:12
awsswa
В общем я надорвался и сделал разделение разговоров через вырезание записей но ...
Всегда есть но ...
Логика работает если в записи есть гудки перевода звонка и разговор полностью (секретарь с менеджером тоже)
Иначе если долго не берут трубку (10-15 секунд и менеджер говорит с секретарем долго) логика пореза записи страдает.
FreePBX 12
Но почему то я не могу добиться записи всего вызова ... гудков вызова в звонке нет.
Вроде запись везде включил
Даже через модуль Call Recording пробовал пускать входящий - нету гудков.
Где то туплю

Re: Запись после перевода вызова

СообщениеДобавлено: 11 авг 2017, 15:01
virus_net
построчный разбор отработки dialplan`а не проясняет ?

Re: Запись после перевода вызова

СообщениеДобавлено: 11 авг 2017, 17:59
awsswa
Вроде поборол - больше меток выставил в диаплане по конце разговора секретаря
Файл на баш который обращается к базе
Выбирает нужную
парсит результат
отрезает файл
выглядит полный пи....
Таких конструкций уже строк 60

Код: выделить все
# Общее время записи
first7=`ffmpeg -i $dir/$file.mp3 2>&1 | grep "Duration"| cut -d ' ' -f 4 | sed s/,// | sed 's@\..*@@g' | awk '{ split($1, A, ":"); split(A[3], B, "."); print 3600*A[1] + 60*A[2] + B[1] }'`

Re: Запись после перевода вызова

СообщениеДобавлено: 12 авг 2017, 09:05
virus_net
сразу могу посоветовать, во избежании всякий странностей в будущем, в скриптах использовать полные пути к исполняемым бинарям (ffmpeg grep cut sed и пр.).

Re: Запись после перевода вызова

СообщениеДобавлено: 18 авг 2017, 13:05
awsswa
В общем колхозный вариант такой
Нужно писать в базу начало и конец разговора.
В
[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