Saltar a contenido

Documentación: Nodo Condicional Switch

Descripción General

El Nodo Condicional Switch evalúa casos en orden y sale por el conector del primer caso cuya condición se cumple. Permite definir un caso default cuando ninguno coincide. A diferencia del nodo IF (que solo tiene rutas true y false), el Switch permite múltiples salidas, una por cada caso o conector definido.

¿Cuándo usar este nodo?

Utiliza este nodo cuando necesites:

  • Enrutar el flujo según el valor de una variable (por ejemplo: "yes" → rama A, "no" → rama B)
  • Tener varias ramas en lugar de solo verdadero/falso
  • Definir un caso por defecto para cualquier valor no contemplado
  • Evaluar la misma expresión contra varios valores posibles (igual que un switch en programación)

Conectores (salidas)

  • Por caso: cada caso define un connector (string). El motor sigue la conexión cuyo conector coincida con el valor devuelto por el nodo.
  • Sin coincidencia: si ningún caso coincide y no hay caso default, el nodo devuelve el conector false.
  • Fallback en error: si el nodo falla durante la ejecución, el flujo puede continuar por el conector false.

Configuración del Nodo

Formulario de configuración del nodo SWITCH

Paso 1: Agregar casos (requerido)

El campo cases es un arreglo requerido con al menos un elemento. Cada caso es un objeto con:

Campo Tipo Requerido Descripción
leftValue any Sí* Valor a la izquierda de la comparación (p. ej. variable del contexto).
operator objeto Sí* Operador (tipo + operación). Ver operaciones soportadas más abajo.
rightValue any Según op. Valor a la derecha. No se usa en operaciones "single value".
isDefault bool No Si true, es el caso default (se usa si ningún otro coincide).
connector string Conector por el que sale el flujo cuando este caso coincide (o es default).

* En el caso default (isDefault: true) puede ir operator vacío; no se evalúa la condición.

Paso 2: Opciones (opcional)

En options puedes configurar:

  • caseSensitive (bool): si es false, en operadores de tipo string se comparan leftValue y rightValue en minúsculas antes de comparar.

Operador (SwitchOperator)

Cada caso incluye un objeto operator con:

Campo Tipo Descripción
name string Etiqueta (p. ej. "equals"); no afecta la lógica.
operation string Código de la operación (ver tablas abajo).
singleValue bool Si true (solo en tipo number), no se usa rightValue (exists/empty).
type string string, number, boolean o array.

Warning

Los tipos object, null y undefined no están implementados; devuelven error "unsupported operator type".

Operaciones soportadas

Tipo string

Operación Código rightValue Descripción
Existe exists No leftValue != ""
No existe does not exist No leftValue == ""
Está vacío is empty No leftValue == ""
No está vacío is not empty No leftValue != ""
Igual a is equal to Igualdad (sujeta a caseSensitive).
No igual a is not equal to Desigualdad.
Contiene contains Substring.
No contiene does not contain Negación de contains.
Empieza con starts with Prefijo.
No empieza con does not start with Negación.
Termina con ends with Sufijo.
No termina con does not end with Negación.
Coincide regex matches regex rightValue = patrón regex.
No coincide regex does not match regex Negación.
Mayor que is greater than Comparación lexicográfica.
Menor que is less than Comparación lexicográfica.
Mayor o igual is greater than or equal to Comparación lexicográfica.
Menor o igual is less than or equal to Comparación lexicográfica.

Note

En tipo string, las comparaciones "greater/less" son lexicográficas, no numéricas. Para comparar números usa tipo number.

Tipo number

Con singleValue: true (no se usa rightValue):

Operación Código
Existe exists
No existe does not exist
Está vacío is empty
No está vacío is not empty

Con singleValue: false (se convierte leftValue y rightValue a número):

Operación Código
Igual a is equal to
No igual a is not equal to
Mayor que is greater than
Menor que is less than
Mayor o igual is greater than or equal to
Menor o igual is less than or equal to

Tipo boolean

Operación Código
Igual a is equal to
No igual a is not equal to

leftValue y rightValue deben ser booleanos; si no, el caso devuelve error.

Tipo array

Operación Código rightValue Descripción
Contiene contains Cualquier valor Si el array contiene un elemento igual (DeepEqual).
Igual a is equal to Array Igualdad profunda de arrays.
Está vacío is empty No len(leftValue) == 0
No está vacío is not empty No len(leftValue) > 0

leftValue debe ser un array; si no, el caso devuelve error.

Orden de evaluación

  1. Se recorren los cases en el orden definido.
  2. Se ignora el caso con isDefault: true para la evaluación (solo se usa como fallback).
  3. Para cada caso no default se evalúa leftValue operador rightValue.
  4. Primer caso que devuelve true: se termina y se devuelve el connector de ese caso.
  5. Si ninguno coincide y existe un caso con isDefault: true, se devuelve el connector del default.
  6. Si no hay match ni default, se devuelve el conector false.

Estructura JSON

Ejemplo de configuración del nodo:

{
  "cases": [
    {
      "connector": "67b6297a10f",
      "isDefault": false,
      "leftValue": "{{node6bdb5c4975e.response.danger}}",
      "operator": {
        "name": "is equal to",
        "operation": "is equal to",
        "singleValue": true,
        "type": "string"
      },
      "rightValue": "no"
    },
    {
      "connector": "df2efe7863f",
      "isDefault": false,
      "leftValue": "{{node6bdb5c4975e.response.danger}}",
      "operator": {
        "name": "is equal to",
        "operation": "is equal to",
        "singleValue": true,
        "type": "string"
      },
      "rightValue": "yes"
    }
  ],
  "options": {
    "caseSensitive": true
  }
}

Ejemplo con caso default

{
  "options": { "caseSensitive": false },
  "cases": [
    {
      "leftValue": "{{trigger.status}}",
      "operator": {
        "name": "equals",
        "operation": "is equal to",
        "singleValue": false,
        "type": "string"
      },
      "rightValue": "active",
      "connector": "active_branch"
    },
    {
      "leftValue": "{{trigger.status}}",
      "operator": {
        "name": "equals",
        "operation": "is equal to",
        "singleValue": false,
        "type": "string"
      },
      "rightValue": "inactive",
      "connector": "inactive_branch"
    },
    {
      "leftValue": "",
      "operator": {},
      "isDefault": true,
      "connector": "default_branch"
    }
  ]
}

Las conexiones del grafo deben usar como conector los valores definidos en cada caso (active_branch, inactive_branch, default_branch, etc.) según las ramas que hayas configurado.

Ejemplos de Uso

Ejemplo 1: Enrutar por respuesta "yes" / "no"

Caso: según el campo danger de un nodo anterior, seguir una rama u otra.

  • danger = "yes" → conector del primer caso que coincida con "yes".
  • danger = "no" → conector del caso que coincida con "no".
  • Otro valor → conector false (o añade un caso con isDefault: true).

Configuración: dos casos con operator.type = "string", operation = "is equal to", y rightValue "yes" y "no" respectivamente, cada uno con su connector.

Ejemplo 2: Varios estados con default

Caso: estado del trigger active, inactive o cualquier otro.

  • Tres casos: dos con rightValue "active" e "inactive" y sus conectores; el tercero con isDefault: true y connector": "default_branch".

Solución de Problemas

Error: "unsupported operator type"

Causa: operator.type es object, null, undefined o un tipo no soportado.

Solución: usa únicamente string, number, boolean o array.

Ningún caso coincide y no hay default

Comportamiento: el nodo devuelve el conector false. Asegúrate de conectar esa salida en el grafo si quieres manejar el caso "sin coincidencia".

El caso default no se usa

Causa: el caso default debe tener isDefault: true. Si otro caso coincide antes, el default no se evalúa.

Solución: verifica el orden de los casos y que solo un caso tenga isDefault: true.

Mejores Prácticas

  • Usa caso default cuando pueda haber valores no contemplados en el resto de casos.
  • Para comparaciones numéricas reales, usa operator.type = "number" con singleValue = false.
  • Los valores de leftValue y rightValue pueden usar templating (p. ej. {{node_key.output_field}}); el motor los sustituye antes de ejecutar.
  • Mantén el orden de los casos según la prioridad deseada; el primer caso que coincida define la salida.