Темный режим

Cron Survey Processing Workflow

1. Обзор workflow

Автоматическая обработка опросов по расписанию с проверкой их статуса.

Названиеcron-survey-processing
ТипCron-задача (выполняется каждую минуту)
База данныхPostgreSQL (таблица surveys)
Основной webhookhttps://api.hroom.ai/webhook/processing/survey

2. POST /processing/survey

Автоматическая обработка опросов, требующих изменения статуса.

Цепочка выполнения:

  1. Cron

    Запускает workflow каждую минуту:

    • Тип триггера: everyMinute
  2. get surveys (Postgres)

    Выполняет сложный SQL-запрос для получения опросов, требующих обработки:

    Логика запроса:

    Объединяет три условия через UNION ALL:

    1. Запланированные опросы, которые должны начаться:
      SELECT 
          "surveyId", "auditory", "respondents", "status",
          "start_date", "end_date", "type", "groupIndex", "companyId"
      FROM surveys
      WHERE "status" = 'planned' 
        AND "start_date" <= CURRENT_TIMESTAMP
    2. Активные опросы, которые должны завершиться:
      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")
    3. Опросы в статусе 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 - идентификатор компании
    • и другие служебные поля
  3. If serveys>0

    Проверяет, есть ли опросы для обработки:

    Условие: $json (результат запроса) не пустой

    Использует оператор notEmpty для объекта

  4. Split Out

    Разделяет массив опросов на отдельные элементы по полю surveyId, сохраняя поле status:

    • Поле для разделения: surveyId
    • Дополнительные поля: status
  5. 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 - дополнительные параметры опроса

Обработка ошибок

Особенности обработки: