Объединение Октелл с веб-системой — CRM, порталом, отраслевым сервисом — делается в два этапа, и путать их не стоит: у них разные зоны ответственности.
| Этап | Что настраивается | За что отвечает |
|---|---|---|
| Серверная интеграция | Канал обмена данными между сервером Октелл и сервером веб-системы | Всё, что должно быть записано и не потеряно: история звонков, пропущенные, длительность, ссылки на записи |
| Клиентская интеграция | Интерфейс передачи команд телефонии от браузера к серверу Октелл | Действия пользователя здесь и сейчас: принять, позвонить, перевести, собрать конференцию |
Для учёта таких событий используйте только методы серверной интеграции.
Что должно получиться
| Сценарий | Что происходит |
|---|---|
| Входящий звонок | Октелл опознаёт абонента по CallerId, набранному номеру и времени звонка, спрашивает у веб-системы тип клиента и ответственного менеджера, маршрутизирует звонок этому сотруднику — и у него в браузере открывается карточка клиента. |
| Исходящий звонок | Менеджер открывает карточку и нажимает «Позвонить». Линии и направления выбираются настройками Октелл. Если абонент занят или недоступен, менеджер видит статус звонка. |
| Внутренние звонки | В веб-системе видны внутренние номера сотрудников и их статусы — свободен, занят, в перерыве, недоступен, — можно позвонить коллеге или собрать конференцию. |
| История и статистика | При каждом звонке Октелл просит веб-систему создать «активность», привязанную к карточке клиента или заказа: дата, номер, участники, комментарий менеджера, длительность, ссылка на запись. |
Серверная интеграция
Как это работает
Между серверами организуется канал двустороннего обмена сообщениями. Соединение устанавливает сервер Октелл — он подключается к веб-системе, а не наоборот. Установив соединение, Октелл запрашивает у веб-системы перечень доступных для исполнения методов. Эти методы называются динамическими; получив их список, Октелл показывает их в компоненте сценариев «CRM-действие».
«Получить информацию о клиенте по номеру телефона». При входящем или исходящем звонке сценарий вызывает метод, передаёт номер и получает в ответ всё, что нужно для маршрутизации.
«Занести информацию о звонке». По завершении звонка передаются идентификатор клиента, имя менеджера, время и длительность разговора, ссылка на запись.
По тому же соединению веб-система может обратиться к Октелл: получить данные по звонку — время ожидания, длительность, время звонка, — забрать запись разговора файлом или ссылкой на него, а также запустить служебный сценарий, который сделает нужное действие, например разошлёт письма.
Три способа связать серверы
| Способ | Направленность канала | Сильная сторона | Слабая сторона |
|---|---|---|---|
| WebSocket | Двунаправленный, один постоянный TCP-канал | Постоянное соединение, обмен в обе стороны, меньше нагрузка на сетевую подсистему | Протокол сложнее в реализации |
| 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. Он позволяет запустить служебный сценарий, определить состояние конкретного пользователя, получить сведения обо всех очередях на текущий момент, а несколько команд дают возможность совершать звонки от имени конкретного рабочего места или пользователя — для этого дополнительно указывается идентификатор пользователя, линии или имя компьютера.
Интеграция через базу данных
Стороны используют СУБД как общее хранилище: пишут и читают значения в общих таблицах. Со стороны Октелл работа идёт компонентом «Запрос в базу данных».
Например, при входящем звонке Октелл обращается в базу веб-системы, получает сведения о клиенте и маршрутизирует звонок соответственно. Обратно: веб-система может взять из базы Октелл сведения о последнем звонке клиенту и определить, как давно с ним не было контакта.
Клиентская интеграция
Между Октелл и каждым браузерным приложением организуется свой независимый канал двустороннего обмена командами и событиями. Фактически веб-приложение работает с сервером Октелл напрямую и получает возможность принимать, совершать и переводить звонки, создавать конференции и управлять ими, видеть номерной план и очередь звонков.
Две библиотеки
| Библиотека | Что это | Когда брать |
|---|---|---|
| Oktell.js | JavaScript-библиотека для встраивания управления звонками в вашу систему. Внутри использует WebSocket-протокол, оборачивая его методы в простой набор функций. | Когда интерфейс телефонии должен быть частью вашего приложения и выглядеть как его собственный |
| Oktell-panel.js | Готовая панель, закреплённая в браузере: список контактов, статусы сотрудников, инструменты управления вызовами и конференциями. | Когда нужен работающий результат без разработки интерфейса |
Обе позволяют работать с гарнитурой через библиотеку Oktell-voice.js. Oktell.js даёт управление звонками и конференциями, получение событий из Октелл и доступ к данным.
Главное ограничение: только одностраничные сайты
Это не рекомендация, а условие работоспособности: интеграцию можно строить только на одностраничном приложении.
При работе десяти пользователей число регистраций линий может превышать 800—1000 раз в день.
Два способа сделать приложение одностраничным
- Фрейм на всю страницу. Переходы по ссылкам происходят внутри фрейма, растянутого на 100 % ширины и высоты; внешние страницы подгружаются в него, а сама страница не перезагружается.
- Динамическая отрисовка. Сервер присылает данные, страница рисует их сама. При переходе между разделами запрашиваются только данные, перезагрузки не происходит.
Чем звонить из браузера
| Устройство | Как подключается |
|---|---|
| Гарнитура | Библиотека Oktell-voice.js работает софтфоном прямо на веб-странице, голос передаётся по технологии WebRTC. |
| IP-телефон | В карте сети создаётся телефон с тем же логином, что у сотрудника, — тогда устройство закрепляется за ним автоматически при входе. Доступно начиная с версии Октелл 2.9. |
| Софтфон | Любое приложение-софтфон на компьютере сотрудника; подключается так же, как IP-телефон. |
Поддержка WebRTC зависит от браузера: в исходной документации указан только Google Chrome, актуальный перечень уточняйте в описании библиотеки.
Как это выглядит целиком
Входящий звонок
- Октелл обращается к веб-серверу за информацией об абоненте и ответственном операторе — динамический метод «Получить информацию об абоненте по номеру телефона» — и маршрутизирует звонок.
- Как только сотрудник отвечает, Октелл сообщает веб-серверу об успешной коммутации — метод «Занести информацию о звонке». Если никто не ответил, абоненту предлагается оставить голосовую почту, а в базу записывается пропущенный звонок.
- Октелл отправляет в браузерное приложение запрос на открытие карточки — метод «Открыть карточку у пользователя», параметром идёт идентификатор клиента.
- Браузерное приложение, получив событие, запрашивает данные у своего сервера и показывает карточку.
- По окончании разговора Октелл снова обращается к серверу и обновляет запись: длительность и ссылка на запись разговора.
Исходящий звонок
- Пользователь открывает карточку клиента и нажимает «Позвонить». Браузерное приложение отправляет серверу Октелл запрос на звонок по этому номеру.
- Октелл маршрутизирует звонок по логике сценариев. После установления связи передаёт веб-системе имя оператора, идентификатор клиента и признак того, состоялось ли соединение, — метод «Занести информацию о звонке». Веб-система привязывает звонок к истории взаимодействия.
- По окончании разговора Октелл обновляет запись: длительность и ссылка на запись. Здесь же можно предусмотреть открытие формы новой активности.
Приведённая схема — демонстрационная, а не готовое решение. Её ценность в другом: она показывает, что за что отвечает. Всё, что должно сохраниться, идёт через серверную интеграцию; всё, что происходит на экране у сотрудника, — через клиентскую.