{
  "name": "KyndredAI · Formulario → Claude resume → Slack",
  "nodes": [
    {
      "parameters": {
        "content": "# 🔷 KyndredAI · Formulario → Claude resume y prioriza → Slack\n\nEntra una respuesta de formulario (Typeform, Tally, tu landing…), **Claude** la **resume**, detecta la intención y le pone **prioridad**, lo registra en Sheets y lo deja prolijo en **Slack**.\n\n**Cómo funciona:** Webhook → Claude resume con salida estructurada → normaliza → Google Sheets → aviso en Slack.\n\n**Necesitás:** credencial de **Anthropic (Claude)** + una **Incoming Webhook URL** de Slack + Google Sheets.\n\n*Funciona con cualquier formulario:* mandamos todo el body a Claude, así no importa el proveedor.\n\nself-hosted o cloud · kyndredai.com",
        "height": 360,
        "width": 880,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        288,
        48
      ],
      "id": "8746ed8c-de63-4bda-a2b1-c133f270274e",
      "name": "README"
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "formulario",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2.1,
      "position": [
        48,
        464
      ],
      "id": "89ff7309-3038-4020-8e0b-bc2cab80ca41",
      "name": "Recibir formulario (Webhook)",
      "webhookId": "2a2a2a2a-1111-4222-8222-2a2a2a2a2a2a"
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "=Sos un asistente que procesa respuestas de formularios para una PyME. Resumí la respuesta en una línea, detectá la intención del que escribe y asignale una prioridad (\"alta\", \"media\" o \"baja\") según qué tan listo está para avanzar.\n\nRespuesta del formulario:\n{{ JSON.stringify($json.body) }}",
        "hasOutputParser": true
      },
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "typeVersion": 1.5,
      "position": [
        320,
        464
      ],
      "id": "2d6cedd1-1866-4b8c-a981-7c58e4024390",
      "name": "Resumir 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": [
        288,
        704
      ],
      "id": "e8cc3a74-b983-487d-9cb2-51c2b6900b20",
      "name": "Claude (modelo)"
    },
    {
      "parameters": {
        "jsonSchemaExample": "{\n  \"resumen\": \"Pyme de logística quiere automatizar el alta de pedidos\",\n  \"intencion\": \"contratar\",\n  \"prioridad\": \"alta\"\n}"
      },
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "typeVersion": 1.2,
      "position": [
        480,
        704
      ],
      "id": "b95a1a58-20b4-486b-b7fa-7aec07754b62",
      "name": "Formato de salida"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "6a000001-1111-4000-8000-000000000001",
              "name": "resumen",
              "value": "={{ $json.output.resumen }}",
              "type": "string"
            },
            {
              "id": "6a000002-1111-4000-8000-000000000002",
              "name": "intencion",
              "value": "={{ $json.output.intencion }}",
              "type": "string"
            },
            {
              "id": "6a000003-1111-4000-8000-000000000003",
              "name": "prioridad",
              "value": "={{ $json.output.prioridad }}",
              "type": "string"
            },
            {
              "id": "6a000004-1111-4000-8000-000000000004",
              "name": "fecha",
              "value": "={{ $now.toFormat('yyyy-LL-dd HH:mm') }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        608,
        464
      ],
      "id": "aea319e0-01c3-4411-bdc7-89eb70f5eeb7",
      "name": "Resultado"
    },
    {
      "parameters": {
        "operation": "append",
        "documentId": {
          "__rl": true,
          "value": "",
          "mode": "list",
          "cachedResultName": ""
        },
        "sheetName": {
          "__rl": true,
          "value": "",
          "mode": "list",
          "cachedResultName": ""
        }
      },
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.5,
      "position": [
        864,
        464
      ],
      "id": "61bcb3b3-4098-4529-9b71-b3b46e813abf",
      "name": "Guardar en Sheets",
      "retryOnFail": true,
      "maxTries": 3,
      "waitBetweenTries": 2000
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://hooks.slack.com/services/TU/INCOMING/WEBHOOK",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={\n  \"text\": \"📋 Nuevo formulario [{{ $('Resultado').item.json.prioridad }}] · {{ $('Resultado').item.json.intencion }}\\n{{ $('Resultado').item.json.resumen }}\"\n}",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        1120,
        464
      ],
      "id": "70d5db45-b052-4cf9-9d82-5bbd8a7e7543",
      "name": "Avisar en Slack",
      "retryOnFail": true,
      "maxTries": 3,
      "waitBetweenTries": 2000
    },
    {
      "parameters": {},
      "type": "n8n-nodes-base.noOp",
      "typeVersion": 1,
      "position": [
        1392,
        464
      ],
      "id": "cf648e01-f9ee-4b0e-b440-e11c7ff8477d",
      "name": "Listo"
    },
    {
      "parameters": {
        "content": "## ① Conectá tu formulario\n\nApuntá el webhook de tu formulario a la URL de este nodo (**POST**):\n• Typeform: Connect → Webhooks.\n• Tally: Integrations → Webhooks.\n• Tu landing: POST con `Content-Type: application/json`.\n\nMandamos todo el `body` a Claude, así sirve con cualquiera.",
        "height": 320,
        "width": 300,
        "color": 4
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -64,
        640
      ],
      "id": "c7aa70f3-ddf7-4ffc-a4d0-c6fdd7d03a3f",
      "name": "Setup 1"
    },
    {
      "parameters": {
        "content": "## ② Claude\n\n*Claude (modelo)* → Credential → pegá tu **API key de Anthropic**. Por defecto **Haiku 4.5** (barato).\n\nDevuelve `resumen`, `intencion` y `prioridad`.",
        "height": 300,
        "width": 280,
        "color": 4
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        288,
        832
      ],
      "id": "3f5fabcb-981b-45a8-90f5-0e417e9b09bd",
      "name": "Setup 2"
    },
    {
      "parameters": {
        "content": "## ③ Sheets + Slack\n\n**Sheets:** conectá tu Google → planilla + pestaña, mapeo automático. Encabezados: **resumen · intencion · prioridad · fecha**.\n\n**Slack:** creá una *Incoming Webhook* en tu workspace y pegá su URL en el nodo *Avisar en Slack* (la URL ya autentica, no necesitás credencial).",
        "height": 320,
        "width": 320,
        "color": 4
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        768,
        672
      ],
      "id": "2e5caab7-b03a-41d5-980e-d53eaab33731",
      "name": "Setup 3"
    }
  ],
  "connections": {
    "Recibir formulario (Webhook)": {
      "main": [
        [
          {
            "node": "Resumir con Claude",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Claude (modelo)": {
      "ai_languageModel": [
        [
          {
            "node": "Resumir con Claude",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Formato de salida": {
      "ai_outputParser": [
        [
          {
            "node": "Resumir con Claude",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Resumir con Claude": {
      "main": [
        [
          {
            "node": "Resultado",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Resultado": {
      "main": [
        [
          {
            "node": "Guardar en Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Guardar en Sheets": {
      "main": [
        [
          {
            "node": "Avisar en Slack",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Avisar en Slack": {
      "main": [
        [
          {
            "node": "Listo",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "pinData": {},
  "tags": []
}
