Веб-интеграция

Объединение Октелл с веб-системой — CRM, порталом, отраслевым сервисом — делается в два этапа, и путать их не стоит: у них разные зоны ответственности.

ЭтапЧто настраиваетсяЗа что отвечает
Серверная интеграция Канал обмена данными между сервером Октелл и сервером веб-системы Всё, что должно быть записано и не потеряно: история звонков, пропущенные, длительность, ссылки на записи
Клиентская интеграция Интерфейс передачи команд телефонии от браузера к серверу Октелл Действия пользователя здесь и сейчас: принять, позвонить, перевести, собрать конференцию
Не поручайте браузеру запись событий Канал клиентского интерфейса не годится для фиксации событий в базе веб-системы — сохранения информации о входящих и пропущенных звонках. Если за это отвечает браузерное приложение, то при его недоступности информация будет потеряна безвозвратно: браузер закрыли, вкладку перезагрузили — событие не записано.

Для учёта таких событий используйте только методы серверной интеграции.

Что должно получиться

СценарийЧто происходит
Входящий звонок Октелл опознаёт абонента по CallerId, набранному номеру и времени звонка, спрашивает у веб-системы тип клиента и ответственного менеджера, маршрутизирует звонок этому сотруднику — и у него в браузере открывается карточка клиента.
Исходящий звонок Менеджер открывает карточку и нажимает «Позвонить». Линии и направления выбираются настройками Октелл. Если абонент занят или недоступен, менеджер видит статус звонка.
Внутренние звонки В веб-системе видны внутренние номера сотрудников и их статусы — свободен, занят, в перерыве, недоступен, — можно позвонить коллеге или собрать конференцию.
История и статистика При каждом звонке Октелл просит веб-систему создать «активность», привязанную к карточке клиента или заказа: дата, номер, участники, комментарий менеджера, длительность, ссылка на запись.

Серверная интеграция

Как это работает

Между серверами организуется канал двустороннего обмена сообщениями. Соединение устанавливает сервер Октелл — он подключается к веб-системе, а не наоборот. Установив соединение, Октелл запрашивает у веб-системы перечень доступных для исполнения методов. Эти методы называются динамическими; получив их список, Октелл показывает их в компоненте сценариев «CRM-действие».

Как выглядят динамические методы на практике Обычно их два, и этого достаточно для большинства задач.

«Получить информацию о клиенте по номеру телефона». При входящем или исходящем звонке сценарий вызывает метод, передаёт номер и получает в ответ всё, что нужно для маршрутизации.

«Занести информацию о звонке». По завершении звонка передаются идентификатор клиента, имя менеджера, время и длительность разговора, ссылка на запись.

По тому же соединению веб-система может обратиться к Октелл: получить данные по звонку — время ожидания, длительность, время звонка, — забрать запись разговора файлом или ссылкой на него, а также запустить служебный сценарий, который сделает нужное действие, например разошлёт письма.

Три способа связать серверы

СпособНаправленность каналаСильная сторонаСлабая сторона
WebSocket Двунаправленный, один постоянный TCP-канал Постоянное соединение, обмен в обе стороны, меньше нагрузка на сетевую подсистему Протокол сложнее в реализации
HTTP-запросы От Октелл к системе — динамические методы; обратно — серверный HTTP-интерфейс Проще реализовать Постоянного соединения нет: если веб-система недоступна, Октелл об этом не узнает, и часть запросов молча не выполнится
Через базу данных Опосредованно, через СУБД Не требует ни канала, ни поддержки протоколов на другой стороне Обмен не в реальном времени, обе стороны пишут и читают общие таблицы
Выбор способа диктует не Октелл Соединяться по WebSocket или по HTTP — определяется возможностями сервера веб-системы. Если выбран HTTP, обязательно предусматривайте защиту от случая, когда другая сторона недоступна: сам по себе этот способ о недоступности не сообщает.

Настройка

Способ соединения задаётся в «Администрирование → Общие настройки → Web-интеграция с CRM»:

  • WebSocket — варианты «Oktell к CRM (WebSocket)» и «Oktell к CRM (WebSocketSecure)»;
  • HTTP — варианты «Oktell к CRM (HTTP)» и «Oktell к CRM (HTTPS)».

Сообщения WebSocket-протокола делятся на события, запросы (команды) и ответы. Каждое описывает данные структурой JSON — возможен и вариант XML; кодировка UTF-8. По тому же каналу веб-система может выполнять предустановленные методы (получить номерной план, запустить задачу), исполнять служебные сценарии и получать их результат, а также вызывать хранимые процедуры в базе данных Октелл.

Серверный HTTP-интерфейс

Через него веб-система передаёт запросы в Октелл. Интерфейс исполняет команды, поступающие на сервер, по умолчанию на порт 4055. Он позволяет запустить служебный сценарий, определить состояние конкретного пользователя, получить сведения обо всех очередях на текущий момент, а несколько команд дают возможность совершать звонки от имени конкретного рабочего места или пользователя — для этого дополнительно указывается идентификатор пользователя, линии или имя компьютера.

Отдельный пользователь для веб-запросов Каждый запрос требует базовой авторизации под учётной записью с привилегией исполнять методы Web-API. Удобнее всего завести для этого отдельного пользователя и все веб-запросы выполнять от его имени: так права легко ограничить, а обращения — отличить в журналах.

Интеграция через базу данных

Стороны используют СУБД как общее хранилище: пишут и читают значения в общих таблицах. Со стороны Октелл работа идёт компонентом «Запрос в базу данных».

Например, при входящем звонке Октелл обращается в базу веб-системы, получает сведения о клиенте и маршрутизирует звонок соответственно. Обратно: веб-система может взять из базы Октелл сведения о последнем звонке клиенту и определить, как давно с ним не было контакта.

Клиентская интеграция

Между Октелл и каждым браузерным приложением организуется свой независимый канал двустороннего обмена командами и событиями. Фактически веб-приложение работает с сервером Октелл напрямую и получает возможность принимать, совершать и переводить звонки, создавать конференции и управлять ими, видеть номерной план и очередь звонков.

Одинаковые логины упрощают вход Если логины и пароли в веб-системе и в Октелл совпадают, пользователь при входе в веб-систему авторизуется в Октелл автоматически, теми же данными.

Две библиотеки

БиблиотекаЧто этоКогда брать
Oktell.js JavaScript-библиотека для встраивания управления звонками в вашу систему. Внутри использует WebSocket-протокол, оборачивая его методы в простой набор функций. Когда интерфейс телефонии должен быть частью вашего приложения и выглядеть как его собственный
Oktell-panel.js Готовая панель, закреплённая в браузере: список контактов, статусы сотрудников, инструменты управления вызовами и конференциями. Когда нужен работающий результат без разработки интерфейса

Обе позволяют работать с гарнитурой через библиотеку Oktell-voice.js. Oktell.js даёт управление звонками и конференциями, получение событий из Октелл и доступ к данным.

Главное ограничение: только одностраничные сайты

Перезагрузка страницы рвёт разговор Соединение с Октелл устанавливается при загрузке веб-страницы. Во время разговора страницу нельзя перезагружать и закрывать: соединение будет потеряно, а вместе с ним немедленно оборвётся и разговор.

Это не рекомендация, а условие работоспособности: интеграцию можно строить только на одностраничном приложении.
Перезагрузки нагружают сервер даже вне разговора Регистрация софтфона происходит при каждой загрузке страницы, разрегистрация — при закрытии вкладки. Если навигация внутри системы устроена через полную перезагрузку или открытие новых вкладок, регистрация и разрегистрация идут постоянно, а это трудоёмкая операция.

При работе десяти пользователей число регистраций линий может превышать 800—1000 раз в день.

Два способа сделать приложение одностраничным

  • Фрейм на всю страницу. Переходы по ссылкам происходят внутри фрейма, растянутого на 100 % ширины и высоты; внешние страницы подгружаются в него, а сама страница не перезагружается.
  • Динамическая отрисовка. Сервер присылает данные, страница рисует их сама. При переходе между разделами запрашиваются только данные, перезагрузки не происходит.

Чем звонить из браузера

УстройствоКак подключается
Гарнитура Библиотека Oktell-voice.js работает софтфоном прямо на веб-странице, голос передаётся по технологии WebRTC.
IP-телефон В карте сети создаётся телефон с тем же логином, что у сотрудника, — тогда устройство закрепляется за ним автоматически при входе. Доступно начиная с версии Октелл 2.9.
Софтфон Любое приложение-софтфон на компьютере сотрудника; подключается так же, как IP-телефон.
Если логины телефонов и пользователей не совпадают Устройство закрепляют вручную: «Администрирование → Карта сети → Настройки телефона», поле «Пользователь WebCRM». После авторизации менеджера в браузере звонки пойдут именно через это устройство.
Про SIP Forking Если открыть второе окно того же веб-приложения, Октелл зарегистрирует пользователю ещё один софтфон — это множественное подключение устройств под одной учётной записью. Закрытие вкладки разрегистрирует линию, а если вкладку закрыли во время разговора, разговор оборвётся.

Поддержка WebRTC зависит от браузера: в исходной документации указан только Google Chrome, актуальный перечень уточняйте в описании библиотеки.

Как это выглядит целиком

Входящий звонок

  1. Октелл обращается к веб-серверу за информацией об абоненте и ответственном операторе — динамический метод «Получить информацию об абоненте по номеру телефона» — и маршрутизирует звонок.
  2. Как только сотрудник отвечает, Октелл сообщает веб-серверу об успешной коммутации — метод «Занести информацию о звонке». Если никто не ответил, абоненту предлагается оставить голосовую почту, а в базу записывается пропущенный звонок.
  3. Октелл отправляет в браузерное приложение запрос на открытие карточки — метод «Открыть карточку у пользователя», параметром идёт идентификатор клиента.
  4. Браузерное приложение, получив событие, запрашивает данные у своего сервера и показывает карточку.
  5. По окончании разговора Октелл снова обращается к серверу и обновляет запись: длительность и ссылка на запись разговора.
Почему на третьем шаге передаётся только идентификатор Октелл на этом этапе не располагает сведениями о клиенте — они хранятся на сервере веб-системы. Он передаёт идентификатор, а содержимое карточки браузер запрашивает у своего сервера сам. Это разделение и делает схему устойчивой: телефония не дублирует у себя клиентскую базу.

Исходящий звонок

  1. Пользователь открывает карточку клиента и нажимает «Позвонить». Браузерное приложение отправляет серверу Октелл запрос на звонок по этому номеру.
  2. Октелл маршрутизирует звонок по логике сценариев. После установления связи передаёт веб-системе имя оператора, идентификатор клиента и признак того, состоялось ли соединение, — метод «Занести информацию о звонке». Веб-система привязывает звонок к истории взаимодействия.
  3. По окончании разговора Октелл обновляет запись: длительность и ссылка на запись. Здесь же можно предусмотреть открытие формы новой активности.

Приведённая схема — демонстрационная, а не готовое решение. Её ценность в другом: она показывает, что за что отвечает. Всё, что должно сохраниться, идёт через серверную интеграцию; всё, что происходит на экране у сотрудника, — через клиентскую.