LABS · JULIÁN LÓPEZ JIMÉNEZ · RECURSO GRATUITO
Practica tres retos de diagnóstico en el navegador: interpreta datos, limpia un asunto y elige la rama. Después repítelos con n8n real. Tres retos originales con pistas y soluciones; no envían mensajes ni necesitan una API de pago.
Resuelve causa, evidencia, corrección mínima y prueba funcional antes de abrir la solución. Después realiza la práctica real.
Ejecutas el flujo dos veces. Decide qué representa la salida y cómo conservar la identidad. No existe ningún nodo de envío.
Manual Trigger → Edit Fields
id (String): S-GRATIS
asunto (String): No imprime Ejecución A y ejecución B (independientes)
Cada ejecución: [{"json":{"id":"S-GRATIS","asunto":" No imprime "}}]Nodos conectados
No hay HTTP, correo ni bandeja. Una ejecución nueva no acumula items en la anterior.Una ejecución es una ocasión; un item es un dato que viaja entre nodos.
Cuenta los objetos de la salida de una ejecución, no el número de veces que pulsaste ejecutar.
Cambia el ID y observa la salida antes de pensar en un envío.
Cada ejecución produce su propio item con id y asunto. Conservar el identificador permite seguir la solicitud. Aquí no existe un efecto externo: repetir no demuestra envío, aprobación ni resolución.
Una expresión fija elimina espacios; compara dos configuraciones de Edit Fields y elige la que conserva la trazabilidad.
Un item de entrada
{"id":"S-GRATIS","asunto":" No imprime "}={{ String($json.asunto ?? "").trim() }}
A · Include Other Input Fields desactivado:
{"asunto_limpio":"No imprime"}
B · Activado:
{"id":"S-GRATIS","asunto":" No imprime ","asunto_limpio":"No imprime"}Texto, espacios, ausencia y null
" No imprime " → "No imprime"
" " → ""
Ausente → ""
null → ""
Este reto parte de texto o ausencia; convertir un objeto a texto no acredita un contrato válido.Normalizar no equivale a borrar los datos que necesitarás después.
Compara las claves de A y B, no solo el texto limpio.
Include Other Input Fields conserva los campos; ?? cubre ausencia/null y trim elimina extremos.
La salida B conserva la identidad y el original. El campo limpio se utiliza después para decidir; una cadena vacía no es una solicitud válida. Este ejercicio no valida entradas arbitrarias: el curso añade comprobación estricta de tipos.
El IF del flujo se configuró sobre asunto original. Descubre por qué una entrada con espacios sigue una ruta incorrecta.
Tres ensayos independientes
A: {"id":"S-1","asunto":" No imprime ","asunto_limpio":"No imprime"}
B: {"id":"S-2","asunto":" ","asunto_limpio":""}
C: {"id":"S-3","asunto_limpio":""}IF · String → is not empty
Valor: {{ $json.asunto }}
B toma true porque el original contiene espacios. No se ha consultado asunto_limpio.Conservar campos en ambos Edit Fields
true → estado=lista_para_revision
false → estado=incompleta
Cada item recorre una sola salida. lista_para_revision no significa aprobado ni enviado.Una cadena con espacios no es una cadena vacía hasta normalizarla.
La expresión del IF debe leer el campo calculado por el nodo anterior.
Comprueba las tres entradas y conserva id en cada salida. No concedas autoridad al contenido.
El IF correcto consulta asunto_limpio: A va a lista_para_revision y B/C a incompleta. Es una decisión de completitud, no una revisión semántica ni autorización de envío. Repite los casos en tu n8n real y compara las salidas.
El diagnóstico anterior utiliza evidencias preparadas. Las siguientes instrucciones se realizan en tu instancia, con datos ficticios. Compara INPUT y OUTPUT y registra lo que observas.
Qué necesitas: Para el playground basta un navegador con JavaScript, sin cuenta. Para repetir la práctica real necesitas una instancia propia de n8n. Puede ser local con Docker siguiendo la documentación oficial o una instancia que ya tengas; no hace falta contratar n8n Cloud para estos nodos. La instalación local requiere Docker, espacio y configurar tú la cuenta de propietario. No publiques el editor ni desactives su autenticación. Datos ficticios; no necesitas comprar el curso ni registrarte en Labs.
Tu resultado: Un flujo Manual Trigger → Edit Fields → Edit Fields → IF con dos salidas y una tabla de tres pruebas que puedas explicar.
Crea un workflow nuevo e inactivo. Añade Manual Trigger y conéctalo a Edit Fields (Set). Usa asignaciones manuales y crea id=S-GRATIS y asunto con espacios alrededor de No imprime. Ejecuta todo el workflow y abre OUTPUT en vista JSON. Un item no es una ejecución: al repetir tendrás una nueva ejecución con otro resultado, no dos solicitudes acumuladas.
Campos de Edit Fields:
id (String): S-GRATIS
asunto (String): No imprime Conecta los dos nodos. Escribe los valores como texto literal; todavía no hace falta una expresión.
Manual Trigger → Edit Fields
Salida esperada: {"id":"S-GRATIS","asunto":" No imprime "}Las llaves muestran un objeto y cada campo tiene un nombre. Ejecutar otra vez no duplica un efecto externo porque todavía no existe ningún envío.
Comprueba: Un item con id y asunto de texto. Conserva la salida observada, no una captura de otra ejecución.
Añade otro Edit Fields. Crea asunto_limpio como expresión y activa Include Other Input Fields para conservar id y asunto original. La normalización elimina espacios extremos, pero no decide si el asunto es suficiente. Prueba un texto normal, solo espacios y un campo ausente.
={{ String($json.asunto ?? "").trim() }}Activa Expression en el valor. $json es el item actual; trim() no cambia las palabras del interior.
No imprime → No imprime
(solo espacios) → texto vacío
Campo ausente → texto vacío?? cubre null o ausencia. String garantiza texto y trim quita extremos. Esta práctica presupone entradas de texto o ausentes; el curso completo añade validación estricta del tipo para rechazar objetos.
Comprueba: asunto_limpio no tiene espacios extremos y el id sigue presente. No has borrado asunto original.
Añade IF con una condición String sobre asunto_limpio, operación is not empty. En la salida true conecta un Edit Fields que añada estado=lista_para_revision; en false, otro con estado=incompleta. Conserva los campos de entrada en ambos. Ejecuta tres veces con los casos anteriores. Ninguna rama envía correos ni significa que alguien haya resuelto la solicitud.
IF: {{ $json.asunto_limpio }} → String → is not empty
true → estado = lista_para_revision
false → estado = incompletaLas dos salidas del IF representan condiciones opuestas. Etiqueta ambas para que el resultado sea visible.
Asunto: No imprime → lista_para_revision
Asunto: espacios → incompleta
Asunto: ausente → incompletaEl valor normalizado decide el camino. No uses asunto original para el IF porque una cadena con espacios puede parecer no vacía. Las dos ramas deben conservar id para poder explicar qué ocurrió.
Comprueba: Una ruta por caso, sin duplicados ni envíos. Puedes justificar por qué una entrada incompleta no sigue.
Cambia id a S-OTRO y el asunto a Necesito mi factura. Predice la rama. Después prueba asunto=null. Registra entrada, asunto_limpio y estado. Exporta el JSON y revisa que no contenga datos fijados personales ni credenciales antes de compartirlo.
S-OTRO + Necesito mi factura → lista_para_revision
S-OTRO + null → incompleta
Tabla de prueba: entrada | normalización | estado observadoLa categoría del tema no importa para esta condición: solo comprueba que haya texto después de normalizar. Esto no es IA ni una revisión semántica. El siguiente paso sería validar el tipo, consultar un servicio y registrar efectos con control de duplicados.
Repite con datos distintos antes de marcarlo como practicado. Esta es una autoevaluación, no una certificación.
Detente, lee el mensaje y vuelve al último paso que pudiste comprobar. No necesitas acertar a la primera.
Estos nodos no requieren una API de pago ni IA. Puedes utilizar una instancia local propia. Instalarla requiere Docker y configurar tu cuenta; si eliges un servicio comercial, revisa sus condiciones y coste por separado.
Activa Expression en el valor de Edit Fields. La salida debe contener el texto normalizado, no las llaves de la expresión. Ejecuta todo el flujo de nuevo y revisa OUTPUT.
Revisa Include Other Input Fields en el nodo de transformación y en las dos salidas. No inventes un identificador nuevo para ocultar la pérdida: vuelve a conservar el original.
Comprueba que IF usa asunto_limpio y que el nodo anterior ejecutó trim. Quita datos fijados si estás reutilizando una salida de otra prueba.
Si aún dudas, repite el paso con datos ficticios nuevos. Puedes guardar la práctica para continuar más tarde.
Para consultar un concepto: Documentación oficial de Edit Fields (Set).
De cero a n8n amplía este flujo con datos, HTTP, paginación, webhooks, horarios, contratos, reintentos y una oficina local de solicitudes. Incluye introducción a propuestas IA con simulación explícita e inferencia local opcional. Este recurso es completo y puedes repetirlo sin comprar.
Ver el curso De cero a n8n y su temarioFuente: Recurso original de Labs. Puedes guardar este HTML, abrirlo sin conexión o imprimirlo como PDF desde tu navegador. No guarda tus respuestas ni el progreso de tu cuenta.