Когда в сценарии есть шаг «удалить», повторный запуск перестаёт быть безобидным. Шесть признаков надёжности движка автоматизации показывают, что закрывает платформа, а что остаётся автору потока. В конце пять шагов проверки своего инструмента.
Коротко
- Необратимый шаг в сценарии — удаление учётной записи, уничтожение данных уволенного — меняет требования к движку автоматизации: сбой на середине больше не лечится повторным запуском.
- Движок стоит проверить по шести признакам надёжности: валидация графа, повторы при сбоях, идемпотентность необратимых действий, перезапуск с точки сбоя, ожидание завершения резервного копирования, ограничение одновременных запусков.
- В n8n под большинство признаков есть узел или настройка: Retry On Fail, обработчик ошибок, Wait-нода, лимит выполнений на весь инстанс. Политику надёжности из них собирает автор потока; готовой защиты от повторов события и автоматической проверки графа у n8n не описано.
- В «+Альянс Поток» заложены все шесть гарантий. Ожидание резервной копии включается узлом бэкапа, который автор потока ставит раньше шага удаления. Если на одного сотрудника входящим вебхуком пришло два запроса, Поток запустит сценарий два раза. Библиотека у Потока меньше: 18 триггеров и 18 действий против сотен готовых нод n8n.
- Часть ограничений не снимает ни один движок: подписку на события API Яндекс 360 не описывает, и событие организации доезжает до автоматизации опросом журнала.
Вопрос, который задают последним
Когда выбирают систему автоматизации, спрашивают про коннекторы, про цену и про то, кто будет собирать сценарии. Что произойдёт, если сценарий упадёт на середине, спрашивают в последнюю очередь. Это моё наблюдение из разговоров, а не результат опроса.
Пока автоматизация ставит задачи и рассылает напоминания, вопрос и правда не горит. Упало — запустили заново, никто не пострадал. Всё меняется в тот момент, когда в графе появляется узел «Удалить сотрудника»: повторный запуск такого сценария выполняет удаление второй раз.
Отсюда вопрос, который я предлагаю ставить на этапе выбора инструмента, пока сбой ещё гипотетический. Кто отвечает за то, что увольнение не выполнится дважды: платформа автоматизации или человек, который собрал конкретный поток?
Ниже шесть признаков, по которым это видно, и два ответа на каждый: как устроен n8n и как устроен наш «+Альянс Поток». В конце — проверка из пяти шагов, её можно пройти со своим инструментом без подрядчика. Первый шаг делается прямо сейчас: найдите в своём сценарии действия, после которых «запустить заново» уже не поможет.
Что считать необратимым действием
Необратимое действие — это шаг сценария, результат которого нельзя отменить повторным запуском. Удаление сотрудника — самый понятный пример, уничтожение персональных данных уволенного относится сюда же. В «+Альянс Потоке» для такого шага есть гейтинг бэкапа: он включается узлом резервного копирования перед необратимым действием, и сценарий переходит к действию лишь тогда, когда копирование успешно завершилось. Кто решает, пропустить ли сценарий к такому шагу, я разбирал в статье про гейтинг без ИИ и с ИИ.
Большинство остальных шагов при повторе даёт в худшем случае дубль. В движке, где повтор ничем не прикрыт, письмо уйдёт дважды и задача в Яндекс Трекере создастся дважды. Дубль разгребают руками. Удаление руками не разгребёшь — из-за таких шагов вся история с надёжностью движка и имеет смысл.
Откуда взялись шесть признаков
Шесть признаков — это гарантии надёжности, которые мы заложили в «+Альянс Поток»: валидация графа, повторы при сбоях, идемпотентность необратимых действий, безопасный перезапуск с точки сбоя, гейтинг бэкапа и ограничение одновременных запусков на организацию. Любую из них легко приложить к другому движку и посмотреть, что он делает сам, а что оставляет автору потока.
Чек-лист составил вендор, который сам делает движок автоматизации. Проверяется такой чек-лист стендом: ломаете сценарий и смотрите, что система сделала. К нашему продукту это относится так же.
Почему рядом стоит n8n. В первоначальном плане «+Альянс Потока» n8n стоял под капотом со слоем абстракции сверху, а собственный движок был следующим этапом. Разработчики отменили промежуточный этап и сразу сделали целевое решение. Так что n8n мы читали как кандидата в фундамент, и читали внимательно.
Шесть признаков: что делает n8n и что делает «+Альянс Поток»
В средней колонке — чем располагает n8n и что остаётся автору потока. В правой — как отвечает «+Альянс Поток».
| Признак надёжности | n8n | «+Альянс Поток» |
|---|---|---|
| Валидация графа перед запуском | Выход из цикла автор потока строит IF-узлом; автоматическая проверка на циклы и недостижимые узлы у n8n не описана | Поток проверяется на циклы, недостижимые узлы и некорректные связи; невалидный поток не запускается |
| Повторы при временных сбоях | Retry On Fail: Max Tries плюс Wait Between Tries — одно число миллисекунд между попытками, его задаёт автор потока | Действие повторяется с экспоненциальной задержкой; при исчерпании попыток запуск завершается с ошибкой и сохранением её текста |
| Идемпотентность повторного события | Штатной защиты от повторной обработки события у n8n не описано; её собирает автор потока | Два запроса входящим вебхуком на одного сотрудника — два отдельных запуска |
| Перезапуск после сбоя | Опция Save execution progress сохраняет данные выполнения по каждому узлу и, по объяснению участника форума n8n, помогает при крахе всего инстанса; кнопка Retry execution повторяет запуск на данных исходного, а с какого узла — у n8n не уточняется | Повторный запуск упавшего потока продолжает выполнение с точки сбоя, не переисполняя пройденные узлы |
| Ожидание перед необратимым шагом | Wait-нода: четыре режима возобновления, опция Limit Wait Time, переменная execution.resumeUrl; цикл ожидания собирает автор потока |
Узел бэкапа перед необратимым действием: без успешно завершённого резервного копирования действие не выполняется; узел ставит автор потока |
| Ограничение одновременных запусков | В self-hosted — одна переменная N8N_CONCURRENCY_PRODUCTION_LIMIT на весь инстанс, очередь FIFO, застрявшее в очереди выполнение можно только отменить |
Лимит считается на организацию: по умолчанию 5 запусков одновременно; значение зависит от тарифа |
Слова «не описано» в колонке n8n значат ровно это: описания такой возможности у n8n нет. Есть ли она в самом продукте, покажет только проверка на стенде.
Два признака, от которых зависит судьба необратимого шага
На мой взгляд, четыре пункта из шести — про удобство эксплуатации и про нервы администратора. Два оставшихся решают, случится ли то самое двойное увольнение.
Что происходит, когда одно событие приходит дважды
В n8n защита от повторной обработки события — работа автора потока. Готового механизма под эту задачу я у n8n не нашёл. Нода Webhook настраивает HTTP-методы, пути, аутентификацию и формат ответа, а дедупликация повторных вызовов в её описании не упоминается.
Для сценариев поверх Яндекс 360 защита от повторов — чувствительное место, кто бы её ни собирал. О событиях организации автоматизация узнаёт из журнала аудита, который приходится опрашивать. В такой схеме одно и то же событие вполне может быть обработано повторно.
Как защиту от повторов собирают своими руками, рассказывают пользователи n8n. На форуме сообщества n8n участник Niffzy пишет: «Your workflow has no state, so when it fails, it restarts blindly duplicates and skips» — состояния у воркфлоу нет, поэтому после сбоя он стартует вслепую, плодит дубли и пропуски. Совет Niffzy — вести собственную таблицу прогресса во внешней базе данных и продолжать работу по ней. Отвечал он на вопрос Keira_Becky: у неё падение на двадцатой странице возвращает работу к первой. Путь понятный. Только такую таблицу нужно спроектировать, написать и потом сопровождать.
В «+Альянс Потоке» сценарий можно запускать входящим вебхуком. Если на одного сотрудника пришло два запроса, это два независимых запуска: ключа дедупликации у приёмника нет. Повторы отсекайте у отправителя. Система, которая шлёт запрос, должна помнить, что по этому сотруднику он уже ушёл. И проверьте повтор на своём тенанте: пошлите тот же запрос повторно и посмотрите в истории запусков, сколько раз отработал сценарий.
Что происходит после падения на середине
Здесь легко ошибиться, читая настройки по диагонали. В настройках воркфлоу n8n об опции Save execution progress сказано: «the workflow resumes from where it stopped in case of an error» — при ошибке воркфлоу продолжит с места остановки. Формулировка обнадёживает. Участник форума MutedJam ещё в 2021 году объяснил её смысл иначе: «The difference will only be visible if your entire workflow/instance crashes (and not just a single node failing…)» — разница видна, только когда падает весь воркфлоу или инстанс, а не один узел. Опция помогает пережить перезапуск всего процесса n8n.
Упавшее выполнение в n8n повторяют кнопкой Retry execution. Вариантов у неё два: с текущим воркфлоу или с прежним, и в оба идут данные исходного запуска. С какого узла начнётся повтор, описание кнопки не уточняет. Проверьте это на своём сценарии раньше, чем поставите в него удаление.
Переведу на язык оффбординга. Это уже моё рассуждение. Возьмём движок, который после сбоя начинает сценарий сначала. Если сценарий упал после запуска резервного копирования, но до удаления учётной записи, перезапуск снимет копию второй раз — лишняя работа, не более того. Проблема начинается там, где такой перезапуск доходит до узла «Удалить».
К шагу удаления в «+Альянс Потоке» относятся две гарантии. Когда узел бэкапа стоит в сценарии раньше этого шага, удаление сотрудника начинается только после того, как резервное копирование успешно завершится. А упавший поток при повторном запуске идёт дальше с места сбоя и пройденные узлы заново не исполняет. Что уже сделано, видно в истории запусков: там статусы, ошибки и подсветка пройденного пути.
Что «+Альянс Поток» закрывает и что проверить на своём тенанте
«+Альянс Поток» — продукт компании «+Альянс» для автоматизации операций в организации на платформе Яндекс 360. В нём есть все шесть гарантий: валидация графа, повторы, идемпотентность, перезапуск с точки сбоя, гейтинг бэкапа и лимит одновременных запусков. Собирать их из узлов автору потока не приходится, с одной поправкой: гейтинг бэкапа срабатывает в том сценарии, где автор сам поставил узел резервного копирования перед шагом «удалить». В готовом шаблоне «Увольнение сотрудника» такой узел уже есть.
Верить на слово не нужно. Внутреннюю механику мы не публикуем, поэтому проверять предлагаю поведением на вашем тенанте. В продукте есть тестовый прогон потока без реального события, с пошаговой трассировкой, и история запусков. Сломайте сценарий нарочно и посмотрите обе картинки — это честнее любой таблицы.
Теперь о размере библиотеки. У n8n сотни готовых нод, а сервисы без готового коннектора закрывает нода HTTP Request: она обращается к любому приложению с REST API. У «+Альянс Потока» 18 триггеров и 18 действий. Сервис, для которого готового действия нет, подключается универсальным исходящим HTTP-вебхуком — он входит в эти восемнадцать. Когда на входе десяток разных облачных сервисов, которые нужно соединить между собой, большая библиотека готовых интеграций, по моей оценке, перевешивает любые гарантии надёжности — и такой выбор я считаю нормальным.
Есть и обратная сторона специализации. «+Альянс Поток» работает на собственной инфраструктуре компании и хранит данные только в своей базе. На внешние сервисы автоматизации ничего не передаётся.
Потолок платформы, который движком не поднимается
Часть ограничений от выбора инструмента не зависит вообще, и это полезно знать до того, как вы напишете ТЗ. «+Альянс Поток» упирается в них ровно так же, как любой другой инструмент поверх Яндекс 360.
Первое — подписка на события. Журнал аудита Яндекс 360 отдаёт события по запросу, а подписки, при которой платформа сама присылает событие на ваш адрес, API 360 не описывает ни для одного сервиса. Значит, событие организации доезжает до автоматизации с задержкой на цикл опроса журнала, и обвязку опроса придётся закладывать в проект независимо от выбранного инструмента.
Второе — Календарь и Формы. Создать встречу «+Альянс Поток» может: с Календарём он работает по CalDAV, мимо API 360. А прочитать через API 360 ответ на приглашение или отправку формы неоткуда: таких событий API 360 не описывает. Для формы есть другой путь: в «+Альянс Потоке» сценарий запускается вебхуком самой Яндекс Формы, без события API 360. Этот способ работает уже на тарифе «Старт». Для приглашения у «+Альянс Потока» другого пути нет. Сценарии, которые ждут ответа гостя, в ТЗ не закладывайте.
Упрекать вендора тут не в чем: норма платформы такова. Подробный разбор этого пробела и того, что остаётся администратору, — в статье «Аудит-лог Яндекс 360 не расскажет вам о новом сотруднике: что делать администратору».
Отдельно — доказательство того, что действие выполнено
За техническим вопросом «выполнилось ли ровно один раз» почти сразу встаёт юридический: чем подтвердить проверяющему, что учётная запись и данные уволенного уничтожены. Ни один движок автоматизации не закрывает эту задачу целиком — «+Альянс Поток» в том числе, — потому что часть полей подтверждающих документов рождается вне системы. Что попадает в журналы автоматически, а что придётся вписывать в акт руками, разобрано в отдельной статье — «Оффбординг сотрудника в Яндекс 360: что попадает в журналы, а что придётся вписывать в акт руками».
Как проверить свой движок самому
Порядок, по которому это делается без привлечения подрядчика.
- Выпишите из рабочего сценария шаги, которые нельзя отменить повторным запуском. Если таких нет, дальше можно не читать: ваши риски измеряются дублем письма.
- Откройте руководство своего движка и найдите настройку повторов. Проверьте два параметра: сколько попыток делается и как задаётся пауза между ними.
- Поищите в том же руководстве слово «idempotency». Ноль совпадений значит только одно: защита от повторов не описана. Есть ли она на деле, покажет стенд.
- Найдите формулировку про поведение после сбоя. Читайте буквально: «продолжает с места остановки» и «повторяет запуск на данных предыдущего выполнения» описывают разные вещи.
- Задайте вендору или подрядчику один вопрос: что произойдёт, если одно и то же событие придёт в поток дважды. И попросите показать ответ на стенде.
Пустые клетки в таком разборе — не приговор движку. Это объём работы, который придётся заложить в проект вашей команде или подрядчику, и лучше увидеть его до подписания сроков.
Чего эта проверка не даст
Шесть признаков не покрывают всего. Про Temporal, Airflow и Camunda я ничего утверждать не берусь: фактов о них у меня нет, а рассуждать о чужих продуктах по слухам — плохая практика.
Рамка не отвечает и на вопрос, как движок ведёт себя в реальности. Про n8n здесь сказано то, что описывает сам n8n и что рассказывают участники его форума. Испытаний n8n на стенде за этим текстом нет.
Поэтому финальную проверку я вижу только одну, и она одинаково относится к нашему продукту и к любому чужому. Возьмите сценарий с необратимым шагом, выключите на середине внешний сервис, дайте одному событию прийти дважды и посмотрите в журнал запусков, что система сделала после этого. Дальше решайте по увиденному, а не по чек-листу — включая мой.
Частые вопросы
Чем плох Retry On Fail, если такой переключатель есть почти у всех?
Ничем не плох, он просто закрывает один признак из шести. В n8n Retry On Fail повторяет ноду до успеха и настраивается двумя числами: Max Tries и Wait Between Tries в миллисекундах. Что делать с событием, которое пришло дважды, и как продолжить упавший поток — это отдельные вопросы, и переключатель повторов на них не отвечает.
Мы уже собрали сценарии в n8n. Их что, переделывать?
Нет. То, чего в готовом виде вы у n8n не нашли, собирается из его же узлов и настроек. Воркфлоу-обработчик ошибок назначается в настройках и начинается с Error Trigger, один и тот же обработчик можно назначить нескольким воркфлоу. Wait-нода возобновляет выполнение в одном из четырёх режимов. Хранить прогресс в собственной внешней базе советует участник форума n8n Niffzy. Всё это работает; вопрос лишь в том, что это работа автора потока и её нужно заложить в сроки.
Можно ли развести клиентов или подразделения по разным очередям?
Штатного механизма изоляции я у n8n не нашёл. В self-hosted лимит одновременных выполнений задаётся одной переменной N8N_CONCURRENCY_PRODUCTION_LIMIT на весь инстанс. В облаке n8n лимит выдаётся по тарифу, отдельного лимита на проект или клиента там не описано. Projects и RBAC отвечают за роли и доступ пользователей внутри одного инстанса. Страница «Isolate n8n» — про другое: как отключить инстанс от серверов n8n, то есть от телеметрии, проверки обновлений и шаблонов. В «+Альянс Потоке» ограничение одновременных запусков задаётся на организацию и зависит от тарифа. Значение по умолчанию — 5.
Как быть, если перед удалением нужно дождаться долгой операции?
В n8n цикл ожидания собирается из Wait-ноды: четыре режима возобновления, опция Limit Wait Time для вебхука и формы, execution.resumeUrl для возобновления по HTTP-вызову. Полезная деталь: при ожидании короче 65 секунд данные выполнения в базу не выгружаются. Как Wait сочетается с общим таймаутом выполнения EXECUTIONS_TIMEOUT, в описании таймаута не сказано. Если ждать предстоит долго, проверьте эту связку на своём инстансе до боевого запуска. В «+Альянс Потоке» под резервное копирование такой цикл не нужен. Поставьте узел бэкапа перед необратимым действием: пока копия не снята успешно, это действие не выполнится.
Реагирует ли автоматизация на ответ в Календаре и на отправку формы?
На ответ в Календаре — нет. События «приглашение принято» API Яндекс 360 не описывает, поэтому узнать через API 360, что на приглашение ответили, автоматизации неоткуда. Ограничение одинаково для любого инструмента поверх API 360, наш продукт не исключение. Встречи при этом «+Альянс Поток» создаёт — по CalDAV. С формой иначе. События «ответ на форму отправлен» API Яндекс 360 тоже не описывает, но на заполненную форму «+Альянс Поток» реагирует: сценарий поднимает вебхук самой Яндекс Формы.
Есть ли «+Альянс Поток» в реестре российского ПО?
Нет. В реестр российского ПО внесена программа для ЭВМ «Мигратор Т2Т» — реестровая запись № 28672 от 09.07.2025. «+Альянс Бэкап Яндекс 360» внесён в реестр — реестровая запись № 35522 от 05.10.2026. «+Альянс Поток» в реестр не внесён.
Александр Жогов, основатель и руководитель компании «+Альянс».
