Требуется одобрение

Узел, который останавливает выполнение, пока человек не одобрит или не отклонит его, и отправляет его дальше по ветке решения.

4 мин чтения

Требуется одобрение останавливает выполнение, пока по нему не решит человек. Одобрение отправляет выполнение дальше через Одобрено, а отклонение — или отсутствие решения в срок — через Отклонено.

Узел
Требуется одобрение
Тип
require_approval
Категория
Деньги
Порты
  • Одобрено approved подключение обязательно
  • Отклонено rejected подключение обязательно
Завершает путь
Нет

Что делает узел

Когда выполнение доходит до узла, Slen заводит заявку на согласование с примечанием узла и сроком, до которого по ней нужно решить, и отправляет событие вебхука approval.requested. Выполнение останавливается на узле, и его статус становится waiting.

Запрос, который начал выполнение, сразу получает ответ 202. В ответе waiting_on называет узел, его type — approval, а resume_at — null: выполнение двигает решение, а не часы. Выполнение, начатое в асинхронном режиме, получило ответ раньше, и его статус становится waiting, когда оно доходит до узла.

Участник решает на странице Согласования или API-ключ решает через API — Согласования. В течение минуты после решения выполнение продолжается с узла:

  • одобрено — через Одобрено;

  • отклонено — через Отклонено;

  • не решено в срок — заявка становится expired, и выполнение выходит через Отклонено, как если бы его отклонили.

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

Когда использовать

  • Чтобы человек одобрял трату до того, как она случится, — большую задачу, дорогую модель, запрос клиента, за которым вы присматриваете.

  • Поставьте перед узлом Условие, чтобы решения ждали только те запросы, которым оно нужно. Так делает шаблон Согласование запросов — Шаблоны AI-флоу.

  • Чтобы узнавать о заявке, не открывая консоль, подпишитесь на approval.requested и approval.decided — Вебхуки.

  • Чтобы задержать выполнение на заданное время без человека, используйте Очередь.

Заявка на странице Согласования может прийти и без этого узла — от узла AI-модель, чья политика перерасхода просит человека одобрить вызов, который оказался дороже своего холда. Отклонение или отсутствие решения в течение 24 часов отклоняет вызов с кодом overrun_stopped, и выполнение выходит из узла модели через Отказ. У нового узла модели политики перерасхода нет, а политика, которая у узла есть, практически не срабатывает, — Согласования, AI-модель.

Настройки

НастройкаДля чего она
expires_hoursСколько времени у человека на решение, в целых часах. Не меньше 1 и по умолчанию не больше 71. Если никто не решил в срок, это считается отклонением. Узел без значения даёт 24 часа.
noteСлова, которые читает вместе с заявкой тот, кто решает, — например, почему трата требует решения. Необязательно. Хранятся первые 500 символов.

В конструкторе настройки — это поля Решить в течение (часов) и Примечание для принимающего решение. Новый узел даёт 24 часа и не имеет примечания.

Самый долгий срок решения по умолчанию — 71 час: выполнение может ждать в общей сложности 72 часа, и решение должно прийти раньше. Более долгий срок отклоняется при публикации флоу.

Порты

ПортВыполнение выходит через него, когда
ОдобреноЗаявка одобрена. Обязательный
ОтклоненоЗаявка отклонена или никто не решил в срок. Обязательный

Флоу, в котором любой из портов никуда не ведёт, не публикуется — Порты и ветвление.

Выход

После решения узел оставляет свой вердикт следующим узлам.

JSON
{
  "status": "approved",
  "reason": "Within the quarter plan",
  "approval_id": "74438200973595136",
  "decided_at": "2026-10-02T09:41:00+00:00"
}
  • status — это approved, rejected или expired. И отклонение, и истёкший срок выходят через Отклонено, поэтому Условие на этой ветке различает их по nodes.<key>.output.status, где <key> — ключ этого узла во флоу.

  • reason — то, что человек написал вместе с решением, или null. У заявки с истёкшим сроком там not decided in time.

  • Кто решил, в выходе нет. Его называет событие вебхука approval.decided.

Ошибки

Своих ошибок узел не выдаёт. Его настройки проверяются при проверке флоу и при его публикации.

В API запись issues называет такую проверку в params.detail; её code — invalid_node_config.

ПроверкаСообщение в конструкторе
require_approval_invalid_expires_hoursСрок решения «{node}» должен быть целым числом часов, не меньше 1.
require_approval_expires_too_lateСрок решения «{node}» дольше, чем хранится ожидающее выполнение: не больше {max} ч.

До узла нельзя дойти от узла Резерв бюджета раньше, чем до модели, ни по одной связи, кроме ветки Отказ: у ожидающего выполнения ничего не зарезервировано. Такой флоу не публикуется — Финансовая цепочка.

По заявке, чьё выполнение закрыли раньше, чем кто-то решил, — после того как оно прождало слишком долго, — решить уже нельзя.

Пример

  • Запрос — По умолчанию → Требуется одобрение
  • Требуется одобрение — Одобрено → AI-модель
  • Требуется одобрение — Отклонено → Отклонить запрос
  • AI-модель — Успех → Вернуть ответ

Запрос получает ответ waiting, как только выполнение доходит до узла Требуется одобрение. После одобрения AI-модель резервирует деньги и вызывает модель, а Вернуть ответ завершает выполнение как completed. После отклонения или когда никто не решил в срок Отклонить запрос завершает его как rejected, и никаких денег не было зарезервировано.

Собрано из openapi b070e1f, sdk contract 5cc7055, php ae4a53b, node 84bc62d