Перейти к содержанию

Узел switch

Много дорог из одного узла. Случаи проверяются в том порядке, в каком записаны, побеждает первый истинный; default ловит всё остальное.

{
  "id": "route",
  "type": "switch",
  "cases": [
    { "when": "vars.urgency == 'high'", "next": "page_a_human" },
    { "when": "vars.topic == 'billing'", "next": "to_billing" },
    { "when": "vars.topic == 'login'", "next": "to_support" }
  ],
  "default": "to_general"
}

Switch и три дороги из него

  • Каждому case нужны и when (CEL-выражение), и next; случай без одного из них — ошибка валидации.
  • Порядок — это приоритет. В примере выше срочный тикет по биллингу уйдёт к человеку, потому что этот случай записан первым; переставьте список — и тот же тикет уйдёт в биллинг.
  • default необязателен, и во фрейм switch не пишет ничего.
  • Событие switch_evaluated фиксирует, какое выражение победило и куда оно повело: {"matched": "vars.topic == 'billing'", "next": "to_billing"}. Если не совпало ничего, matched равен null.

switch или condition?

Два выхода — это condition: then/else читается лучше, чем два случая, один из которых отрицание другого. switch берут от трёх дорог и больше или когда случаи — это список, который будет расти: добавить тему тогда одна строка, а не ещё одна вложенная развилка.

Когда не совпало ничего

Без подходящего case и без default прогон заканчивается на месте: terminal не достигнут, сессия возвращает result = null и ни одного артефакта. default, ведущий в терминал «не распознано», почти всегда лучше графа, который тихо останавливается.