Mejora la calidad de tus automatizaciones con expresiones de sistema y JavaScript: valida el contenido, clasifica la prioridad y devuelve una respuesta estructurada por webhook con trazabilidad. Verás cómo combinar el nodo IF, funciones como length e includes, la condición ternaria y campos del workflow para un flujo más dinámico y claro.
¿Cómo validar mensaje y longitud con JavaScript en el nodo IF?
Para evitar respuestas pobres, se comprueba que el mensaje no esté vacío y que tenga al menos 10 caracteres. Se elige la condición Y en el nodo IF y se aplica la función de JavaScript para medir la longitud con autocompletado al pulsar el punto.
Activa la condición Y: mensaje no vacío y longitud mínima.
Usa la función: mensaje.length para contar caracteres.
Compara como número: mayor que 10.
Ejecuta y verifica que la condición se cumple.
Ejemplo de lógica en la condición:
mensaje !==''&& mensaje.length>10
Así te aseguras de filtrar mensajes demasiado cortos antes de seguir.
¿Cómo detectar y asignar prioridad con condición ternaria?
En Edit Fields, añade el campo Prioridad como expresión. Inserta el mensaje y aplica includes para detectar si contiene la palabra “urgente”. Luego usa la condición ternaria para etiquetar: alta o normal.
Convierte el campo a expresión con “=”.
Inserta el mensaje y aplica includes: busca “urgente”.
Devuelve “alta” o “normal” con la ternaria.
Ejemplo:
mensaje.includes('urgente')?'alta':'normal'
Si el texto no contiene “urgente”, la prioridad resultará normal.
¿Cómo enriquecer la respuesta con fecha, flujo y ejecución para el webhook?
Suma contexto a la respuesta agregando Fecha, Flujo y Ejecución_id. Trabaja con expresiones del sistema y devuelve un objeto claro. Esto aporta trazabilidad y mejora la lectura.
¿Cómo generar la fecha con NOW y formato ISO?
Crea el campo Fecha como texto y usa la variable de sistema NOW. Dale un formato legible con toISO.
Escribe “=” y abre llaves para activar la expresión.
Inserta NOW y convierte con toISO.
Ejemplo:
{{ $now.toISO()}}
Obtendrás la fecha actual en formato estándar, fácil de interpretar.
¿Cómo identificar workflow y execution id en la respuesta?
Añade el nombre del workflow y el identificador de ejecución. Cuando se ejecute, el id aparecerá automáticamente.
Campo Flujo: toma el nombre del workflow.
Campo ejecución_id: usa execution.id y define el tipo correcto.
Ejemplos:
{{ $workflow.name}}{{ $execution.id}}
Si ves que ejecución_id sale como texto, cambia a número para mantener consistencia.
¿Cómo construir el cuerpo JSON y probar con pin?
Puedes mapear manualmente o devolver todo con JSON desde el nodo anterior. Si no dominas JavaScript, arrastra campo por campo y previsualiza.
Construye el objeto con: mensaje, prioridad, fecha, flujo, ejecución_id.
Alternativa avanzada: devolver el JSON completo del nodo anterior.
Usa botón derecho: pin para congelar datos y probar sin reenviar.
Luego unpin para volver a datos en vivo.
Activa Execute workflow para escuchar en modo test.
Observa que ejecución_id se incrementa en cada petición.
Maneja errores: indica cuando el mensaje está vacío o demasiado corto.
Ejemplo de respuesta estructurada para el webhook:
{"mensaje":"Crear tarea en proyecto del backend","prioridad":"normal","fecha":"2024-01-01T12:00:00.000Z","flujo":"NombreDelWorkflow","ejecucion_id":270}
Puntos clave que aplicarás de inmediato:
Expresiones de sistema para enriquecer datos.
Funciones de JavaScript: length, includes, toISO.
Condición ternaria para clasificar prioridad.
Campos de contexto: workflow.name y execution.id.
Buenas prácticas: prueba con pin/unpin, ajusta tipos y valida entradas.
¿Te gustaría compartir cómo etiquetas la prioridad o qué campos extra añadirías a tu respuesta por webhook?
Para mantener un poco de coherencia en las respuestas lo he puesto así para poder tener la información más fácil
//Todo salio bien {"success":true,"data":{{JSON.stringify($json)}}}//Algo salio mal{"success":false,"error_message":"Something went wrong""data":{{JSON.stringify($json)}}}
Adjunto un formato tiempo más comprensible:
{{ $now.format("yyyy-MM-dd hh'hr.' mm'min.'") }}
En la respuesta use la más conocida JSON.stringify()
es buena idea si, para un JSON con poca informacion, de lo contrario es mejor extraer los datos necesarios manualmente como se ve en el video. Imagina un JSON con 100 campos y tu solo necesitas 2 o 3 de ellos y no todos.
1. The Central Idea (The Core 💡): This lesson teaches how to validate messages and structure responses in n8n using JavaScript and system expressions for more dynamic workflows.
2. Key Points (In Bullet Points 📌):
Validate message length using .length in JavaScript.
Use ternary conditions to set message priority (e.g., "alta" or "normal").
Include current date/time with now.toISOString() for readability.
Track workflow and execution IDs using system expressions like ${workflow.name} and ${execution.id}.
Structure webhook responses by dragging fields or using JSON expressions.
3. The Crucial Example or Fact 🚀: The most useful command is using include('urgente') within a ternary operator to dynamically set message priority based on content.
4. Connection or Next Step 🔗: This knowledge allows for more robust and informative responses, crucial for debugging and traceability in professional workflows.
🏛️ Senior Architect's Deep Dive
1. Critical Limitations & Edge Cases:
⚠️ The class implies that relying solely on explicit string matching (e.g., include('urgente')) for priority can be brittle. It doesn't cover synonyms or partial matches, which could lead to missed urgent requests.
⚠️ The use of direct JavaScript within expressions, while powerful, can introduce complexity and potential for errors if not handled carefully, especially when scaling or collaborating.
2. The Expert-Level Debate:
⚖️ Flexibility vs. Maintainability: Using raw JavaScript expressions offers immense flexibility but can become a maintenance nightmare for complex logic or large teams. The trade-off is between granular control and the overhead of code management within a visual workflow tool.
3. Strategic Weakness (The "But..."):
🧐 This is great for structuring responses, but it doesn't address how to manage these structured responses centrally or schema validation for consistency across multiple workflows, which is vital in a microservices architecture.
Asi quedo mi resultado:
Boom !
Para reenviar los datos de entrada y filtrado sin tener que escribirlos uno por uno pueden usar JS.