API AI Get Workflow
1. Обзор workflow
API для получения данных искусственного интеллекта с фильтрацией по различным параметрам.
| Название | api-ai-get |
|---|---|
| База данных | PostgreSQL (raw_ai_data, companies, departments, translations) |
| Методы | 2 webhook-узла для разных операций |
2. GET /ai/get
Получение данных AI с фильтрацией по departmentId, type и paramNameMetric.
Цепочка выполнения:
-
Webhook (ai/get)
Принимает GET-запрос с параметрами:
headers.authorization- токен компанииquery.departmentId- ID отдела (опционально)query.type- тип данных (обязательно)query.paramNameMetric- название метрики (опционально)
-
Edit Fields1
Извлекает параметры из запроса:
query.token = $json.headers.authorization query.departmentId = $json.query.departmentId query.type = $json.query.type query.paramNameMetric = $json.query.paramNameMetric -
Postgres4
Проверяет валидность токена и получает companyId:
SELECT "companyId" FROM companies WHERE "token" = $1; -
Merge1
Объединяет данные из Edit Fields1 и Postgres4.
-
Code
Определяет тип запроса на основе входных параметров:
Логика работы:
- Проверяет departmentId и paramNameMetric на значения 'null', 'all' или пустую строку
- Преобразует departmentId в число (если возможно)
- Устанавливает switch-значение:
- 1 - оба параметра заданы
- 2 - только departmentId
- 3 - только paramNameMetric
- 4 - ни один параметр не задан
-
Switch
Направляет выполнение в одну из 4 веток в зависимости от switch-значения.
-
Ветка 1 (оба параметра заданы):
-
Postgres
Выполняет запрос с фильтрацией по всем параметрам:
SELECT * FROM raw_ai_data WHERE "companyId" = $1 AND "departmentId" = $2 AND "type" = $3 AND "paramNameMetric" = $4;
-
Postgres
-
Ветка 2 (только departmentId):
-
Postgres1
Выполняет запрос без фильтра по paramNameMetric:
SELECT * FROM raw_ai_data WHERE "companyId" = $1 AND "departmentId" = $2 AND "type" = $3;
-
Postgres1
-
Ветка 3 (только paramNameMetric):
-
Postgres2
Выполняет запрос без фильтра по departmentId:
SELECT * FROM raw_ai_data WHERE "companyId" = $1 AND "type" = $2 AND "paramNameMetric" = $3;
-
Postgres2
-
Ветка 4 (ни один параметр):
-
Postgres3
Выполняет запрос только по companyId и type:
SELECT * FROM raw_ai_data WHERE "companyId" = $1 AND "type" = $2;
-
Postgres3
-
find department name
Получает названия отделов для обогащения данных:
SELECT "departmentId", "name" FROM departments WHERE "companyId" = $1 OR "departmentId" = 1; -
Merge
Объединяет данные AI с названиями отделов.
-
find metrics names
Получает русские названия метрик:
SELECT t."ru" AS "paramNameMetricRu", t."key" AS "paramNameMetric" FROM translations t WHERE t."type" = 'metric'; -
Merge3
Объединяет данные с русскими названиями метрик.
-
Respond to ai/get
Возвращает первые 30 записей:
=$input.all().slice(0, 30)
Особенности:
- Динамическое построение SQL-запроса в зависимости от входных параметров
- Обогащение данных названиями отделов и метрик
- Ограничение вывода 30 записями
3. GET /ai/get/long
Получение полных данных AI по конкретному ID с дополнительной информацией.
Цепочка выполнения:
-
Webhook (ai/get/long)
Принимает GET-запрос с параметрами:
headers.authorization- токен компанииquery.id- ID записи AI
-
Edit Fields
Извлекает параметры из запроса:
query.token = $json.headers.authorization ai_data_id = $json.query.id -
Postgres5
Проверяет валидность токена и получает companyId:
SELECT "companyId" FROM companies WHERE "token" = $1; -
Merge2
Объединяет данные из Edit Fields и Postgres5.
-
Postgres6
Получает полные данные AI с дополнительной информацией:
SELECT raw_ai_data.*, (SELECT "name" FROM departments WHERE "departmentId" = raw_ai_data."departmentId") AS "departmentName", (SELECT "ru" FROM translations WHERE "key" = raw_ai_data."paramNameMetric") AS "paramNameMetricRu" FROM raw_ai_data WHERE "id" = $1; -
If
Проверяет наличие longValue:
Условие: $json.longValue не пустое -
Ветка 1 (longValue присутствует):
-
If1
Проверяет флаг read:
Условие: $json.read == true -
Подветка 1.1 (read == false):
-
Postgres save raw_ai_data
Обновляет флаг read:
UPDATE raw_ai_data SET "read" = true WHERE "id" = $1;
-
Postgres save raw_ai_data
-
Respond to ai/get/long
Возвращает данные.
-
If1
-
Ветка 2 (longValue отсутствует):
-
Merge4
Объединяет данные для синхронизации.
-
ai/syncdata/long
Отправляет запрос на синхронизацию:
POST https://api.hroom.ai/webhook/ai/syncdata/long Headers: Authorization: ={{ $json.query.token }} Body: ai_data_id: ={{ $json.ai_data_id }} -
Postgres7
Повторно запрашивает данные после синхронизации:
SELECT raw_ai_data.*, (SELECT "name" FROM departments WHERE "departmentId" = raw_ai_data."departmentId") AS "departmentName", (SELECT "ru" FROM translations WHERE "key" = raw_ai_data."paramNameMetric") AS "paramNameMetricRu" FROM raw_ai_data WHERE "id" = $1; -
Respond to ai/get/long1
Возвращает обновленные данные.
-
Merge4
Особенности:
- Механизм синхронизации при отсутствии longValue
- Обновление флага read при первом доступе
- Обогащение данных названиями отделов и метрик