{
  "name": "KyndredAI · WhatsApp → Claude califica → HubSpot",
  "nodes": [
    {
      "parameters": {
        "content": "# 🔷 KyndredAI · WhatsApp → Claude califica → HubSpot\n\nLlega un **WhatsApp entrante**, **Claude** saca la intención, lo califica (hot / warm / cold) y propone una respuesta, y se **crea/actualiza el contacto en HubSpot**.\n\n**Cómo funciona:** Webhook (WhatsApp Cloud API) → extrae teléfono + nombre + texto → Claude califica con salida estructurada → crea/actualiza contacto en HubSpot → avisás al equipo.\n\n**Necesitás:** WhatsApp Cloud API (Meta) + credencial de **Anthropic (Claude)** + un **Private App Token** de HubSpot.\n\n⚠️ Usá la **WhatsApp Cloud API oficial** (no APIs no oficiales tipo Evolution → riesgo de baneo del número).\n\nself-hosted o cloud · kyndredai.com",
        "height": 380,
        "width": 880,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        208,
        32
      ],
      "id": "5b211bd0-89b6-4292-96e8-7078ba61ad5c",
      "name": "README"
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "whatsapp-entrante",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2.1,
      "position": [
        48,
        464
      ],
      "id": "9d579df9-5111-4588-b28c-f879e2e1b0e2",
      "name": "Recibir WhatsApp (Webhook)",
      "webhookId": "e2b2c2d2-2222-4222-8222-e22222222222"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "e3000001-0000-4000-8000-000000000001",
              "name": "telefono",
              "value": "={{ $json.body.entry[0].changes[0].value.messages[0].from }}",
              "type": "string"
            },
            {
              "id": "e3000002-0000-4000-8000-000000000002",
              "name": "nombre",
              "value": "={{ $json.body.entry[0].changes[0].value.contacts[0].profile.name }}",
              "type": "string"
            },
            {
              "id": "e3000003-0000-4000-8000-000000000003",
              "name": "texto",
              "value": "={{ $json.body.entry[0].changes[0].value.messages[0].text.body }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        320,
        464
      ],
      "id": "8d8c79cc-59bd-420a-a9a6-8911636fc39a",
      "name": "Extraer mensaje"
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "=Sos un asistente de ventas de una PyME. Analizá este mensaje de WhatsApp y devolvé: la intención del cliente, una calificación del lead (\"hot\" = quiere comprar ya, \"warm\" = interesado, \"cold\" = consulta general), un resumen de una línea y una respuesta sugerida, cálida y breve, para enviarle.\n\nMensaje de {{ $json.nombre }} ({{ $json.telefono }}):\n{{ $json.texto }}",
        "hasOutputParser": true
      },
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "typeVersion": 1.5,
      "position": [
        608,
        464
      ],
      "id": "27bd50d8-ff75-41be-b20d-569c25d4bfff",
      "name": "Calificar con Claude"
    },
    {
      "parameters": {
        "model": {
          "__rl": true,
          "value": "claude-haiku-4-5-20251001",
          "mode": "list",
          "cachedResultName": "Claude Haiku 4.5"
        },
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
      "typeVersion": 1.4,
      "position": [
        560,
        704
      ],
      "id": "73e019ad-a4a5-4ac9-8d86-e3d532e6752c",
      "name": "Claude (modelo)"
    },
    {
      "parameters": {
        "jsonSchemaExample": "{\n  \"intencion\": \"comprar\",\n  \"calificacion\": \"hot\",\n  \"resumen\": \"Quiere comprar el plan Growth hoy\",\n  \"respuesta_sugerida\": \"¡Hola! Genial, te paso el link de pago ahora mismo.\"\n}"
      },
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "typeVersion": 1.2,
      "position": [
        768,
        704
      ],
      "id": "f52b8fbc-2ed6-4977-9c15-dd78427bd5c8",
      "name": "Formato de salida"
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.hubapi.com/crm/v3/objects/contacts",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={\n  \"properties\": {\n    \"firstname\": \"{{ $('Extraer mensaje').item.json.nombre }}\",\n    \"phone\": \"{{ $('Extraer mensaje').item.json.telefono }}\",\n    \"hs_lead_status\": \"{{ $json.output.calificacion }}\",\n    \"message\": \"{{ $json.output.resumen }}\"\n  }\n}",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        880,
        464
      ],
      "id": "560fcd52-4621-4ba9-972a-8774b67cd3eb",
      "name": "Crear/actualizar en HubSpot",
      "retryOnFail": true,
      "maxTries": 3,
      "waitBetweenTries": 2000
    },
    {
      "parameters": {},
      "type": "n8n-nodes-base.noOp",
      "typeVersion": 1,
      "position": [
        1152,
        464
      ],
      "id": "2174f194-303b-4e0d-a9bc-dce42901c4c9",
      "name": "→ Avisar al equipo / responder"
    },
    {
      "parameters": {
        "content": "## ① WhatsApp Cloud API\n\n1. En Meta for Developers, configurá el **webhook** de WhatsApp apuntando a la URL de este nodo (verificación + suscripción a `messages`).\n2. El mensaje entrante llega anidado en `entry[0].changes[0].value.messages[0]` — ya lo extraemos.\n\n*Tip:* **Listen for test event** y mandate un WhatsApp de prueba.",
        "height": 320,
        "width": 300,
        "color": 4
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -32,
        656
      ],
      "id": "b5845f96-b300-429b-ad58-cb1a97786bbd",
      "name": "Setup 1"
    },
    {
      "parameters": {
        "content": "## ② Claude\n\n*Claude (modelo)* → Credential → pegá tu **API key de Anthropic**. Por defecto **Haiku 4.5** (barato, ideal para calificar).\n\nClaude devuelve `intencion`, `calificacion`, `resumen` y `respuesta_sugerida` (los usás en HubSpot y en la respuesta).",
        "height": 320,
        "width": 300,
        "color": 4
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        448,
        864
      ],
      "id": "9c78db42-03b7-496d-8af6-b7dfddfcef24",
      "name": "Setup 2"
    },
    {
      "parameters": {
        "content": "## ③ HubSpot\n\n1. Creá una **Private App** en HubSpot con scope `crm.objects.contacts.write`.\n2. En *Crear/actualizar en HubSpot* → Credential → Header Auth → Name `Authorization`, Value `Bearer TU_TOKEN`.\n\n💡 El último nodo (No Op) es el placeholder para **responder por WhatsApp** (usando `respuesta_sugerida`) o avisar al vendedor.",
        "height": 372,
        "width": 320,
        "color": 4
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        912,
        736
      ],
      "id": "7caf68a5-9958-4582-b329-e97ac4b91d99",
      "name": "Setup 3"
    }
  ],
  "connections": {
    "Recibir WhatsApp (Webhook)": {
      "main": [
        [
          {
            "node": "Extraer mensaje",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extraer mensaje": {
      "main": [
        [
          {
            "node": "Calificar con Claude",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Claude (modelo)": {
      "ai_languageModel": [
        [
          {
            "node": "Calificar con Claude",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Formato de salida": {
      "ai_outputParser": [
        [
          {
            "node": "Calificar con Claude",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Calificar con Claude": {
      "main": [
        [
          {
            "node": "Crear/actualizar en HubSpot",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Crear/actualizar en HubSpot": {
      "main": [
        [
          {
            "node": "→ Avisar al equipo / responder",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "pinData": {},
  "tags": []
}
