Узел 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"
}

- Каждому 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, ведущий в терминал
«не распознано», почти всегда лучше графа, который тихо останавливается.