Saltar al contenido principal

Switch, loops y condicionales

AIFlows introduce nodos de control de flujo expresivos que superan el binario true/false de BotV2.

Switch (ramificación múltiple)

Evalúa una expresión o el valor de una variable y enruta a una route específica.

{
"kind": "switch",
"expression": "{{category}}",
"cases": [
{ "value": "ventas", "route": "node_sales" },
{ "value": "soporte", "route": "node_support" },
{ "value": "facturacion", "route": "node_billing" }
],
"default": "node_fallback"
}

El validador exige que cada value sea único y que default exista si hay casos abiertos.

Loops (iteración acotada)

Dos variantes:

Loop sobre colección

{
"kind": "loop",
"mode": "forEach",
"collection": "{{items}}",
"itemVar": "item",
"body": { "node": "node_process_item" },
"maxIterations": 1000,
"maxDurationMs": 30000
}

Loop while

{
"kind": "loop",
"mode": "while",
"condition": "{{hasMore}}",
"body": { "node": "node_fetch_next" },
"maxIterations": 500
}

Cotas anti-runaway

Todo loop declara obligatoriamente:

  • maxIterations (límite duro de iteraciones).
  • maxDurationMs (tiempo máximo de pared).

Si se alcanza una cota, el loop termina con outcome capped y se registra en la traza. Nunca se queda iterando indefinidamente.

Condicionales clásicos (if/else)

Siguen existiendo como nodos simples:

{
"kind": "if",
"condition": "{{user.tier == 'premium'}}",
"then": "node_premium",
"else": "node_basic"
}

La condición se evalúa con el mismo motor de expresiones que el resto del sistema.

Redirección

redirect permite saltar a otro nodo del grafo sin importar la posición:

{ "kind": "redirect", "target": "node_payment_success" }

Útil para implementar go-to controlados. El validador verifica que target exista y no genere ciclos infinitos.

Validación de ciclos

Antes de publicar un flujo, el motor ejecuta el validador de integridad (doc-iaflows/10-VALIDATION-RULES.md) que detecta:

  • Ciclos entre nodos sin wait intermedio.
  • Loops sin cotas.
  • Switches sin caso default.
  • Redirecciones que cierran el grafo prematuramente.

Si el validador rechaza, el grafo no se puede publicar hasta corregir.