Темный режим
API Metrics Dynamic Workflow
1. Обзор workflow
Этот workflow предоставляет API для динамического получения метрик из системы. Основные функции:
- Прием HTTP-запросов через Webhook
- Извлечение и валидация параметров запроса
- Запросы к базе данных PostgreSQL
- Сложные вычисления метрик и их изменений
- Формирование и возврат структурированного ответа
Технические детали
| Название workflow | api-metrics-dynamic |
|---|---|
| Версия | v1 |
| Количество узлов | 10 |
| Основные технологии | n8n, PostgreSQL, Python |
| Endpoint | /webhook/metric/dynamic/get |
2. Описание узлов
2.1. Webhook (metrics/dynamic)
Точка входа для HTTP-запросов. Конфигурация:
"parameters": {
"path": "metric/dynamic/get",
"responseMode": "lastNode",
"responseData": "allEntries"
}
Пример входящего запроса:
Показать пример
{
"headers": {
"authorization": "0bf00e15-302a-49d9-afba-008534388a89",
...
},
"query": {
"companyId": "5jCpeRvNOGIN8DKBbmCF",
"type": "all"
}
}
2.2. Edit Fields
Извлекает и преобразует параметры запроса:
query.token- токен авторизации из заголовковquery.departmentId- ID отделаquery.type- тип запросаquery.paramNameMetric- имя метрики
2.3. Postgres узлы
Postgres4
Проверяет валидность токена компании:
SELECT "companyId" FROM companies WHERE "token" = $1;
Postgres get metrics 6m
Получает метрики за последние 6 месяцев:
SELECT "departmentId", "value", "paramNameMetric", "createdAt"
FROM "raw_survey_data"
WHERE "companyId" = $1 AND "createdAt" > $2 AND "questionId" <> 123;
Postgres get metrics1
Получает метрики за предыдущий месяц:
SELECT "value", "userId", "questionId", "surveyId"
FROM "raw_survey_data"
WHERE "companyId" = $1 AND "createdAt" BETWEEN $3 AND $2 AND "questionId" <> 123;
2.4. Code узлы
Code
Вычисляет даты для запросов:
calculatedDate- 6 месяцев назадchangeDate- 1 месяц назадchangeDate2- 2 месяца назад
Code1
Основная логика обработки метрик:
- Фильтрация и группировка данных по периодам
- Расчет средних значений по метрикам
- Вычисление абсолютных изменений
- Формирование итогового ответа
Code2
Расчет показателя вовлеченности (engagement score)
2.5. Respond to Webhook
Формирует финальный ответ API:
"parameters": {
"respondWith": "json",
"responseBody": "={{ $input.all().slice(0, 30) }}"
}
3. Поток данных
Последовательность обработки запроса:
- Webhook принимает HTTP-запрос
- Edit Fields извлекает параметры
- Postgres4 проверяет токен компании
- Merge объединяет данные
- Code вычисляет даты для запросов
- Postgres get metrics 6m получает основные данные
- Code1 обрабатывает данные и вычисляет метрики
- Respond to Webhook возвращает ответ
Параллельно выполняется:
- Postgres get metrics1 получает данные за предыдущий месяц
- Code2 вычисляет engagement score
4. Входные/выходные данные
Входные параметры
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
companyId |
string | Да | ID компании |
type |
string | Нет | Тип запроса (по умолчанию 'all') |
Authorization |
string | Да | Токен компании в заголовке |
Формат ответа
Пример ответа
{
"grouping_period": "week",
"overall_period": "2 months",
"metric_scores_by_period": {
"wellness": {
"01.05.24-07.05.24": 6.4,
"08.05.24-14.05.24": 6.2
},
...
},
"final_scores_by_metric": {
"wellness": 6.3,
"happiness": 8.1,
...
},
"absolute_changes_by_metric": {
"wellness": -0.5,
"happiness": -0.3,
...
}
}
5. Обработка ошибок
Workflow включает следующие механизмы обработки ошибок:
- Проверка валидности токена компании
- Обработка отсутствующих данных (возврат значений по умолчанию)
- Валидация типов данных
- Обработка исключений в Python-коде
В случае ошибки возвращается HTTP-статус 400 с описанием проблемы.