Темный режим
Cron Survey Processing Workflow
1. Обзор workflow
Автоматическая обработка опросов по расписанию с проверкой их статуса.
| Название | cron-survey-processing |
|---|---|
| Тип | Cron-задача (выполняется каждую минуту) |
| База данных | PostgreSQL (таблица surveys) |
| Основной webhook | https://api.hroom.ai/webhook/processing/survey |
2. POST /processing/survey
Автоматическая обработка опросов, требующих изменения статуса.
Цепочка выполнения:
-
Cron
Запускает workflow каждую минуту:
- Тип триггера:
everyMinute
- Тип триггера:
-
get surveys (Postgres)
Выполняет сложный SQL-запрос для получения опросов, требующих обработки:
Логика запроса:
Объединяет три условия через UNION ALL:
-
Запланированные опросы, которые должны начаться:
SELECT "surveyId", "auditory", "respondents", "status", "start_date", "end_date", "type", "groupIndex", "companyId" FROM surveys WHERE "status" = 'planned' AND "start_date" <= CURRENT_TIMESTAMP -
Активные опросы, которые должны завершиться:
SELECT "surveyId", "auditory", "respondents", "status", "start_date", "end_date", "type", "groupIndex", "companyId" FROM surveys WHERE "status" = 'active' AND ("end_date" <= CURRENT_TIMESTAMP OR "current_respondents_count" >= "total_respondents_count") -
Опросы в статусе processing, требующие обработки:
SELECT "surveyId", "auditory", "respondents", "status", "start_date", "end_date", "type", "groupIndex", "companyId" FROM surveys WHERE "status" = 'processing' AND "processing" <= 0
Возвращаемые поля:
surveyId- идентификатор опросаstatus- текущий статус (planned/active/processing)start_date,end_date- даты начала/окончанияcompanyId- идентификатор компании- и другие служебные поля
-
Запланированные опросы, которые должны начаться:
-
If serveys>0
Проверяет, есть ли опросы для обработки:
Условие: $json (результат запроса) не пустойИспользует оператор
notEmptyдля объекта -
Split Out
Разделяет массив опросов на отдельные элементы по полю
surveyId, сохраняя полеstatus:- Поле для разделения:
surveyId - Дополнительные поля:
status
- Поле для разделения:
-
HTTP Request
Отправляет данные каждого опроса на внешний API:
- Метод:
POST - URL:
https://api.hroom.ai/webhook/processing/survey - Параметры запроса:
surveyId={{ $json.surveyId }}status={{ $json.status }}
- Метод:
Логика обработки статусов:
| Текущий статус | Условие для обработки | Ожидаемое действие |
|---|---|---|
| planned | start_date <= текущее время | Активация опроса |
| active | end_date <= текущее время ИЛИ достигнуто нужное количество респондентов | Завершение опроса |
| processing | processing <= 0 | Финальная обработка результатов |
3. Общие компоненты
Расписание выполнения
Workflow запускается каждую минуту (настройка Cron-узла):
"triggerTimes": {
"item": [
{
"mode": "everyMinute"
}
]
}
Структура БД (surveys)
- surveyId - уникальный идентификатор опроса
- status - статус (planned/active/processing)
- start_date, end_date - даты начала и окончания
- current_respondents_count - текущее количество респондентов
- total_respondents_count - требуемое количество респондентов
- processing - флаг обработки (<=0 требует обработки)
- companyId - идентификатор компании
- auditory, respondents, type, groupIndex - дополнительные параметры опроса
Обработка ошибок
Особенности обработки:
- Если нет опросов для обработки, workflow завершается после узла If
- Ошибки подключения к БД или API будут видны в логах n8n
- Узел HTTP Request не включает обработку ошибок - предполагается, что API вернет соответствующий статус