Опыт интеграции 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, такие как:
- вызов абонента по номеру телефона через действие (Action) в платформе Zapier;
- создание триггеров в платформе Zapier, которые запускаются при звонке, событиях колл-центра, парковки звонков в слот ожидания. Информация из событий используется для создания Zaps (абстракция, которая связывает события) в платформе;
- возможность для администратора VoIP платформы получать события телефонии для всех пользователей в его системе.
Все действия должны осуществляться внутри интерфейса Zapier, без каких-либо дополнительных настроек на стороне Zapier.
Решение команды ДжазТим
Определение требований к проекту
Команда ДжазТим совместно с заказчиком определила следующий список требований к интеграции VoIP в Zapier:
- Создать событие вызова абонента по номеру телефона.
- Создать собственное OAuth2 API для интеграции с Zapier.
- Создать триггеры в платформе Zapier для основных событий звонка.
- Реализовать дополнительный функционал для администраторов, в частности — получение событий всех пользователей.
- Добавить обработку событий “парковки”, “постановки в очереди при звонке в кол-центр” в нашу базовую интеграционную платформу, используется для интеграции телефонии в Zoho и Salesforce.
Анализ существующих коммерческих решений
После определения требований мы провели глубокий технический анализ существующих решений по интеграции VoIP сервисов в Zapier. Также было решено изучить работу популярных интеграций в Zapier.
Были проанализированы:
- VoIP -Twilio.
- Популярные приложения — Gmail, Slack.
Выводы после анализа: В существующих интеграциях сервисов с Zapier используются схожие подходы по наполнению триггеров, система авторизации.
В триггерах используется:
- “raw data” — (необработанные первичные данные от Kazoo, например UserID, CallID) для построения сложных “Zaps” которые могут понадобится другим приложениям;
- “human-readable data” — данные в понятном для простых пользователей формате, например имя пользователя, направление вызова и т.д.
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.
Проектирование и разработка
Архитектурные решения
После проведенного анализа существующих интеграций мы приняли следующие решения:
- Разработать собственную версию OAuth 2.0 API для платформы VoIP провайдера. Zapier поддерживает разные виды авторизации, однако OAuth2 является более надежным и удобным для авторизации пользователей, по сравнению с кастомными вариантами, предлагаемыми Zapier Platform. Zapier хранит только токены доступа, что делает интеграцию безопасной, в отличие от других вариантов авторизации. Так как авторизация OAuth 2.0 использует интерфейс, аналогичный интерфейсу приложения провайдера, то это комфортно и не вызывает трудностей с интеграцией у пользователей. Для работы используется библиотека passport.js. Passport.js — промежуточное программное обеспечение для аутентификации Node.js.
- Расширить универсальное интеграционное приложение. Согласно требованиям провайдера, необходимо работать не только с событиями звонка, а также с событиями “парковки” звонка и “очередей” звонка.
- Создать триггеры в приложении в платформе Zapier. Реализация использует продвинутую работу с триггерами через REST Hook — это один из способов интеграции, предлагаемых платформой Zapier. В этом случае Zapier подписывается на наш сервер, используя уникальный URL, и мы отправляем в Zapier полезную нагрузку данных обратно на URL для запуска этого конкретного Zap. Это позволяет Zap запускаться мгновенно.
- Создать событие для реализации быстрого вызова приложения в платформе Zapier.
Диаграмма
Упрощенная диаграмма архитектуры нашего решения представлена на рис. 1:
Рис. 1. Архитектурная диаграмма интеграции Kazoo и Zapier.
Обработка событий
- Integration App (наше приложение для обработки интеграций) подписывается на события с информацией о звонках в Kazoo.
- Integration App преобразует события из Kazoo к понятному для пользователя формату данных (инициализация вызова, пользователь ответил на вызов, окончание вызова, вызов помещен в парковочный слот, поступил вызов в очередь и т.д.). Это необходимо, поскольку события содержат информацию о каналах вызова между Kazoo и абонентами.
- Информация о звонках отправляется в триггер Zapier, на который подписан пользователь.
Триггеры Zapier
Приложения в Zapier связываются через Zaps. Для этого необходимо создать API для триггеров приложения. Триггер — это абстрактное понятие в Zapier, которое представляет собой точку приложения, ответственную за получение информации со стороны интегрируемой системы. В интеграции использовались только REST Hook триггеры, так как это позволяет Zapier получать события практически в режиме реального времени.
Рис. 2. Упрощённая архитектурная диаграмма триггера в приложении.
Триггер можно разделить на несколько составных частей:
- Точки для взаимодействия с API приложения. Их можно сделать посредством Zapier Platform и Zapier CLI. Эти точки контролируют запросы для “подписаться”/”отписаться”, которые будут переданы в Integration API.
Рис. 3. Пример создания отправной точки API для триггера через Zapier Platform.
- REST API для обработки запросов от Zapier Platform.
- API для отправки событий во все подписанные триггеры.
- Описание полученного события в понятной для пользователя форме.
Настройка
Настройка интеграции сведена к тому, что пользователь авторизируется в Zapier через VoIP приложение провайдера. Пользователю достаточно предоставить доступ к Zapier REST API. Это реализовано путем нажатия кнопки для интеграции в VoIP приложении провайдера.
Заключение
Интеграция VoIP сервисов в Zapier была осуществлена успешно. Предпосылки для успеха:
- Предыдущий опыт нашей компании в этой сфере (в частности, интеграция VoIP с Zoho CRM и Salesforce CRM).
- Продуманная архитектура продукта — мы создали API для контроля подписки/отписки от триггеров в платформе Zapier, а также добавили обработку событий, связанную с колл-центрами к существующему универсальному интеграционному приложению, которое было разработано ранее, при интеграции с Zoho и Salesforce.