Перейти к содержимому

Автозапуск воронок и процессоров

Платформа умеет работать без участия пользователя: воронку можно запускать по расписанию, а отдельные процессоры — переводить в режим «Авто», чтобы они сами дочитывали накопившиеся данные и тянули за собой следующие шаги цепочки. Эти два механизма независимы, но сочетаются: расписание даёт точку входа, а режим «Авто» обеспечивает каскад до конца воронки.

В системе есть два самостоятельных инструмента:

  • Расписание автозапуска воронки — запускает корневые процессоры воронки в заданные дни и время. Работает на уровне всей воронки.
  • Режим запуска «Авто» у процессора — настраивается у каждого процессора отдельно. После окончания запуска процессор сам перезапускается, пока есть необработанные пакеты, и после этого передаёт эстафету downstream-процессорам, которые тоже находятся в режиме «Авто».

Их можно использовать по отдельности или вместе. Связка «расписание + Авто-цепочка» превращает воронку в полностью автономный конвейер: достаточно один раз настроить, и она будет регулярно собирать данные, обогащать, фильтровать и обновлять CRM без ручных нажатий.

Расписание настраивается через кнопку открытия диалога «Расписание автозапуска» на странице воронки. В диалоге доступны следующие поля:

  • «Расписание включено» — общий тумблер. При выключении расписание сохраняется, но не срабатывает.
  • «Дни недели» — выбираются галочками: Пн, Вт, Ср, Чт, Пт, Сб, Вс. Можно отметить любую комбинацию.
  • «Время первого запуска» — формат HH:MM. Это момент, когда воронка запустится в первый раз в выбранный день.
  • «Повторять в течение дня» — опциональный тумблер. Если выключен, воронка стартует один раз в день в указанное время. Если включён, появляется поле:
  • «Каждые N минут» — интервал повторных запусков в течение дня после первого.
  • «Часовой пояс» — смещение от московского времени (MSK = UTC+3). По умолчанию совпадает с MSK; для других регионов задаётся в часах.

После сохранения настроек система рассчитывает ближайший момент срабатывания и хранит его в воронке. Планировщик проверяет это значение раз в минуту: если оно наступило — расписание срабатывает, и сразу после этого вычисляется следующая точка запуска.

Расписание стартует только корневые процессоры воронки — те, у которых нет входящих соединений (как правило, это процессоры-источники: поиск в Яндексе, загрузка из файла, поиск в реестрах и т.п.). Что произойдёт дальше — зависит от режима запуска у этих процессоров: «Ручной» отработает один цикл и остановится, «Авто» запустит дальнейший каскад (см. ниже).

Если в момент срабатывания в воронке уже выполняется хоть один процессор, тик пропускается, и воронка ждёт следующего слота. Это страховка от наложения параллельных запусков: один полный прогон не должен стартовать поверх ещё не закончившегося.

Режим запуска настраивается в редакторе процессора, в общих настройках. Поле называется «Режим запуска» и принимает два значения:

  • «Ручной» — процессор запускается только по явной команде пользователя или после завершения предыдущего процессора, если пользователь запустил всю воронку целиком.
  • «Авто» — процессор работает автономно (подробно ниже).

Процессоры в режиме «Авто» помечены на холсте редактора иконкой молнии в правом верхнем углу узла — удобно для быстрого визуального аудита воронки.

Когда процессор в режиме «Авто» завершает свой запуск и при этом успешно обработал хотя бы один пакет, система автоматически ставит его в очередь повторно. Цикл повторяется до тех пор, пока:

  • очередь необработанных пакетов на входе не опустеет (один из запусков обработает 0 пакетов), или
  • не будет достигнут лимит в 20 итераций подряд.

Лимит итераций нужен как защита от бесконечного цикла на случай, если процессор постоянно генерирует новые пакеты для самого себя или какого-то предка по цепочке.

Когда самоповтор закончился (пакеты кончились или лимит исчерпан), процессор смотрит на свои downstream-связи — то есть на процессоры, которые подключены ко его выходу. Из них он автоматически запускает только тех, кто тоже находится в режиме «Авто», и делает это последовательно. Каждый из запущенных downstream-процессоров, в свою очередь, повторит этот цикл: самоповтор → каскад дальше.

Процессоры в режиме «Ручной» в каскаде участия не принимают — они ждут команды от пользователя.

  • Ошибка текущего процессора — если процессор завершился с ошибкой, ни самоповтор, ни каскад вниз не выполняются. Цепочка останавливается на этом узле, и пользователь видит ошибку в журнале запусков.
  • Ошибка downstream-процессора — если упал один из downstream-процессоров каскада, остальные всё равно запускаются. Один сломанный лист дерева не валит всё дерево.
  • Отмена — ручная остановка процессора прерывает цикл самоповтора и каскад дальше не идёт.

Связка получается такая:

Расписание срабатывает в 09:00 (Пн-Пт)
Корневые процессоры запускаются (search, file-upload, ...)
Корневые в «Авто»: самоповтор до пустой очереди
Каскад вниз: запускаются downstream «Авто» (enrichment, gptFilter, crmUpdate, ...)
Каждый из них: самоповтор → каскад дальше
Когда все «Авто»-узлы дошли до пустой очереди — воронка остановилась

Если все процессоры в воронке в режиме «Авто», то расписание один раз в день фактически прогоняет всю воронку от источника до выгрузки в CRM. Если часть процессоров в «Ручном» — расписание прогонит автоматическую часть, а остальное останется на ручное подтверждение оператора.

Утренняя лидогенерация. Воронка из «поиск → обогащение → GPT-фильтр → CRM», все процессоры в «Авто», расписание — Пн–Пт в 09:00 без повторов. Каждое утро менеджеры приходят к свежей пачке отфильтрованных лидов.

Постоянный мониторинг. Источник постоянно подбрасывает новые данные (например, мониторинг вакансий на HeadHunter). Расписание — каждый день, повторять каждые 30 минут. Корневой процессор и вся последующая цепочка в «Авто» — воронка реагирует на новые поступления почти в реальном времени.

Еженедельная верификация. Воронка-«пылесос», которая раз в неделю проходит по существующим контактам и проверяет их валидность. Расписание — Сб в 03:00, без повторов.

Гибрид авто и ручной фильтрации. Часть воронки до GPT-фильтра — в «Авто», расписание включено. GPT-фильтр и обновление CRM — в «Ручном». Каждое утро автоматика подгоняет свежий поток на стол к менеджеру, а решение «передать ли в CRM» он принимает сам.

  • 20 итераций самоповтора — если у процессора действительно настолько большая очередь, что 20 запусков не хватает, придётся либо разнести её на несколько тиков расписания, либо запустить ещё раз вручную.
  • Минутная гранулярность расписания — расписание срабатывает с точностью до минуты; «каждые 30 секунд» поставить нельзя.
  • Параллелизм запусков ограничен — одновременных запусков процессоров может быть не больше, чем разрешает общий лимит платформы (по умолчанию 5). Если воронка очень широкая и все ветки в «Авто», часть запусков встанет в очередь.
  • Стоимость в токенах — автоматизация не делает запуски бесплатнее. Каждый прогон тратит токены по своим тарифам. Перед тем как ставить «каждые 5 минут», прикиньте стоимость одного полного прогона по учёту токенов и умножьте на число запусков в день.
  • «Авто» имеет смысл там, где поток данных постоянен. Если процессор раз в неделю обрабатывает 50 пакетов, ему хватит и «Ручного».
  • Фильтруйте раньше каскада. Если в воронке стоит GPT-фильтр, поставьте его как можно ближе к источнику, чтобы дорогие процессоры дальше по цепочке обрабатывали только релевантное.
  • Сначала прогон вручную, потом расписание. Прежде чем включать расписание, прогоните воронку один раз вручную — убедитесь, что цепочка отрабатывает без ошибок и стоимость прогона предсказуема.
  • Не комбинируйте «Авто» с зацикленными источниками. Если процессор-источник постоянно генерирует новые пакеты (например, бесконечно опрашивает внешний API), без явных условий останова он может упереться в лимит 20 итераций каждый запуск и быстро исчерпать токены.
  • Аудитируйте холст по молниям. Перед включением расписания пройдите глазами по узлам и проверьте, что иконки «Авто» стоят ровно там, где вы их ожидаете — лишний «Авто»-узел в неправильной ветке может удивить ночным счётом.