{"workflow":{"id":13557,"name":"Track expenses and income in Google Sheets from Telegram with Google Gemini","views":140,"recentViews":1,"totalViews":140,"createdAt":"2026-02-20T19:21:23.736Z","description":"**Brief Description:**  \nYour personal finance assistant inside Telegram! Chat naturally with an AI agent to track expenses, log income, view spending history, and manage your budget—all through simple conversation. No forms, no spreadsheets, just chat.\n\n**How it works:**\n- **Chat** – Send expense or income details naturally via Telegram\n- **Understand** – AI agent parses your message and determines the action (add/get/delete)\n- **Execute** – Performs CRUD operations on Google Sheets (expense & income tabs)\n- **Respond** – Replies with confirmations, summaries, or requested data with formatted responses\n\n**Set up steps:**  \n⏱️ Setup time: ~15-20 minutes  \nCreate a Telegram bot via BotFather and get your API token. Connect Google Gemini (or your preferred LLM) for the AI agent. Set up Google Sheets with separate tabs for expenses and income. Configure the Google Sheets tools with your sheet IDs and column mappings.","workflow":{"id":"4W7C2uWqNqjMOKSu","meta":{"instanceId":"ae025170f3e117c13887149cd5f500dac487069226d06381d081743ec693a389"},"name":"[FOR TEMPLATE] AI Expense Tracker Agent","tags":[],"nodes":[{"id":"telegram-trigger","name":"Telegram Trigger","type":"n8n-nodes-base.telegramTrigger","position":[16,1280],"webhookId":"telegram-expense-trigger","parameters":{"updates":["message"],"additionalFields":{}},"typeVersion":1.2},{"id":"typing","name":"Typing...","type":"n8n-nodes-base.telegram","position":[272,1152],"webhookId":"5106f5db-02be-4420-a9a3-7c434fc7e3ae","parameters":{"chatId":"={{ $json.message.chat.id }}","operation":"sendChatAction"},"typeVersion":1.2},{"id":"ai-agent","name":"AI Agent - Expense Tracker","type":"@n8n/n8n-nodes-langchain.agent","onError":"continueErrorOutput","position":[480,1280],"parameters":{"text":"={{ $json.message.text }}","options":{"systemMessage":"=You are an AI Expense Tracker assistant.\n\n## TOOLS\n\n| Tool | Function | When to Use |\n|------|----------|-------------|\n| add_expense | Record 1 expense to monthly sheet | Each expense item |\n| get_expense | View all expense data | Analysis, viewing |\n| delete_expense | Delete last N rows | User requests delete |\n| add_income | Record 1 income | Each income item |\n| get_income | View all income data | Analysis |\n| Calculator | Math operations | Totals, averages |\n| Think | Deep reasoning | Complex operations |\n\n## CORE RULES\n\n1. ALWAYS call tool first, THEN confirm to user.\n2. Multiple items = multiple sequential tool calls.\n3. Use Calculator for: sums, totals, averages.\n4. Use Think before: 3+ step operations or deletes.\n5. If tool fails, be honest with user.\n\n## DATA FORMAT\n\nExpense Sheet (dynamic monthly name like \"February 2026\"):\nDate (yyyy-mm-dd) | Category | Description | Amount | Payment Method\n\nIncome Log (static sheet \"Income Log\"):\nDate (yyyy-mm-dd) | Category | Description | Amount | Account\n\n### Expense Categories:\nFood | Transport | Shopping | Entertainment | Bills | Others\n\n### Income Categories:\nSalary | Freelance | Investment | Bonus | Transfer | Others\n\n### Payment Methods:\ngopay/ovo/dana → E-wallet | debit → Debit | cc → Credit Card | transfer → Transfer | cash → Cash\n\n### Amount Parsing:\n25rb/25k = 25000 | 1.5jt = 1500000\n\n## WORKFLOWS\n\nRecord Expense:\n1. Parse input (amount, category, desc, payment, date)\n2. Call add_expense → wait for result\n3. If success → Calculator(total today) → respond\n4. Multiple items: repeat per item\n\nRecord Income:\n1. Parse input\n2. Call add_income → wait\n3. Respond with confirmation\n\nView Data:\n1. Call get_expense/get_income\n2. Filter by period\n3. Calculator → sums\n4. Format response\n\nDelete:\n⚠️ Can ONLY delete last N rows!\n1. Think → analyze request\n2. Call get_expense → check data\n3. If entry is last row → confirm → delete\n4. If not last row → explain limitation\n\n## RESPONSES\n\nExpense recorded:\n✅ [Description] - $[amount]\n📂 [Category] | 💳 [Payment]\nToday's total: $[total]\n\nIncome recorded:\n💰 [Description] - $[amount] → [Account]\n\nView data:\n📊 [Period] expenses:\n[Category]: $[total]\n  • [item] - $[amount]\n━━━\n💰 Total: $[grand total]\n\n## COMMANDS\n/help → all commands | /today → today's expenses | /week → this week\n/month → monthly summary | /delete → delete entry | /stats → statistics\n\nCurrent time: {{ $now.format('cccc DD HH:mm') }}\nDate format: yyyy-mm-dd"},"promptType":"define"},"executeOnce":false,"retryOnFail":true,"typeVersion":1.7,"waitBetweenTries":5000},{"id":"gemini-model","name":"Google Gemini Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatGoogleGemini","position":[80,1520],"parameters":{"options":{"temperature":0.6}},"typeVersion":1},{"id":"memory","name":"Simple Memory","type":"@n8n/n8n-nodes-langchain.memoryBufferWindow","position":[224,1520],"parameters":{"sessionKey":"={{ $json.message.chat.id }}","sessionIdType":"customKey"},"typeVersion":1.3},{"id":"add-expense","name":"add_expense","type":"n8n-nodes-base.googleSheetsTool","position":[352,1520],"parameters":{"columns":{"value":{"Date":"={{ $fromAI('Date', '', 'string') }}","Amount":"={{ $fromAI('Amount', '', 'string') }}","Category":"={{ $fromAI('Category', '', 'string') }}","Description":"={{ $fromAI('Description', '', 'string') }}","Payment_Method":"={{ $fromAI('Payment_Method', '', 'string') }}"},"schema":[{"id":"Date","type":"string","displayName":"Date"},{"id":"Category","type":"string","displayName":"Category"},{"id":"Description","type":"string","displayName":"Description"},{"id":"Amount","type":"string","displayName":"Amount"},{"id":"Payment_Method","type":"string","displayName":"Payment_Method"}],"mappingMode":"defineBelow","matchingColumns":[]},"options":{"cellFormat":"USER_ENTERED"},"operation":"append","sheetName":{"__rl":true,"mode":"name","value":"={{ $now.setLocale('en').toFormat('MMMM yyyy') }}"},"documentId":{"__rl":true,"mode":"id","value":"YOUR_GOOGLE_SHEET_ID_HERE"},"descriptionType":"manual","toolDescription":"Add one expense entry to Google Sheets. Parameters:\n- Date: YYYY-MM-DD\n- Category: Food/Transport/Shopping/Entertainment/Bills/Others\n- Description: Short description\n- Amount: Number only\n- Payment_Method: Cash/Card/E-wallet/etc"},"typeVersion":4.7},{"id":"get-expense","name":"get_expense","type":"n8n-nodes-base.googleSheetsTool","position":[464,1520],"parameters":{"options":{},"sheetName":{"__rl":true,"mode":"name","value":"={{ $now.setLocale('en').toFormat('MMMM yyyy') }}"},"documentId":{"__rl":true,"mode":"id","value":"YOUR_GOOGLE_SHEET_ID_HERE"}},"typeVersion":4.7},{"id":"delete-expense","name":"delete_expense","type":"n8n-nodes-base.googleSheetsTool","position":[592,1520],"parameters":{"operation":"delete","sheetName":{"__rl":true,"mode":"name","value":"={{ $now.setLocale('en').toFormat('MMMM yyyy') }}"},"documentId":{"__rl":true,"mode":"id","value":"YOUR_GOOGLE_SHEET_ID_HERE"},"numberToDelete":"={{ $fromAI('Number_of_Rows_to_Delete', '', 'number') }}"},"typeVersion":4.7},{"id":"add-income","name":"add_income","type":"n8n-nodes-base.googleSheetsTool","position":[720,1520],"parameters":{"columns":{"value":{"Date":"={{ $fromAI('Date', '', 'string') }}","Amount":"={{ $fromAI('Amount', '', 'string') }}","Account":"={{ $fromAI('Account', '', 'string') }}","Category":"={{ $fromAI('Category', '', 'string') }}","Description":"={{ $fromAI('Description', '', 'string') }}"},"schema":[{"id":"Date","type":"string","displayName":"Date"},{"id":"Category","type":"string","displayName":"Category"},{"id":"Description","type":"string","displayName":"Description"},{"id":"Amount","type":"string","displayName":"Amount"},{"id":"Account","type":"string","displayName":"Account"}],"mappingMode":"defineBelow","matchingColumns":[]},"options":{},"operation":"append","sheetName":{"__rl":true,"mode":"name","value":"Income Log"},"documentId":{"__rl":true,"mode":"id","value":"YOUR_GOOGLE_SHEET_ID_HERE"}},"typeVersion":4.7},{"id":"get-income","name":"get_income","type":"n8n-nodes-base.googleSheetsTool","position":[848,1520],"parameters":{"options":{},"sheetName":{"__rl":true,"mode":"name","value":"Income Log"},"documentId":{"__rl":true,"mode":"id","value":"YOUR_GOOGLE_SHEET_ID_HERE"}},"typeVersion":4.7},{"id":"calculator","name":"Calculator","type":"@n8n/n8n-nodes-langchain.toolCalculator","position":[960,1520],"parameters":{},"typeVersion":1},{"id":"think","name":"Think","type":"@n8n/n8n-nodes-langchain.toolThink","position":[1072,1520],"parameters":{},"typeVersion":1.1},{"id":"markdown-formatter","name":"Markdown to HTML Formatter","type":"n8n-nodes-base.code","position":[832,1104],"parameters":{"jsCode":"/**\n * Markdown to HTML converter for Telegram\n */\n\nconst MAX_TELEGRAM = 4096;\nconst SAFE_BUDGET = 4000;\n\nfunction escapeHtml(text) {\n  if (!text) return '';\n  return String(text)\n    .replace(/&/g, '&amp;')\n    .replace(/</g, '&lt;')\n    .replace(/>/g, '&gt;');\n}\n\nfunction markdownToHtml(inputText) {\n  if (!inputText) return '';\n  let text = String(inputText);\n  const placeholders = [];\n  let placeholderIndex = 0;\n  \n  const addPlaceholder = (html) => {\n    const ph = `\\x00PH${placeholderIndex++}\\x00`;\n    placeholders.push({ ph, html });\n    return ph;\n  };\n  \n  text = text.replace(/```([\\s\\S]*?)```/g, (m, code) => {\n    return addPlaceholder(`<pre>${escapeHtml(code.trim())}</pre>`);\n  });\n  \n  text = text.replace(/`([^`\\n]+)`/g, (m, code) => {\n    return addPlaceholder(`<code>${escapeHtml(code)}</code>`);\n  });\n  \n  text = text.replace(/\\[([^\\]]+)\\]\\(([^)]+)\\)/g, (m, label, url) => {\n    return addPlaceholder(`<a href=\"${url.trim()}\">${escapeHtml(label)}</a>`);\n  });\n  \n  text = text.replace(/\\*\\*([^*]+)\\*\\*/g, (m, content) => {\n    return addPlaceholder(`<b>${escapeHtml(content)}</b>`);\n  });\n  \n  text = text.replace(/(?<!\\*)\\*([^*\\n]+)\\*(?!\\*)/g, (m, content) => {\n    return addPlaceholder(`<i>${escapeHtml(content)}</i>`);\n  });\n  \n  text = escapeHtml(text);\n  \n  for (const { ph, html } of placeholders) {\n    text = text.replace(ph, html);\n  }\n  \n  text = text.replace(/\\n{3,}/g, '\\n\\n');\n  return text.trim();\n}\n\nfunction chunkForTelegram(text, maxLen = SAFE_BUDGET) {\n  if (!text || text.length <= maxLen) return [text || ''];\n  const parts = [];\n  const paragraphs = text.split(/\\n{2,}/);\n  \n  for (const p of paragraphs) {\n    if (p.length <= maxLen) {\n      parts.push(p);\n    } else {\n      const lines = p.split('\\n');\n      for (const line of lines) {\n        if (line.length <= maxLen) {\n          parts.push(line);\n        } else {\n          const re = new RegExp(`.{1,${maxLen}}`, 'g');\n          const pieces = line.match(re) || [];\n          parts.push(...pieces);\n        }\n      }\n    }\n  }\n  return parts.filter(p => p.length > 0);\n}\n\nconst inputItems = $input.all();\nconst out = [];\n\nfor (const item of inputItems) {\n  const j = item.json || {};\n  const raw = j.output ?? j.message ?? j.text ?? j.content ?? '';\n  const formatted = markdownToHtml(raw);\n  const chunks = chunkForTelegram(formatted, SAFE_BUDGET);\n\n  chunks.forEach((chunk, idx) => {\n    out.push({\n      json: { ...j, output: chunk, message: chunk, part_index: idx + 1, parts_total: chunks.length },\n      binary: item.binary,\n    });\n  });\n}\n\nreturn out;"},"typeVersion":2},{"id":"send-message","name":"Send Telegram Message","type":"n8n-nodes-base.telegram","position":[1040,1104],"webhookId":"575b2d5b-906b-4f53-80eb-596a37a7acbb","parameters":{"text":"={{ $json.message }}","chatId":"={{ $('Telegram Trigger').item.json.message.chat.id }}","additionalFields":{"parse_mode":"HTML","appendAttribution":false}},"typeVersion":1.2},{"id":"send-error","name":"Send Error Message","type":"n8n-nodes-base.telegram","position":[832,1296],"webhookId":"1d066b86-b8d7-4890-8f7b-f910413b5c6d","parameters":{"text":"=Error occurred. Please try again!\n\nIf the issue persists, contact support.","chatId":"={{ $('Telegram Trigger').item.json.message.chat.id }}","additionalFields":{"appendAttribution":false}},"typeVersion":1.2},{"id":"sticky_prereq","name":"📋 Prerequisites","type":"n8n-nodes-base.stickyNote","position":[-720,-128],"parameters":{"width":720,"height":1280,"content":"📋 PREREQUISITES\n\nBefore using this workflow, ensure you have:\n\n① Google Account\n• Access to Google Sheets\n• OAuth2 credentials from Google Cloud Console\n\n② Telegram Bot\n• Create bot via @BotFather\n• Save the Bot Token\n• Bot will be your expense assistant\n\n③ Google Gemini API Key\n• Get from Google AI Studio (ai.google.dev)\n• Powers the AI agent\n\n④ Google Spreadsheet Structure\n\nMonthly Expense Sheets (one per month):\n• Name format: \"February 2026\", \"March 2026\", etc.\n• Columns: Date | Category | Description | Amount | Payment_Method\n\nIncome Log (static sheet):\n• Name: \"Income Log\"\n• Columns: Date | Category | Description | Amount | Account\n\n---\n\nSupported Categories:\nFood • Transport • Shopping • Entertainment • Bills • Others\n\nPayment Methods:\nCash • Card • E-wallet (GoPay/OVO/DANA)\n\n---\n\n👤 Created by: Andi Sakti\n🔗 LinkedIn: https://www.linkedin.com/in/andi-sakti-cpos-7922b4184/"},"typeVersion":1},{"id":"sticky_config","name":"⚙️ Configuration","type":"n8n-nodes-base.stickyNote","position":[32,-128],"parameters":{"width":768,"height":592,"content":"⚙️ CONFIGURATION\n\nStep 1 — Create Credentials\nGo to Settings → Credentials:\n\n|Credential | Type | Source |\n|---|---|---|\n| Telegram API | Bot Token | @BotFather |\n| Google Sheets | OAuth2 | Google Cloud Console |\n| Google Gemini | API Key | ai.google.dev |\n\nStep 2 — Set Google Sheets Document ID\nUpdate YOUR_GOOGLE_SHEET_ID_HERE in ALL 5 Google Sheets nodes:\n✏️ add_expense | get_expense | delete_expense\n✏️ add_income | get_income\n\nFind Document ID in URL:\ndocs.google.com/spreadsheets/d/THIS_PART/edit\n\nStep 3 — Assign Credentials to Nodes\n• Telegram nodes (4 nodes) → Your Telegram API\n• Google Sheets nodes (5 nodes) → Your Google Sheets\n• Gemini Chat Model (1 node) → Your Gemini API\n\nStep 4 — Test & Activate\n1. Click \"Test Workflow\"\n2. Send message to your Telegram bot\n3. Verify response and Sheet entry\n4. Activate when working!\n\n⚠️ ALL 5 Google Sheets nodes need the Document ID!"},"typeVersion":1},{"id":"sticky_info","name":"💡 Important Info","type":"n8n-nodes-base.stickyNote","position":[32,480],"parameters":{"width":768,"height":672,"content":"💡 HOW IT WORKS\n\nThis is a Telegram-based AI expense tracker.\nSend natural language and AI will:\n✓ Log expenses & income to Google Sheets\n✓ Auto-categorize transactions\n✓ Calculate totals and summaries\n✓ Handle multiple items in one message\n\nDynamic Sheet Names:\nExpense sheets use automatic monthly targeting:\n$now.setLocale('en').toFormat('MMMM yyyy')\n\nThis selects the current month's sheet automatically.\nCreate sheets in advance!\n\nAvailable Commands:\n/help — Show all commands\n/today — Today's expenses\n/week — This week's expenses\n/month — Monthly summary\n/delete — Delete an entry\n/stats — Statistics\n\nFeatures:\n• Shows \"typing...\" while processing\n• Auto-splits long responses\n• Friendly error messages\n• Monthly sheet auto-selection\n• All calculations use Calculator tool\n\n⚠️ Delete Limitation:\nCan only delete the LAST N rows from the sheet!\nMiddle entries require manual deletion."},"typeVersion":1}],"active":false,"pinData":{},"settings":{"callerPolicy":"workflowsFromSameOwner","availableInMCP":false,"executionOrder":"v1","saveManualExecutions":true,"saveExecutionProgress":true,"saveDataErrorExecution":"all","saveDataSuccessExecution":"all"},"versionId":"a0cbacf7-ce47-40f4-aafb-0f1ad2030c28","connections":{"Think":{"ai_tool":[[{"node":"AI Agent - Expense Tracker","type":"ai_tool","index":0}]]},"Calculator":{"ai_tool":[[{"node":"AI Agent - Expense Tracker","type":"ai_tool","index":0}]]},"add_income":{"ai_tool":[[{"node":"AI Agent - Expense Tracker","type":"ai_tool","index":0}]]},"get_income":{"ai_tool":[[{"node":"AI Agent - Expense Tracker","type":"ai_tool","index":0}]]},"add_expense":{"ai_tool":[[{"node":"AI Agent - Expense Tracker","type":"ai_tool","index":0}]]},"get_expense":{"ai_tool":[[{"node":"AI Agent - Expense Tracker","type":"ai_tool","index":0}]]},"Simple Memory":{"ai_memory":[[{"node":"AI Agent - Expense Tracker","type":"ai_memory","index":0}]]},"delete_expense":{"ai_tool":[[{"node":"AI Agent - Expense Tracker","type":"ai_tool","index":0}]]},"Telegram Trigger":{"main":[[{"node":"Typing...","type":"main","index":0},{"node":"AI Agent - Expense Tracker","type":"main","index":0}]]},"Google Gemini Chat Model":{"ai_languageModel":[[{"node":"AI Agent - Expense Tracker","type":"ai_languageModel","index":0}]]},"AI Agent - Expense Tracker":{"main":[[{"node":"Markdown to HTML Formatter","type":"main","index":0}],[{"node":"Send Error Message","type":"main","index":0}]]},"Markdown to HTML Formatter":{"main":[[{"node":"Send Telegram Message","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":18,"nodeTypes":{"n8n-nodes-base.code":{"count":1},"n8n-nodes-base.telegram":{"count":3},"n8n-nodes-base.stickyNote":{"count":3},"@n8n/n8n-nodes-langchain.agent":{"count":1},"n8n-nodes-base.telegramTrigger":{"count":1},"n8n-nodes-base.googleSheetsTool":{"count":5},"@n8n/n8n-nodes-langchain.toolThink":{"count":1},"@n8n/n8n-nodes-langchain.toolCalculator":{"count":1},"@n8n/n8n-nodes-langchain.lmChatGoogleGemini":{"count":1},"@n8n/n8n-nodes-langchain.memoryBufferWindow":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"Andi Sakti","username":"andi-sakti","bio":"Im a State Civil Servant and AI Consultant in The Ministry of Home Affairs of The Republic of Indonesia. I also help business owners to implement AI and automation in their systems to safe time, money and scale their business. Feel free to connect if you're also into AI and Automation.","verified":false,"links":["https://www.linkedin.com/in/andi-sakti-7922b4184/"],"avatar":"https://gravatar.com/avatar/3b84f066a653f8602dfe597fa3a86ca9251189f0bc6b2d981c2e726e5bef810f?r=pg&d=retro&size=200"},"nodes":[{"id":49,"icon":"file:telegram.svg","name":"n8n-nodes-base.telegram","codex":{"data":{"alias":["human","form","wait","hitl","approval"],"resources":{"generic":[{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/create-a-toxic-language-detector-for-telegram/","icon":"🤬","label":"Create a toxic language detector for Telegram in 4 step"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/world-poetry-day-workflow/","icon":"📜","label":"Celebrating World Poetry Day with a daily poem in Telegram"},{"url":"https://n8n.io/blog/using-automation-to-boost-productivity-in-the-workplace/","icon":"💪","label":"Using Automation to Boost Productivity in the Workplace"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/creating-scheduled-text-affirmations-with-n8n/","icon":"🤟","label":"Creating scheduled text affirmations with n8n"},{"url":"https://n8n.io/blog/creating-telegram-bots-with-n8n-a-no-code-platform/","icon":"💬","label":"Creating Telegram Bots with n8n, a No-Code Platform"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.telegram/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/telegram/"}]},"categories":["Communication","HITL"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"HITL":["Human in the Loop"]}}},"group":"[\"output\"]","defaults":{"name":"Telegram"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgNjYgNjYiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48ZyBmaWxsLXJ1bGU9Im5vbnplcm8iIHN0cm9rZT0ibm9uZSI+PHBhdGggZmlsbD0iIzM3YWVlMiIgZD0iTTAgMzJjMCAxNy42NzMgMTQuMzI3IDMyIDMyIDMyczMyLTE0LjMyNyAzMi0zMlM0OS42NzMgMCAzMiAwIDAgMTQuMzI3IDAgMzIiLz48cGF0aCBmaWxsPSIjYzhkYWVhIiBkPSJtMjEuNjYxIDM0LjMzOCAzLjc5NyAxMC41MDhzLjQ3NS45ODMuOTgzLjk4MyA4LjA2OC03Ljg2NCA4LjA2OC03Ljg2NGw4LjQwNy0xNi4yMzctMjEuMTE5IDkuODk4eiIvPjxwYXRoIGZpbGw9IiNhOWM2ZDgiIGQ9Im0yNi42OTUgMzcuMDM0LS43MjkgNy43NDZzLS4zMDUgMi4zNzMgMi4wNjggMGw0LjY0NC00LjIwMyIvPjxwYXRoIGQ9Im0yMS43MyAzNC43MTItNy44MDktMi41NDVzLS45MzItLjM3OC0uNjMzLTEuMjM3Yy4wNjItLjE3Ny4xODYtLjMyOC41NTktLjU4OCAxLjczMS0xLjIwNiAzMi4wMjgtMTIuMDk2IDMyLjAyOC0xMi4wOTZzLjg1Ni0uMjg4IDEuMzYxLS4wOTdjLjIzMS4wODguMzc4LjE4Ny41MDMuNTQ4LjA0NS4xMzIuMDcxLjQxMS4wNjguNjg5LS4wMDMuMjAxLS4wMjcuMzg2LS4wNDUuNjc4LS4xODQgMi45NzgtNS43MDYgMjUuMTk4LTUuNzA2IDI1LjE5OHMtLjMzIDEuMy0xLjUxNCAxLjM0NWMtLjQzMi4wMTYtLjk1Ni0uMDcxLTEuNTgyLS42MS0yLjMyMy0xLjk5OC0xMC4zNTItNy4zOTQtMTIuMTI2LTguNThhLjM0LjM0IDAgMCAxLS4xNDYtLjIzOWMtLjAyNS0uMTI1LjEwOC0uMjguMTA4LS4yOHMxMy45OC0xMi40MjcgMTQuMzUyLTEzLjczMWMuMDI5LS4xMDEtLjA3OS0uMTUxLS4yMjYtLjEwNy0uOTI5LjM0Mi0xNy4wMjUgMTAuNTA2LTE4LjgwMSAxMS42MjktLjEwNC4wNjYtLjM5NS4wMjMtLjM5NS4wMjMiLz48L2c+PC9zeW1ib2w+PC9zdmc+"},"displayName":"Telegram","typeVersion":1,"nodeCategories":[{"id":6,"name":"Communication"},{"id":28,"name":"HITL"}]},{"id":50,"icon":"file:telegram.svg","name":"n8n-nodes-base.telegramTrigger","codex":{"data":{"resources":{"generic":[{"url":"https://n8n.io/blog/create-a-toxic-language-detector-for-telegram/","icon":"🤬","label":"Create a toxic language detector for Telegram in 4 step"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/creating-telegram-bots-with-n8n-a-no-code-platform/","icon":"💬","label":"Creating Telegram Bots with n8n, a No-Code Platform"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/trigger-nodes/n8n-nodes-base.telegramtrigger/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/telegram/"}]},"categories":["Communication"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"trigger\"]","defaults":{"name":"Telegram Trigger"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgNjYgNjYiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48ZyBmaWxsLXJ1bGU9Im5vbnplcm8iIHN0cm9rZT0ibm9uZSI+PHBhdGggZmlsbD0iIzM3YWVlMiIgZD0iTTAgMzJjMCAxNy42NzMgMTQuMzI3IDMyIDMyIDMyczMyLTE0LjMyNyAzMi0zMlM0OS42NzMgMCAzMiAwIDAgMTQuMzI3IDAgMzIiLz48cGF0aCBmaWxsPSIjYzhkYWVhIiBkPSJtMjEuNjYxIDM0LjMzOCAzLjc5NyAxMC41MDhzLjQ3NS45ODMuOTgzLjk4MyA4LjA2OC03Ljg2NCA4LjA2OC03Ljg2NGw4LjQwNy0xNi4yMzctMjEuMTE5IDkuODk4eiIvPjxwYXRoIGZpbGw9IiNhOWM2ZDgiIGQ9Im0yNi42OTUgMzcuMDM0LS43MjkgNy43NDZzLS4zMDUgMi4zNzMgMi4wNjggMGw0LjY0NC00LjIwMyIvPjxwYXRoIGQ9Im0yMS43MyAzNC43MTItNy44MDktMi41NDVzLS45MzItLjM3OC0uNjMzLTEuMjM3Yy4wNjItLjE3Ny4xODYtLjMyOC41NTktLjU4OCAxLjczMS0xLjIwNiAzMi4wMjgtMTIuMDk2IDMyLjAyOC0xMi4wOTZzLjg1Ni0uMjg4IDEuMzYxLS4wOTdjLjIzMS4wODguMzc4LjE4Ny41MDMuNTQ4LjA0NS4xMzIuMDcxLjQxMS4wNjguNjg5LS4wMDMuMjAxLS4wMjcuMzg2LS4wNDUuNjc4LS4xODQgMi45NzgtNS43MDYgMjUuMTk4LTUuNzA2IDI1LjE5OHMtLjMzIDEuMy0xLjUxNCAxLjM0NWMtLjQzMi4wMTYtLjk1Ni0uMDcxLTEuNTgyLS42MS0yLjMyMy0xLjk5OC0xMC4zNTItNy4zOTQtMTIuMTI2LTguNThhLjM0LjM0IDAgMCAxLS4xNDYtLjIzOWMtLjAyNS0uMTI1LjEwOC0uMjguMTA4LS4yOHMxMy45OC0xMi40MjcgMTQuMzUyLTEzLjczMWMuMDI5LS4xMDEtLjA3OS0uMTUxLS4yMjYtLjEwNy0uOTI5LjM0Mi0xNy4wMjUgMTAuNTA2LTE4LjgwMSAxMS42MjktLjEwNC4wNjYtLjM5NS4wMjMtLjM5NS4wMjMiLz48L2c+PC9zeW1ib2w+PC9zdmc+"},"displayName":"Telegram Trigger","typeVersion":1,"nodeCategories":[{"id":6,"name":"Communication"}]},{"id":565,"icon":"fa:sticky-note","name":"n8n-nodes-base.stickyNote","codex":{"data":{"alias":["Comments","Notes","Sticky"],"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\"]","defaults":{"name":"Sticky Note","color":"#FFD233"},"iconData":{"icon":"sticky-note","type":"icon"},"displayName":"Sticky Note","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":834,"icon":"file:code.svg","name":"n8n-nodes-base.code","codex":{"data":{"alias":["cpde","Javascript","JS","Python","Script","Custom Code","Function"],"details":"The Code node allows you to execute JavaScript in your workflow.","resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Code"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Code","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":1119,"icon":"fa:robot","name":"@n8n/n8n-nodes-langchain.agent","codex":{"data":{"alias":["LangChain","Chat","Conversational","Plan and Execute","ReAct","Tools"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Agents","Root Nodes"]}}},"group":"[\"transform\"]","defaults":{"name":"AI Agent","color":"#404040"},"iconData":{"icon":"robot","type":"icon"},"displayName":"AI Agent","typeVersion":3,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1163,"icon":"fa:database","name":"@n8n/n8n-nodes-langchain.memoryBufferWindow","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memorybufferwindow/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Memory"],"Memory":["For beginners"]}}},"group":"[\"transform\"]","defaults":{"name":"Simple Memory"},"iconData":{"icon":"database","type":"icon"},"displayName":"Simple Memory","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1195,"icon":"fa:calculator","name":"@n8n/n8n-nodes-langchain.toolCalculator","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolcalculator/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Tools"],"Tools":["Other Tools"]}}},"group":"[\"transform\"]","defaults":{"name":"Calculator"},"iconData":{"icon":"calculator","type":"icon"},"displayName":"Calculator","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1262,"icon":"file:google.svg","name":"@n8n/n8n-nodes-langchain.lmChatGoogleGemini","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatgooglegemini/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Language Models","Root Nodes"],"Language Models":["Chat Models (Recommended)"]}}},"group":"[\"transform\"]","defaults":{"name":"Google Gemini Chat Model"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgNDggNDgiPjxkZWZzPjxwYXRoIGlkPSJhIiBkPSJNNDQuNSAyMEgyNHY4LjVoMTEuOEMzNC43IDMzLjkgMzAuMSAzNyAyNCAzN2MtNy4yIDAtMTMtNS44LTEzLTEzczUuOC0xMyAxMy0xM2MzLjEgMCA1LjkgMS4xIDguMSAyLjlsNi40LTYuNEMzNC42IDQuMSAyOS42IDIgMjQgMiAxMS44IDIgMiAxMS44IDIgMjRzOS44IDIyIDIyIDIyYzExIDAgMjEtOCAyMS0yMiAwLTEuMy0uMi0yLjctLjUtNCIvPjwvZGVmcz48Y2xpcFBhdGggaWQ9ImIiPjx1c2UgeGxpbms6aHJlZj0iI2EiIG92ZXJmbG93PSJ2aXNpYmxlIi8+PC9jbGlwUGF0aD48cGF0aCBmaWxsPSIjRkJCQzA1IiBkPSJNMCAzN1YxMWwxNyAxM3oiIGNsaXAtcGF0aD0idXJsKCNiKSIvPjxwYXRoIGZpbGw9IiNFQTQzMzUiIGQ9Im0wIDExIDE3IDEzIDctNi4xTDQ4IDE0VjBIMHoiIGNsaXAtcGF0aD0idXJsKCNiKSIvPjxwYXRoIGZpbGw9IiMzNEE4NTMiIGQ9Im0wIDM3IDMwLTIzIDcuOSAxTDQ4IDB2NDhIMHoiIGNsaXAtcGF0aD0idXJsKCNiKSIvPjxwYXRoIGZpbGw9IiM0Mjg1RjQiIGQ9Ik00OCA0OCAxNyAyNGwtNC0zIDM1LTEweiIgY2xpcC1wYXRoPSJ1cmwoI2IpIi8+PC9zdmc+"},"displayName":"Google Gemini Chat Model","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1289,"icon":"fa:brain","name":"@n8n/n8n-nodes-langchain.toolThink","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolthink/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Tools"],"Tools":["Other Tools"]}}},"group":"[\"transform\"]","defaults":{"name":"Think"},"iconData":{"icon":"brain","type":"icon"},"displayName":"Think Tool","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]}],"categories":[{"id":43,"name":"Personal Productivity"},{"id":47,"name":"AI Chatbot"}],"image":[]}}