Настройка хранения записей в 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
Указание пути к директории хранения записей.
Для того чтобы сразу убедиться в работоспособности и доступе к записям в скрипт внедрена проверка и логирование. Чуть позже вернёмся к этому моменту, а пока рассмотрим главный код:
# Конвертация и удаление оригинала
/usr/bin/lame -h -b 192 $FILE.wav $FILE.mp3 && /bin/rm -rf $FILE.wav
Как и гласит комментарий: первая команда силами приложения «lame» выполняет конвертацию из wav в mp3.
# Запрос учётки MySQL
mysqlpass="$(grep "AMPDBPASS" /etc/freepbx.conf | awk '{printf $3}' | sed -e "s/['|;]//g")"
<?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
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/
И делаем вызов.
После чего проверяем результат:
Как уже говорилось мониторить работу скрипта можно в реальном времени через файл лога:
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}
Остались вопросы?
Я - Виталий Шелест, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.
категории
- DECT
- Linux
- Вспомогательный софт при работе с Asterisk
- Интеграция с CRM и другими системами
- Интеграция с другими АТС
- Использование Elastix
- Использование FreePBX
- Книга
- Мониторинг и траблшутинг
- Настройка Asterisk
- Настройка IP-телефонов
- Настройка VoIP-оборудования
- Новости и Статьи
- Подключение операторов связи
- Разработка под Asterisk
- Установка Asterisk
VoIP оборудование
ближайшие курсы
Новые статьи
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 сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.
Чего то в вэбинтерфейсе mp3 не хочет воспроизводиться. Пришлось пока убрать конвертацию. freepbx 15
Здравствуйте. В большинстве случаев это происходит если наименование файла, в частности его расширение, в базе данных не соответствует действительности.
В итоге прописал пароль к БД фиксированно, без парсера. И всё заработало.
Есть ощущение, что скрипт начинает выполнять замену до того как в таблице CDR появится обрабатываемая запись. Поэтому, не смотря на то, что файл сконвертировался, ссылка в БД по прежнему указывает на .wav. Также рекомендую для уменьшения объема занимаемого пространства в скрипте указывать не CD качество с битрейтом 192 а пресет phone. В итоге строка в указанном скрипте будет выглядеть так:
Добрый день. Спасибо большое за статью. Подскажите, как можно настроить конвертацию только не сразу после звонка, а ночью?
Можно, напишите скрипт по конвертации и положите его в crontab
Здравствуйте!
Не подскажете, по какой причине может не выполняться «Скрипт обработки записи после вызова»? Фай не конвертируется и в логах о «Transfer…» ничего нет.
Spawn extension (ext-local, h, 1) exited non-zero on ‘SIP/Multifon-0000003e’
== MixMonitor close filestream (mixed)
== Executing [/etc/asterisk/scripts/mixmon-mp3-2.sh 2021 08 26 external-998-7926ххххххх-20210826-143104-1629988264.62]
== End MixMonitor Recording SIP/Multifon-0000003e
Это крайние строчки вызова