AWS Lambda и API Gateway для обработки вебхуков

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

Да, приложения под Битрикс24 может хостить партнер, принимая на себя эту головную боль. Но для работы простых нетиражных приложений, тех, для которых обычно используют вебхуки Битрикс24, вообще не нужен сервер. Достаточно беcсерверного (Serverless) сервиса Lambda от AWS (Amazon Web Services) https://aws.amazon.com/ru/lambda/ и Amazon API Gateway https://aws.amazon.com/ru/api-gateway/.
Об их применении  для расширения функционала Битрикс24 и пойдет речь в данном посте.


Все описанное ниже можно сделать в рамках бесплатного облачного тарифа Битрикс24 и стартового/ознакомительного условно-бесплатного тарифного плана AWS, доступного сразу после регистрации.

Рассмотрим для примера простую интеграционную задачу: при создании нового лида в одном облачном Битрикс24 нужно создать такой же лид в другом портале Битрикс24. Эту задачу на самом деле можно решить и более простыми способами, я беру ее просто для наглядного примера.

1) Создаем 3 вебхука

На первом и на втором Битрикс24 создадим по одному одинаковому входящему вебхуку с доступом к CRM. При создании вебхука в Битрикс24 формируется адрес, привязанный к конкретному порталу, обратившись к которому можно получить доступ к методам REST API Битрикс24 того или тех модулей, доступ к которым выбран при создании вебхука. Поэтому этот выписанный адрес нужно беречь как пароль или секретный ключ. Этот адрес понадобится нам дальше, когда мы будем писать AWS Lambda функцию:




На скрине выше часть адреса https://b24-dawbtb.bitrix24.com/rest/1/******************/ - это адрес самого вебхука, а часть /profile/ - это название метода без параметров, возвращающего данные профиля пользователя, из-под которого создан вебхук. Нам нужно скопировать только сам адрес - мы будем вызывать другой метод.

На первом портале кроме этого необходимо создать исходящий вебхук на событие создание лида.


Что подставлять в Handler address станет ясно из пункта 3 данного поста. А Authentication code - это ключик, который генерируется в Битрикс24 при создании исходящего вебхука, и его мы будем использовать в Lambda-функции, чтобы проверить, действительно ли это наш Битрикс24 стучится в нее.

2) Пишем Lambda-функцию

Заходим в https://console.aws.amazon.com - Services - Lambda - Create function

Я буду писать тело функции на языке Python 3, а вообще там поддерживаются разные языки - кому какой больше нравится.



Даю своей функции пока только базовые права, необходимые для работы с логами CloudWatch. Если понадобится, потом их можно будет расширить:



В тело функции вставляю следующий код:




3) Создаем метод в API Gateway

Идем в Amazon API Gateway и нажимаем кнопку Create API



Добавляем метод ANY  - чтобы не заморачиваться:



В настройках Integration Request выбираем нашу Lambda функцию:



В Mapping Templates обязательно нужно указать Content-Type, который будет приходить к нам из Битрикс24. Мы не будем разбирать его на уровне Gateway - передадим в Lambda функцию одной строкой - мне так будет проще отлаживать.



Деплоим метод и после деплоя получаем URL-адрес, который как раз и нужно подставить в первом Битрикс24 в исходящий веб-хук на создание лида:




Готово! Теперь при создании лида в первом Битрикс24, такой же лид создается и во втором.




Если бы перед нами стояла задача, для которой требовалось бы работать только со входящими вебхуками (входящими относительно Битрикс24), то нам даже не нужно было бы создавать метод API Gateway.

Логирование и отладка Lambda функций и API Gateway это отдельная очень интересная тема, я расскажу об этом подробнее в одном из будущих постов.  А если тема беcсерверных приложений для Битрикс24 и не только интересна моим читателям, то я в будущем поделюсь своим опытом интеграции Битрикс24 c AWS DynamoDB и расскажу как создать и подключить к Битрикс24 беcсерверного чат-бота на базе Amazon Lex.

Комментарии

Donald marshal написал(а)…
Этот комментарий был удален администратором блога.

Популярные сообщения из этого блога

Настройка почты через biz.mail.ru в БитриксВМ

Git обновить текущую ветку из master

Как заполнить ComboBox значениями из базы данных