Ir al contenido
AppsSDAR

Editar workflows de n8n por API sin crear un bucle infinito

5 min de lectura APIs y automatización

n8n tiene una API pública que permite leer y modificar workflows sin abrir el editor visual. Es muy útil para versionar flujos o ajustarlos desde scripts. También permite, con un cambio aparentemente pequeño, crear un bucle infinito en producción. Me pasó al reordenar dos nodos de la bandeja de leads.

Qué pasó

El flujo recibía un formulario, lo clasificaba con IA, lo guardaba, avisaba por Telegram y al final respondía al formulario. Para que el visitante no esperara a la IA, decidí mover la respuesta al principio, justo después de recibir el formulario. Hice el cambio editando las conexiones por la API.

El cambio asignó correctamente las nuevas salidas del nodo movido, pero dejó viva la conexión vieja que iba desde el aviso de Telegram hacia la respuesta. Ahora el flujo pasaba por la respuesta, seguía hasta Telegram y volvía a la respuesta. El resultado: cientos de filas basura en la tabla de leads, cientos de mensajes de Telegram y la cuota diaria de la API de IA consumida en minutos.

Por qué pasa

En el JSON de un workflow, las conexiones se guardan agrupadas por nodo de origen. Al modificar por API las salidas de un nodo, solo se reescriben esas salidas. Las conexiones de otros nodos que apuntaban al nodo movido siguen existiendo. En el editor visual se verían como una flecha extra; en el JSON son una línea que nadie mira.

Y n8n no valida ciclos al guardar. Un grafo con un ciclo se acepta sin advertencias y se descubre al ejecutarse.

La prevención: seis líneas

Antes de cada actualización por API, correr una búsqueda en profundidad sobre las conexiones. Si durante el recorrido se vuelve a un nodo que está en el camino actual, hay un ciclo y la actualización se aborta. Es un algoritmo de pocas líneas que cualquier script de edición debería tener. Además:

  • Al reubicar un nodo, borrar explícitamente las conexiones de los nodos que apuntaban a él, no solo asignar las nuevas.
  • Revisar el grafo resultante en el editor visual antes de activar.
  • Probar el flujo modificado con una ejecución manual antes de dejarlo activo.

Detenerlo cuando ya está corriendo

La reacción natural es desactivar el workflow. No alcanza: desactivar evita ejecuciones nuevas, pero no detiene las que ya están en curso, y cada una sigue con el grafo que tenía al empezar. En un bucle, esa ejecución no termina nunca. Lo que la cortó de verdad fue reiniciar el contenedor de n8n.

Para confirmar que el bucle se había detenido, en vez de mirar la tabla a ojo, inserté dos filas de control separadas por unos segundos y comparé sus identificadores. Si entre una y otra aparecían filas nuevas, algo seguía escribiendo.

Dos trampas más de la API

  • Las llaves de un texto de ejemplo en formato JSON, puestas dentro de una expresión de n8n, rompen el evaluador con un error de sintaxis sin detalle. El cuerpo de la petición se arma en un nodo de código y la expresión solo lo referencia.
  • La API de tablas de datos permite crear e insertar filas, pero algunas operaciones de borrado masivo no están disponibles y hay que resolverlas desde la interfaz.

La lección

Editar un grafo por API es editar un grafo: valida que siga siendo un grafo sin ciclos antes de guardarlo.