Asterisk: Общие сведения о настройке интеграции

Введение

Asterisk очень доступный инструмент для создания компьютерной телефонии внутри компании. Вместе с этим у Asterisk'a нет одного способа поставки и способа использования, поэтому настройка интеграции конкретной установки Asterisk должна производиться ответственным сотрудником компании.

Порядок действий при подключении

  1. Получить от Qolio доступ к аккаунту админа в вашем кабинете.

  2. Для начала со стороны телефонии нужно определить следующие вещи:

    • где будут храниться записи звонков и как к этим записям можно получить доступ по 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

  3. Добавить пользователей, по которым будут приходить звонки в Qolio (если этого не сделать, звонки, переданные по API сохраняться не будут). Пользователь добавляет админ телефонии либо другой сотрудник компании.

    Для импорта звонков пользователи должны быть загружены в систему DealApp, а так же быть активными и назначенными на отдел.

  4. Далее следует настроить структуру компании и распределить пользователей по отделам. В дальнейшем звонки будут добавляться к тем отделам, в которых состоят пользователи.

  5. Разработать расширение для телефонии, которая будет передавать через 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, которое необходимо для подключения к этой базе. В общем случае это значение можно найти в файле /etc/asterisk/cdr_adaptive_odbc.conf

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

Was this helpful?