Условие

Узел, который сравнивает одно значение из выполнения с заданным значением и отправляет флоу по одной из двух веток.

4 мин чтения

Условие выбирает ветку. Он сравнивает одно значение из выполнения с заданным вами значением и выходит через Выполнено или Не выполнено.

Узел
Условие
Тип
condition
Категория
Решение
Порты
  • Выполнено met подключение обязательно
  • Не выполнено not_met подключение обязательно
Завершает путь
Нет

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

Узел читает значение по пути из своего поля — во входе, в контексте или в выходе более раннего узла — и сравнивает его со своим значением по своему оператору. Если сравнение выполняется, выполнение выходит через Выполнено, иначе — через Не выполнено. Узел никогда не роняет выполнение: если путь ничего не нашёл, условие не выполняется; не выполняется и сравнение, которое оператор не может сделать, — кроме не равно: для числа против числа, записанного текстом, оно выполняется (см. Ошибки).

JSON
{ "field": "context.plan", "operator": "eq", "value": "pro" }

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

  • Обработать один вид запросов иначе, чем другой: по тарифу, региону, размеру входа.

  • Отклонить запрос до вызова модели: ведите одну из веток в Отклонить запрос.

  • Ветвиться по тому, что оставил более ранний узел, — по выходу Преобразование или по денежным выходам узлов перед AI-модель.

Узел проверяет одно сравнение. Для двух поставьте два узла подряд.

Настройки

НастройкаДля чего она
fieldПуть к проверяемому значению — во вход, в контекст или в выход более раннего узла, например context.plan. Обязателен.
operatorКак сравнивается значение — eq, neq, gt, gte, lt, lte, contains, in или exists. Обязателен.
valueС чем сравнивается значение. Его тип сохраняется — число, текст, true, false, null или список для in. Число для gt, gte, lt и lte; для exists не задаётся.

В конструкторе настройки — Поле, Оператор и Значение. Новый узел проверяет input.plan.

ОператорВыполняется, когда значение по пути…
равно, не равноравно или не равно значению
больше чем, больше или равно, меньше чем, меньше или равнотак соотносится с числом
содержит— текст, в котором есть текст значения, или список, среди элементов которого есть значение
входит в список— один из элементов списка
существуетвообще есть, даже если это null. Значение задавать не нужно
  • Значение сохраняет свой тип. В конструкторе значение равно и не равно сохраняет свой тип, если читается как число, true, false, null или JSON — список, объект; всё остальное — текст. Текст, который читается как одно из них, берётся в кавычки: "5". Список для входит в список вводится через запятую, и каждый элемент читается так же. Четыре оператора порядка принимают число, а содержит — текст как он введён, поэтому в списке он находит текстовый элемент, но не число.

  • Число не равно тексту. 5 и "5" не равны: равно не выполняется, а не равно выполняется, и в обоих случаях трассировка говорит, что две стороны были разных типов. Два числа сравниваются как числа: 1 равно 1.0.

  • Четырём операторам порядка нужно число. Значение по пути может быть числом или десятичной строкой вроде "12.50", поэтому денежная сумма и число, которое вызывающий прислал текстом, сравниваются как числа.

  • Строка контекста обрезается по краям, а оставшаяся пустой становится null: равно "" по контексту никогда не выполняется, а не равно "" выполняется для любого присланного значения. Пустое значение проверяют через равно null.

Порты

У узла два порта, Выполнено и Не выполнено, и оба обязательны. Флоу, в котором любой из них никуда не ведёт, не публикуется.

Выход

JSON
{ "met": true }

Следующий узел читает его как nodes.<key>.output.met.

Ошибки

Ошибок узел не выбрасывает. Путь, который ничего не нашёл, отправляет выполнение через Не выполнено при любом операторе, а в трассировку пишется событие warning с unknown_path. Для оператора существует отсутствие значения и есть ответ, и ничего не пишется.

Два значения, которые оператор не может сравнить, — например, слово там, где оператору порядка нужно число, число там, где содержит ждёт текст или список, или число против числа, записанного текстом, — дают событие warning с type_mismatch. Ответ остаётся ответом сравнения: такая пара не выполняется, и выполнение выходит через Не выполнено, кроме не равно: 5 не равно "5", и выполнение выходит через Выполнено.

JSON
[
  { "type": "warning", "node_key": "check", "payload": { "reason": "unknown_path", "field": "context.plan" } },
  { "type": "warning", "node_key": "check", "payload": { "reason": "type_mismatch", "field": "input.amount", "operator": "gt" } }
]

Настройки проверяются при проверке флоу и при его публикации.

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

ПроверкаСообщение в конструкторе
condition_needs_fieldУзлу «{node}» нужно поле для проверки.
condition_field_bad_path«{node}» проверяет «{path}» — это не путь во входные данные, контекст или узлы.
condition_field_unknown_node«{node}» проверяет «{path}», но узла «{ref}» во флоу нет.
condition_field_later_node«{node}» проверяет «{path}», но «{ref}» не выполняется раньше него — его выхода там ещё нет.
condition_unsupported_operator«{node}» использует несуществующий оператор.
condition_needs_valueУзлу «{node}» нужно значение для сравнения.
condition_value_not_numberЗначение узла «{node}» должно быть числом: его оператор ({operator}) сравнивает числа.
condition_value_not_listЗначение узла «{node}» должно быть непустым списком: его оператор проверяет, что поле входит в список.

Пример

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

Узел проверяет, что context.plan равно "pro". На запрос этого тарифа отвечает модель; любой другой отклоняет Отклонить запрос с кодом, который задал его автор.

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