Темный режим

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. Поток данных

Последовательность обработки запроса:

  1. Webhook принимает HTTP-запрос
  2. Edit Fields извлекает параметры
  3. Postgres4 проверяет токен компании
  4. Merge объединяет данные
  5. Code вычисляет даты для запросов
  6. Postgres get metrics 6m получает основные данные
  7. Code1 обрабатывает данные и вычисляет метрики
  8. 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 с описанием проблемы.