Дмитрий Кайдаш
17.06.2020
42336

Интеграция Asterisk со Speech Analytics

В наше время становится возможным и популярным анализировать негативный эмоциональный оттенок сотрудников колл-центра, наличие извинений, слов-паразитов и прочих нежелательных факторов речи. Но поскольку функционал АТС на базе asterisk позволяет только произвести запись и сохранить её, для реализации желаемого функционала необходимо (производить запись требуется) объединение со сторонним сервисом. Пример работы с одним из таких мы и […]

В наше время становится возможным и популярным анализировать негативный эмоциональный оттенок сотрудников колл-центра, наличие извинений, слов-паразитов и прочих нежелательных факторов речи. Но поскольку функционал АТС на базе asterisk позволяет только произвести запись и сохранить её, для реализации желаемого функционала необходимо (производить запись требуется) объединение со сторонним сервисом. Пример работы с одним из таких мы и рассмотрим ниже.

Внимание! Отработка проводилась на оборудовании из предоставленного списка, работа на других и в особенности более старых системах не гарантируется.
  • Asterisk 13.21.0
  • PHP 5.6.36
  • Apache 2.2.15

Принцип работы сервиса подробно описан в статье «Asterisk, Cisco, Avaya, Oktell, MightyCall, Naumen и др.»

Мы же рассмотрим лишь основные моменты. Инициатором обмена информацией выступает сам сервис. Получая метаданные, а из них ссылки на записи SA работает с неким API предоставляемым со стороны АТС. Для выдачи корректных данных мы и будем проводить настройки сервера телефонии. Нам потребуется выполнить несколько шагов, попутно проводя сравнение с предыдущей версией и давая обоснования изменениям.

  1. Настройка доступа
  2. Настройка диалплана
  3. Настройка веб-сервера
  4. Размещение и настройка API-скриптов

Настройка доступа

Первый и один из самых необходимых пунктов настройки. Без его выполнения никакого прогресса не будет. Как уже говорилось ранее SA будет присылать запросы на наш web-сервер, на 443-порт. Поэтому необходимо разрешить доступ как на сетевом уровне, так в iptables при его наличии. Как с последним работать и посмотреть примеры можно на нашем сайте в статье «Защита Asterisk с помощью iptables».

Для проверки можно сразу создать в корневой директории web-сервера страницу-заглушку:

# nano /var/www/html/sapi/test.php

со следующим содержимым:

<?php
phpinfo();
?>

Если доступ настроен корректно, то перейдя по ссылке: https://ip_asterisk/sapi/test.php вы увидите страницу информации.

Проверка доступности страницы

Настройка диалплана

Поскольку во внутренней базе данных asterisk хранится недостаточное количество данных, нам придётся немного его модифицировать. Начнём с простого: источник завершения звонка. Параметр второстепенный, однако при возможности его необходимо хранить и передавать. Поэтому открываем на редактирование контекст в котором заканчиваются все звонки (для примера у нас это macro-hangupcall) и добавляем в него следующую строку:

Set(CDR(userfield)=${CHANNEL(hangupsource)})
Внимание! При использовании FreePBX контекст не правится в том файле в котором находится (…_additional.conf)! В этом случае при следующем перечитывании настроек все изменения будут стёрты. Правильно брать нужные контекст и экстен в нём, копировать в файл /etc/asterisk/extensions_override_freepbx.conf и уже в нём проводить модификации.

Должно получится следующее:

Источник сброса звонка

Ещё одной специфической настройкой является разделение каналов клиента и оператора — это необходимо для избежания наложения речи обоих сторон. Формально, файл разговора остаётся по-прежнему один, но в нём присутствуют два канала не наложенные друг на друга. Реализовать этот функционал нам так же поможет диалплан.

Находим в файле /etc/asterisk/extensions_additional.conf ВСЕ(!) контексты и экстены в которых есть применение приложения MixMonitor и переносим, аналогично предыдущему шагу, в файл перезаписи. Далее нам нужно заменить это приложение на Monitor с особыми параметрами. Вот такая строка была бы ДО:

; exten => recordcheck,n,MixMonitor(${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}.${MON_FMT},abi(LOCAL_MIXMON_ID)${MIXMON_BEEP},${MIXMON_POST})

Вот такая должна быть на её месте ПОСЛЕ:

exten => recordcheck,n,Set(MONITOR_EXEC_ARGS=&& /bin/rm -f ${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}-*)
exten => recordcheck,n,Set(MONITOR_EXEC=/usr/bin/sox -M)
exten => recordcheck,n,Monitor(${MIXMON_FORMAT},${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME},m)
exten => recordcheck,n,Dumpchan()
Внимание! Крайне внимательно относитесь к указанию экстенов в отдельных переносимых контекстах, один неправильный символ может привести к потере важных разговоров.
Внимание! Поскольку здесь совместно с разделением и склеиванием идёт удаление, следует лишний раз проверить путь к приложению удаления файлов.
# whereis rm
Приложение удаления

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

Внимание! В некоторых случаях переменная ${MIXMON_DIR} в строке удаления является пустой. В этом случае следует прописать абсолютный путь к корневому каталогу хранения записей. По-умолчанию это /var/spool/asterisk/monitor/

Закрываем файлы с сохранением изменений и перечитываем настройки командой:

# asterisk -rx "dialplan reload"

Теперь если сделать звонок и всё было настроено правильно запись будет писаться в два файла и канала соответственно, после чего утилитой SOX они будут слиты в один файл, а дорожки-источники удалены.

Визуально при этом ничего не изменится: все файлы будут носить те же названия и останутся доступны другим системам для прослушивания и воспроизведения.

Записи на диске

Например, внутри модуля FreePBX — CDR Reports.

Записи в cdr-reports

Однако если взглянуть на записи через редактор, допустим AudaCity мы сразу заметим отличие

Запись в редакторе

Внутри одного файла стереозапись строго разграниченная по каналам. Если её воспроизводить в наушниках из одного будет говорить оператор, из второго клиент.

Настройка веб-сервера

Сразу заметим, что для отдачи файла согласно общим требованиям REST API будет использоваться не непосредственно php или apache, а дополнительный модуль xsend_file. Установить его можно командой:

# yum install mod_xsendfile* -y
Установка модуля передачи файлов

Далее перейдём к настройке рабочей директории. Открываем на редактирование файл:

# nano /etc/httpd/conf.d/<distr_name>.conf

И добавляем в его конец следующие строки:

<Directory /var/www/html/sapi>
        AllowOverride All
        Require all granted
        XSendFilePath /var/spool/asterisk/monitor
</Directory>

Здесь мы разрешили доступ всем авторизованным пользователям, переопределение настроек apache локальными файлами .htaccess+.htpasswd, а также задали корневую директорию для модуля передачи файлов.

Настройки директории
Внимание! Если файл записи скачивается, но ничего не весит проверить именно строку с указанием пути к каталогу записей.

Сохраняем изменения в файле и перечитываем настройки командой:

# httpd reload
Внимание! Можно использовать и httpd restart, но это прервёт работу текущих сессий.
Внимание! Для centos 7+ команда будет выглядеть как: # systemctl reload httpd.service

Размещение и настройка API-скриптов

Последним, но не менее важным является размещение скриптов сбора и передачи информации. Их можно написать, как самостоятельно, так и использовать готовые. Главное при наличии разместить их в заранее подготовленной директории.

Размещение скриптов на сервер

Первым делом закончим с настройками apache и директории. Для этого ознакомимся с содержимым управляющих файлов .htaccess+.htpasswd. В первом будет примерно следующее:

Настройки htaccess

Здесь мы задали авторизацию при доступе в директорию, запретили вывод файла с данными через браузер и разрешили работу модуля передачи файлов.

Внимание! Путь к файлу .htpasswd должен быть абсолютным и строго совпадать с реальным. Лучше всего его обновить через файлообменник и копирование путей
Получение пути к файлу пароля

Внутри самого файла должны содержаться список логинов и паролей, под которыми разрешено использовать сервис. Сгенерировать их можно на сайте «Web-технологии», или через консоль командой htpasswd. Достаточно заполнить форму и сгенерированные данные перенести в файлы.

Список логинов и паролей

Если всё настроено правильно при обращении по ссылке: https://ip_asterisk/sapi/test.php мы должны получить приглашение пройти авторизацию.

basic auth

Теперь всё что нам осталось выставить настройки в файле конфигурации API. Пойдём максимально простым путём и не будем ничего создавать — всё возьмем имеющееся.

Версию asterisk подсмотрим в консоли

Настройка различий в cel

Это один из важных моментов: некоторые события звонка в таблице CEL в версиях до 11 и после отличались, что приводило к проблемам миграции приложений работающий с базой.

Если речь зашла о базе данных — самое время предоставить API к ней доступы. Их можно взять из файла настроек FreePBX.

# nano /etc/freepbx.conf
Доступы в базу данных

И последнее: путь к уже не раз упомянутой корневой директории хранения записей.

Путь к записям

И для собственной уверенности проведем ряд тестов непосредственно из браузера (предварительно пройдя авторизацию).

1. Получим список номеров и имен операторов, выполнив запрос: https://192.168.170.107/sapi/calls.php?operators

Список операторов

2. Проведём тест настроек и директорий:

https://192.168.170.107/sapi/calls.php?test

Проверка настроек

Заключение: таким образом мы подготовили Asterisk к работе с сервисом речевой аналитики Speech Analytics. Нам остаётся передать ссылку на API-скрипт специалистам поддержки SA, после чего будет создан личный кабинет и запущена обработка разговоров.

Если возникнут вопросы, комментарии или непосредственная задача проведения интеграции — обращайтесь к нашим специалистам.

Подписаться
Уведомление о
guest
0 Комментарий
Inline Feedbacks
View all comments

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

Я - Кондрашин Игорь, менеджер компании 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 сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.