Saltar al contenido principal
Volver al blog

Integra Claude en n8n: automatizaciones con IA de verdad

Ray MartínRay Martín
11 min de lectura
Integra Claude en n8n: automatizaciones con IA de verdad

Automatizar tareas es valioso. Automatizar criterio es transformador. n8n ya te permite encadenar APIs, enviar emails y mover datos entre sistemas sin escribir una línea de código. Pero cuando conectas n8n con Claude — el modelo de lenguaje de Anthropic — das el salto de "este flujo ejecuta acciones predefinidas" a "este flujo razona, clasifica, resume y decide". En este post verás cómo hacer esa conexión con el nodo HTTP Request, cómo forzar salida estructurada en JSON para que tus flujos puedan ramificar por ella, y dos casos reales listos para adaptar.

¿Por qué Claude en tus flujos?

Los modelos de IA modernos no son solo generadores de texto; son motores de razonamiento que puedes incrustar en cualquier punto de un flujo de trabajo. Claude en particular destaca por tres razones prácticas en automatizaciones:

  • Comprensión de instrucciones complejas: Puedes darle contexto detallado — un sistema de categorías, una política de empresa, un tono de voz — y aplicará ese contexto de forma consistente en miles de ejecuciones.
  • Salida estructurada: Usando tool use (la técnica de llamada a herramientas de la API de Anthropic) puedes hacer que Claude devuelva JSON con un esquema exacto que tú defines. Eso elimina el parseo frágil de texto libre.
  • Multilingüe y consciente del contexto: Claude entiende y genera en español, inglés y docenas de idiomas más. Si tu empresa recibe emails en varios idiomas, Claude los clasifica igualmente bien sin configuración adicional.

Casos de uso habituales en flujos n8n: clasificar tickets de soporte, resumir emails largos, extraer datos estructurados de texto no estructurado, redactar borradores de respuesta, validar contenido antes de publicarlo, traducir con contexto de marca.

Llamar a la API de Claude con el nodo HTTP

Claude no tiene un nodo nativo en n8n (aún), pero el nodo HTTP Request es todo lo que necesitas. La API de Anthropic sigue la convención REST estándar: un endpoint, un método POST, cabeceras de autenticación y un cuerpo JSON.

Configuración del nodo HTTP Request en n8n:

  • Method: POST
  • URL: https://api.anthropic.com/v1/messages
  • Authentication: Generic Credential Type → Header Auth → Name: x-api-key, Value: tu ANTHROPIC_API_KEY (guárdala como credencial en n8n, nunca hardcodeada).
  • Headers adicionales: anthropic-version: 2023-06-01 y content-type: application/json.
  • Body: JSON, con el siguiente objeto.

El cuerpo de la petición tiene esta forma:

json
{
  "model": "claude-sonnet-4-6",
  "max_tokens": 1024,
  "system": "Eres un asistente de soporte que clasifica tickets. Responde siempre en español.",
  "messages": [
    {
      "role": "user",
      "content": "Ticket recibido: El cliente no puede acceder a su cuenta desde ayer. Ha probado a restablecer la contraseña pero el email no llega."
    }
  ]
}

El equivalente en curl (útil para probar fuera de n8n):

bash
curl -X POST https://api.anthropic.com/v1/messages   -H "x-api-key: $ANTHROPIC_API_KEY"   -H "anthropic-version: 2023-06-01"   -H "content-type: application/json"   -d '{
    "model": "claude-sonnet-4-6",
    "max_tokens": 1024,
    "system": "Eres un asistente de soporte que clasifica tickets. Responde siempre en español.",
    "messages": [
      {
        "role": "user",
        "content": "El cliente no puede acceder a su cuenta desde ayer."
      }
    ]
  }'

La respuesta de la API tiene esta estructura:

json
{
  "id": "msg_01XFDUDYJgAACzvnptvVoYEL",
  "type": "message",
  "role": "assistant",
  "content": [
    {
      "type": "text",
      "text": "Este ticket corresponde a un problema de acceso a cuenta..."
    }
  ],
  "model": "claude-sonnet-4-6",
  "stop_reason": "end_turn",
  "usage": {
    "input_tokens": 67,
    "output_tokens": 89
  }
}

En n8n, el texto de la respuesta está en $json.content[0].text. Puedes accederlo directamente en el siguiente nodo con una expresión o parsearlo con el nodo Code.

Forzar salida estructurada (JSON)

El texto libre es difícil de procesar automáticamente. Si quieres que el nodo Switch de n8n enrute por categoría, necesitas que Claude devuelva un campo category exacto, no un párrafo que lo mencione. La forma robusta de conseguirlo es usando tool use (herramientas).

Con tool use, le dices a Claude: "tienes disponible esta función con este esquema JSON; úsala para devolver el resultado". El modelo entonces devuelve su respuesta dentro del esquema que has definido — garantizado, sin alucinaciones de formato.

Cuerpo de la petición con tool use:

json
{
  "model": "claude-sonnet-4-6",
  "max_tokens": 1024,
  "tools": [
    {
      "name": "classify_ticket",
      "description": "Clasifica un ticket de soporte y extrae su prioridad.",
      "input_schema": {
        "type": "object",
        "properties": {
          "category": {
            "type": "string",
            "enum": ["acceso", "facturacion", "bug", "consulta", "otro"],
            "description": "Categoría principal del ticket"
          },
          "priority": {
            "type": "string",
            "enum": ["alta", "media", "baja"],
            "description": "Prioridad estimada"
          },
          "summary": {
            "type": "string",
            "description": "Resumen del problema en una frase"
          }
        },
        "required": ["category", "priority", "summary"]
      }
    }
  ],
  "tool_choice": { "type": "tool", "name": "classify_ticket" },
  "messages": [
    {
      "role": "user",
      "content": "Ticket: El cliente no puede acceder a su cuenta desde ayer. Ha probado a restablecer la contraseña pero el email no llega."
    }
  ]
}

Cuando usas tool_choice: { "type": "tool", "name": "..." }, forzas a Claude a usar esa herramienta. La respuesta no viene en content[0].text sino en content[0].input:

json
{
  "content": [
    {
      "type": "tool_use",
      "id": "toolu_01A09q90qw90lq917835lq9",
      "name": "classify_ticket",
      "input": {
        "category": "acceso",
        "priority": "alta",
        "summary": "El cliente no puede iniciar sesión y no recibe el email de restablecimiento."
      }
    }
  ]
}

En n8n, parseas esto con un nodo Code (JavaScript):

typescript
// Nodo Code (JavaScript) después del HTTP Request
// $json es la respuesta completa de la API de Claude
const toolResult = $json.content[0].input;

return [{
  json: {
    category: toolResult.category,
    priority: toolResult.priority,
    summary: toolResult.summary
  }
}];

Ahora tienes campos limpios que el nodo Switch puede leer directamente.

Caso real: clasificar y enrutar tickets

Imaginemos un sistema de soporte donde los tickets llegan por email (nodo Gmail) o webhook. El flujo completo tiene cinco nodos:

  1. Trigger: Nodo Gmail (nuevo email en la bandeja de soporte) o Webhook (llamada desde tu app).
  2. HTTP Request → Claude: Envías el asunto y cuerpo del email. Claude clasifica categoría, prioridad y genera un resumen de una frase usando tool use.
  3. Code: Extraes content[0].input y lo expones como campos planos del ítem.
  4. Switch: Ramifica por category. Rama "acceso" → crea ticket en Jira + notifica a Slack canal #soporte-acceso. Rama "facturación" → crea tarea en ClickUp + notifica a #soporte-facturacion. Rama "bug" → abre issue en GitHub + prioridad según el campo priority. Rama default → crea registro genérico en Notion.
  5. Send Email / Slack: Confirma la recepción al cliente con el resumen que generó Claude.

Lo poderoso aquí es que el Switch opera sobre datos estructurados garantizados. No hay expresiones regulares frágiles ni lógica condicional sobre texto libre. Claude decide; tus nodos actúan.

Para el campo de prioridad puedes añadir una segunda rama en el Switch o un nodo IF posterior: si priority === "alta" manda un mensaje directo al responsable de turno además de crear el ticket.

Resumir y auto-responder

Otro patrón muy útil es el bucle de resumen y borrador de respuesta con revisión humana (human-in-the-loop). El flujo:

  1. Trigger: Nuevo email en la bandeja de entrada (Gmail, Outlook…).
  2. IF: Filtra emails de clientes existentes (por dominio, etiqueta o campo del CRM).
  3. HTTP Request → Claude: Le pides dos cosas en un solo prompt — resumen ejecutivo en 2–3 frases y un borrador de respuesta en el tono de tu empresa. El prompt del sistema define el tono; el mensaje de usuario incluye el email completo.
  4. Set: Mapea el resultado a campos summary y draft_reply.
  5. Wait for Approval: Usa el nodo Wait de n8n (modo "On webhook call") para pausar el flujo hasta que un humano apruebe. Envías el borrador a Slack con botones "Aprobar" / "Editar" / "Rechazar". Cuando el agente pulsa "Aprobar", el webhook despierta el flujo y continúa.
  6. Gmail: Send Email: Envía el borrador aprobado como respuesta al hilo original.

El nodo Wait es clave para flujos que no deben ejecutarse 100% sin supervisión. n8n almacena el estado del flujo hasta que llega la aprobación — puede ser minutos, horas o días. Solo pagas el tiempo de ejecución real, no el tiempo de espera.

Una variante más avanzada: si Claude estima una confianza alta en la respuesta (usando un campo confidence en el esquema de tool use) y el email es de categoría "consulta" rutinaria, el flujo omite la aprobación humana y responde directamente. Si la confianza es baja o la categoría es "reclamación", siempre pasa por el humano.

Costes, límites y buenas prácticas

Integrar un LLM en tus flujos añade un coste por token que debes modelar antes de activar el flujo en producción.

Estructura de costes de Claude Sonnet: Los modelos Claude tienen precios por millón de tokens de entrada y de salida. Para flujos de clasificación cortos (prompt de sistema ~200 tokens + ticket ~100 tokens = ~300 tokens de entrada; respuesta estructurada ~50 tokens), el coste por ejecución es de fracciones de céntimo. Para flujos de resumen de documentos largos el coste sube proporcionalmente. Consulta siempre la página de precios oficial de Anthropic para los valores actuales — los precios se actualizan periódicamente.

Rate limits: La API de Anthropic tiene límites por minuto (requests y tokens). Si tu flujo procesa picos de muchos ítems en paralelo, activa el nodo Split In Batches en n8n para procesar en lotes de 5–10 ítems y añade un nodo Wait entre lotes. Los límites exactos dependen de tu tier de uso; revísalos en la consola de Anthropic.

Gestión de errores: La API puede devolver errores 429 (rate limit) o 5xx (errores temporales del servidor). Configura el nodo HTTP Request con reintentos automáticos: en n8n puedes activar "Retry On Fail" con un número de intentos y un intervalo de espera. Para errores persistentes, encadena el output de error a un nodo que notifique por Slack y loguee en una base de datos.

Privacidad y PII: No envíes datos personales innecesarios. Si solo necesitas clasificar la naturaleza de un email, extrae el asunto y el cuerpo sin el nombre completo ni el email del remitente. Si debes incluirlos (para generar una respuesta personalizada), asegúrate de que tu contrato con Anthropic cubre el procesamiento de datos de tus clientes según tu jurisdicción. Anthropic no usa los datos de la API para entrenar modelos por defecto.

Prompts versionados: Trata tus prompts de sistema como código. Guárdalos en variables de entorno n8n o en un nodo Set al inicio del flujo (fácil de actualizar sin tocar la lógica). Cuando cambies un prompt, prueba con un conjunto de casos representativos antes de activarlo en producción.

Caché de prompts: La API de Claude soporta prompt caching. Si el prompt de sistema es largo y estático (política de empresa, catálogo de categorías), puedes cachearlo para reducir el coste de tokens de entrada en ejecuciones repetidas. Se activa añadiendo "cache_control": { "type": "ephemeral" } al bloque del sistema en la petición.

La guía completa

Este post cubre los fundamentos para conectar Claude a n8n y montar flujos con criterio real. La guía en PDF profundiza en todo lo que necesitas para llevar esto a producción y escala:

  • Plantillas de prompts de sistema por caso de uso (soporte, ventas, moderación, extracción de datos) con instrucciones de tono, formato y manejo de casos edge.
  • Tool use con JSON Schema avanzado: arrays anidados, campos opcionales, enums condicionales y cómo diseñar schemas que minimicen errores de parsing.
  • Manejo de errores y retries: estrategia completa con backoff exponencial, dead-letter queue y alertas automáticas cuando un flujo falla repetidamente.
  • 5 flujos IA listos para importar: clasificador de tickets multicategoría, resumidor de emails con aprobación humana, extractor de datos de facturas PDF, generador de respuestas de redes sociales y moderador de contenido UGC.
  • Hoja de costes: calculadora de tokens para estimar el coste mensual de cada flujo según tu volumen, con comparativa de modelos Claude y estrategia de selección (cuándo usar Haiku vs. Sonnet).
Compartir:

Artículos relacionados