VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

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

Проблемы Asterisk без вэб-оболочек и их решения

Модераторы: april22, Zavr2008

awsswa
Сообщения: 2390
Зарегистрирован: 09 июн 2012, 10:52
Откуда: Россия, Пермь skype: yarick_perm

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

Сообщение awsswa »

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

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

Сообщение virus_net »

построчный разбор отработки dialplan`а не проясняет ?
мой SIP URI sip:virus_net@asterisk.ru
bitname.ru - Домены .bit (namecoin) .emc .coin .lib .bazar (emercoin)

ENUMER - звони бесплатно и напрямую.
awsswa
Сообщения: 2390
Зарегистрирован: 09 июн 2012, 10:52
Откуда: Россия, Пермь skype: yarick_perm

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

Сообщение 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] }'`
платный суппорт по мере возможностей
virus_net
Сообщения: 2337
Зарегистрирован: 05 июн 2013, 08:12
Откуда: Москва

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

Сообщение virus_net »

сразу могу посоветовать, во избежании всякий странностей в будущем, в скриптах использовать полные пути к исполняемым бинарям (ffmpeg grep cut sed и пр.).
мой SIP URI sip:virus_net@asterisk.ru
bitname.ru - Домены .bit (namecoin) .emc .coin .lib .bazar (emercoin)

ENUMER - звони бесплатно и напрямую.
awsswa
Сообщения: 2390
Зарегистрирован: 09 июн 2012, 10:52
Откуда: Россия, Пермь skype: yarick_perm

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

Сообщение 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
платный суппорт по мере возможностей
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH