{"workflow":{"id":12971,"name":"Search flights with Gemini via Telegram and send SerpAPI price alerts","views":367,"recentViews":1,"totalViews":367,"createdAt":"2026-01-24T15:31:25.117Z","description":"## 📖 Overview\n\nA **comprehensive flight price monitoring and AI assistant solution** built entirely in n8n. Combines automated price tracking with intelligent conversational flight search via Telegram.\n\n![bananapromaster1769268600948.png](fileId:4084)\n\n**Perfect for:**\n- ✈️ Tracking flight prices to favorite destinations\n- 💰 Getting alerts when prices drop below threshold\n- 🗓️ Planning trips with AI-powered flight searches\n- 🌍 Finding best deals across airlines\n- 📱 Managing travel plans through Telegram chat\n\n**Requirements:** n8n v1.123.0+ or v2.0.0+  SerpAPI key (500 free/month), Google Gemini API, Telegram bot token\n\n---\n\n## ⚡ What's in the Box\n\n### **Two Powerful Workflows**\n\n| Workflow | Function | Trigger |\n|----------|----------|---------|\n| **🔔 Automated Monitoring** | Tracks specific routes, alerts on price drops | Schedule (every 7 days) |\n| **💬 AI Flight Assistant** | Interactive search with natural language | Telegram messages |\n\n**Key Capabilities:**\n- 🎯 Set price thresholds and get instant alerts\n- 🤖 Ask questions in natural language (Vietnamese/English)\n- 🧠 AI remembers conversation context\n- 📊 Compares prices across airlines\n- ⚡ Real-time search results from Google Flights\n\n---\n\n## 🎯 Key Features\n\n- **📅 Scheduled Price Checks**: Automatic monitoring every 7 days (customizable)\n- **💡 Smart AI Assistant**: Understands \"find cheapest flight to Bangkok next weekend\"\n- **🔔 Instant Alerts**: Telegram notifications when prices drop\n- **🧠 Context-Aware**: AI remembers your preferences and previous searches\n- **🌐 Multi-Language**: Handles Vietnamese and English seamlessly\n- **📱 Mobile-Ready**: Full control via Telegram chat interface\n\n![bananapromaster1769268551494.png](fileId:4083)\n**Technical Highlights**: SerpAPI integration for real-time prices, Google Gemini Flash for AI responses, session-based conversation memory, Telegram HTML formatting, automatic date calculations (+5 days for returns)\n\n---\n\n## 🏗️ How It Works\n\n```\n### Workflow 1: Automated Monitoring\nSchedule Trigger → Configure Route → Search Flights → Extract Best Price  \n                                                            ↓  \n                                        Price &lt; Threshold? → Send Alert  \n\n### Workflow 2: AI Assistant\nTelegram Message → AI Agent → Flight Search Tools → Format Response  \n                      ↓              ↓                      ↓  \n                 Understand     Round-trip/One-way      Telegram HTML  \n                 Context        Auto +5 days return      Send to user  \n```\n\n---\n\n## 🛠️ Setup Guide\n\n### Step 1: API Credentials\nGet SerpAPI key (https://serpapi.com), Google Gemini API (https://aistudio.google.com/app/apikey), Telegram bot token (@BotFather)\n\n### Step 2: Configure Monitoring\nEdit Fields node: Set departure/arrival codes, price threshold, Telegram ID\n\n### Step 3: AI Assistant Setup\nLink Gemini model to AI Agent, connect flight search tools, activate memory\n\n### Step 4: Activate & Test\nEnable workflow, send test message to bot, verify alerts\n\n---\n\n## 💡 Usage Examples\n\n**Automated Alert:**\n```\n✈️ CHEAPEST TICKET\nPrice: 2,450,000 VND\nAirline: Vietjet Air\nTime: 06:00 → 08:00\n```\n\n**AI Chat:**\n- \"Find round-trip tickets Hanoi to Bangkok tomorrow\"\n- \"What's the cheapest flight to Nha Trang next weekend?\"\n- \"Search one-way Da Nang to Singapore on March 15\"\n\n---\n\n## 👤 About the Author\n\n**Nguyen Thieu Toan (Nguyễn Thiệu Toàn / Jay Nguyen)**\n\n*AI Automation Specialist | n8n Workflow Expert*\n\n**Contact:**\n- 🌐 [nguyenthieutoan.com](https://nguyenthieutoan.com)\n- 📘 [Facebook](https://www.facebook.com/nguyenthieutoan)\n- 💼 [LinkedIn](https://www.linkedin.com/in/nguyenthieutoan)\n- 📧 Email: [me@nguyenthieutoan.com](mailto:me@nguyenthieutoan.com)\n- [More Nguyen Thieu Toan's n8n Template](https://n8n.io/creators/nguyenthieutoan)\n\n**GenStaff Company**: [genstaff.net](https://genstaff.net)\n\n---\n\n## 📄 License\n\n- Free for commercial/personal use. \n- **Keep author attribution when sharing.**\n---\n\n**Ready to never miss a flight deal again? Import this workflow and start tracking prices today! 🚀**","workflow":{"meta":{"instanceId":"735886904af210643f438394a538e64374f0cb4ab13fd94d97005987482d652a","templateCredsSetupCompleted":true},"nodes":[{"id":"a3ebedb4-2ef8-4367-b391-b13eaea0a337","name":"📌 Workflow Introduction","type":"n8n-nodes-base.stickyNote","position":[1264,240],"parameters":{"width":368,"height":1424,"content":"# 🎯 Smart Flight Price Alert Bot with AI Assistant\n\n## Overview\nA comprehensive flight price monitoring system that combines:\n- **Automated price monitoring** (Schedule-based alerts)\n- **AI-powered flight assistant** (Chat-based queries via Telegram)\n\n## Key Features\n- ✈️ Automated flight price tracking\n- 🤖 AI assistant for instant flight queries\n- 💰 Price threshold alerts\n- 📱 Telegram notifications\n- 🧠 Conversation memory (AI understands context)\n\n## Two Main Workflow\n\n### 1️⃣ Automated Price Monitoring\n**Trigger:** Schedule (Every 7 days at 7:30 AM)\n**Flow:** Edit Fields → Search Flights → Check Price → Send Alert\n**Purpose:** Monitor specific routes and alert when price drops below threshold\n\n### 2️⃣ AI Flight Assistant\n**Trigger:** Telegram message\n**Flow:** User Message → AI Agent → Flight Search Tools → Formatted Response\n**Purpose:** Interactive flight search with natural language understanding\n\n## Setup Requirements\n\n### API Credentials Needed:\n1. **Telegram Bot Token** - For messaging\n2. **SerpAPI Key** - For flight searches, Free 500 requests per month\n3. **Google Gemini API** - For AI responses\n\n### Configuration Steps:\n1. Create Telegram bot via @BotFather\n2. Get SerpAPI key from https://serpapi.com\n3. Get Google Gemini API from https://aistudio.google.com/app/apikey\n4. Configure price thresholds in \"Edit Fields\" node\n5. Activate workflow\n\n---\n**Created by:** [Nguyen Thieu Toan](https://nguyenthieutoan.com)\n**More usefull template at:** [Nguyen Thieu Toan's n8n template](https://n8n.io/creators/nguyenthieutoan)\n**Template Version:** 1.0\n**Last Updated:** 01/24/2026"},"typeVersion":1},{"id":"e996622a-af73-4f69-8ff9-74029e7cbd6f","name":"📊 Workflow 1 Documentation","type":"n8n-nodes-base.stickyNote","position":[1648,240],"parameters":{"color":7,"width":1888,"height":720,"content":"## 🔄 Workflow 1: Automated Price Monitoring\n\n### Purpose\nAutomatically check flight prices on a schedule and send alerts when price drops below threshold.\n\n### Flow Steps\n1. **Schedule Trigger** - Runs every 7 days at 7:30 AM\n2. **Edit Fields** - Configure:\n   - Departure/Arrival airports (IATA codes)\n   - Price threshold (VND)\n   - Telegram ID for alerts\n3. **Google Flights Search** - Query flight prices\n4. **Code: Extract Best Price** - Process API results\n5. **Filter** - Check if price < threshold\n6. **Send Alert** - Notify via Telegram\n\n### Configuration Notes\n- **Airport Codes:** Use IATA codes (HAN, SGN, BKK, etc.)\n- **Price Threshold:** Set your acceptable price in VND\n- **Schedule:** Modify frequency in Schedule Trigger node\n- **Multiple Routes:** Duplicate workflow for different routes\n\n### Example Alert Message:\n```\n✈️ VÉ RẺ NHẤT\nGiá: 2,450,000 VND\nHãng: Vietjet Air\nGiờ: 06:00 → 08:00\n```"},"typeVersion":1},{"id":"3153c9c7-f80b-4587-9a7e-24f819a81b0f","name":"💬 Workflow 2 Documentation","type":"n8n-nodes-base.stickyNote","position":[1648,976],"parameters":{"color":7,"width":1888,"height":688,"content":"## 🤖 Workflow 2: AI Flight Assistant\n\n### Purpose\nInteractive flight search via Telegram with AI-powered natural language understanding.\n\n### Flow Steps\n1. **Telegram Trigger** - Receives user messages\n2. **AI Agent** - Understands queries & calls tools\n3. **Flight Search Tools:**\n   - Round-trip flights\n   - One-way flights\n4. **Memory** - Maintains conversation context\n5. **Response** - Sends formatted results\n\n### AI Capabilities\n- ✅ Understands natural language queries\n- ✅ Handles missing information (asks follow-up questions)\n- ✅ Supports both Vietnamese and English\n- ✅ Remembers conversation context\n- ✅ Auto-calculates return dates (default: +5 days)\n- ✅ Formats responses in Telegram HTML\n\n### Response Format\nTelegram HTML with:\n- **Bold** headings\n- Price formatting (comma separators)\n- Airline and timing info\n- Follow-up questions"},"typeVersion":1},{"id":"fb9fc221-615f-4cde-90fc-395a4ceea2bf","name":"⏰ Schedule Trigger","type":"n8n-nodes-base.scheduleTrigger","notes":"Runs every 7 days at 7:30 AM\n\nModify interval in parameters:\n- Daily: daysInterval: 1\n- Weekly: daysInterval: 7\n- Custom: Adjust as needed","position":[2208,592],"parameters":{"rule":{"interval":[{"daysInterval":7,"triggerAtHour":7,"triggerAtMinute":30}]}},"typeVersion":1.3},{"id":"ae68ae9c-c891-41cf-ad05-fbd924d95a35","name":"⚙️ Edit Fields","type":"n8n-nodes-base.set","notes":"✏️ CONFIGURE YOUR SETTINGS:\n\n1. Điểm đi: Airport code (HAN, SGN, DAD...)\n2. Điểm đến: Airport code (BKK, SIN, NRT...)\n3. Giá chấp nhận: Max price in VND\n4. TelegramID: Your Telegram user ID\n\n💡 Get your Telegram ID:\n- Message @userinfobot on Telegram\n- It will reply with your ID number","position":[2432,592],"parameters":{"options":{},"assignments":{"assignments":[{"id":"departure","name":"Departure","type":"string","value":"HAN"},{"id":"arrival","name":"Destination","type":"string","value":"BKK"},{"id":"threshold","name":"Acceptable Price (USD)","type":"number","value":1000},{"id":"telegram_id","name":"TelegramID","type":"string","value":"YOUR_TELEGRAM_ID"}]}},"typeVersion":3.4},{"id":"8ff7f716-49d2-46c7-9c85-211903f6037d","name":"✈️ Google Flights Search","type":"n8n-nodes-serpapi.serpApi","notes":"Searches one-way flights for today's date\n\nAPI Parameters:\n- departure_id: Origin airport\n- arrival_id: Destination airport\n- outbound_date: Today (auto-generated)\n- type: 2 = One-way\n- gl: Country (vn = Vietnam)\n- hl: Language (vi = Vietnamese)\n- currency: VND","position":[2656,592],"parameters":{"type":"2","operation":"google_flights","arrival_id":"={{ $json.Destination }}","departure_id":"={{ $json.Departure }}","outbound_date":"={{ $now.toFormat('yyyy-MM-dd') }}","requestOptions":{},"additionalFields":{"gl":"vn","hl":"en","currency":"USD"}},"credentials":{"serpApi":{"id":"DjNQ4wlxT6s48DHd","name":"SerpAPI account jayracroi@gmail.com"}},"typeVersion":1},{"id":"02b7753a-4706-40d1-ad42-dfcdf73dcb92","name":"💰 Extract Best Price","type":"n8n-nodes-base.code","notes":"Processes SerpAPI response:\n\n1. Combines best_flights + other_flights\n2. Normalizes price formats\n3. Extracts airline, times\n4. Finds cheapest option\n5. Formats Vietnamese message\n\nOutput:\n- ok: true/false\n- minPrice: number\n- message: formatted string\n- meta: API metadata","position":[2880,592],"parameters":{"jsCode":"// Get metadata for reference\nconst meta = $input.first().json.search_metadata;\n\n// Get flight data\nconst data = $input.first().json;\n\n// Combine flights from both best_flights and other_flights\nconst flights = []\n  .concat(data.best_flights || [])\n  .concat(data.other_flights || []);\n\nif (!flights.length) {\n  return { \n    ok: false, \n    message: \"❌ No flight data available\", \n    meta\n  };\n}\n\n// Helper: Convert value to number\nfunction toNumber(v) {\n  if (v == null) return null;\n  if (typeof v === \"number\") return v;\n  const s = String(v).replace(/[^\\d]/g, \"\");\n  return s ? Number(s) : null;\n}\n\n// Normalize flight data\nconst normalized = flights.map(f => {\n  const price =\n    toNumber(f.price) ??\n    toNumber(f?.price?.total) ??\n    toNumber(f?.price_str);\n\n  const airline = f.flights?.[0]?.airline || \"Unknown airline\";\n  const dep = f.flights?.[0]?.departure_airport?.time || \"\";\n  const arr = f.flights?.[0]?.arrival_airport?.time || \"\";\n\n  return { price, airline, dep, arr };\n}).filter(x => x.price != null);\n\nif (!normalized.length) {\n  return { \n    ok: false, \n    message: \"❌ Flights found but no readable price\", \n    sample: flights[0] \n  };\n}\n\n// Sort by ascending price\nnormalized.sort((a, b) => a.price - b.price);\nconst best = normalized[0];\n\nreturn {\n  ok: true,\n  minPrice: best.price,\n  message:\n    `✈️ Cheapest Ticket\\n` +\n    `Price: ${best.price.toLocaleString(\"en-US\")} USD\\n` +\n    `Airline: ${best.airline}\\n` +\n    `Time: ${best.dep} → ${best.arr}`,\n  meta\n};\n"},"typeVersion":2},{"id":"319aa495-ca10-4de7-949d-a539094812a4","name":"🔍 Filter by Price","type":"n8n-nodes-base.filter","notes":"Only proceeds if:\nminPrice < Price Threshold\n\nIf price is above threshold,\nworkflow stops here (no alert)","position":[3104,592],"parameters":{"options":{},"conditions":{"options":{"version":3,"leftValue":"","caseSensitive":true,"typeValidation":"loose"},"combinator":"and","conditions":[{"id":"price_check","operator":{"type":"number","operation":"lt"},"leftValue":"={{ $json.minPrice }}","rightValue":"={{ $('⚙️ Edit Fields').item.json[\"Acceptable Price (USD))\"] }}"}]},"looseTypeValidation":true},"typeVersion":2.3},{"id":"769937c5-3f66-426e-9b7c-f467ee5de94b","name":"📱 Send Alert","type":"n8n-nodes-base.telegram","notes":"Sends price alert to Telegram\n\nMessage format:\n✈️ VÉ RẺ NHẤT\nGiá: 2,450,000 VND\nHãng: Vietjet Air\nGiờ: 06:00 → 08:00","position":[3328,592],"webhookId":"alert_webhook_id","parameters":{"text":"={{ $json.message }}","chatId":"={{ $('⚙️ Edit Fields').item.json.TelegramID }}","additionalFields":{}},"credentials":{"telegramApi":{"id":"nrmQeOtkH5PfoPQm","name":"zTest Bost"}},"typeVersion":1.2},{"id":"e8a8d4a9-5462-424d-a9db-b4ad89e40383","name":"💬 Telegram Trigger","type":"n8n-nodes-base.telegramTrigger","notes":"Receives user messages from Telegram\n\nTo get Telegram Bot Token:\n1. Message @BotFather on Telegram\n2. Create new bot with /newbot\n3. Copy the token\n4. Add to n8n credentials","position":[2208,1200],"webhookId":"chat_webhook_id","parameters":{"updates":["message"],"additionalFields":{}},"credentials":{"telegramApi":{"id":"nrmQeOtkH5PfoPQm","name":"zTest Bost"}},"typeVersion":1.2},{"id":"7d4cdc16-b6e8-4629-b04d-2512c709e9d5","name":"📨 Send Response","type":"n8n-nodes-base.telegram","notes":"Sends AI response to user\n\nFormat: Telegram HTML\n- <b>bold</b> for headings\n- Price formatting with commas\n- Flight details structured\n- Follow-up questions included","position":[3088,1200],"webhookId":"response_webhook_id","parameters":{"text":"={{ $json.output }}","chatId":"={{ $('💬 Telegram Trigger').item.json.message.from.id }}","additionalFields":{"parse_mode":"HTML","appendAttribution":false}},"credentials":{"telegramApi":{"id":"nrmQeOtkH5PfoPQm","name":"zTest Bost"}},"typeVersion":1.2},{"id":"71a88953-79dc-4f91-96f8-e95e59a5a7f3","name":"📈 Performance & Optimization","type":"n8n-nodes-base.stickyNote","position":[3552,240],"parameters":{"color":5,"width":352,"height":1424,"content":"## 📊 Workflow Statistics & Performance\n\n### Automated Monitoring (Section 1)\n- **Frequency:** Every 7 days\n- **Execution time:** ~5-10 seconds\n- **API calls:** 1 per execution\n- **Cost:** ~$0.01 per search (SerpAPI)\n\n### AI Assistant (Section 2)\n- **Response time:** 3-8 seconds\n- **Avg tokens per query:** 500-800\n- **API calls:** 1-2 per conversation\n- **Cost:** ~$0.001 per query (Gemini)\n\n---\n\n## 💡 Optimization Tips\n\n### Reduce Costs\n1. Increase schedule interval (every 14 days)\n2. Use Gemini Flash over Pro\n3. Implement result caching\n4. Limit conversation memory window\n\n### Improve Performance\n1. Use webhook mode for instant responses\n2. Add error retry logic\n3. Cache airport code mappings\n4. Implement rate limiting\n\n### Enhance Accuracy\n1. Add more airport codes to AI context\n2. Include seasonal price trends\n3. Implement multi-currency support\n4. Add airline preference filtering\n\n---\n\n## 🔄 Maintenance Schedule\n\n**Weekly:**\n- Check API quotas\n- Monitor error logs\n- Review alert accuracy\n\n**Monthly:**\n- Update airport codes\n- Verify price thresholds\n- Test AI response quality\n\n**Quarterly:**\n- Review API pricing\n- Update system prompts\n- Optimize workflows"},"typeVersion":1},{"id":"8d41b7b0-e966-4aac-acce-85c52b808f53","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[2160,528],"parameters":{"color":3,"width":640,"height":240,"content":"## EDIT THIS NODES"},"typeVersion":1},{"id":"e90365b4-0dac-4c57-873b-d9598234d7dc","name":"🤖 AI Agent1","type":"@n8n/n8n-nodes-langchain.agent","notes":"AI-powered flight assistant\n\nCapabilities:\n- Natural language understanding\n- Handles missing info gracefully\n- Calls appropriate flight search tools\n- Maintains conversation context\n- Formats Telegram HTML responses\n\nSystem prompt simplified to 'Same old prompt'","position":[2592,1200],"parameters":{"text":"={{ $json.message.text }}","options":{"systemMessage":"=## 1. ROLE & LIMITATIONS\nYou are a professional flight search assistant created by Nguyen Thieu Toan. Your response style must be: **Concise – Direct – Efficient**.  \nYour main tasks are: analyze user requests, call the appropriate flight search tool, and return results formatted in **Telegram HTML**.\n\n**IMPORTANT:** You CANNOT automatically find “the cheapest day of the month” or scan prices across a wide date range. You can only check ticket prices when the user provides **specific and exact details**.\n\n---\n\n## 2. TOOLS\nYou have 2 tools, both of which **MUST** include at least 3 required parameters:  \n`origin` (Departure), `destination` (Arrival), `date` (Departure date).\n\n1. `flight_search_round_trip`: Search for round-trip tickets.  \n   * *Additional parameter:* `return_date` (Return date). If missing, apply the “Default Logic” rule.  \n2. `flight_search_one_way`: Search for one-way tickets.\n\n---\n\n## 3. CONTEXT\n* Current date: {{ $now }}  \n* Tomorrow: {{ $now.plus(1,'days') }}  \n* Weekend: Saturday and Sunday of this week  \n\n---\n\n## 4. INSTRUCTIONS\n\n### 4.1. Tool Invocation Conditions (Strict Logic)\n* **Only call a tool when all 3 parameters are present:** Origin, Destination, Departure Date.  \n* If any of these are missing → **Stop and ask the user** (Do NOT invent origin/destination).  \n* **Handling “cheapest day” requests:** If the user asks “Which day this month is cheapest?”, respond:  \n  *“I need a specific departure date to check ticket prices. Which day do you plan to travel?”*  \n  (Do NOT attempt to guess.)\n\n### 4.2. Default Logic (Only applies when Departure Date is provided)\n* **Round-trip default (5 days):** If the user requests a round-trip, provides a departure date but NO return date → Automatically set return date = Departure date + 5 days. You MUST inform the user about this assumption.\n\n### 4.3. Response Format (Telegram HTML)\n* Allowed tags: `<b>`, `<i>`, `<code>`, `<a href=\"...\">`  \n* Structure:  \n  1. **Header** (Route + Date): Bold  \n  2. **Ticket list** (Airline – Time – Price): Concise  \n  3. **Warning** (if default 5-day logic applied): Italic `<i>`  \n  4. **Follow-up question (Mandatory)**  \n\n---\n\n## 5. FEW-SHOT EXAMPLES\n\n**User:** Find tickets to Nha Trang next month.  \n**Assistant:**  \n* **Thought:** Destination provided (Nha Trang), but missing origin and exact date (only “next month” → too broad, tool cannot run).  \n* **Response:**  \n    To check ticket prices accurately, I need more specific details.  \n\n    ❓ From which city will you depart, and on which exact date next month?\n\n---\n\n**User:** Search for tickets Hanoi → Ho Chi Minh City on October 20.  \n**Assistant:**  \n* **Thought:** All 3 parameters provided (Origin: HAN, Destination: SGN, Date: 2026-10-20). No round-trip mentioned → Use One-way.  \n* **Tool Call:**  \n  `flight_search_one_way(origin=\"HAN\", destination=\"SGN\", date=\"2026-10-20\")`  \n* **Response:**  \n    ✈️ <b>Hanoi (HAN) ➜ Ho Chi Minh City (SGN) on Oct 20:</b>  \n\n    1. <b>Vietjet Air</b>: 06:00 – 08:00 | <b>900,000 VND</b>  \n    2. <b>Vietnam Airlines</b>: 10:00 – 12:00 | <b>1,500,000 VND</b>  \n\n    ❓ Would you like me to also search for return tickets?\n\n---\n\n**User:** Round-trip Da Nang → Bangkok tomorrow.  \n**Assistant:**  \n* **Thought:** Origin: DAD, Destination: BKK, Date: Tomorrow. Round-trip requested. Return date missing → Apply default +5 days.  \n* **Tool Call:**  \n  `flight_search_round_trip(origin=\"DAD\", destination=\"BKK\", departure_date=\"{{ $now.plus(1,'days') }}\", return_date=\"{{ $now.plus(6,'days') }}\")`  \n* **Response:**  \n    🇹🇭 <b>Round-trip Da Nang (DAD) ➜ Bangkok (BKK) tomorrow:</b>  \n\n    1. <b>AirAsia</b>: 14:00 – 15:30 | <b>2,800,000 VND</b>  \n    2. <b>Vietjet</b>: 18:00 – 19:30 | <b>2,650,000 VND</b>  \n\n    <i>⚠️ Return date has been set to 5 days after departure by default.</i>  \n\n    ❓ Would you like to choose a different return date?\n\n---\n\n**User:** Which day is cheapest to fly to Phu Quoc?  \n**Assistant:**  \n* **Response:**  \n    I cannot automatically scan for the cheapest day of the month.  \n\n    ❓ Could you provide a specific departure date so I can check ticket prices?\n"},"promptType":"define"},"typeVersion":3.1},{"id":"a35f698a-6ac2-4bc9-8210-9f564a758927","name":"🧠 Google Gemini Model1","type":"@n8n/n8n-nodes-langchain.lmChatGoogleGemini","notes":"Language model for AI Agent\n\nModel: gemini-2.0-flash-exp\nProvider: Google AI Studio\n\nGet free API key:\nhttps://aistudio.google.com/app/apikey","position":[2480,1424],"parameters":{"options":{}},"credentials":{"googlePalmApi":{"id":"Uk0jNpsFZJn8koT9","name":"Google Gemini(PaLM) toannguyen96vn@gmail.com Paid 1"}},"typeVersion":1},{"id":"2a037dad-725c-40f0-bd8e-2ef8b9527750","name":"🔄 Round Trip Search1","type":"n8n-nodes-serpapi.serpApiTool","notes":"AI Tool: Round-trip flight search\n\nRequired parameters:\n- Departure airport (IATA code)\n- Arrival airport (IATA code)\n- Outbound date (yyyy-MM-dd)\n- Return date (yyyy-MM-dd)\n\nCurrency: USD","position":[2736,1424],"parameters":{"operation":"google_flights","arrival_id":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Arrival_airport_code___location_kgmid__arrival_id_', `Arrival airport code, e.g., HAN, SGN, BKK...`, 'string') }}","return_date":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Return_Date__return_date_', `Return date, format yyyy-MM-dd`, 'string') }}","departure_id":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Departure_airport_code___location_kgmid__departure_id_', `Departure airport code, e.g., HAN, SGN, BKK...`, 'string') }}","outbound_date":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Outbound_Date__outbound_date_', `Outbound date, format yyyy-MM-dd`, 'string') }}","requestOptions":{},"additionalFields":{"gl":"vn","hl":"en","currency":"USD"}},"credentials":{"serpApi":{"id":"DjNQ4wlxT6s48DHd","name":"SerpAPI account jayracroi@gmail.com"}},"typeVersion":1},{"id":"0b6635a3-54de-4151-9135-47fe45a7bec6","name":"➡️ One-Way Search1","type":"n8n-nodes-serpapi.serpApiTool","notes":"AI Tool: One-way flight search\n\nRequired parameters:\n- Departure airport (IATA code)\n- Arrival airport (IATA code)\n- Outbound date (yyyy-MM-dd)\n\nCurrency: USD","position":[2864,1424],"parameters":{"type":"2","operation":"google_flights","arrival_id":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Arrival_airport_code___location_kgmid__arrival_id_', `Arrival airport code, e.g., HAN, SGN, BKK...`, 'string') }}","departure_id":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Departure_airport_code___location_kgmid__departure_id_', `Departure airport code, e.g., HAN, SGN, BKK...`, 'string') }}","outbound_date":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Outbound_Date__outbound_date_', `Outbound date, format yyyy-MM-dd`, 'string') }}","requestOptions":{},"additionalFields":{"gl":"vn","hl":"en","currency":"USD"}},"credentials":{"serpApi":{"id":"DjNQ4wlxT6s48DHd","name":"SerpAPI account jayracroi@gmail.com"}},"typeVersion":1},{"id":"fb4e98e5-7016-4100-835b-a78fabb96600","name":"🧠 Conversation Memory1","type":"@n8n/n8n-nodes-langchain.memoryBufferWindow","notes":"Maintains chat context per user\n\nSession Key: Telegram user ID\nWindow: Recent messages only\n\nEnables:\n- Follow-up questions\n- Context understanding\n- Natural conversation flow","position":[2608,1424],"parameters":{"sessionKey":"={{ $json.message.from.id }}","sessionIdType":"customKey"},"typeVersion":1.3}],"pinData":{},"connections":{"🤖 AI Agent1":{"main":[[{"node":"📨 Send Response","type":"main","index":0}]]},"⚙️ Edit Fields":{"main":[[{"node":"✈️ Google Flights Search","type":"main","index":0}]]},"⏰ Schedule Trigger":{"main":[[{"node":"⚙️ Edit Fields","type":"main","index":0}]]},"🔍 Filter by Price":{"main":[[{"node":"📱 Send Alert","type":"main","index":0}]]},"💬 Telegram Trigger":{"main":[[{"node":"🤖 AI Agent1","type":"main","index":0}]]},"➡️ One-Way Search1":{"ai_tool":[[{"node":"🤖 AI Agent1","type":"ai_tool","index":0}]]},"💰 Extract Best Price":{"main":[[{"node":"🔍 Filter by Price","type":"main","index":0}]]},"🔄 Round Trip Search1":{"ai_tool":[[{"node":"🤖 AI Agent1","type":"ai_tool","index":0}]]},"🧠 Conversation Memory1":{"ai_memory":[[{"node":"🤖 AI Agent1","type":"ai_memory","index":0}]]},"🧠 Google Gemini Model1":{"ai_languageModel":[[{"node":"🤖 AI Agent1","type":"ai_languageModel","index":0}]]},"✈️ Google Flights Search":{"main":[[{"node":"💰 Extract Best Price","type":"main","index":0}]]}}},"lastUpdatedBy":29,"workflowInfo":{"nodeCount":18,"nodeTypes":{"n8n-nodes-base.set":{"count":1},"n8n-nodes-base.code":{"count":1},"n8n-nodes-base.filter":{"count":1},"n8n-nodes-base.telegram":{"count":2},"n8n-nodes-base.stickyNote":{"count":5},"n8n-nodes-serpapi.serpApi":{"count":1},"n8n-nodes-serpapi.serpApiTool":{"count":2},"@n8n/n8n-nodes-langchain.agent":{"count":1},"n8n-nodes-base.scheduleTrigger":{"count":1},"n8n-nodes-base.telegramTrigger":{"count":1},"@n8n/n8n-nodes-langchain.lmChatGoogleGemini":{"count":1},"@n8n/n8n-nodes-langchain.memoryBufferWindow":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"Nguyễn Thiệu Toàn (Jay Nguyen)","username":"nguyenthieutoan","bio":"I’m the Founder & CEO of GenStaff. My work focuses on building AI Staff and automation systems that help businesses operate with fewer manual processes and greater efficiency.\n\nI’m particularly interested in how AI and no-code tools can transform complex workflows into scalable systems.\n\nI also share what I learn about AI, automation, and system thinking along the way.","verified":true,"links":["https://nguyenthieutoan.com"],"avatar":"https://gravatar.com/avatar/7141eae597e5b2df502a89ec82a34a51fa2138a7b108ebfec95f50f383b37be7?r=pg&d=retro&size=200"},"nodes":[{"id":38,"icon":"fa:pen","name":"n8n-nodes-base.set","codex":{"data":{"alias":["Set","JS","JSON","Filter","Transform","Map"],"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/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/database-monitoring-and-alerting-with-n8n/","icon":"📡","label":"Database Monitoring and Alerting with n8n"},{"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/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/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/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"url":"https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/","icon":"📹","label":"The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"},{"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/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/","icon":"📈","label":"A low-code bitcoin ticker built with QuestDB and n8n.io"},{"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/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"},{"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.set/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Data Transformation"]}}},"group":"[\"input\"]","defaults":{"name":"Edit Fields"},"iconData":{"icon":"pen","type":"icon"},"displayName":"Edit Fields (Set)","typeVersion":3,"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":839,"icon":"fa:clock","name":"n8n-nodes-base.scheduleTrigger","codex":{"data":{"alias":["Time","Scheduler","Polling","Cron","Interval"],"resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"trigger\",\"schedule\"]","defaults":{"name":"Schedule Trigger","color":"#31C49F"},"iconData":{"icon":"clock","type":"icon"},"displayName":"Schedule Trigger","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":844,"icon":"fa:filter","name":"n8n-nodes-base.filter","codex":{"data":{"alias":["Router","Filter","Condition","Logic","Boolean","Branch"],"details":"The Filter node can be used to filter items based on a condition. If the condition is met, the item will be passed on to the next node. If the condition is not met, the item will be omitted. Conditions can be combined together by AND(meet all conditions), or OR(meet at least one condition).","resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.filter/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Filter","color":"#229eff"},"iconData":{"icon":"filter","type":"icon"},"displayName":"Filter","typeVersion":2,"nodeCategories":[{"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":32,"name":"Market Research"},{"id":47,"name":"AI Chatbot"}],"image":[{"id":4083,"url":"https://n8niostorageaccount.blob.core.windows.net/n8nio-strapi-blobs-prod/assets/banana_pro_master_1769268551494_4b26727e72.png"},{"id":4084,"url":"https://n8niostorageaccount.blob.core.windows.net/n8nio-strapi-blobs-prod/assets/banana_pro_master_1769268600948_7e8d82c3d0.png"}]}}