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
switchen 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¶

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 | Sí | 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 esfalse, en operadores de tipostringse comparanleftValueyrightValueen 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 |
Sí | Igualdad (sujeta a caseSensitive). |
| No igual a | is not equal to |
Sí | Desigualdad. |
| Contiene | contains |
Sí | Substring. |
| No contiene | does not contain |
Sí | Negación de contains. |
| Empieza con | starts with |
Sí | Prefijo. |
| No empieza con | does not start with |
Sí | Negación. |
| Termina con | ends with |
Sí | Sufijo. |
| No termina con | does not end with |
Sí | Negación. |
| Coincide regex | matches regex |
Sí | rightValue = patrón regex. |
| No coincide regex | does not match regex |
Sí | Negación. |
| Mayor que | is greater than |
Sí | Comparación lexicográfica. |
| Menor que | is less than |
Sí | Comparación lexicográfica. |
| Mayor o igual | is greater than or equal to |
Sí | Comparación lexicográfica. |
| Menor o igual | is less than or equal to |
Sí | 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¶
- Se recorren los
casesen el orden definido. - Se ignora el caso con
isDefault: truepara la evaluación (solo se usa como fallback). - Para cada caso no default se evalúa leftValue operador rightValue.
- Primer caso que devuelve true: se termina y se devuelve el
connectorde ese caso. - Si ninguno coincide y existe un caso con
isDefault: true, se devuelve elconnectordel default. - 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 conisDefault: 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 conisDefault: trueyconnector": "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"consingleValue = false. - Los valores de
leftValueyrightValuepueden 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.