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

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

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

Введение

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

Кратко о Zapier

Zapier позволяет связать несколько внешних сервисов вместе:

Связка между сервисами называется Zap.
Сервисы называются Приложениями (App).
Событие, которое запускает действие, называется Триггер (Trigger).
Указание, куда данные отправить и как их изменить — Действие (Action).

Например, создадим связку (Zap) VoIP+Gmail. Когда на VoIP платформе происходит событие, например — нам позвонили (произошло событие, триггер), то данные звонка отправляются в Zapier и затем перенаправляются в Gmail. В Gmail происходит отправка почтового сообщения определенному адресату с деталями звонка (это действие/Action).

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

Пользователи VoIP провайдера должны иметь возможность использовать VoIP сервисы в платформе Zapier, такие как:

Все действия должны осуществляться внутри интерфейса Zapier, без каких-либо дополнительных настроек на стороне Zapier.

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

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

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

  1. Создать событие вызова абонента по номеру телефона.
  2. Создать собственное OAuth2 API для интеграции с Zapier.
  3. Создать триггеры в платформе Zapier для основных событий звонка.
  4. Реализовать дополнительный функционал для администраторов, в частности — получение событий всех пользователей.
  5. Добавить обработку событий “парковки”, “постановки в очереди при звонке в кол-центр” в нашу базовую интеграционную платформу, используется для интеграции телефонии в Zoho и Salesforce.

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

После определения требований мы провели глубокий технический анализ существующих решений по интеграции VoIP сервисов в Zapier. Также было решено изучить работу популярных интеграций в Zapier.

Были проанализированы:

  1. VoIP -Twilio.
  2. Популярные приложения — Gmail, Slack.

Выводы после анализа: В существующих интеграциях сервисов с Zapier используются схожие подходы по наполнению триггеров, система авторизации.

В триггерах используется:

Zapier поддерживает реализацию нескольких способов авторизации (Basic Auth, Session Auth, API Key, OAuth v2, Digest Auth). Анализ указанных приложений (Twillio, Gmail, Slack) показал, что самой качественной и понятной для пользователя является авторизация через OAuth 2.0. Авторизация через OAuth 2.0 является также и самой безопасной, так как весь процесс происходит на стороне нашего приложения, а Zapier получает только токен доступа. OAuth 2.0 знакома и понятна пользователям, т.к. скорее всего они сталкивались с аналогичной системой в других продуктах. UI приложения аналогичен веб приложению VoIP, что вызывает доверие у пользователей. В дальнейшем наша собственная OAuth 2.0 система авторизации пригодится при разработке новых интеграций с VoIP.

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

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

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

  1. Разработать собственную версию OAuth 2.0 API для платформы VoIP провайдера. Zapier поддерживает разные виды авторизации, однако OAuth2 является более надежным и удобным для авторизации пользователей, по сравнению с кастомными вариантами, предлагаемыми Zapier Platform. Zapier хранит только токены доступа, что делает интеграцию безопасной, в отличие от других вариантов авторизации. Так как авторизация OAuth 2.0 использует интерфейс, аналогичный интерфейсу приложения провайдера, то это комфортно и не вызывает трудностей с интеграцией у пользователей. Для работы используется библиотека passport.js. Passport.js — промежуточное программное обеспечение для аутентификации Node.js.
  2. Расширить универсальное интеграционное приложение. Согласно требованиям провайдера, необходимо работать не только с событиями звонка, а также с событиями “парковки” звонка и “очередей” звонка.
  3. Создать триггеры в приложении в платформе Zapier. Реализация использует продвинутую работу с триггерами через REST Hook — это один из способов интеграции, предлагаемых платформой Zapier. В этом случае Zapier подписывается на наш сервер, используя уникальный URL, и мы отправляем в Zapier полезную нагрузку данных обратно на URL для запуска этого конкретного Zap. Это позволяет Zap запускаться мгновенно.
  4. Создать событие для реализации быстрого вызова приложения в платформе Zapier.

Диаграмма

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

Архитектурная диаграмма интеграции Kazoo и Zapier

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

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

  1. Integration App (наше приложение для обработки интеграций) подписывается на события с информацией о звонках в Kazoo.
  2. Integration App преобразует события из Kazoo к понятному для пользователя формату данных (инициализация вызова, пользователь ответил на вызов, окончание вызова, вызов помещен в парковочный слот, поступил вызов в очередь и т.д.). Это необходимо, поскольку события содержат информацию о каналах вызова между Kazoo и абонентами.
  3. Информация о звонках отправляется в триггер Zapier, на который подписан пользователь.

Триггеры Zapier

Приложения в Zapier связываются через Zaps. Для этого необходимо создать API для триггеров приложения. Триггер — это абстрактное понятие в Zapier, которое представляет собой точку приложения, ответственную за получение информации со стороны интегрируемой системы. В интеграции использовались только REST Hook триггеры, так как это позволяет Zapier получать события практически в режиме реального времени.

Упрощённая архитектурная диаграмма триггера в приложении

Рис. 2. Упрощённая архитектурная диаграмма триггера в приложении.

Триггер можно разделить на несколько составных частей:

  1. Точки для взаимодействия с API приложения. Их можно сделать посредством Zapier Platform и Zapier CLI. Эти точки контролируют запросы для “подписаться”/”отписаться”, которые будут переданы в Integration API.
    Пример создания отправной точки API для триггера через Zapier PlatformРис. 3. Пример создания отправной точки API для триггера через Zapier Platform.
  2. REST API для обработки запросов от Zapier Platform.
  3. API для отправки событий во все подписанные триггеры.
  4. Описание полученного события в понятной для пользователя форме.

Настройка

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

Заключение

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

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

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

  1. https://platform.zapier.com/docs/start
  2. https://docs.2600hz.com/qubicle/doc/websockets/setup/