Недавно одному нашему большому и любимому клиенту понадобилось получать записи звонков IP телефонии в формате mp3. Это удобно, потому что формат записей в mp3 занимает меньше «места» на дисках и соответственно в архиве записей увеличивается глубина хранения. У ребят в инфраструктуре стоит IP АТС FreePBX 15 (Её «с нуля» настраивали тоже МЫ, если нужно обращайтесь! Будем рады помочь). По умолчанию она не умеет записывать в mp3, но записи можно конвертировать "на лету". И сегодня мы рассмотрим скрипт, который будет делать эту конвертацию. Настройку нужно произвести один раз и в дальнейшем никакого обслуживания с вашей стороны не потребуется.
Итак, первое что нам необходимо это войти в панель управления АТС с правами администратора.
Далее необходимо попасть в раздел расширенных настроек
Далее нам надо найти и переключить 2 настройки
После того, как вы переключили эти настройки, не забываем нажать «Submit» и затем применить настройки нажав кнопку «Apply»
После того как применятся настройки появится новый пункт «Post Call Recording Script»
В поле этого пункта необходимо добавить текст следующего вида:
/var/lib/asterisk/agi-bin/realtime-transfer.sh ^{YEAR} ^{MONTH} ^{DAY} ^{CALLFILENAME}
После ввода не забываем нажать 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.