ДжазТим — надежный технологический партнер

Agile разработка ПО на Java

Опыт интеграции VoIP в Salesforce

Введение

Статья описывает реализацию интеграции между Kazoo VoIP (Voice over Internet Protocol) платформой и Salesforce CRM. Решение было реализовано командой ДжазТим для одного из коммерческих провайдеров в Европе.

Исходная задача

Исходная задача — пользователи Salesforce CRM должны иметь возможность использовать VoIP сервисы, такие как:

Все действия должны осуществляться внутри интерфейса Salesforce CRM.

Существующие возможности Salesforce API для интеграции с VoIP платформами

Salesforce OpenCTI

Salesforce OpenCTI — это Javascript API, который позволяет использовать VoIP сервисы сторонних поставщиков в Salesforce платформе.
OpenCTI дает возможность осуществлять телефонные звонки (используя софтфон) непосредственно из web интерфейса Salesforce платформы, без необходимости установки адаптеров компьютерной телефонии (CTI adapters) на локальной машине (см. рис. 1).
Узнать подробности и ознакомиться со всеми методами OpenCTI API можно по ссылке.


Рис.1. Взаимодействие Open CTI с другими компонентами. Изображение взято с сайта https://developer.salesforce.com

Salesforce Call Center

Salesforce Call Center обеспечивает работу сторонних софтфонов в Salesforce платформе. Call Center позволяет задать URL софтфон приложения, которое будет отображаться в нижнем колонтитуле консоли и Lightning Experience (см. рис. 3). Call Center позволяет управлять доступом отдельных пользователей к возможностям софтфона. Веб-приложение, которое выбрано в Call Center в качестве софтфона, будет отображаться в специальном фрейме и сможет работать с OpenCTI API через подключенную библиотеку opencti.js.

Решение команды ДжазТим

Определение требований к проекту

Команда ДжазТим совместно с заказчиком определила следующий список требований к интеграции VoIP в Salesforce:

  1. Сохранять историю звонков в Salesforce;
  2. Отображать всплывающее окно с информацией об активном вызове;
  3. Вести аудиозапись телефонного разговора с возможностью прослушать эту запись из Salesforce;
  4. Максимально упростить процесс настройки интеграции для конечного пользователя.

Анализ существующих коммерческих решений

После определения требований мы провели глубокий технический анализ существующих решений по интеграции VoIP сервисов в Salesforce. Цель анализа — изучить существующие подходы к интеграции с Salesforce. Были проанализированы:

Выводы после анализа: В существующих интеграциях VoIP сервисов с Salesforce используется схожий подход по созданию собственного софтфона на базе веб-приложения для управления вызовами. Для дополнительных настроек, например — передачи различных токенов в Salesforce, создаются дополнительные вкладки с настройками. Если интеграция предусматривает работу с данными, то создаются вкладки для работы с ними. Для отображения карточки активного звонка используется подключение по WebSocket. Софтфон принимает событие и отображает информацию о текущем звонке в режиме реального времени.

Проектирование и разработка

Архитектурные решения

После проведенного анализа рынка мы приняли следующие решения:

  1. Разработать собственную версию Salesforce софтфона. Так как Salesforce не предоставляет готовых решений, а только API и возможность разместить свое веб-приложение в фрейме на главном экране.
  2. Создать новый Custom Object в Salesforce — KazooCallData, для хранения информации о звонках. KazooCallData объект может быть гибко использован в произвольных пользовательских интеграциях в рамках Salesforce.
  3. Использовать Visualforce в качестве фреймворка для разработки софтфона. Visualforce имеет хорошую техническую поддержку и минимальные ограничения при вызове Apex кода через OpenCTI API в managed package.
  4. Сохранять всю информацию по звонкам через Salesforce REST API для Custom Object.
  5. Для реализации всплывающих окон в Salesforce при активном звонке мы используем PushTopic events. Этот механизм позволяет подписаться на события об изменении Salesforce данных, которые соответствуют некоему SOQL запросу по протоколу Cometd. Нас заинтересовала возможность фильтровать записи о звонках по Owner Id, то есть — по конкретному пользователю. Это позволяет софтфону подписаться на события только о тех звонках, которые связаны с пользователем аккаунта Salesforce.

Диаграмма

Упрощенная диаграмма архитектуры нашего решения представлена на рис. 2:


Рис. 2. Архитектурная диаграмма интеграции Kazoo и Salesforce

Обработка событий

  1. Integration App (приложение для обработки интеграций) подписывается на события с информацией о звонках в Kazoo;
  2. Integration App преобразует события из Kazoo к формату обычных звонков (инициализация вызова, пользователь ответил на вызов, окончание вызова и тд.). Это необходимо, поскольку события содержат информацию о каналах вызова между Kazoo и абонентами.
  3. Информация о звонках сохраняется в KazooCallData через SalesforceREST API;
  4. Софтфон (при активной сессии Salesforce) подписывается на события об изменениях KazooCallData объекта;
  5. Если софтфон получает событие о новой записи в KazooCallData, (например, о новом звонке), то происходит вызов OpenCTI API для отображения окна софтфона на странице Salesforce. В этом окне видна информация о вызове: статус звонка, номер абонента, таймер разговора.

История событий и запись разговора

Пользователь софтфона может просмотреть историю звонков и прослушать аудиозапись звонка. Это реализовано при помощи OpenCTI API, который осуществляет вызовы к Apex коду. Для этого мы создали Apex класс, который выгружает информацию из объекта KazooCallData. Софтфон при открытии делает запрос к этому классу и отображает полученную информацию.


Рис. 3. UI часть реализации IP телефонии в Salesforce интерфейсе

Настройка

Настройка интеграции сведена к тому, что администратору Salesforce организации достаточно установить пакет с кодом софтфона и дать доступ пользователям через Salesforce Call Center.
Пользователю достаточно предоставить доступ к Salesforce REST API. Это реализовано путём нажатия кнопки для интеграции в VoIP приложении провайдера.

Ссылки для подробного изучения

  1. https://developer.salesforce.com/docs/atlas.en-us.224.0.api_cti.meta/api_cti/sforce_api_cti_intro.htm
  2. https://help.salesforce.com/articleView?id=cti_overview.htm&type=5

Заключение

Интеграция VoIP/CTI сервисов в Salesforce была осуществлена успешно. Предпосылки для успеха:

  1. Предыдущий опыт нашей компании в этой сфере (в частности, интеграция VoIP с Zoho CRM).
  2. Продуманная архитектура продукта — для Salesforce мы создали только специфический софтфон и адаптер к существующему универсальному интеграционному приложению, которое было разработано ранее, во времена интеграции с Zoho.