Настройка сервера IP АТС на базе Asterisk для интеграции с сервисом Speech2Sales
Описание: в этой статье будет описана последовательность действий для интеграции с сервисом речевой аналитики speech2sales. Сервис аналитики может принимать данные в двух режимах: На собственный, индивидуальный для каждого клиента, FTP-сервер. Через REST-API. Рассмотрим подробнее наиболее часто используемый – FTP. При работе в этом режиме файл записи загружается на выделенный хостинг, как и сопроводительные мета-данные, обёрнутые […]
Описание: в этой статье будет описана последовательность действий для интеграции с сервисом речевой аналитики speech2sales.
Сервис аналитики может принимать данные в двух режимах:
- На собственный, индивидуальный для каждого клиента, FTP-сервер.
- Через REST-API.
Рассмотрим подробнее наиболее часто используемый – FTP. При работе в этом режиме файл записи загружается на выделенный хостинг, как и сопроводительные мета-данные, обёрнутые в xml-файл. Но перед отправкой нам предстоит выполнить запись, в нужном формате, а также собрать данные о звонке. Для этого нам потребуется:
- Изменить режим записи – из одной дорожки сделать две, а затем склеить их в одну не объединяя каналы
- Подключиться к внутренней БД, собрать данные о звонке и сформировать *.xml файл с необходимой разметкой
- Подключиться к FTP и загрузить оба файла
Изменение режима записи
Как правило сервисы распознавания работают с записями в стерео-режиме. Это значит, что канал клиента и оператора находятся отдельно друг от друга и их анализ можно производить поочерёдно не накладывая.
Минимальные настройки для сохранения в стерео заключаются в замене оператора MixMonitor на Monitor с последующим вызовом приложения Sox. Пример показан ниже:
; change begin
; before
;exten => recordcheck,n,MixMonitor(${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}.${MON_FMT},a${MONITOR_REC_OPTION}i(LOCAL_MIXMON_ID)${MIXMON_BEEP},${MIXMON_POST})
; after
exten => recordcheck,n,Set(MONITOR_EXEC_ARGS=&& /bin/rm -f /var/spool/asterisk/monitor/${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}-*)
exten => recordcheck,n,Set(MONITOR_EXEC=/usr/bin/sox -M)
exten => recordcheck,n,Monitor(${MON_FMT},${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME},m)
; change end
Подробнее процесс описан в статье об интеграции с аналогичным сервисом speech analytics.
Таким образом, мы подготовили файл записи.
Подключение к внутренней БД
Для работы с MySQL был выбран класс с открытым исходным кодом под PHP: safemysq.class.php. Подробности о нём можно узнать по ссылке. Нас же интересует его возможность подключения к БД и выполнение инъективно-безопасных запросов.
Для создания файла будем использовать встроенную функцию php – file_put_contents.
Итак, создадим на АТС, в веб-директории новую:
# mkdir /var/www/html/s2s
А в неё перенесём файлы из архива и немного скорректируем settings.php:
$mysql_account = array(
// 'host' => 'localhost',
// 'port' => '3306',
// 'charset' => 'utf8',
'user' => 'freepbxuser',
'password' => 'a01b********************948',
'database' => 'asteriskcdrdb'
);
Секции, стоящие за комментариями – не следует менять, если используемые значения соответствуют указанным по-умолчанию. Логин и пароль можно получить из файла: /etc/<dist_name>.conf, например:
Если доступы указаны корректно, основной скрипт сможет подключиться к базе данных и выполнять запросы, а значит и файл *.xml с метаданными будет сформирован.
Подключение к FTP и загрузка
Для работы с FTP был разработан примитивный класс ftpupload.class.php.
Рассмотрим его методы:
Конструктор получает данные подключения, к удалённому серверу:
- Хост.
- Порт.
- Логин.
- Пароль.
getState() — это проверка соединения с FTP. Не принимает аргументов, возвращает true\false – статус соединения.
sendFile($sendPathFile) – в качестве аргумента принимает абсолютный или относительный путь к файлу, который нужно отправить на FTP. При наличии корректно установленного подключения и файл находится по указанному пути – выполняется его отправка.
Деструктор класса уничтожает данные, с которыми оперировал класс.
Доступы к FTP сервису мы получаем у представителей speech2sales и указываем в файле settings.php
$ftp_account = array(
'host' => 'sftp.neurocat.ru',
'user' => 'fuserApiV',
'password' => 'MV[sG2p0',
'ftpPath' => 'data/calls/'
);
Если всё будет указано верно мы получим доступ к FTP-серверу.
Последнее, что нам предстоит выполнить, это навесить корневой скрипт на завершение звонка, с передачей ему двух аргументов: Linkedid и наименование файла записи.
;change begin
exten => s,n,System(/usr/bin/php -f /var/lib/asterisk/agi-bin/send_s2s_calls.php ${CHANNEL(Linkedid)} ${ARG1} & disown -h)
;change end
Далее скрипт будет подключаться к внутренней базе данных asterisk.cel, asterisk.cdr и формировать *.xml файл с мета-данными. По готовности и файл записи разговора и файл с данными будут загружены на FTP-сервер.
Обратите внимание: файл мета-данных всегда должен быть строго структурирован по следующему шаблонку:
<?xml version='1.0' encoding='UTF-8'?>
<analysisTask>
<workspace>UNKNOWN</workspace>
<cc-agent>2103</cc-agent>
<timestamp>2021-05-28 10:14:49</timestamp>
<filename>out-4959842499-2103-20210528-101449-1622186089.66738.wav</filename>
<cc-task>1622186089.66738</cc-task>
<channel type='a' caller='true' ccAgentID='2103' value='Зиновьева Кристина' />
<channel type='c' disconnect='true' value='84959842499' />
</analysisTask>
Где:
workspace – остаётся без изменений,
cc-agent – внутренний номер оператора компании,
timestamp – время начала звонка,
filename – наименование файла записи (строго должно соответствовать загружаемому файлу записи),
cc-task – уникальный идентификатор звонка, так же используется для индексации на стороне сервиса,
channel type=’a’ – канал агента компании,
caller=’true’ – инициатор вызова,
ccAgentID – внутренний номер оператора компании,
value – ФИО оператора компании,
channel type=’c’ – канал клиента компании,
disconnect=’true’ – источник завершения вызова,
value – номер клиента компании.
В качестве дополнительной опции рассмотрим установку интерфейса управления доступом сервиса к внутренним номерам. Для этого добавляем из архива скрипт index.php в созданную ранее директорию /var/www/html/s2s.
А также выполняем в mysql запросы:
> create table s2sactive(
id varchar(20) NOT NULL DEFAULT '',
state varchar(5) NOT NULL DEFAULT 'off',
KEY `id` (`id`)
);
Первый создаст таблицу для интерфейса с двумя полями внутренний номер и его статус.
> INSERT INTO s2sactive (id, state) SELECT id, 'off' FROM asterisk.devices;
Второй скопирует все внутренние номера операторов из базы asterisk.devices с присвоением им статуса – недоступен.
Теперь если вы перейдёте по локальному адресу сервера и добавите нужную директорию: http://<ip_asterisk> /s2s/
У вас откроется страница настройки.
Принцип его действия сходен с freepbx – отмечаете нужные номера \ фамилии, и нажимаете в правом нижнем углу «сохранить». После этого страница будет обновлена, а выделенные пользователи останутся помеченными.
Если вы не видите нужного пользователя в таблице – возможно его добавили недавно и таблицы не синхронизированы. В этом случае потребуется выполнить синхронизацию вручную через кнопку слева снизу «синхронизировать».
На этом моменте мы получили приложение, которое умеет:
- Формировать записи разговоров в стерео-режиме.
- Подключаться к внутренней БД.
- Формировать *.xml файлы с метаданными о звонке.
- Подключаться к FTP-серверу и загружать на него файлы.
- Запрещать и разрешать загрузку звонков конкретных операторов.
Остались вопросы?
Я - Компаниец Никита, менеджер компании 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 сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.
«Для этого добавляем из архива скрипт index.php в созданную ранее директорию /var/www/html/s2s.» — а этот архив где-то качаем или получаем от speech2sales?