Asterisk: Общие сведения о настройке интеграции
Введение
Asterisk очень доступный инструмент для создания компьютерной телефонии внутри компании. Вместе с этим у Asterisk'a нет одного способа поставки и способа использования, поэтому настройка интеграции конкретной установки Asterisk должна производиться ответственным сотрудником компании.
Порядок действий при подключении
Получить от Qolio доступ к аккаунту админа в вашем кабинете.
Для начала со стороны телефонии нужно определить следующие вещи:
где будут храниться записи звонков и как к этим записям можно получить доступ по http(s). В системе есть возможность настроить доступ через S3 совместимое облачное хранилище и настроить доступ к хранилищу с basic http авторизацией.
по какому атрибуту будет привязываться звонок к оператору внутри Qolio. Для этой привязки используется поле operator_id в API запросе https://wiki.qolio.io/qolio-or-baza-znanii/integracii/podklyuchenie-po-api/sozdanie-i-upravlenie-polzovatelskimi-polyami-pri-integracii-po-api
Добавить пользователей, по которым будут приходить звонки в Qolio (если этого не сделать, звонки, переданные по API сохраняться не будут). Пользователь добавляет админ телефонии либо другой сотрудник компании.
Настроив пользователей вручную (https://wiki.qolio.io/qolio-or-baza-znanii/integracii/podklyuchenie-po-api/dobavlenie-i-nastroika-polzovatelei-cherez-api) или загрузив их через CSV файл (подробнее https://wiki.qolio.io/qolio-or-baza-znanii/integracii/podklyuchenie-po-api/dobavlenie-i-nastroika-polzovatelei-cherez-api) в настройках API интеграции
Создавать и настраивать пользователей через API (https://wiki.qolio.io/qolio-or-baza-znanii/integracii/podklyuchenie-po-api/sozdanie-csv-faila-dlya-dobavleniya-polzovatelei-pri-integracii-po-api, кроме этого в этой статье описано, как с помощью python скрипта настраивать пользователей через CSV файл)
Для импорта звонков пользователи должны быть загружены в систему DealApp, а так же быть активными и назначенными на отдел.
Далее следует настроить структуру компании и распределить пользователей по отделам. В дальнейшем звонки будут добавляться к тем отделам, в которых состоят пользователи.
Разработать расширение для телефонии, которая будет передавать через http запросы на DealApp API информацию о совершенных звонках на телефонии. Информацию про API запросы, которые нужно делать для импорта звонков телефонии. Так же можно попробовать делать запросы со страницы настройки интеграции. Далее в этой статье описан пример создания скрипта для синхронизации данных.
Для последующей эксплуатации необходимо продумать, как будут обновляться пользователи, какие роли будут в системе, как они будут взаимодействовать и так далее. На этом моменте технические задачи заканчиваются.
Пример создания скрипта для синхронизации данных Asterisk по API
Для успешной работы Qolio должен принимать данные о телефонных звонках через API по http(s). Для упрощения работы используется "Custom HTTP интеграция", подробности о которой можно почитать тут: https://wiki.qolio.io/qolio-or-baza-znanii/integracii/podklyuchenie-po-api/integraciya-po-api-dlya-ip-telefonii-i-chatov
Qolio необходимо принимать следующие данные о звонках:
ID оператора в системе (operator_id) - это идентификатор оператора в системе, с которым связан звонок.
Длительность (duration) и направление звонка (direction)
Номер звонящего клиента (client_phone_number)
URL Ссылку на запись разговора (media_url), по которой можно получить доступ к записи разговора. Эта ссылка будет передаваться в плеер сервиса Qolio.
Также есть возможность расширить набор этих данных через поле metacontent (custom_fields). Подробности можете прочитать в статье про Custom HTTP интеграцию.
В данной статье приводится пример работы, которую можно выполнить, чтобы подключить Asterisk к DealApp
Порядок работы
Самым популярным способом интеграции Asterisk с Qolio является следующий сценарий:
создается systemd сервис, который запускается периодически каждые пол часа как cron job
этот сервис запускает скрипт, который подключается к базе данных и вытаскивает данные о звонках за последнее время
далее скрипт преобразовывает данные из базы данных в необходимый JSON формат и отправляет их в Qolio
Далее будет приведен примеры сервисов, которые были созданы на основе Red Hat Linux (Linux ats 3.10.0) с Asterisk 13.32.0, Python 2.7.5 и Mysql 5.5 (Ver 15.1 Distrib 5.5.65-MariaDB). Python был выбран как скриптовой язык из-за того, что он с большой вероятностью будет находиться в дистрибутиве с Asterisk.
Чаще всего записи телефонных звонков доступны через сетевое хранилище и телефонный разговор в нем можно найти по названию файла, которое храниться в базе CDR.
Скрипт для загрузки телефонных звонков в DealApp
Первым делом подготовим папку и необходимые пакеты для работы скрипта:
В папке /etc/dealapp-sync
будет храниться все данные о синхронизации, в том числе и файлик со временем последней синхронизации.
Нам необходимо так же установить pip пакет mysql-connector-python
для работы с mysql базы данных и requests
для того, чтобы делать http запросы в DealApp сервис.
Далее рассмотрим сам скрипт для синхронизации. Данный скрипт является примером и в конкретном случае его скорее всего придется изменять.
Содержание скрипта /etc/dealapp-sync/bin/dealapp-sync
В этом скрипте есть следующие константы:
Константы
Название | Описание |
---|---|
INTEGRATION_URL | Значение AUTHORIZATION_TOKEN берется из модального диалога интеграции (Токен интеграции) |
AUTHORIZATION_TOKEN | Значение INTEGRATION_URL берется из модального диалога интеграции (URL интегрируемого приложения) |
RECORDS_STORAGE_BASE_URL | Адрес сетевого хранилища записей. В этом виде может выступать адрес S3 bucket или ссылка nginx сервер, который раздает звонки |
DEFAULT_CONFIG_PATH | Адрес на файл со временем последней синхронизации |
INTERNAL_NUMBER_MATCHER | С помощью этого регулярного выражения проверяется являться данный телефонный разговор внутренним или нет |
CDR_DATABASE_NAME | Название базы данных CDR, которое необходимо для подключения к этой базе. В общем случае это значение можно найти в файле |
PhoneCall класс используется для того, чтобы принимать данные из базы данных и сериализовать их в значения, которые ожидает получить Qolio.
Название метода | Описание |
---|---|
is_valid | Позволяет определить стоит ли экспортировать этот телефонный звонок (например, если звонок не состоялся или состоялся между внутренними номерами) |
is_incoming | Определяет, является ли телефонный звонок входящим |
direction | Возвращает значения "incoming" или "outcoming" в зависимости от направления разговора |
duration | Длительность разговора в секундах. Обратите внимание, что здесь мы берем значение из поля billsec в базе данных, так как оно отображает реальную длительность разговора между оператором и клиентом без времени ожидания. |
operator_id | Идентификатор оператора в системе. В нашем случае это значение его внутреннего номера, это значение должно быть настроено в системе DealApp. |
client_phone_number | Телефонный номер клиента, с которым происходил разговор |
started_at | Время разговора в ISO8601 формате |
media_url | Ссылка на запись разговора, которая будет использоваться в плеере внутри DealApp. В нашем случае ссылка формируется из адреса хранилища данных, данных о дате звонка и названия записи |
Описаний функций скрипта
Name | Описание |
---|---|
get_last_export_timestamp | Получает время последней синхронизации с DealApp. Далее это время используется, чтобы доставать информацию о звонках из базы CDR |
save_last_export_timestamp | Записывает время последней успешной синхронизации с DealApp в файл |
read_phone_calls_from_database | Делает запрос в базу данных на получение записей после определенного времени и оборачивает результат в объекты типа PhoneCall |
send_phone_calls_to_dealapp | Принимает список телефонных звонков, преобразует их в JSON и отправляет на сервис DealApp |
Создание systemd сервиса для синхронизации
Сервис для вызова скрипта будет выглядеть следующим образом:
Сервис для периодического вызова скрипта для синхронизации будет выглядеть так:
Затем создадим скрипты для systemd сервиса и таймера
Last updated