Механизм интеграции с телефонией

Сложный

Назначение интеграции с телефонией — управление звонками из интерфейса приложения. Creatio позволяет настроить интеграцию с автоматическими (АТС) и офисными (Private Branch Exchange, PBX) телефонными станциями. Об АТС читайте в Википедии. О PBX читайте в Википедии.

Инструменты, которые предоставляет Creatio для управления звонками:

  • Коммуникационная панель.
  • Раздел Звонки (Calls).

Действия, которые позволяет выполнять коммуникационная панель:

  • Отображает входящий звонок пользователю приложения. При этом используется поиск контакта/контрагента по номеру звонящего.
  • Выполняет звонок из приложения в один клик.
  • Управляет звонком (ответить, поставить/снять с удержания, завершить, перевести) в Creatio.
  • Отображает историю звонков для удобного управления связями звонков или возможностью перезвонить.

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

Действия, которые позволяет выполнять раздел Звонки (Calls):

  • Сохраняет входящие и исходящие звонки.
  • Отображает временные характеристики (дата начала, дата завершения, длительность разговора) звонка.
  • Отображает связанный контакт/контрагент.

Чтобы использовать функциональность телефонии, выполните настройку интеграции с соответствующим коннектором телефонии. Для этого воспользуйтесь одной из инструкций, которая приведена в блоке статей Коннекторы к телефонии.

Возможности АТС описаны в статье Сравнение возможностей интеграции с различными АТС. По умолчанию в приложении настроена интеграция с сервисом телефонии Webitel.

Типы интеграции с телефонией 

Типы интеграции с телефонией, которые поддерживает Creatio:

  • first-party — интеграция с телефонией реализована на front-end стороне приложения.
  • third-party — интеграция с телефонией реализована на back-end стороне приложения.

first-party интеграция 

Тип интеграции first-party используется для коннекторов Webitel и Finesse. Для интеграции с коннектором Webitel используется протокол WebSocket. О протоколе WebSocket читайте в Википедии. Для коннектора Finesse используются long-polling http-запросы. О long-polling http-запросах читайте в официальной документации PubHub.

first-party интеграция подразумевает создание отдельного интеграционного подключения к серверу телефонии для каждого пользователя (т. е. путем использования интеграционной библиотеки коммуникационная панель из браузера напрямую выполняет подключение к API сервера телефонии). В этом подключении выполняется обработка событий АТС. При first-party интеграции Creatio из браузера интегрируется с JavaScript-адаптером.

Виды взаимодействия при first-party интеграции:

  • Cтраница Creatio взаимодействует с сервером приложения по протоколу HTTP(S) для авторизации.
  • Страница Creatio, которая содержит элементы телефонии, взаимодействует с клиентской JavaScript-библиотекой, которая, как правило, предоставляется производителем АТС, путем отправки событий и принятия JavaScript-команд.
  • Клиентская JavaScript-библиотека взаимодействует с АТС через API АТС.

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

При исходящем звонке front-end часть приложения генерирует команду начала звонка, которая по WebSocket передается на сервер телефонии.

third-party интеграция 

Тип интеграции third-party используется для коннекторов API-телефонии (Asterisk, Avaya, Callway, Ctios, Infinity, Infra, Tapi).

third-party интеграция подразумевает создание одного подключения к серверу телефонии для всех пользователей. В этом подключении выполняется обработка событий АТС. Для распределения информационных потоков разных пользователей используется Creatio Messaging Service (CMS). Creatio Messaging Service (CMS) — Windows proxy-служба, которая является универсальным хостером библиотек интеграции с АТС. Позволяет взаимодействовать с АТС путем использования библиотеки-адаптера производителя АТС. Все события телефонии проходят через CMS. При получении клиентских подключений CMS автоматически подключает используемую Creatio библиотеку и инициирует подключение к АТС. Фактически, CMS является функциональной оберткой для коннекторов телефонии, которые не поддерживают first-party интеграцию. Это позволяет из браузера взаимодействовать с функциональностью телефонии в браузере путем генерации и обработки событий, а также передачи данных.

Виды взаимодействия при third-party интеграции:

  • Cтраница Creatio взаимодействует с сервером приложения по протоколу HTTP(S) для авторизации.
  • CMS взаимодействует с сервером приложения по протоколу HTTP(S) для отправки запроса сохранения информации о звонке в базе данных.
  • CMS взаимодействует с браузером по протоколу WebSocket. CMS передает браузеру события (начало звонка, завершение звонка, изменение статуса оператора и т. д.) телефонии. Браузер передает CMS команды управления (выполнение звонка, постановка звонка на удержание, завершение звонка, изменение статуса оператора и т. д.) звонком.
  • Библиотека-адаптер взаимодействует с АТС через API АТС.

При входящем звонке сервер телефонии передает событие начала нового звонка и его параметры через библиотеку-адаптер на хост с CMS. В ответ на отправленное событие CMS генерирует событие RingStarted, которое передается на страницу приложения.

При исходящем звонке front-end часть приложения генерирует команду начала звонка, которая по WebSocket передается в CMS. В ответ на отправленную команду CMS генерирует событие исходящего звонка для АТС.

Реализация взаимодействия коннекторов с Creatio 

Все коннекторы взаимодействуют с конфигурацией приложения через класс Terrasoft.integration.telephony.CtiModel, который получает события от коннектора и обрабатывает их.

Класс CtiModel описан в Библиотеке JS-классов.

Класс CtiModel
Средний

Класс CtiModel предназначен для взаимодействия коннекторов телефонии с конфигурацией приложения. Класс получает события от коннекторов к телефонии и обрабатывает их. Класс CtiModel описан в Библиотеке JS-классов.

Свойства 

ctiProvider Terrasoft.BaseCtiProvider

Провайдер интеграции с телефонией.

activeCalls Terrasoft.Collection

Активные вызовы по телефонной линии.

reconnectTryCount Number

Количество попыток повторного подключения.

maxReconnectTryCount Number

Максимальное количество попыток повторного подключения.

reConnectTimerId Number

Идентификатор таймера переподключения.

columns Object

Колонки.

Свойства конфигурационного объекта
{Number} LineFeatures Набор доступных операций линий.
{Terrasoft.Telephony.Call} CurrentCall Базовый вызов модели.
{Terrasoft.Telephony.Call} LastCall Последний базовый вызов модели.
{String} CurrentCallNumber Номер абонента основного вызова.
{String} ConsultCallNumber Телефон консультанта.
{String} AgentState Код состояния оператора.
{String} AgentStateReason Код причины состояния оператора.
{Boolean} IsConnected Признак, который указывает активное подключение к интеграции с телефонией.
{Boolean} IsConsulting Признак, который указывает статус консультационного вызова.
{Boolean} IsCallCentreActive Признак, который указывает, что оператор находится в режиме Call-центра.

Методы 

constructor()

Создает объект линейной модели.

init(config)

Инициализирует объект модели.

Параметры
{String} config Конфигурационный объект.
connect(config, callback)

Инициализирует соединение.

Параметры
{Object} config Массив параметров соединения.
{Function} callback Флаг успешного выполнения функции объекта и ошибки в случае сбоя.
makeCall(targetAddress)

Совершает звонок на указанный номер.

Параметры
{String} targetAddress Номер телефона.
answerCall()

Отвечает на текущий вызов.

dropCall()

Завершает текущий вызов.

holdOrUnholdCall()

Поставляет текущий вызов на удержание или снимает его с удержания.

makeConsultCall(targetAddress)

Выполняет консультационный звонок по указанному номеру.

Параметры
{String} targetAddress Номер телефона.
transferCall()

Завершает передачу текущего вызова.

cancelTransfer()

Отменяет передачу текущего вызова.

blindTransferCall(targetAddress)

Безусловно переводит звонок.

Параметры
{String} targetAddress Номер телефона.
sendDtmf(digit)

Отправляет текущий сигнал Dtmf.

Параметры
{String} digit Сигнал Dtmf.
mute()

Отключает звук текущего вызова.

queryLineState()

Обновляет флаги состояний линии.

queryAgentState()

Запрашивает состояние агента.

setAgentState(code, reason, callback)

Устанавливает состояние агента.

Параметры
{String} code Код состояния.
{String} reason Причина изменения состояния.
{Object} callback Функция обратного вызова.
getCanCall()

Получает возможность выполнить вызов в текущем состоянии линии.

getCanAnswer()

Получает возможность ответить на звонок.

getCanHoldOrUnhold()

Получает возможность поставить на удержание или убрать с удержания основной звонок.

getCanHold()

Получает возможность поставить основной вызов на удержание.

getCanMute()

Получает возможность отключить звук вызова.

getCanUnhold()

Получает возможность снять основной вызов с удержания.

getCanDrop()

Получает возможность завершить вызов.

getCanSetupTransfer()

Получает возможность начать подготовку к переводу вызова.

getCanMakeConsultCall()

Получает возможность сделать консультационный звонок.

getCanTransfer()

Получает возможность завершить перевод вызова.

getCanCancelTransfer()

Получает возможность отменить перевод вызова.

getCanBlindTransfer()

Получает возможность безусловного перевода вызова.

getCanMakeConsultCallOrBlindTransfer()

Получает возможность сделать консультационный звонок или слепой перевод.

getCanDtmf()

Получает возможность отправить сигнал Dtmf.

getCanGetCallRecords()

Получает возможность получить записи звонков.

getLastAbonentNumber()

Получает номер последнего абонента.

События 

callBusy

Срабатывает при переводе звонка в состояние "Занят" (только телефония TAPI).

callFinished

Срабатывает после завершения звонка.

callSaved

Срабатывает после создания или обновления звонка в базе данных.

callStarted

Срабатывает при начале нового вызова.

commutationStarted

Срабатывает после установки соединения звонка.

connected

Срабатывает при установке соединения с производителем телефонии.

destroyed

Срабатывает после уничтожения экземпляра объекта.

disconnected

Срабатывает при отключении провайдера.

dtmfEntered

Срабатывает, если в линию были отправлены сигналы Dtmf.

hold

Срабатывает после постановки звонка на удержание.

unhold

Срабатывает после снятия звонка с удержания.

webRtcDestroyed

Срабатывает при завершении webRtc-сессии.

webRtcStarted

Срабатывает при старте webRtc-сессии.

webRtcVideoStarted

Срабатывает при старте видеопотока webRtc-сессии.

initialized

Срабатывает при завершении инициализации провайдера.

error

Срабатывает при возникновении ошибки.

lineStateChanged

Срабатывает после изменения набора доступных операций линии или звонка.

agentStateChanged

Срабатывает после изменения состояния агента.

activeCallSnapshot

Срабатывает при актуализации перечня активных звонков.

rawMessage

Обобщенное событие в провайдере. Срабатывает при любом событии провайдера.

currentCallChanged

Срабатывает при изменении основного звонка. Например, завершается основной звонок при консультации.

callCentreStateChanged

Срабатывает при входе или выходе оператора из режима Call-центр.

callInfoChanged

Срабатывает при изменении данных звонка по идентификатору в базе данных.