Интеграция с телефонией Webitel

Сложный

Интеграция с телефонией Webitel относится к first-party типу. Подробнее о типах интеграции с телефонией, которые поддерживает Creatio, читайте в статье Механизм интеграции с телефонией. Ознакомиться с Webitel можно на официальном сайте Webitel.

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

Пакеты механизма интеграции с Webitel 

Пакеты, которые реализуют логику работы механизма интеграции с Webitel:

  • WebitelCore — модули пакета содержат низкоуровневую реализацию взаимодействия с Webitel с использованием модуля Verto, а также коммуникационной панели страницы приложения Creatio.
  • WebitelCollaborations — реализация базовых интерфейсов для работы с Webitel в Creatio.

    Составляющие пакета WebitelCollaborations:

    • WebitelCtiProvider — клиентский модуль, который реализует класс WebitelCtiProvider.
    • Коннектор к Webitel.
    • Страница настройки параметров подключения.
    • Cправочник для редактирования пользователей Webitel непосредственно в приложении.
    • Привязки данных, которые необходимы для работы интеграции.

Архитектура платформы Webitel описана в официальной документации Webitel.

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

Взаимодействие между классом Terrasoft.integration.telephony.CtiModel и клиентским модулем WebitelModule выполняется через класс Terrasoft.integration.telephony.webitel.WebitelCtiProvider, который реализует интерфейс класса Terrasoft.integration.telephony.BaseCtiProvider.

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

Логика работы интеграции с Webitel:

  1. Клиентский модуль CtiProviderInitializer пакета CTIBase загружает клиентский модуль WebitelCtiProvider пакета WebitelCollaborations.
  2. Клиентский модуль WebitelCtiProvider вызывает метод init(), который выполняет авторизацию пользователя в сессии телефонии (метод LogInMsgServer() сервиса MsgUtilService.svc).
  3. Проверяет состояние авторизации пользователя в сессии телефонии. При успешной авторизации вызывает метод connect(), который проверяет наличие подключения (для свойства this.isConnected установлено значение false и this.webitel — пустое).
  4. Метод connect() запрашивает настройки подключения к Webitel, которые хранятся в системных настройках Строка подключения к Webitel (Webitel connection string, код webitelConnectionString) и Строка подключения к webRTC (webRTC connection string, код webitelWebrtcConnectionString).
  5. Метод GetUserConnection клиентского сервиса WUserConnectionService получает настройки пользователя из справочника Пользователи Webitel (Webitel users).
  6. При установленном на странице настройки параметров Webitel признаке Использовать Web-телефон (Use web phone) загружаются модули WebitelModule и WebitelVerto.
  7. Вызывается метод onConnected(). В этом методе создается глобальный объект Webitel свойства которого заполняются настройками подключения.
  8. Выполняется подписка на события объекта Webitel.
  9. Вызывается метод connect(). Этот метод выполняет подключение по WebSocket, авторизацию в Webitel и остальные низкоуровневые операции по подключению.

При возникновении события onConnect подключение считается успешным. После этого у пользователя появляется возможность работать со звонками.

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

  • Обрабатывает события объекта Webitel.
  • При необходимости генерирует события коннектора, которые описаны в классе BaseCtiProvider.

Для управления звонками клиентский модуль WebitelCtiProvider реализует абстрактные методы класса BaseCtiProvider, используя методы объекта Webitel.

Ниже приведена диаграмма последовательности исходящего звонка.

Условия исходящего звонка:

  • Оператор выполняет звонок абоненту.
  • Абонент устанавливает звонок на удержание и снимает его с удержания.
  • Оператор завершает звонок.

Порты, которые используются для подключения телефонии Webitel:

  • 871 — WebSocket-порт для подключения к Webitel-серверу и получения событий.
  • 5060 и 5080 — сигнальные порты для подключения SIP-телефонов и провайдеров телефонии.
  • 5066 — порт для подключения Web-телефона, сигнальный порт WebRTC.
  • 4004 — порт для получения записей разговоров.
Класс WebitelCtiProvider
Средний

Класс Terrasoft.integration.telephony.webitel.WebitelCtiProvider предназначен для взаимодействия коннектора телефонии Webitel с конфигурацией приложения. Получает события от коннектора к телефонии и обрабатывает их. Реализован в схеме WebitelCtiProvider клиентского модуля пакета WebitelCollaborations.

Методы 

init()

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

queryCallRecords(callId, callback)

Запрашивает записи телефонных разговоров.

Параметры
{String} callId Идентификатор абонента.
{Function} callback Функция обратного вызова.
makeCall(number)

Совершает исходящий вызов.

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

Отвечает на звонок.

Параметры
{Terrasoft.Telephony.Call} call Звонок.
dropCall(call)

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

Параметры
{Terrasoft.Telephony.Call} call Звонок.
makeConsultCall(call, targetAddress)

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

Параметры
{Terrasoft.Telephony.Call} call Звонок.
{String} targetAddress Номер телефона.
cancelTransfer(currentCall, consultCall)

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

Параметры
{Terrasoft.Telephony.Call} currentCall Текущий звонок.
{Terrasoft.Telephony.Call} consultCall Консультационный звонок.
transferCall(currentCall, consultCall)

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

Параметры
{Terrasoft.Telephony.Call} currentCall Текущий звонок.
{Terrasoft.Telephony.Call} consultCall Консультационный звонок.
holdCall(call)

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

Параметры
{Terrasoft.Telephony.Call} call Звонок.
blindTransferCall(call, targetAddress)

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

Параметры
{Terrasoft.Telephony.Call} call Звонок для перевода.
{String} targetAddress Номер телефона.
queryLineState()

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

queryActiveCallSnapshot()

Запрашивает коллекцию активных вызовов.

setUserState(code, reason, callback, disableReconnect)

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

Параметры
{String} code Код состояния.
{String} reason Причина изменения состояния оператора. Опциональный параметр.
{Object} callback Функция обратного вызова. Опциональный параметр.
{Boolean} disableReconnect Не выполняет попытку повторной авторизации. Опциональный параметр.
queryUserState()

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

changeCallCentreState()

Изменяет состояние пользователя в Call-центре.

getCapabilities()

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

sendDtmf(call, digit)

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

Параметры
{Terrasoft.Telephony.Call} call Звонок.
{String} digit Сигнал Dtmf.
setVideoState(call, isVideoActive, callback)

Устанавливает состояние использование видео в процессе звонка.

Параметры
{Terrasoft.Telephony.Call} call Звонок.
{Boolean} isVideoActive Указывает на использование видео в процессе звонка.
{Function} callback Функция обратного вызова.
closeConnection()

Закрывает соединение.

События 

onNewCall

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

onAcceptCall

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

onHoldCall

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

onUnholdCall

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

onDtmfCall

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

onBridgeCall

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

onUuidCall

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

onHangupCall

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

onNewWebRTCCall

Срабатывает при возникновении события новой webRtc-сессии.