Asterisk запись разговоров где лежат файлы
В сегодняшней статье, мы расскажем как выполнить запись разговоров в Asterisk из диалплана. Также приведем пример, в котором запись разговоров для выбранных пользователей будет контролироваться через AstDB. Это означает, что запись разговоров будет производится по умолчанию, а для выбранных пользователей она производится не будет. Для записи разговоров мы будем использоваться GoSub() приложение в Asterisk. Итак, что имеем:
Предварительная настройка Asterisk
Во-первых создадим глобальные переменные для дальнейшего использования. Редактируем файл /etc/asterisk/extensions.conf следующим образом:
Во-вторых создадим папку для записей и установим права доступа к ней:
Добавляем общий контекст, по которому мы будем выполнять запись разговоров для входящих и исходящих вызовов. В этот контекст также можно добавить и другие проверки, такие как черный список, запись CDR, подмену CallerID и т.д. Настройки вносим в файл /etc/asterisk/extensions.conf:
В этом же файл (/etc/asterisk/extensions.conf) ниже добавляем GoSub() для записи разговоров:
Запись исходящих звонков
Для записи исходящих вызовов настроим (для примера) маршрутизацию на мобильные номера. Для этого в файле /etc/asterisk/extensions.conf добавляем:
Запись входящих звонков
На SIP-транке с оператором мы используем контекст [from-pstn]. Соответственно добавляем:
В качестве места терминации может быть любой приложение: IVR, Voicemail, FollowMe и др.
Контроль SIP-аккаунтов в AstDB
Для абонентов, запись разговоров которых не требуется производить в диалплане создана ветка AstDB NORECORDING. Поэтому для того чтобы отключить запись по конкретному SIP-аккаунту необходимо всего лишь добавить его в эту ветку командой из консоли Asterisk:
Любое использование материалов сайта возможно только с разрешения автора и с обязательным указанием источника.
Если запись не проигрывается и не скачивается, то выполняем последовательно следующие шаги.
1. Включена ли запись в Астериск?
Проверьте включена ли запись разговоров для всех используемых контекстов в Астериск. Для FreePBX она включается одной настройкой. В других случаях можно воспользоваться несколькими командами.
2. Работает ли ссылка в браузере?
Если получили запись, значит со ссылкой все хорошо, и запись не проигрывается из проблем с плеером в браузере на странице Битрикса. Рекомендуем попробовать проиграть в нескольких разных браузерах. Если ответ Not found - тестируем ссылку в консоли на сервере.
Если включен первый вариант, когда записи загружаются на Битрикс, то проверьте, установлен ли lame на сервер, который преобразует wav файлы Астерискка в mp3 файлы необходиые для Битрикса. Подробнее.
3. Работает ли ссылка на сервере?
Выполняем команду wget ‘ссылка’ в консоли сервера, где стоит модуль. Если запись получена - запрос корректный, в базе запись находится, значит проблема в сети - запрос из Битрикса не может достучаться до сервера. Например, закрыт порт 8077 на роутере… Если запись не получена, то двигаемся дальше.
4. Проверяем путь до записи на сервере Астериск
Стандартно записи хранятся в директории /var/spool/asterisk/monitor/2018/… Эта директория должна быть прописана в конфиге, Раздел Asterisk, Путь до файлов с записями разговоров "recordings_dir": /var/spool/asterisk/monitor/
А также корректно ли выбран параметр Файлы с записями хранятся в поддиректориях согласно дате разговора "recordings_dir_subdirs_by_date": true Если эти настройки корректны, то проверяем что в логе и базе данных. В Админке это выглядит так
5. Проверяем запрос и ответ в логе модуля
Если путь до файла указан верно, то смотрим в лог модуля /var/log/bx24asrerisk.log
И ответ базы данных данных на этот запрос: Result of record file path customization: [/var/spool/asterisk/monitor/…………..]
При невозможности выполнить запрос, будет указано “Could not find record by sql-query”. Если запрос корректный, но его содержание пустое, то в ответ будет Empty set.
6. Проверяем, что в CDR
Нужно взять эту команду и выполнить в консоли mysql либо в веб-версии админки модуля на странице логов (раздел MySQL).
Далее постепенно убирать параметры в запросе, до того, пока не найдем, на каком аргументе ошибка.
Самый короткий запрос:
Должен вернуть строку в CDR по этому звонку.
Часто записи разговоров могут храниться на сервере IP-телефонии ограниченное время, но, в некоторых случаях, среди всех записей разговоров можно выделить более важные, – те, которые должны храниться на сервере значительно большее время, либо параллельно копироваться на какой-либо еще ресурс или отправляться на почту, в телеграм. В ОС Linux периодические действия (например, проверка даты создания и […]
Часто записи разговоров могут храниться на сервере IP-телефонии ограниченное время, но, в некоторых случаях, среди всех записей разговоров можно выделить более важные, – те, которые должны храниться на сервере значительно большее время, либо параллельно копироваться на какой-либо еще ресурс или отправляться на почту, в телеграм.
В ОС Linux периодические действия (например, проверка даты создания и удаление старых записей) могут выполняться с помощью скриптов, добавленных в планировщик cron. Например, скрипт периодического удаления старых записей разговоров, периодически запускающийся в кроне, может выглядеть так:
В примере использовались CentOS 7, Asterisk 13, FreePBX 13.
Используемое ПО
В случае если необходимо хранить некоторые записи разговоров дольше (поступившие на некоторые, более важные номера) или определить различные сроки хранения для различных групп номеров нужно изменить скрипт, добавив в него несколько проверок. По умолчанию во FreePBX записи хранятся в директории $/год/месяц/день, а имя файла с записями имеет вид:
Т.е. для внутреннего звонка со 100 на 101 имя файла с записью разговора звонка 2021-03-20 в 08:06:57 будет вида:
Хранение записей
Исходя из этого, можно, например, с помощью использования регулярного выражения получить все записи в указанной директории и поддиректориях, хранящиеся в формате mp3 или wav, старше 60 дней:
Все файлы в формате mp3 или wav старше 60 дней
Записи разговоров с номером 200
Записи звонков на 200
Записи исходящих звонков с номера 200 (старше 60 дней):
Записи звонков с номера 200, старше 60 дней
Записи разговоров не на 200 номер (старше 60 дней):
Записи звонков старше 60 дней не на номер 200
По умолчанию утилита find не переходит по символическим ссылкам. Если в директории с записями имеются символические ссылки, указывающие на другие директории, содержимое в которых также необходимо обрабатывать – необходимо использовать параметр –L.Про альтернативное хранение записей (изменение структуры директорий и имен файлов с записями) – см. статью.
Для корректной работы скриптов, удаляющих старые файлы, необходимо, чтобы на сервере всегда было корректное время. См. подробнее о настройке NTP в статьях 1 и 2.
Предположим записи разговоров, связанные с первой группой номеров (100,103) должны храниться 90 дней, со второй (102,104) – 180, звонки с/на 600, 700 – 90 дней, остальные номера должны храниться 60 дней.
После создания скрипта или загрузки его на сервер, скрипту необходимо установить права на выполнение с помощью команды chmod +x /путь_к_скрипту/имя_скрипта.Имеющиеся записи и записи, хранящиеся после запуска скрипта
Для выполнения скрипта еженедельно, его необходимо перенести в директорию /etc/cron.weekly.
Записи разговоров, имеющие большее значение, можно также после окончания разговора копировать на отдельный ресурс или отсылать, например, на почту.
Если же, необходимо выделить только записи разговоров с определенными номерами, то это можно сделать посредством периодического выполнения скрипта, добавленного в крон, либо используя Post Call Recording Script.
Для периодического копирования записей с помощью крон – создаем скрипт:
Устанавливаем скрипту права на выполнение с помощью chmod +x и добавляем в планировщик:
Например, чтобы скрипт запускался каждые 5 мин. нужно добавить запись:
Скопированные записи и структура папок
См. также статью о распространенных проблемах с записями разговоров и их решении .
Прежде чем изменить директорию хранения записей разговоров следует ответить на вопрос: для чего это нужно?
- Изменить саму директорию хранения файлов
- Сменить физический носитель (диск) хранения файлов
1 Случай: изменение директории хранения файлов.
Стоит отметить, что при этом прослушивание и скачивание записей станет недоступным через веб-интерфейс Elastix. Поэтому придется использовать для этих целей UserPanel FreePBX.
Изменение папки для хранения записей звонков в Elastix можно настроить через панель администрирования FreePBX.
Включаем доступ к панели администрирования FreePBX: /Security/Advanced Setting/Enable direct (Non-Embedded) access to FreePBX.
Включаем параметры "Display Readonly Settings" и "Override Readonly Settings" в меню /Settings/Advanced Settings.
После сохранение измененных настроек переходим к разделу "Directory Layout" и прописываем в пункте "Override Call Recordings Location" путь к нужной директории.
Сохраняем изменения и не забываем нажать кнопку Apply Config.
2 случай: изменение диска для хранения записей звонков.
Этот способ будет более корректным с той точки зрения, что сама директория не изменяется и все записи будут доступны через веб-интерфейс Elastix.
Для изменения диска для хранения файлов записей лучше воспользоваться способом монтирования диска в директорию хранения записей /var/spool/asterisk/monitor.
У меня есть диск с созданным разделом в файловой системе xfs.
Для просмотра в CentOS подключенных дисков с указанием файловых систем воспользуемся следующей командой:
Я буду монтировать диск sdb с разделом data-Data
Для выполнения автоматического монтирования диска в CentOS используется файл /etc/fstab. Откроем его редактором vi:
В моем fstab было такое содержимое:
Теперь добавим еще одну строку монтирования раздела data-Data в директорию /var/spool/asterisk/monitor.
Сохраняем файл, перезагружаемся и проверяем диски lsblk:
Видим что раздел data-Data смонтирован в директорию /var/spool/asterisk/monitor. Теперь все записи будут сохранятся на этот жесткий диск.
Читайте также: