{
  "name": "Ecommerce AI Telegram",
  "nodes": [
    {
      "parameters": {
        "updates": [
          "message"
        ],
        "additionalFields": {}
      },
      "type": "n8n-nodes-base.telegramTrigger",
      "typeVersion": 1.3,
      "position": [
        -32,
        272
      ],
      "id": "3027ef0e-f7fc-416d-bfc2-4d8507071357",
      "name": "Telegram Trigger",
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "={{ $json.message.text }}",
        "hasOutputParser": true,
        "options": {
          "systemMessage": "# Prompt de comportamiento\n\nTu tarea principal es brindar informaci\u00f3n clara, \u00fatil y directa.\n\n## Reglas obligatorias\n\n* Respond\u00e9 de forma breve y entendible.\n* Prioriz\u00e1 respuestas cortas y resumidas.\n* Explic\u00e1 solo lo necesario.\n* Evit\u00e1 textos largos o demasiado detallados salvo que el usuario lo pida.\n* Si el usuario se equivoca, corregilo claramente.\n* Manten\u00e9 las respuestas ordenadas y f\u00e1ciles de leer.\n* Us\u00e1 siempre Markdown compatible con mensajes de Telegram.\n* Evit\u00e1 HTML.\n* Us\u00e1 \u00fanicamente formato soportado por Telegram:\n\n  * `*negrita*`\n  * `_it\u00e1lica_`\n  * `` `c\u00f3digo` ``\n  * listas\n  * links Markdown\n* No uses tablas complejas ni formatos incompatibles.\n* Si mostr\u00e1s c\u00f3digo, us\u00e1 bloques con triple backticks.\n* Manten\u00e9 el formato limpio y f\u00e1cil de copiar.\n\n## Links e im\u00e1genes\n\n* Los links deben ir en Markdown:\n  `[texto](https://ejemplo.com)`\n* Las im\u00e1genes deben mostrarse usando Markdown:\n  `![descripcion](https://imagen.jpg)`\n* Si hay varias im\u00e1genes, listalas una debajo de otra.\n* No pegues URLs enormes sin formato.\n* Evit\u00e1 texto innecesario alrededor de links o im\u00e1genes.\n\n## Productos\n\n* Si el usuario pregunta por un producto, brind\u00e1 informaci\u00f3n r\u00e1pida y \u00fatil:\n\n  * caracter\u00edsticas principales\n  * precio aproximado\n  * ventajas y desventajas\n  * uso recomendado\n* No hagas respuestas excesivamente largas.\n* Us\u00e1 listas cortas y f\u00e1ciles de leer.\n* Si corresponde, suger\u00ed alternativas similares.\n* Termin\u00e1 preguntando si el usuario quiere:\n\n  * link de compra\n  * comparaci\u00f3n\n  * talles\n  * especificaciones\n  * alternativas\n\n## Estilo de respuesta\n\n* Prioriz\u00e1 respuestas breves.\n* Evit\u00e1 introducciones innecesarias.\n* Respond\u00e9 de manera clara y ordenada.\n* Si una respuesta requiere pasos, us\u00e1 listas.\n* Adapt\u00e1 el nivel t\u00e9cnico seg\u00fan la pregunta del usuario.\n* Evit\u00e1 repetir informaci\u00f3n.\n\n## Objetivo\n\nResolver la consulta del usuario de forma \u00fatil, clara y r\u00e1pida.\n\nOfrecerr UNICAMENTE productos de nuestro cataloogo:\nLa tool action se llama search_product y es la unica fuente de productos de la cual puedes recomendar y brindar informacion sobre productos.\nTIENES PROHIVIDO RECOMENDAR PRODUCTOS INVENTADOS O CREAR ORDENES CON PRODUCTOS Q NO SEAN DE search_product.\nTIENES PROHIBIDO BRINDARLE PPUBLICAMENTE LOS SKU O ID DE PRODUCTO AL USER\n\n"
        }
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 3.1,
      "position": [
        352,
        384
      ],
      "id": "67009508-5e08-4eca-8588-bf46162fde38",
      "name": "AI Agent"
    },
    {
      "parameters": {
        "model": {
          "__rl": true,
          "value": "gpt-4.1-mini",
          "mode": "list",
          "cachedResultName": "gpt-4.1-mini"
        },
        "builtInTools": {},
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.3,
      "position": [
        272,
        560
      ],
      "id": "24d8f921-d024-4065-88a3-dd1960449985",
      "name": "OpenAI Chat Model",
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "sessionIdType": "customKey",
        "sessionKey": "={{ $json.message.from.id }}",
        "contextWindowLength": 12
      },
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "typeVersion": 1.4,
      "position": [
        384,
        576
      ],
      "id": "c96d982d-fc6e-46fe-9475-d0015b65092b",
      "name": "Simple Memory"
    },
    {
      "parameters": {
        "chatId": "={{ $('Telegram Trigger').item.json.message.chat.id }}",
        "text": "={{ $json.output }}",
        "additionalFields": {}
      },
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1.2,
      "position": [
        912,
        240
      ],
      "id": "710aeca5-5435-4480-b7ce-0968ddef7c58",
      "name": "Send a text message1",
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "operation": "append",
        "documentId": {
          "__rl": true,
          "value": "1Nteu0NZC22sQIpks5FVE5ZylBk0hozx39itZQ7dDkFk",
          "mode": "list",
          "cachedResultName": "chatbot-memory",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Nteu0NZC22sQIpks5FVE5ZylBk0hozx39itZQ7dDkFk/edit?usp=drivesdk"
        },
        "sheetName": {
          "__rl": true,
          "value": "https://docs.google.com/spreadsheets/d/1Nteu0NZC22sQIpks5FVE5ZylBk0hozx39itZQ7dDkFk/edit?gid=0#gid=0",
          "mode": "url"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "userName": "={{ $('Telegram Trigger').item.json.message.from.first_name }} {{ $('Telegram Trigger').item.json.message.from.last_name }}",
            "message": "={\"user\":\"{{ $('Telegram Trigger').item.json.message.text }}\", \"assistant\":\"{{ $json.output }}\"} ",
            "userId": "={{ $('Telegram Trigger').item.json.message.from.id }}"
          },
          "matchingColumns": [],
          "schema": [
            {
              "id": "userId",
              "displayName": "userId",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "userName",
              "displayName": "userName",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "message",
              "displayName": "message",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {}
      },
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.7,
      "position": [
        784,
        544
      ],
      "id": "2fb3101e-fe61-4611-9cbc-f6a7962b2367",
      "name": "Append row in sheet",
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "descriptionType": "manual",
        "toolDescription": "Utiliza esta herramienta EXCLUSIVAMENTE para crear una nueva orden cuando el cliente solicite comprar o pedir productos. ANTES de ejecutar esta acci\u00f3n, es OBLIGATORIO que extraigas o le preguntes al usuario la siguiente informaci\u00f3n: 1. Su correo electr\u00f3nico (email). 2. La lista de productos que desea, asegur\u00e1ndote de obtener la cantidad exacta y de determinar el 'SKU' (ID) correcto de cada producto seg\u00fan tu base de datos o contexto. Si el usuario no te da su email, o si no menciona las cantidades, NO ejecutes la herramienta todav\u00eda; preg\u00fantale amablemente los datos faltantes.",
        "operation": "append",
        "documentId": {
          "__rl": true,
          "value": "https://docs.google.com/spreadsheets/d/1Nteu0NZC22sQIpks5FVE5ZylBk0hozx39itZQ7dDkFk/edit?gid=2060238285#gid=2060238285",
          "mode": "url"
        },
        "sheetName": {
          "__rl": true,
          "value": 2060238285,
          "mode": "list",
          "cachedResultName": "Orders",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Nteu0NZC22sQIpks5FVE5ZylBk0hozx39itZQ7dDkFk/edit#gid=2060238285"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "status": "PENDING",
            "user": "={{ $json.message.chat.id }}",
            "details": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('details', 'Genera un string en formato JSON v\u00e1lido con los detalles de la orden para guardarlo en la base de datos. El JSON resultante debe tener ESTRICTAMENTE esta estructura: {\"email\": \"correo del usuario\", \"products\": [{\"sku\": \"ID del producto buscado en la base\", \"quantity\": numero}]}. REGLA CR\u00cdTICA: P\u00eddele al usuario su correo y las cantidades antes de ejecutar esta acci\u00f3n. Devuelve \u00daNICAMENTE el texto del JSON plano, sin formato markdown, sin comillas invertidas (\\\\``) y sin introducciones como \"Order creation\".`', 'string') }}"
          },
          "matchingColumns": [],
          "schema": [
            {
              "id": "status",
              "displayName": "status",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "details",
              "displayName": "details",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "user",
              "displayName": "user",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {}
      },
      "type": "n8n-nodes-base.googleSheetsTool",
      "typeVersion": 4.7,
      "position": [
        656,
        736
      ],
      "id": "b56bd264-ef3d-4a5a-8061-9fe82d77e590",
      "name": "create_order",
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "toolDescription": "solo ejecuta esta action si el usuario tiene interes en algun producto. Obtiene info sobre productos desde Fake Store API para el user.\nEsta action se llama search_product y es la unica fuente de productos de la cuales ppuedes hablar y brindar informacion",
        "url": "https://fakestoreapi.com/products",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequestTool",
      "typeVersion": 4.4,
      "position": [
        496,
        752
      ],
      "id": "42e1e40c-422d-4c9e-8c4c-29effb4670b3",
      "name": "search_product"
    }
  ],
  "connections": {
    "Telegram Trigger": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Simple Memory": {
      "ai_memory": [
        [
          {
            "node": "AI Agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent": {
      "main": [
        [
          {
            "node": "Send a text message1",
            "type": "main",
            "index": 0
          },
          {
            "node": "Append row in sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "create_order": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "search_product": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1",
    "binaryMode": "separate"
  },
  "staticData": null,
  "triggerCount": 1,
  "meta": {
    "templateCredsSetupCompleted": true
  }
}