{"workflow":{"id":14550,"name":"Handle e-commerce support on Telegram with Gemini and Google Sheets","views":6,"recentViews":1,"totalViews":6,"createdAt":"2026-04-01T10:17:13.329Z","description":"# Telegram E-Commerce Customer Support Bot with AI Agent & Google Sheets\n\nAn AI-powered Telegram bot that automates customer support for e-commerce stores — handling order tracking, order cancellations, and support ticket creation, all without human intervention.\n\nBuilt with a **Gemini AI Agent + Simple Memory**, the bot understands natural language, remembers the conversation context per user, and reads/writes directly to your Google Sheets — no database or backend required.\n\n---\n\n## How It Works\n\n- A customer messages the Telegram bot or taps a menu button\n- The **AI Agent** (powered by Google Gemini) reads the message and decides what to do\n- **Simple Memory** keeps track of the full conversation per user, so the bot never forgets context mid-flow\n- The agent calls one of three Google Sheets tools depending on intent:\n  - **Read Orders Sheet** — looks up order details by Order ID or email\n  - **Update Order Status** — sets an order's status to `Cancelled` after confirmation\n  - **Create Support Ticket** — appends a new ticket row to the support sheet with auto-categorisation\n- The response is sent back to the user via Telegram\n\n---\n\n## How to Use\n\n**Step 1 — Create a Telegram Bot**\nOpen [@BotFather](https://t.me/BotFather) on Telegram, run `/newbot`, and copy your bot token. Add it as a Telegram credential in n8n.\n\n**Step 2 — Set Up Google Sheets**\n\nCreate a Google Spreadsheet with two sheets (tabs):\n\n*Sheet 1 — `Sheet1` (Orders):*\n| order_id | customer_name | email | product | Status | date |\n\n*Sheet 2 — `Sheet1` (Support Tickets — separate spreadsheet):*\n| ticket_id | name | order_id | query | summary | category | status | created_at | telegram_id |\n\n**Step 3 — Add Credentials in n8n**\n- **Telegram Bot** — paste your BotFather token\n- **Google Sheets OAuth2** — connect your Google account\n- **Google Gemini (PaLM API)** — add your API key from [Google AI Studio](https://aistudio.google.com/app/apikey)\n\n**Step 4 — Update Sheet IDs**\nIn the three Google Sheets tool nodes, replace the `documentId` values with your actual spreadsheet IDs (found in the Google Sheets URL).\n\n**Step 5 — Activate & Register Webhook**\nActivate the workflow in n8n. If running locally, use [ngrok](https://ngrok.com) to expose your n8n port over HTTPS, then register the webhook:\n```\nhttps://api.telegram.org/bot&lt;YOUR_TOKEN&gt;/setWebhook?url=https://&lt;YOUR_NGROK_URL&gt;/webhook/telegram-ecom-bot\n```\n\n**Step 6 — Test**\nOpen your bot in Telegram and send `/start`. You should see the welcome message with three menu buttons.\n\n---\n\n## Requirements\n\n- n8n (self-hosted or cloud)\n- Telegram Bot (via BotFather — free)\n- Google account with access to Google Sheets\n- Google Gemini API key (free tier available at [aistudio.google.com](https://aistudio.google.com))\n\n---\n\n## Customising This Workflow\n\n- **Change the LLM** — swap Google Gemini for OpenAI GPT-4o or any other n8n-supported model by replacing the `Google Gemini Chat Model` node\n- **Add more menu options** — extend the `/start` welcome node with additional inline keyboard buttons and update the system prompt to handle new intents\n- **Add manager notifications** — connect a Telegram or email node after the `Create Support Ticket` tool to notify your team when a new ticket is raised\n- **Use a database instead of Sheets** — replace the Google Sheets tool nodes with PostgreSQL or MySQL nodes for higher-volume production use\n- **Change cancellation rules** — edit the system prompt to block cancellations for different statuses (e.g. block `Ready` in addition to `Shipped`)\n- **Add order lookup by phone number** — extend the orders sheet with a `phone` column and update the system prompt accordingly","workflow":{"meta":{"instanceId":"75c218f8396b716d7d9ebdd101953eb81f5f61ef94b8c907c2afd0f7c157c9ad","templateCredsSetupCompleted":true},"nodes":[{"id":"ad0e705c-dfd7-4861-adce-2e11c8304e51","name":"Telegram Trigger","type":"n8n-nodes-base.telegramTrigger","position":[1440,208],"webhookId":"telegram-ecom-bot","parameters":{"updates":["message","callback_query"],"additionalFields":{}},"typeVersion":1.2},{"id":"d71f44ac-57f2-44f1-a173-89af6081261e","name":"Extract Message","type":"n8n-nodes-base.code","position":[1664,208],"parameters":{"jsCode":"const u = $input.first().json;\nlet chatId, text, firstName;\n\nif (u.callback_query) {\n  chatId    = String(u.callback_query.message.chat.id);\n  text      = u.callback_query.data;\n  firstName = u.callback_query.from.first_name || 'there';\n} else if (u.message) {\n  chatId    = String(u.message.chat.id);\n  text      = u.message.text || '';\n  firstName = u.message.from.first_name || 'there';\n} else {\n  return [];\n}\n\nreturn [{ json: { chatId, text: text.trim(), firstName, sessionKey: chatId } }];"},"typeVersion":2},{"id":"d1362c39-149c-4ff0-b246-91b9b07363a3","name":"Is /start?","type":"n8n-nodes-base.if","position":[1936,208],"parameters":{"options":{},"conditions":{"options":{"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"operator":{"type":"string","operation":"equals"},"leftValue":"={{ $json.text }}","rightValue":"/start"}]}},"typeVersion":2},{"id":"93aa7968-7ddc-413c-a275-33f0ff3dc058","name":"Send Welcome Menu","type":"n8n-nodes-base.telegram","position":[2320,192],"webhookId":"92dddae4-b587-4be8-b20a-109c9b22ec3b","parameters":{"text":"={{ '👋 Hello *' + $json.firstName + '*! Welcome to our Support Bot.\\n\\nHow can I help you today?' }}","chatId":"={{ $json.chatId }}","replyMarkup":"inlineKeyboard","inlineKeyboard":{"rows":[{"row":{"buttons":[{"text":"📦 Track My Order","additionalFields":{"callback_data":"Track my order"}}]}},{"row":{"buttons":[{"text":"❌ Cancel My Order","additionalFields":{"callback_data":"I want to cancel my order"}}]}},{"row":{"buttons":[{"text":"🎫 Talk to Support","additionalFields":{"callback_data":"I need to talk to support"}}]}}]},"additionalFields":{"parse_mode":"Markdown"}},"typeVersion":1.2},{"id":"a463b4b0-38f9-4cc6-846c-8b093b5f28bb","name":"Customer Support AI Agent","type":"@n8n/n8n-nodes-langchain.agent","position":[2304,352],"parameters":{"text":"={{ $json.text }}","options":{"systemMessage":"You are a friendly e-commerce customer support bot. The customer's name is {{ $('Extract Message').first().json.firstName }} and their Telegram chat ID is {{ $('Extract Message').first().json.chatId }}.\n\nYou have 3 tools available:\n- **Tool: Read Orders Sheet** — reads ALL order rows. Use to find an order by order_id or email.\n- **Tool: Update Order Status** — updates an order's Status column. Use to cancel orders.\n- **Tool: Create Support Ticket** — appends a new ticket row to the support sheet.\n\n---\n\n## HOW TO HANDLE EACH INTENT\n\n### \"Track my order\" / \"order status\":\n1. Ask: \"Please provide your Order ID or email address.\"\n2. Call **Tool: Read Orders Sheet** — it returns all rows.\n3. Filter rows to find where order_id or email matches what the user gave.\n4. Reply with:\n```\n📦 *Order Details*\n\n🆔 Order ID: [order_id]\n👤 Customer: [customer_name]\n🛍 Product: [product]\n⏳ Status: [Status]\n📅 Date: [date]\n```\nIf not found: \"❌ No order found. Please check your Order ID or email.\"\n\n### \"Cancel my order\":\n1. Ask for Order ID or email if not provided.\n2. Call **Tool: Read Orders Sheet** to find the order.\n3. Check the Status:\n   - \"Shipped\" → \"⚠️ Cannot cancel — order already shipped. Please contact support.\"\n   - \"Cancelled\" → \"ℹ️ This order is already cancelled.\"\n   - Any other status → Ask: \"⚠️ Are you sure you want to cancel Order [order_id] (Status: [Status])? Reply YES to confirm or NO to keep it.\"\n4. On YES: Call **Tool: Update Order Status** with order_id and Status = \"Cancelled\". Then reply: \"✅ Order [order_id] has been cancelled successfully.\"\n5. On NO: \"👍 No problem! Your order has not been cancelled.\"\n\n### \"Talk to support\" / \"I have an issue\":\n1. Ask for: Name, and their query/issue. Also ask for Order ID if relevant.\n2. Once you have name + query, call **Tool: Create Support Ticket**.\n3. After the tool call, YOU MUST reply with this message (replace the values):\n   \"🎫 *Support Ticket Created!*\n\n✅ Thank you, [name]!\n\n📋 *Your issue:* [one sentence summary]\n🏷 *Category:* [Payment/Shipping/Product Issue/Other]\n\n🎟 *Ticket ID:* [the ticket_id you used]\n\nOur team will contact you soon. Type /start to go back to the menu.\"\n\n---\n\n## CRITICAL RULES\n- After calling any tool, ALWAYS send a text reply to the user. Never end without a message.\n- Never say \"I have submitted\" without also telling the user their ticket ID.\n- Keep replies concise and friendly.\n- Use Markdown formatting (*bold*, _italic_).\n- If user greets or types something unclear, list the 3 options they can choose from."},"promptType":"define"},"typeVersion":2},{"id":"6466f250-47a7-40c0-b68d-f17d9391d24b","name":"Google Gemini Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatGoogleGemini","position":[2112,576],"parameters":{"options":{}},"typeVersion":1},{"id":"ac476401-85a7-4ba8-adb4-b7910e063655","name":"Simple Memory","type":"@n8n/n8n-nodes-langchain.memoryBufferWindow","position":[2240,576],"parameters":{"sessionKey":"={{ $('Extract Message').first().json.sessionKey }}","sessionIdType":"customKey"},"typeVersion":1.3},{"id":"70fd7444-f981-4e25-93b2-815dbcf58107","name":"Tool: Read Orders Sheet","type":"n8n-nodes-base.googleSheetsTool","position":[2368,576],"parameters":{"options":{},"sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultName":"Sheet1"},"documentId":{"__rl":true,"mode":"list","value":"1Yw7vq8iZ3geCCEyst-JpAwfICX1zxUtF0et71muqiT0","cachedResultName":"order data"},"descriptionType":"manual","toolDescription":"Reads ALL rows from the orders Google Sheet. Returns all order data including order_id, customer_name, email, product, Status, date. Use this whenever you need to look up an order by order_id or email address."},"typeVersion":4.5},{"id":"fb84c717-cf3c-4517-bbc2-776124f3b985","name":"Tool: Update Order Status","type":"n8n-nodes-base.googleSheetsTool","position":[2496,576],"parameters":{"columns":{"value":{"Status":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Status', 'The new status. Use Cancelled to cancel an order.', 'string') }}","order_id":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('order_id', 'The order ID to update', 'string') }}"},"schema":[{"id":"order_id","type":"string","display":true,"required":false,"displayName":"order_id","defaultMatch":true,"canBeUsedToMatch":true},{"id":"Status","type":"string","display":true,"required":false,"displayName":"Status","defaultMatch":false,"canBeUsedToMatch":false}],"mappingMode":"defineBelow","matchingColumns":["order_id"]},"options":{},"operation":"update","sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultName":"Sheet1"},"documentId":{"__rl":true,"mode":"list","value":"1Yw7vq8iZ3geCCEyst-JpAwfICX1zxUtF0et71muqiT0","cachedResultName":"order data"},"descriptionType":"manual","toolDescription":"Updates the Status of an order in the orders sheet. Use this to cancel an order after user confirms. Provide the order_id and set Status to 'Cancelled'."},"typeVersion":4.5},{"id":"96b463c5-be0b-43f4-9203-7e9c87c7ca70","name":"Tool: Create Support Ticket","type":"n8n-nodes-base.googleSheetsTool","position":[2624,576],"parameters":{"columns":{"value":{"name":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('name', 'Customer full name', 'string') }}","query":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('query', 'Full customer query text', 'string') }}","status":"Pending","summary":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('summary', 'One sentence summary of the issue', 'string') }}","category":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('category', 'Issue category: Payment, Shipping, Product Issue, or Other', 'string') }}","order_id":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('order_id', 'Related order ID if any, otherwise empty string', 'string') }}","ticket_id":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('ticket_id', 'Unique ticket ID in format TKT-XXXX where XXXX is 4 random digits', 'string') }}","created_at":"={{ new Date().toISOString() }}","telegram_id":"={{ $('Extract Message').first().json.chatId }}"},"schema":[{"id":"ticket_id","type":"string","display":true,"required":false,"displayName":"ticket_id","defaultMatch":false,"canBeUsedToMatch":true},{"id":"name","type":"string","display":true,"required":false,"displayName":"name","defaultMatch":false,"canBeUsedToMatch":false},{"id":"order_id","type":"string","display":true,"required":false,"displayName":"order_id","defaultMatch":false,"canBeUsedToMatch":false},{"id":"query","type":"string","display":true,"required":false,"displayName":"query","defaultMatch":false,"canBeUsedToMatch":false},{"id":"summary","type":"string","display":true,"required":false,"displayName":"summary","defaultMatch":false,"canBeUsedToMatch":false},{"id":"category","type":"string","display":true,"required":false,"displayName":"category","defaultMatch":false,"canBeUsedToMatch":false},{"id":"status","type":"string","display":true,"required":false,"displayName":"status","defaultMatch":false,"canBeUsedToMatch":false},{"id":"created_at","type":"string","display":true,"required":false,"displayName":"created_at","defaultMatch":false,"canBeUsedToMatch":false},{"id":"telegram_id","type":"string","display":true,"required":false,"displayName":"telegram_id","defaultMatch":false,"canBeUsedToMatch":false}],"mappingMode":"defineBelow","matchingColumns":[]},"options":{},"operation":"append","sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultName":"Sheet1"},"documentId":{"__rl":true,"mode":"list","value":"1RNXRi_WaJbyYnIFOM8YJePUbN-hfEXis0dpbWXGfLmw","cachedResultName":"support data"},"descriptionType":"manual","toolDescription":"Creates a new support ticket by appending a row to the support sheet. Use this after collecting customer name and query. Generate a unique ticket_id like TKT-XXXX (random 4 digits). Fill summary with a 1-sentence description. Set category to one of: Payment, Shipping, Product Issue, Other. Set status to Pending."},"typeVersion":4.5},{"id":"24d58366-367c-4201-beb8-511fcb720e41","name":"Prepare Reply","type":"n8n-nodes-base.code","position":[2816,352],"parameters":{"jsCode":"const output = $input.first().json.output || '';\nconst chatId = $('Extract Message').first().json.chatId;\n\nif (!output || output.trim() === '') {\n  return [{ json: { chatId, text: \"✅ Done! Is there anything else I can help you with? Type /start to see the main menu.\" } }];\n}\n\nreturn [{ json: { chatId, text: output } }];"},"typeVersion":2},{"id":"9e5b19b6-b4f0-470d-b872-48374cdd2434","name":"Send Telegram Reply","type":"n8n-nodes-base.telegram","position":[3056,352],"webhookId":"fbed2181-add5-430d-a2d2-932b2fab9b04","parameters":{"text":"={{ $json.text }}","chatId":"={{ $json.chatId }}","additionalFields":{"parse_mode":"Markdown","appendAttribution":false}},"typeVersion":1.2},{"id":"3f475bb5-82e0-4a52-9e97-5c59a210e453","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[1072,192],"parameters":{"color":7,"width":316,"height":148,"content":"### ⚙️ Setup Required\n1. Add your **Telegram Bot** credential\n2. Add **Google Gemini API** credential\n3. Add **Google Sheets OAuth2** credential\n4. Update Sheet IDs if needed\n5. Activate workflow and register webhook"},"typeVersion":1},{"id":"a46ef2d4-0b40-4437-adcc-1814ddb1679f","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[1056,48],"parameters":{"width":524,"height":324,"content":"###  🤖 Telegram AI Support Bot\n\nThis workflow manages customer interactions via Telegram, using an AI Agent to handle order tracking, cancellations, and support tickets automatically.\n\n"},"typeVersion":1},{"id":"65cfab64-0aa0-4860-8a22-0b9b04801676","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[1616,0],"parameters":{"color":5,"width":220,"height":372,"content":"###  Step-1: Inbound & Extraction\n\n\nReceives messages or button clicks and cleans the data (Chat ID, Name, Text) for the rest of the flow."},"typeVersion":1},{"id":"ce43f23f-c3ef-4dd4-888c-9e2ebd64cb2e","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[1888,0],"parameters":{"color":5,"width":236,"height":372,"content":"###  Steo-2: Logic Router\n\nChecks if the user typed **/start**.\n\n- **True:** Shows the main menu buttons.\n- **False:** Passes the query to the AI Agent.\n"},"typeVersion":1},{"id":"647bf8f3-ade2-41f2-9519-cc813b222213","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[2176,0],"parameters":{"color":5,"width":492,"height":516,"content":"###  Step-3: AI Agent & Google Sheets Tools\n\nThe **Gemini-powered Agent** uses context and memory to decide which tool to use:\n- **Read Orders:** To track status.\n- **Update Orders:** To handle cancellations.\n- **Create Ticket:** To log issues in the support sheet.\""},"typeVersion":1},{"id":"8524c032-e401-400f-95ee-ba06975e298a","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[2736,192],"parameters":{"color":5,"width":524,"height":324,"content":"###  Step-4: Response Delivery\n\n\nFormats the AI output into a user-friendly message and sends it back to Telegram."},"typeVersion":1}],"pinData":{},"connections":{"Is /start?":{"main":[[{"node":"Send Welcome Menu","type":"main","index":0}],[{"node":"Customer Support AI Agent","type":"main","index":0}]]},"Prepare Reply":{"main":[[{"node":"Send Telegram Reply","type":"main","index":0}]]},"Simple Memory":{"ai_memory":[[{"node":"Customer Support AI Agent","type":"ai_memory","index":0}]]},"Extract Message":{"main":[[{"node":"Is /start?","type":"main","index":0}]]},"Telegram Trigger":{"main":[[{"node":"Extract Message","type":"main","index":0}]]},"Tool: Read Orders Sheet":{"ai_tool":[[{"node":"Customer Support AI Agent","type":"ai_tool","index":0}]]},"Google Gemini Chat Model":{"ai_languageModel":[[{"node":"Customer Support AI Agent","type":"ai_languageModel","index":0}]]},"Customer Support AI Agent":{"main":[[{"node":"Prepare Reply","type":"main","index":0}]]},"Tool: Update Order Status":{"ai_tool":[[{"node":"Customer Support AI Agent","type":"ai_tool","index":0}]]},"Tool: Create Support Ticket":{"ai_tool":[[{"node":"Customer Support AI Agent","type":"ai_tool","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":18,"nodeTypes":{"n8n-nodes-base.if":{"count":1},"n8n-nodes-base.code":{"count":2},"n8n-nodes-base.telegram":{"count":2},"n8n-nodes-base.stickyNote":{"count":6},"@n8n/n8n-nodes-langchain.agent":{"count":1},"n8n-nodes-base.telegramTrigger":{"count":1},"n8n-nodes-base.googleSheetsTool":{"count":3},"@n8n/n8n-nodes-langchain.lmChatGoogleGemini":{"count":1},"@n8n/n8n-nodes-langchain.memoryBufferWindow":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"Nirav Gajera","username":"niravgajera","bio":"Full-stack Developer | PHP | Laravel | Vue.js | CodeIgniter | Nova | AWS | AI Automation ","verified":true,"links":["https://www.linkedin.com/in/nirav-gajera1/"],"avatar":"https://gravatar.com/avatar/7157fd8f0a74088248a6780d0536d9062ebdfb7cf7ed879b5ccee0b23403095d?r=pg&d=retro&size=200"},"nodes":[{"id":20,"icon":"fa:map-signs","name":"n8n-nodes-base.if","codex":{"data":{"alias":["Router","Filter","Condition","Logic","Boolean","Branch"],"details":"The IF node can be used to implement binary conditional logic in your workflow. You can set up one-to-many conditions to evaluate each item of data being inputted into the node. That data will either evaluate to TRUE or FALSE and route out of the node accordingly.\n\nThis node has multiple types of conditions: Bool, String, Number, and Date & Time.","resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"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/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/","icon":"🏷️","label":"How to automatically manage contributions to open-source projects"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, 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/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"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/core-nodes/n8n-nodes-base.if/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"transform\"]","defaults":{"name":"If","color":"#408000"},"iconData":{"icon":"map-signs","type":"icon"},"displayName":"If","typeVersion":2,"nodeCategories":[{"id":9,"name":"Core 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":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"}]}],"categories":[{"id":40,"name":"Support Chatbot"},{"id":47,"name":"AI Chatbot"}],"image":[]}}