Найти в Дзене
КСОР АЙТИ [XORit]

Asterisk записи разговоров в mp3

Недавно одному нашему большому и любимому клиенту понадобилось получать записи звонков IP телефонии в формате mp3. Это удобно, потому что формат записей в mp3 занимает меньше «места» на дисках и соответственно в архиве записей увеличивается глубина хранения. У ребят в инфраструктуре стоит IP АТС FreePBX 15 (Её «с нуля» настраивали тоже МЫ, если нужно обращайтесь! Будем рады помочь). По умолчанию она не умеет записывать в mp3, но записи можно конвертировать "на лету". И сегодня мы рассмотрим скрипт, который будет делать эту конвертацию. Настройку нужно произвести один раз и в дальнейшем никакого обслуживания с вашей стороны не потребуется.

Итак, первое что нам необходимо это войти в панель управления АТС с правами администратора.

Далее необходимо попасть в раздел расширенных настроек

-2

Далее нам надо найти и переключить 2 настройки

-3

После того, как вы переключили эти настройки, не забываем нажать «Submit» и затем применить настройки нажав кнопку «Apply»

После того как применятся настройки появится новый пункт «Post Call Recording Script»

В поле этого пункта необходимо добавить текст следующего вида:

/var/lib/asterisk/agi-bin/realtime-transfer.sh ^{YEAR} ^{MONTH} ^{DAY} ^{CALLFILENAME}

-4

После ввода не забываем нажать Submit и затем еще раз Apply.

Далее нам понадобиться доступ к операционной системе, на которой установлен наш Asterisk/FreePBX.

Авторизуемся на сервере и выполняем следующую команду:

# cd /var/lib/asterisk/agi-bin/

Мы попадаем в директорию, в которой будет храниться наш скрипт

Выполняем следующую команду и создаем файл нашего скрипта:

# nano realtime-transfer.sh

Теперь разберем наш скрипт:

#!/bin/bash

#YEAR=$1

#MONTH=$2

#DAY=$3

#CALLFILENAME=$4

FILE=/var/spool/asterisk/monitor/$1/$2/$3/$4

# Проверка наличия файла

if [ -f "$FILE.wav" ]; then

# Конвертация и удаление оригинала

/usr/bin/lame -h -b 192 $FILE.wav $FILE.mp3 && /bin/rm -rf $FILE.wav

Для конвертации мы будем использовать утилиту «Lame»

Давайте разберем параметры этой команды:

Ключ -h отвечает за качество и скорость конвертации

Ключ -b и последующее значение отвечает за битрейт mp3 файла. Для снижения размера файла можно указать 32 или 64, однако нужно учесть, что упадет качество записи. Это может оказаться критичным.

Также в команде указано, что можно удалить исходный файл wav, но только после проверки наличия файла формата mp3

Далее нам необходимо внести изменения в базу данных MySQL

В FreePBX есть встроенные отчеты по звонкам и вся информация о звонке, абонентах хранится в базе данных MySQL и информацию в ней для корректного отображения также нужно править.

# Запрос учётки MySQL

mysqlpass="$(grep "AMPDBPASS" /etc/freepbx.conf | awk '{printf $3}' | sed -e "s/['|;]//g")"

Однако иногда этот метод не срабатывает, и тогда потребуется указать пароль в нашей переменной в явном виде

mysqlpass=”**************”

Найти его можно в файл /etc/freepbx.conf в строке с параметром "AMPDBPASS"

# Замена форматов в базе данных

# CDR

querty="UPDATE cdr SET

recordingfile=replace(recordingfile,\".wav\",\".mp3\") WHERE recordingfile=\"$4.wav\";"

mysql --user=freepbxuser --password="$mysqlpass" asteriskcdrdb <<< "$querty"

В целом этого достаточно. Однако если в вашей компании используется панель телефонии, например в программе 1с и прослушивание записи производиться через обратный звонок, то необходимо аналогичные правки производить еще и в таблице PT1C_cdr. Синтаксис её аналогичный вышеприведенному.

# PT1C_cdr

querty="UPDATE PT1C_cdr SET recordingfile=replace(recordingfile,\".wav\",\".mp3\") WHERE recordingfile=\"$4.wav\";"

mysql --user=freepbxuser --password="$mysqlpass" asteriskcdrdb <<< "$querty"

Так же для выполнения нашего скрипта необходимо назначить права пользователя, от имени которого будет выполняться скрипт

# chmod a+x /var/lib/asterisk/agi-bin/realtime-transfer.sh

# chown asterisk. /var/lib/asterisk/agi-bin/realtime-transfer.sh

Теперь мы можем проверить правильно ли работает наш скрипт и корректны ли записи в базе данных

Для этого пишем в консоль следующие команды:

Входим в СУБД

# mysql

Подключаемся к нашей базе данных. По умолчанию она называется asteriskcdrdb

# connect asteriskcdrdb

Выполним запрос. В запросе можно указать параметры. В нашем примере он содержит: Дату, Источник, Приемник, Имя файла

# select calldate,src,dst,recordingfile from cdr where calldate=>curdate();

В результате запроса получаем табличку и видим, что файлы в ней имеют расширение mp3.

-5