Дмитрий Кайдаш
13.06.2019
3859

Настройка хранения записей в mp3 на Asterisk+FreePBX.

Описание: в ряде интеграций АТС на базе asterisk возникла необходимость конвертации wav в mp3. В частности, это нужно для корректной прослушки записей методом обратного звонка в MIKO (что это и как настраивать описано в статье https://voxlink.ru/kb/asterisk-configuration/ustanovka-modulya-1c-ot-miko-na-freepbx-2-11-s-asterisk-11/) и значительно (а так же безопасно) экономит место на носителях. Чтобы этого достичь нам понадобится: найти триггер обработки завершения […]

Описание: в ряде интеграций АТС на базе asterisk возникла необходимость конвертации wav в mp3. В частности, это нужно для корректной прослушки записей методом обратного звонка в MIKO (что это и как настраивать описано в статье https://voxlink.ru/kb/asterisk-configuration/ustanovka-modulya-1c-ot-miko-na-freepbx-2-11-s-asterisk-11/) и значительно (а так же безопасно) экономит место на носителях.

Чтобы этого достичь нам понадобится:

  • найти триггер обработки завершения вызова с возможностью передачи аргументов
  • написать скрипт-конвертор который и будет выполнять нашу задачу

Перейдём к описанию.

К счастью триггер уже есть в интерфейсе администрирования FreePBX. Но он скрыт по-умолчанию, чтобы его найти нужно перейти в «advanced settings» и включить два следующие пунта:

Отображение дополнительных пунктов

После чего поиском по странице ищем пункт «Post Call Recording Script»

Триггер после вызова

Как и гласит название и подсказка, это то что нам нужно: поле для указания скрипта который выполнится при завершении каждого вызова. И помимо прочего он может принимать аргументы. Добавим сюда строчку следующего вида:

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

После не забываем нажать «submit»+«apply».

И переходим непосредственно к созданию этого скрипта. Открываем консоль сервера (ssh), авторизуемся и выполняем следующие команды:

# cd /var/lib/asterisk/agi-bin/
# nano realtime_transfer.sh

И уже далее содержимое в зависимости от настроек вашей АТС:

#!/usr/bin

Бессменный заголовок bash-скриптов

#YEAR=$1
#MONTH=$2
#DAY=$3
#CALLFILENAME=$4

Памятка по аргументом, поскольку обработка ведётся не по ассоциативному массиву, а по порядковому.

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

Указание пути к директории хранения записей.

Внимание! На разных АТС он может быть разным. Например, при кластеризации или выносе папки записей «monitor» в примонтированный раздел и носитель. Так же возможны исключения в которых записи не градируются по директориям по дате вида «/год/месяц/день».

Для того чтобы сразу убедиться в  работоспособности и доступе к записям в скрипт внедрена проверка и логирование. Чуть позже вернёмся к этому моменту, а пока рассмотрим главный код:

# Конвертация и удаление оригинала
/usr/bin/lame -h -b 192 $FILE.wav $FILE.mp3 && /bin/rm -rf $FILE.wav

Как и гласит комментарий: первая команда силами приложения «lame» выполняет конвертацию из wav в mp3.

Внимание! Вторая команда должна быть обязательно соединена с первой двойным «&amp;&amp;» — это означает, что она выполнится только при успешном коде возврата первой. Формально оригинал wav будет удалён <strong>только</strong> при успешной конвертации и наличии mp3-файла. Если команды записать последовательно оригинал будет удалён вне зависимости от наличия копии в другом формате, что может привести к потере записи в принципе.
# Запрос учётки MySQL
mysqlpass="$(grep "AMPDBPASS" /etc/freepbx.conf | awk '{printf $3}' | sed  -e "s/['|;]//g")"
Внимание! Эта строка парсер используется только на дистрибутивах FreePBX, в которых есть файл /etc/freepbx.conf следующего вида:
<?php
$amp_conf['AMPDBUSER'] = 'freepbxuser';
$amp_conf['AMPDBPASS'] = '80**************50';
$amp_conf['AMPDBHOST'] = 'localhost';
$amp_conf['AMPDBNAME'] = 'asterisk';
$amp_conf['AMPDBENGINE'] = 'mysql';
$amp_conf['datasource'] = ''; //for sqlite3

require_once('/var/www/html/admin/bootstrap.php');
?>

В противном случае нужно указать пароль в переменной вручную.

mysqlpass=”ui************ahsh”

Далее нужно поправить ссылки на новый файл.

# Замена форматов
# CDR
querty="UPDATE cdr SET recordingfile=replace(recordingfile,\".wav\",\".mp3\") WHERE recordingfile=\"$4.wav\";"
mysql --user=freepbxuser --password="$mysqlpass"  asteriskcdrdb <<< "$querty"

Как и гласит комментарий, здесь производится замена формата в cdr таблице базы asteriskcdrdb.

Внимание! Если данная модификация проводится с целью обеспечить работу прослушивания записи через обратный звонок в панели, производить симметричную замену нужно ещё и в таблице PT1C_cdr в той же базе asteriskcdrdb. И не забыть переключить приложение воспроизведения записей: advanced settings.
# 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

Проверяем:

Права и принадлежность скрипта

Если картинка совпадает, значит всё сделано верно. Теперь можем проверить работу надстройки. Ставим в консоли папку с записями на мониторинг:

watch ls -l /var/spool/asterisk/monitor/2019/03/25/

И делаем вызов.

Демонстрация

После чего проверяем результат:

Физическое наличие файла
Ссылка на файл из CDR
Ссылки на файлы из PT1C_cdr

Как уже говорилось мониторить работу скрипта можно в реальном времени через файл лога:

tailf /var/log/asterisk/full | grep "Transfer"

И совершить или дождаться звонок. Результат следующего вида означает что «мгновенная конвертация» выполнена успешно:

Мониторинг через лог

Код скрипта целиком:

#!/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

        # Запрос учётки MySQL
        mysqlpass="$(grep "AMPDBPASS" /etc/freepbx.conf | awk '{printf $3}' | sed  -e "s/['|;]//g")"

        # Замена форматов
        # CDR
        querty="UPDATE cdr SET recordingfile=replace(recordingfile,\".wav\",\".mp3\") WHERE recordingfile=\"$4.wav\";"
        mysql --user=freepbxuser --password="$mysqlpass"  asteriskcdrdb <<< "$querty"

        # PT1C_cdr
        querty="UPDATE PT1C_cdr SET recordingfile=replace(recordingfile,\".wav\",\".mp3\") WHERE recordingfile=\"$4.wav\";"
        mysql --user=freepbxuser --password="$mysqlpass"  asteriskcdrdb <<< "$querty"

        # Логирование действий
        /bin/echo "Transfer complete! Before: $FILE.wav,  after: $FILE.mp3" >> /var/log/asterisk/full

else

        # Логирование действий
        /bin/echo "Transfer failure! File not found!" >> /var/log/asterisk/full

fi

# !!! Перенести в Post Call Recording Script !!!
# /var/lib/asterisk/agi-bin/realtime_transfer.sh ^{YEAR} ^{MONTH} ^{DAY} ^{CALLFILENAME}
avatar
  Подписаться  
Уведомление о

Остались вопросы?

Я - Першин Артём, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

VoIP оборудование

ближайшие курсы

ближайшие Вебинары

ONLINE

10 доводов в пользу Asterisk

Распространяется бесплатно.

Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.

Безопасен в использовании.

Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.

Надежен в эксплуатации.

Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.

Гибкий в настройке.

Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.

Имеет огромный функционал.

Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.

Интегрируется с любыми системами.

То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.

Позволяет телефонизировать офис за считанные часы.

В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.

Отличная масштабируемость.

Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.

Повышает управляемость бизнеса.

Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.

Снижает расходы на связь.

Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.