Заполняем и обновляем облачную БД NocoDB с помощью HTTP запросов


В данном кейсе — рассмотрим пример прямой интеграции с NocoDB с помощью сервисных блоков HTTP-запросов. Блок отправляет запрос на указанный адрес, описанный в документации api NocoDB и получает от него ответ. Данный пример кейса показывает, как можно интегрировать сервис, которого нет в списке сервисов MoreKIT

Данный способ подойдет в тех случаях, когда:

  • В сервисе нет Oauth авторизации
  • В сервисе не требуется поддерживать сессию подключения

Задача

Заполнить таблицу в базе данных NocoDB, когда сделка в amoCRM переходит на закрытый этап воронки

Если ранее контакт не фигурировал в базе данных — будет новая запись в таблице

Если у контакта ранее уже были записи в таблице — произойдет обновление строки таблицы

Подключение amoCRM

В MoreKit в разделе Сервисы — ищем в списке сервисов amoCRM, нажимаем на кнопку Добавить, произойдет перенаправление на страницу переадресации amoCRM, где необходимо выбрать нужную CRM, которую надо подключить в MoreKit

Добавление сервиса amoCRM
Выдача доступов приложению MoreKIT

В amoCRM нам потребуется создать кастомное поле в карточке контакта, куда будет записываться ID записи таблицы. Он нужен для редактирования строки, если ранее запись по контакту уже была

Создание таблицы в NocoDB

Теперь создадим таблицу в NocoDB

В таблице будут следующие поля:

  • custom_field (текст) — поля для произвольных данных
  • lead_id (numeric) — будет хранить в себе id сделки
  • contact_id (numeric) — будет хранить в себе id контакта amoCRM
  • date_closed (date YYYY-MM-DD) — будет хранить в себе дату закрытия сделки

Создание процесса в MoreKIT и установка триггера на закрытый этап в amoCRM

В MoreKIT создадим процесс с типом amoCRM DP. Данный процесс будет принимать данные с триггера воронки amoCRM, когда сделка будет переходить на нужный этап

После создания процесса — копируем ссылку из первоначального блока для установки триггера в amoCRM

Копирование ссылки на процесс кита

Устанавливаем триггер в amoCRM

Установка триггера в amoCRM

Теперь при перемещении сделки на закрытый этап воронки в MoreKIT придет событие с ID сделки

Выстраивание схемы в MoreKIT

Далее — выстроим логическую схему

Для настройки блоков HTTP запросов использовалась официальная API документация NocoDB cloud. Для данного процесса нужны методы:

  • Create Table Records — запись данных в таблицу
  • Update Table Records — обновление строки в таблице

В API документации NocoDB показан пример запроса, который нужно отправить для записи в таблицу. Здесь указывается URL (ссылка на нужный метод API), заголовок (либо "Authorization": "Bearer {token}", либо "xc-token": "{token}" (см. раздел про токены)

Примеры заголовков авторизации

Запросы можно отправлять как просто параметрами (object), так и массивом параметров (array of objects). Для наглядности — обновление строки будет происходить массивом объектов, заполнение — одним объектом

Схема для данной задачи будет выглядеть следующим образом:

Для настройки блоков HTTP потребуется API ключ. Берем его из профиля NocoDB

Создание токена
Добавление нового токена авторизации

Созданный токен нужен для авторизации запросов к NocoDB

Описание блоков схемы

Поиск сделок в amoCRM

#1 Найти сделки — ищем сделку по ID из входящих данных. Данный блок получит полные данные о сделке

Ищем контакт из сделки

#2 найти контакты — данный блок находит контакт из сделки

Переводим дату под формат nocoDB

#7 Дата и время — данный блок переводит дату из формата Timestamp, который отдает amoCRM в формат YYYY-MM-DD, который требуется для записи в NocoDB

Проверяем, была ли запись в таблицу у контакта для разделения логики

#3 Проверка — проверяет, заполнено ли техническое поле в карточке контакта. В данное поле будет записываться ID записи при новой записи. Наличие данного поля будет разделять схему на две логические ветки, обновление существующей записи в таблице, либо новая запись в таблицу

HTTP запрос на заполнение строки

#8 HTTP запрос — данный блок отправит запрос на запись строки в NocoDB

Для ссылки на метод нужен ID таблицы, его можно взять из интерфейса NocoDB

  • URL: ссылка на метод, берем его из документации api NocoDB, метод Create Table Records. В поле ссылки потребуется ID таблицы. Берем его из NocoDB
  • Заголовки: Здесь нужен заголовок авторизации, либо "Authorization": "Bearer <token>", либо "xc-token": "<token>"
  • Параметры: Ключ — заголовок таблицы, Значение — чем заполнить. Тип данных выбирайте в зависимости от того, какой был создан в таблице

#9 JSON декодировать — данный блок получит ответ от NocoDB, в котором будет Id записи

Обновляем тех. поле контакту

#10 Обновить контакт — после успешной записи в таблицу — заполняем в карточку контакта Id записи NocoDB. Данное значение потребуется, если нужно будет обновить строку

Формируем словарь в соответствии со структурой запроса

#5 Добавить в словарь — данный блок необходим для соблюдения формата запроса, который требуется для обновления строки в NocoDB (array of objects). При обычной записи в таблицу NocoDB принимает просто параметры в виде:

{
        "Id": 2,          
        "lead_id": 12334,
        "contact_id": 223344  
}

Но при обновлении строки покажем пример структуры, когда у нас массив объектов, т.е. должно получиться:

[
    {
        "Id": 2,          
        "lead_id": 12334,
        "contact_id": 2284844  
    }
]
Кладем словарь в список

#6 Добавить в список — данный блок собирает словарь из блока #5 в массив. Структура отправляем данных будет соответствовать документации NocoDB из метода Update Table Records

Отправляем запрос на обновение

#4 HTTP запрос — данный блок отправляет запрос на обновление строки. Собранный словарь в массиве передается в тело запроса

Проверка результата

В amoCRM создадим сделку с контактом, заполним кастомное поле и двинем сделку на закрытый этап, где расположен триггер

Двигаем сделку

В MoreKit должно было прийти событие

Как видим — все блоки успешно прошли. Если напротив блока HTTP запрос код ответа 200, значит все успешно

Проверяем теперь NocoDB

Строка в таблице успешно заполнена !

В карточку контакта также должен был записаться id записи

проверяем карточку контакта

Теперь проверим, обновляется ли контакт. Создадим ему новую сделку и также закроем ее

Событие в MoreKIT также пришло, обновление строки прошло успешно

В таблице также строка обновилась

Подведем итоги

В данном кейсе рассмотрели, как можно выполнить интеграцию с сервисом NocoDB, используя API-документацию сервиса и блоки HTTP запросов в MoreKIT

Получилось выполнить запись строки в таблицу и обновить строку, задача успешно выполнена