Блоги разработчиков

Askozia - запись и прослушивание телефонных разговоров.

Askozia - это IP АТС начального уровня, позволяющая в считанные минуты развернуть IP телефонию на базе любого компьютера. Загружается с флешки и не требует знаний Linux систем. Имеет интуитивно понятный русифицированный интерфейс.
У меня стояла задача организовать запись телефонных разговоров с клиентами. А штатной функции записи разговоров в Askozia нет...

[spoiler]
Первое, что необходимо сделать, это организовать хранилище информации, т.к. звонки занимают достаточно много места. Т.к. Askozia грузится с USB накопителя, внутри Nettop Acer, на который мы ее установили, остался незадействованным 160 гигабайтный жесткий диск. Вот и замечательно, он отлично справится с функцией хранилища истории звонков и записей разговоров.
Подключаем его в качестве хранилища из пункта меню Система->Диски и указываем, что на этом накопителе мы будем хранить все.



Askozia отформатирует предоставленный ей диск в формат FAT, что позволяет, при использовании внешних USB дисков, легко открывать их в любой Windows системе, например для того, чтобы удалить старые записи или прослушать их.

Далее нам необходимо выполнить подключение функции Monitor, которая отвечает за запись разговоров.
Для этого нужно воспользоваться административной панелью с помощью двойного нажатия кнопки Esc.
Редактируем файл modules.conf, добавляя в него строку:

 load => res_monitor.so 


Выглядеть это должно примерно так:


Осталось определиться, в какой момент нам нужно писать разговоры. Очевидно, что нам не нужны разговоры сотрудников между собой и очень интересны разговоры между сотрудниками и клиентами, а такие разговоры всегда проходят через внешних провайдеров. Значит необходимо писать все разговоры, проходящие через внешних провайдеров, и желательно записывать только реально состоявшиеся разговоры.
Существует специальная Asterisk команда отвечающая за запись разговора.
Monitor(ext,basename,flags) 

Команда Monitor начинает запись на канале. Запись разговора звонящего и вызываемого абонента сохраняются в раздельные звуковые файлы. Вы можете изменить имена файлов в процессе записи, используя команду ChangeMonitor. Запись продолжается пока не будет выполнена команда StopMonitor или связь по текущему каналу не будет закончена.
Если Вы не определяете полный путь для файла, то они будут сохраняться в поддиректории "monitor", директории, заданной параметром astspooldir в файле конфигурации asterisk.conf (по умолчанию: /var/spool/asterisk/monitor).



В первую переменную передается расширение файла, от которого зависит, каким кодеком будет сжат разговор. Чаще всего рекомендуют использовать wav формат, т.к. он не сжимает разговоры и не тратит ресурсов Asterisk. Данный формат без проблем просушивается на любом устройстве, без необходимости устанавливать дополнительные кодеки. Огромный минус этого формата - это размер, около 1 мегабайта в минуту. Если использовать gsm формат, то запись разговора занимает в 10 раз меньше без потери качества, и при достаточно мощном сервере или при небольшом количестве параллельных звонков позволяет не бояться сильной нагрузки на процессор. Также формат gsm невозможно прослушать на обычном компьютере без установки дополнительных кодеков.
Во вторую переменную указывается имя файла, а в третью - дополнительные параметры.
Если мы хотим записывать только совершенные разговоры, а на выходе нужен один файл с 2-мя голосами, то в качестве параметров нужно указать bm. В имя файла удобно добавить дату, время звонка и номер, с которого он был инициирован для входящего, или на который мы набирали для исходящего.

В итоге я сконструировал такие строки:
Входящий разговор:
Set(RecFile=${STRFTIME(${EPOCH},,%Y-%m/%d)}/in_${CDR(src)}_${STRFTIME(${EPOCH},,%Y-%m-%d-%H-%M-%S)})
Set(CDR(userfield)=${RecFile}.gsm)
Monitor(gsm,${RecFile},bm)




Исходящий разговор:
Set(RecFile=${STRFTIME(${EPOCH},,%Y-%m/%d)}/out_${CDR(dst)}_${STRFTIME(${EPOCH},,%Y-%m-%d-%H-%M-%S)})
Set(CDR(userfield)=${RecFile}.gsm)
Monitor(gsm,${RecFile},bm)


Таким образом запись разговора будет выглядеть для входящего так:
in_7926123456_20120522.gsm
а для исходящего
out_7926123456_20120522.gsm

Также я сохраняю имя файла в специальное поле userfield записей о истории звонков командой Set.

Открываем настройки каждого внешнего провайдера, например Манго Офис, и прописываем параметры в соответствующие поля на закладке Дополнительно:


Совершаем звонок и видим что на внешнем диске начали сохраняться разговоры.


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



Причем для скачивания я написал специальный скрипт, который конвертирует запись из формата GSM в формат WAV. В итоге, скаченный файл разговора можно прослушать на любом компьютере без установки дополнительных кодеков.
Это удобно!

Хотя есть и другие способы прослушивания разговров


Другие статьи про Askozia:

Хорошего дня

Мы продаем модифицированную версию Askozia для работы с нашей линейкой панелей телефонии Asterisk для 1С. Полностью руссифицированную версию.