{"workflow":{"id":13080,"name":"Build a Facebook Messenger customer service AI chatbot with Google Gemini","views":1456,"recentViews":3,"totalViews":1456,"createdAt":"2026-01-28T22:46:49.541Z","description":"# 🤖 Build a customer service AI chatbot for Facebook Messenger with Google Gemini\n\n---\n\n## 📌 Overview\nA streamlined Facebook Messenger chatbot powered by AI with conversation memory.  \nThis is a **simplified version** designed for quick deployment, learning, and testing — **not suitable for production environments**.\n\n**Base workflows:**\n- [Smart message batching AI-powered Facebook Messenger chatbot use Data Table](https://n8n.io/workflows/9192)  \n- [Smart human takeover & auto pause AI-powered Facebook Messenger chatbot](https://n8n.io/workflows/11920)  \n\n---\n\n## 🎯 What This Workflow Does\n\n✅ **Core Features:**\n- Receives messages from Facebook Messenger via webhook  \n- Processes user messages with Google Gemini AI  \n- Maintains conversation context using Simple Memory node  \n- Automatically responds with AI-generated replies  \n- Handles webhook verification for Facebook setup  \n- Send image or video to customer through Facebook Messenger\n\n🔹 **Simplified Approach:**\n- **Memory**: Simple Memory node (10-message window)  \n- **Format**: Cleans text, strips markdown, truncates &gt;1900 chars  \n- **Response**: Single message delivery  \n\n⚠️ **Limitations & Trade-offs:**\n1. **No Smart Batching** → fragmented user messages cause spam-like replies  \n2. **No Human Takeover Detection** → bot continues even when admin joins  \n3. **Basic Memory Management** → no persistence, not reliable in production  \n4. **Basic Text Formatting** → strips markdown, truncates brutally, no smart splitting  \n\n---\n\n## 🚀 When to Upgrade\nUpgrade to full workflows when you need:  \n- Production deployment with reliability & persistence  \n- Analytics & tracking (query history, reports)  \n- Professional formatting (bold, italic, lists, code blocks)  \n- Handling long messages (&gt;2000 chars)  \n- Smart batching for fragmented inputs  \n- Human handoff detection  \n- Full conversation persistence  \n\n**Key upgrades available:**\n- [Smart message batching workflow](https://n8n.io/workflows/9192)  \n- [Smart human takeover workflow](https://n8n.io/workflows/11920)  \n\n---\n\n## ⚙️ Setup Requirements\n\n### Facebook Setup\n1. Create Facebook App at [developers.facebook.com](https://developers.facebook.com/)  \n2. Add Messenger product  \n3. Configure webhook:  \n   - URL: `https://your-domain.com/webhook/your-path`  \n   - Verify token: secure string  \n   - Subscribe to: `messages`, `messaging_postbacks`  \n4. Generate Page Access Token  \n5. Copy token to \"Set Context\" node  \n\n### n8n Setup\n1. Import workflow  \n2. Edit \"Set Context\" node → update `page_access_token`  \n3. Configure \"Gemini Flash\" node credentials  \n4. Deploy workflow (must be publicly accessible)  \n\n---\n\n## 🔄 How It Works\n```\nUser Message → Facebook Webhook → Validation\n    ↓\nSet Context (extract user_id, message, token)\n    ↓\nMark Seen → Show Typing\n    ↓\nAI Agent (Gemini + 10-message memory)\n    ↓\nFormat Output (remove markdown, truncate)\n    ↓\nSend Response via Facebook API\n```\n\n---\n\n## 🏗️ Architecture Overview\n\n### Section 1: Webhook & Initial Processing\n- Facebook Webhook: handles GET (verification) & POST (messages)  \n- Confirm Webhook: returns challenge / acknowledges receipt  \n- Filters text messages only  \n- Blocks echo messages from bot itself  \n\n### Section 2: AI Processing with Memory\n- Set Context: extracts user_id, message, token  \n- Seen & Typing: user feedback  \n- Conversation Memory: 10-message window, per-user isolation  \n- Process Merged Message: AI Agent with Jenix persona  \n- Gemini Flash: Google’s AI model for response generation  \n\n### Section 3: Format & Delivery\n- Cuts replies &gt;2000 chars, strips markdown  \n- Sends text via Facebook Graph API  \n\n---\n\n## 🎨 Customisation Guide\n- **Bot Personality**: edit system prompt in \"Process Merged Message\" node  \n- **Memory**: adjust `contextWindowLength` (default 10), change `sessionKey` if needed  \n- **AI Model**: replace Gemini Flash with OpenAI, Anthropic Claude, or other LLMs  \n\n---\n\n## 📌 Important Notes\n⚠️ **Production Warning**: testing only, memory lost on n8n restart in queue mode  \n📊 **No Analytics**: no history storage, no reporting  \n🔧 **Format Limitations**: responses ≤1800 chars, markdown stripped, no complex formatting  \n\n---\n\n## 🛠️ Troubleshooting\n- **Bot not responding** → check token, webhook accessibility, event subscriptions  \n- **Memory not working** → verify session key, ensure not in queue mode, restart workflow  \n- **Messages truncated** → adjust system prompt for conciseness, reduce response length  \n\n---\n\n## 📜 License & Credits\nCreated by: **Nguyễn Thiệu Toàn (Jay Nguyen)**  \n- Email: **me@nguyenthieutoan.com**\n- Website: [nguyenthieutoan.com](https://nguyenthieutoan.com)  \n- n8n Creator: [n8n.io/creators/nguyenthieutoan](https://n8n.io/creators/nguyenthieutoan)  \n- Company: [GenStaff](https://genstaff.net)  ","workflow":{"meta":{"instanceId":"735886904af210643f438394a538e64374f0cb4ab13fd94d97005987482d652a"},"nodes":[{"id":"09d0e55f-9758-46fe-919f-d29866635f62","name":"Sticky Note - Section 1","type":"n8n-nodes-base.stickyNote","position":[240,384],"parameters":{"color":7,"width":672,"height":752,"content":"## 1. Webhook & Validation\n[Read more about the Webhook node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook)\n\nFacebook sends events to this webhook when users interact with your Messenger bot. The workflow validates these events, filters only text messages, and blocks echo messages from the bot itself.\n\n**Key nodes:**\n- **Facebook Webhook**: Receives both GET (verification) and POST (messages)\n- **Confirm Webhook**: Returns verification challenge or acknowledgment\n- **Is message**: Filters only events with text content\n- **From user?**: Blocks bot echo by comparing sender with page ID"},"typeVersion":1},{"id":"1d856115-11a5-49a5-871d-9422a742b672","name":"Sticky Note - Section 2","type":"n8n-nodes-base.stickyNote","position":[928,384],"parameters":{"color":7,"width":992,"height":752,"content":"## 2. AI Processing & Memory\n[Read more about Google Gemini Chat Model](https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.lmchatgooglegemini/)\n[Read more about Memory Buffer Window](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memorybufferwindow/)\n\nThe core AI processing happens here. User messages are processed with Google Gemini AI while maintaining conversation context through Simple Memory.\n\n**Key nodes:**\n- **Set Context**: Extracts user_id, page_id, message, and token\n- **Seen & Typing**: Sends activity indicators to Messenger\n- **Conversation Memory**: Maintains last 10 messages per user\n- **Process Merged Message**: AI Agent with customizable system prompt\n- **Gemini Flash**: Google's language model for fast responses\n\n**Customization:** Edit the system prompt in \"Process Merged Message\" to change bot personality, tone, and behavior."},"typeVersion":1},{"id":"393b3906-3fb4-4a53-8dfe-0ba7056311b7","name":"Sticky Note - Section 3","type":"n8n-nodes-base.stickyNote","position":[1936,384],"parameters":{"color":7,"width":848,"height":752,"content":"## 3. Format & Send Response\n[Read more about the HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest)\n\nAI responses are formatted for Facebook Messenger compatibility and sent back to users via the Graph API.\n\n**Key nodes:**\n- **Cut if reply more than 2000 characters**: Strips markdown, truncates long messages\n- **Send Text**: Sends formatted message via Facebook Graph API\n\n**Messenger limits:** Maximum 2000 characters per message. This workflow truncates at 1900 with safety buffer."},"typeVersion":1},{"id":"34ad6797-0ba9-4800-9e15-4523aa86779f","name":"Set Context","type":"n8n-nodes-base.set","position":[992,800],"parameters":{"options":{},"assignments":{"assignments":[{"id":"user-id","name":"user_id","type":"string","value":"={{ $json.body.entry[0].messaging[0].sender.id }}"},{"id":"page-id","name":"page_id","type":"string","value":"={{ $json.body.entry[0].messaging[0].recipient.id }}"},{"id":"message-text","name":"message","type":"string","value":"={{ $json.body.entry[0].messaging[0].message.text }}"},{"id":"timestamp","name":"timestamp","type":"number","value":"={{ $json.body.entry[0].time }}"},{"id":"8393b92e-a5b2-4cec-b718-975963a08143","name":"page_access_token","type":"string","value":"YOUR_PAGE_ACCESS_TOKEN_HERE (EEa...)"}]}},"typeVersion":3.4},{"id":"f2a1a53f-1ff2-4d8b-ab8b-dfc89c2d3e77","name":"Facebook Webhook","type":"n8n-nodes-base.webhook","position":[272,800],"webhookId":"b12c5f3e-a7d7-4f0e-bd18-7b40f7c5f0d3","parameters":{"path":"nguyenthieutoan-facebook-page-1234","options":{},"responseMode":"responseNode","multipleMethods":true},"typeVersion":2.1},{"id":"e31b61ba-cddc-4d38-866c-d3e1affaaebb","name":"Confirm Webhook","type":"n8n-nodes-base.respondToWebhook","position":[496,688],"parameters":{"options":{"responseCode":200,"responseHeaders":{"entries":[{"name":"Content-Type","value":"text/plain"}]}},"respondWith":"text","responseBody":"={{ $json.query[\"hub.challenge\"] }}"},"typeVersion":1.5},{"id":"a4340780-79d9-436a-99c6-ec183db134e0","name":"Send Text","type":"n8n-nodes-base.httpRequest","position":[2208,800],"parameters":{"url":"=https://graph.facebook.com/v24.0/{{ $('Set Context').first().json.page_id }}/messages","method":"POST","options":{},"jsonBody":"={\n  \"recipient\": {\n    \"id\": \"{{ $('Set Context').first().json.user_id }}\"\n  },\n  \"messaging_type\": \"RESPONSE\",\n  \"message\": {\n    \"text\": {{JSON.stringify($json.page_message)}},\n    \"metadata\": \"bot_rep\"\n  }\n}","sendBody":true,"sendQuery":true,"specifyBody":"json","queryParameters":{"parameters":[{"name":"access_token","value":"={{ $('Set Context').first().json.page_access_token}}"}]}},"typeVersion":4.3},{"id":"da879b0b-f3ee-41e8-ac70-b1eb4dddcbb0","name":"Is message","type":"n8n-nodes-base.if","position":[496,816],"parameters":{"options":{},"conditions":{"options":{"version":3,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"50b4865e-d2b2-4c44-8d7b-5da029d0e9c4","operator":{"type":"string","operation":"exists","singleValue":true},"leftValue":"={{ $json.body.entry[0].messaging[0].message.text }}","rightValue":""}]}},"typeVersion":2.3},{"id":"a58a6832-7628-4f52-b55c-4a07f01a8ed9","name":"Typing","type":"n8n-nodes-base.httpRequest","onError":"continueRegularOutput","position":[1408,800],"parameters":{"url":"=https://graph.facebook.com/v24.0/{{ $('Set Context').first().json.page_id }}/messages","method":"POST","options":{"timeout":1000},"jsonBody":"={\n  \"recipient\": {\n    \"id\": \"{{ $('Set Context').first().json.user_id }}\"\n  },\n  \"sender_action\": \"typing_on\"\n}\n","sendBody":true,"sendQuery":true,"specifyBody":"json","queryParameters":{"parameters":[{"name":"access_token","value":"={{ $('Set Context').first().json.page_access_token }}"}]}},"typeVersion":4.3},{"id":"c6317f03-64a7-4482-8c2f-6f2abda7244d","name":"From user?","type":"n8n-nodes-base.if","position":[720,816],"parameters":{"options":{},"conditions":{"options":{"version":3,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"50b4865e-d2b2-4c44-8d7b-5da029d0e9c4","operator":{"type":"string","operation":"equals"},"leftValue":"={{ $json.body.entry[0].id }}","rightValue":"={{ $json.body.entry[0].messaging[0].recipient.id }}"}]}},"typeVersion":2.3},{"id":"cdf77064-a608-421f-963d-29edc2d77ff6","name":"Seen","type":"n8n-nodes-base.httpRequest","onError":"continueRegularOutput","position":[1200,800],"parameters":{"url":"=https://graph.facebook.com/v24.0/{{ $('Set Context').item.json.page_id }}/messages","method":"POST","options":{"timeout":1000},"jsonBody":"={\n  \"recipient\": {\n    \"id\": \"{{ $('Set Context').item.json.user_id }}\"\n  },\n  \"sender_action\": \"mark_seen\"\n} ","sendBody":true,"sendQuery":true,"specifyBody":"json","queryParameters":{"parameters":[{"name":"access_token","value":"={{ $('Set Context').item.json.page_access_token }}"}]}},"typeVersion":4.3},{"id":"d71c3244-8c5d-43ae-8a67-a959b2a6b0e0","name":"Cut if reply more than 2000 characters","type":"n8n-nodes-base.code","position":[2016,800],"parameters":{"jsCode":"// Normalize AI response before sending to Messenger\nconst input_data = $input.first().json;\nconst ai_text = input_data.output || input_data.text || '';\nlet clean_text = ai_text.trim();\n\n// Limit message length (Messenger: 2000 characters)\nif (clean_text.length > 1900) {\n  clean_text = clean_text.slice(0, 1897) + '...';\n}\n\n// Remove unsupported markdown formatting\nclean_text = clean_text\n  .replace(/\\*\\*(.+?)\\*\\*/g, '$1')   // remove bold\n  .replace(/\\*(.+?)\\*/g, '$1')       // remove italic\n  .replace(/```[\\s\\S]*?```/g, block => block.replace(/```\\w*\\n?/g, '')) // remove code blocks\n  .replace(/`(.+?)`/g, '$1');        // remove inline code\n\n// Return final result\nreturn {\n  json: {\n    page_message: clean_text\n  }\n};\n"},"typeVersion":2},{"id":"056d8116-080d-4348-9971-82aad2555323","name":"Sticky Note - Main Overview","type":"n8n-nodes-base.stickyNote","position":[-400,128],"parameters":{"width":624,"height":1008,"content":"## Try It Out!\n### This n8n template demonstrates how to build a simple but functional AI-powered customer service chatbot for Facebook Messenger using Google Gemini with conversation memory.\n\nThis is a lightweight version perfect for getting started with AI chatbots. For production use with advanced features like smart batching and human takeover, check the upgrade workflows linked below.\n\n### How it works\n* Facebook Webhook receives incoming messages from Messenger and validates them\n* The workflow filters out non-message events and bot echo messages\n* Set Context node extracts essential data: user_id, page_id, message text\n* Seen & Typing indicators show users the bot is actively responding\n* Simple Memory maintains the last 10 messages per user for context\n* Google Gemini processes the message with full conversation history\n* AI response is formatted for Messenger (strips markdown, truncates if >2000 chars)\n* Final message is sent back to user via Facebook Graph API\n\n### How to use\n* The webhook trigger automatically activates when users message your Facebook Page\n* Customize the AI personality by editing the system prompt in \"Process Merged Message\" node\n* Replace `YOUR_PAGE_ACCESS_TOKEN_HERE` in Set Context with your actual Facebook Page Access Token\n* Deploy on a publicly accessible n8n instance for Facebook to reach your webhook\n\n### Requirements\n* n8n instance (self-hosted or cloud) with public URL\n* Facebook App with Messenger product enabled\n* Facebook Page Access Token\n* Google Gemini API key\n\n### Author & Support\nCreated by **Nguyễn Thiệu Toàn** (Jay Nguyen)\n- Website: [nguyenthieutoan.com](https://nguyenthieutoan.com)\n- Email: me@nguyenthieutoan.com\n- n8n Workflows: [n8n.io/creators/nguyenthieutoan](https://n8n.io/creators/nguyenthieutoan)\n\n### LICENCE\nThis template is shared free of charge. Copyright belongs to [Nguyễn Thiệu Toàn](https://nguyenthieutoan.com) (n8n creator at n8n.io). Any copying or modification must credit the author."},"typeVersion":1},{"id":"ab7be654-afd9-46d7-8982-ac6448689813","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[928,960],"parameters":{"color":3,"width":320,"height":208,"content":"## ⚠️ Important!\n\nReplace `YOUR_PAGE_ACCESS_TOKEN_HERE` in the **Set Context node** with your actual Facebook Page Access Token.\n\nGet your token at:\n[developers.facebook.com](https://developers.facebook.com)"},"typeVersion":1},{"id":"19e6d753-7532-4a65-9eec-6c5f53730763","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[2800,384],"parameters":{"color":3,"width":336,"height":752,"content":"## Limitations & When to Upgrade\n\n⚠️ **This is a simple version** with basic features:\n\n**Current limitations:**\n- No smart batching (responds to each message immediately)\n- No human takeover detection (bot continues even when admin replies)\n- Basic memory (last 10 messages only, not production-ready)\n- Basic formatting (strips all markdown, brutal truncation)\n\n**Consider upgrading when you need:**\n- Production deployment with reliable data persistence\n- Analytics and conversation history tracking\n- Professional formatting with bold, italic, code blocks\n- Smart message batching (waits for user to finish typing)\n- Human handoff capability (bot pauses when admin joins)\n- Long message support (>2000 characters with smart splitting)\n\n**Upgrade workflows:**\n- **[Smart message batching workflow](https://n8n.io/workflows/9192)**: Prevents spam by waiting for user to finish\n- **[Smart human takeover workflow](https://n8n.io/workflows/11920)**: Auto-pauses bot when admin intervenes"},"typeVersion":1},{"id":"36bf4d1f-8826-4efb-803b-4073453ef959","name":"Switch","type":"n8n-nodes-base.switch","position":[2400,800],"parameters":{"rules":{"values":[{"outputKey":"Image exist?","conditions":{"options":{"version":3,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"83305cab-93f2-418d-8a1d-2cf158844c14","operator":{"type":"string","operation":"contains"},"leftValue":"={{ $('Process Merged Message').item.json.output.photo }}","rightValue":"http"}]},"renameOutput":true},{"outputKey":"Video exist?","conditions":{"options":{"version":3,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"156dbd55-5bbb-4974-bc42-01b97031851d","operator":{"type":"string","operation":"contains"},"leftValue":"={{ $('Process Merged Message').item.json.output.video }}","rightValue":"http"}]},"renameOutput":true}]},"options":{}},"typeVersion":3.4},{"id":"83590d96-f06d-4cd5-a395-e1f9158f12f0","name":"Send image","type":"n8n-nodes-base.httpRequest","position":[2656,736],"parameters":{"url":"=https://graph.facebook.com/v24.0/{{ $('Set Context').first().json.page_id }}/messages","method":"POST","options":{},"jsonBody":"={\n  \"recipient\": {\n    \"id\": \"{{ $('Set Context').first().json.user_id }}\"\n  },\n  \"messaging_type\": \"RESPONSE\",\n  \"message\": {\n    \"attachment\": {\n      \"type\": \"image\",\n      \"payload\": {\n        \"url\": \"{{ $('Process Merged Message').item.json.output.photo }}\",\n        \"is_reusable\": true\n      }\n    }\n  }\n}\n","sendBody":true,"sendQuery":true,"specifyBody":"json","queryParameters":{"parameters":[{"name":"access_token","value":"={{ $('Set Context').first().json.page_access_token}}"}]}},"typeVersion":4.3},{"id":"ee63e73b-adcb-4186-83fa-b3e97a54ca76","name":"Send video","type":"n8n-nodes-base.httpRequest","position":[2656,912],"parameters":{"url":"=https://graph.facebook.com/v24.0/{{ $('Set Context').first().json.page_id }}/messages","method":"POST","options":{},"jsonBody":"={\n  \"recipient\": {\n    \"id\": \"{{ $('Set Context').first().json.user_id }}\"\n  },\n  \"messaging_type\": \"RESPONSE\",\n  \"message\": {\n    \"attachment\": {\n      \"type\": \"video\",\n      \"payload\": {\n        \"url\": \"{{ $('Process Merged Message').item.json.output.video }}\",\n        \"is_reusable\": true\n      }\n    }\n  }\n}\n","sendBody":true,"sendQuery":true,"specifyBody":"json","queryParameters":{"parameters":[{"name":"access_token","value":"={{ $('Set Context').first().json.page_access_token}}"}]}},"typeVersion":4.3},{"id":"f6e0d328-2534-4911-930f-45f760e0c7d6","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[240,128],"parameters":{"color":3,"width":672,"height":240,"content":"## ☕BUY ME A COFFEE?\nHi! I am  **Nguyễn Thiệu Toàn (or you can call me Jay / Jay Nguyen)** - a Verified n8n Creator. Thank you for using this template!\nThis workflow is shared with you for free. If it brings value to your work or saves you time, you can buy me a coffee as a small token of appreciation here:  **[My Donate Website](https://nguyenthieutoan.com/payment/)** *(PayPal or Momo)*\n\n*You can get more my useful workflow:* **[Click here](https://n8n.io/creators/nguyenthieutoan/)**"},"typeVersion":1},{"id":"3aa761a2-3c51-48d7-9209-699373e1a046","name":"Conversation Memory","type":"@n8n/n8n-nodes-langchain.memoryBufferWindow","position":[1616,976],"parameters":{"sessionKey":"={{ $('Set Context').item.json.user_id }} {{ $('Set Context').item.json.page_id }}","sessionIdType":"customKey","contextWindowLength":10},"typeVersion":1.3},{"id":"45629f15-873d-4f05-8b51-6d15fb6d1295","name":"Gemini Flash","type":"@n8n/n8n-nodes-langchain.lmChatGoogleGemini","position":[1504,976],"parameters":{"options":{}},"credentials":{"googlePalmApi":{"id":"ghryQ2MjpL9RracO","name":"jayracroi@gmail.com Paid 1"}},"typeVersion":1},{"id":"5aee82ff-5b54-4271-99c1-a70986736765","name":"Process Merged Message","type":"@n8n/n8n-nodes-langchain.agent","position":[1616,800],"parameters":{"text":"={{ $('Set Context').item.json.message }}","options":{"systemMessage":"=## Persona\nYou are Jenix, the intelligent Customer Success Consultant for GenStaff (founded by Mr. Nguyễn Thiệu Toàn - Jay Nguyen). Your mission is to assist clients in understanding and adopting AI & Automation solutions to achieve Operational Excellence.\n\n## Media Repository\nList:\nHomepage Image Link (trang chủ Nguyễn Thiệu Toàn): https://nguyenthieutoan.com/wp-content/uploads/2026/02/Screenshot_2-2-2026_2077_nguyenthieutoan.com_.webp\nVideo Demo Smart Message Merge (Gom tin nhắn thông minh): https://nguyenthieutoan.com/wp-content/uploads/2025/10/IMG_1093.mp4\n\n## Core Directives\n1. **Consultative Selling:** Do not just answer; guide the user. Explain how GenStaff's solutions (Automation workflows, AI Chatbots, Training) solve their specific pain points.\n2. **Scheduling:** If the user shows high interest or the query is complex, suggest booking a consultation with Mr. Jay Nguyen.\n3. **Tone & Style:**\n   - **Vietnamese:** Use \"em\" (self) and \"anh/chị\" (client). Tone: Professional, dedicated, helpful.\n   - **English:** Professional \"I/You\". Tone: Efficient, clear, business-oriented.\n   - **Personality:** Friendly but sharp. Demonstrate \"Operational Excellence\" by being concise and precise.\n\n## Operational Rules\n- **Language Consistency:** STRICTLY reply in the same language as the user's latest input.\n- **First Interaction:**\n  - VN: \"Chào anh/chị, em là Jenix, trợ lý AI của anh Nguyễn Thiệu Toàn (Jay Nguyen). Em có thể giúp anh/chị tối ưu vận hành với các giải pháp Tự động hóa & AI như thế nào ạ?\"\n  - EN: \"Hello, I'm Jenix, the AI assistant of Mr. Jay Nguyen at GenStaff. How can I assist you with AI & Automation solutions today?\"\n- **Subsequent Interactions:** Go straight to the point. No re-introductions.\n- **Media Logic:** Only include `photo` or `video` links in the JSON output if the user is discussing a specific service listed in the Repository. Otherwise, return `null`.\n\n## Output Format Specification\nYou must output a **single valid JSON object**. Do not include markdown formatting.\n\n{\n  \"text\": \"String. The response content. Plain text only, under 1800 characters. No markdown.\",\n  \"photo\": \"String or Null. The URL from the Media Repository\",\n  \"video\": \"String or Null. The URL from the Media Repository\"\n}\nCurrent Context\nDate/Time: {{ $now }}"},"promptType":"define","hasOutputParser":true},"typeVersion":3.1},{"id":"8efa21c9-17f1-4306-93d1-475bb9ce1258","name":"Structured Output Parser","type":"@n8n/n8n-nodes-langchain.outputParserStructured","position":[1776,1008],"parameters":{"autoFix":true,"jsonSchemaExample":"{\n\t\"text\": \"California\",\n\t\"photo\": \"https://....\",\n    \"video\": \"https://...\"\n}"},"typeVersion":1.3}],"pinData":{},"connections":{"Seen":{"main":[[{"node":"Typing","type":"main","index":0}]]},"Switch":{"main":[[{"node":"Send image","type":"main","index":0}],[{"node":"Send video","type":"main","index":0}]]},"Typing":{"main":[[{"node":"Process Merged Message","type":"main","index":0}]]},"Send Text":{"main":[[{"node":"Switch","type":"main","index":0}]]},"From user?":{"main":[[{"node":"Set Context","type":"main","index":0}]]},"Is message":{"main":[[{"node":"From user?","type":"main","index":0}]]},"Set Context":{"main":[[{"node":"Seen","type":"main","index":0}]]},"Gemini Flash":{"ai_languageModel":[[{"node":"Process Merged Message","type":"ai_languageModel","index":0},{"node":"Structured Output Parser","type":"ai_languageModel","index":0}]]},"Facebook Webhook":{"main":[[{"node":"Confirm Webhook","type":"main","index":0}],[{"node":"Confirm Webhook","type":"main","index":0},{"node":"Is message","type":"main","index":0}]]},"Conversation Memory":{"ai_memory":[[{"node":"Process Merged Message","type":"ai_memory","index":0}]]},"Process Merged Message":{"main":[[{"node":"Cut if reply more than 2000 characters","type":"main","index":0}]]},"Structured Output Parser":{"ai_outputParser":[[{"node":"Process Merged Message","type":"ai_outputParser","index":0}]]},"Cut if reply more than 2000 characters":{"main":[[{"node":"Send Text","type":"main","index":0}]]}}},"lastUpdatedBy":29,"workflowInfo":{"nodeCount":23,"nodeTypes":{"n8n-nodes-base.if":{"count":2},"n8n-nodes-base.set":{"count":1},"n8n-nodes-base.code":{"count":1},"n8n-nodes-base.switch":{"count":1},"n8n-nodes-base.webhook":{"count":1},"n8n-nodes-base.stickyNote":{"count":7},"n8n-nodes-base.httpRequest":{"count":5},"@n8n/n8n-nodes-langchain.agent":{"count":1},"n8n-nodes-base.respondToWebhook":{"count":1},"@n8n/n8n-nodes-langchain.lmChatGoogleGemini":{"count":1},"@n8n/n8n-nodes-langchain.memoryBufferWindow":{"count":1},"@n8n/n8n-nodes-langchain.outputParserStructured":{"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":19,"icon":"file:httprequest.svg","name":"n8n-nodes-base.httpRequest","codex":{"data":{"alias":["API","Request","URL","Build","cURL"],"resources":{"generic":[{"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/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content 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/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"url":"https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"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/world-poetry-day-workflow/","icon":"📜","label":"Celebrating World Poetry Day with a daily poem in Telegram"},{"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/automate-designs-with-bannerbear-and-n8n/","icon":"🎨","label":"Automate Designs with Bannerbear and n8n"},{"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/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/how-to-use-the-http-request-node-the-swiss-army-knife-for-workflow-automation/","icon":"🧰","label":"How to use the HTTP Request Node - The Swiss Army Knife for Workflow Automation"},{"url":"https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"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/automations-for-activists/","icon":"✨","label":"How Common Knowledge use workflow automation for activism"},{"url":"https://n8n.io/blog/creating-scheduled-text-affirmations-with-n8n/","icon":"🤟","label":"Creating scheduled text affirmations with n8n"},{"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.httprequest/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"output\"]","defaults":{"name":"HTTP Request","color":"#0004F5"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00MCAyMEM0MCA4Ljk1MzE0IDMxLjA0NjkgMCAyMCAwQzguOTUzMTQgMCAwIDguOTUzMTQgMCAyMEMwIDMxLjA0NjkgOC45NTMxNCA0MCAyMCA0MEMzMS4wNDY5IDQwIDQwIDMxLjA0NjkgNDAgMjBaTTIwIDM2Ljk0NThDMTguODg1MiAzNi45NDU4IDE3LjEzNzggMzUuOTY3IDE1LjQ5OTggMzIuNjk4NUMxNC43OTY0IDMxLjI5MTggMTQuMTk2MSAyOS41NDMxIDEzLjc1MjYgMjcuNjg0N0gyNi4xODk4QzI1LjgwNDUgMjkuNTQwMyAyNS4yMDQ0IDMxLjI5MDEgMjQuNTAwMiAzMi42OTg1QzIyLjg2MjIgMzUuOTY3IDIxLjExNDggMzYuOTQ1OCAyMCAzNi45NDU4Wk0xMi45MDY0IDIwQzEyLjkwNjQgMjEuNjA5NyAxMy4wMDg3IDIzLjE2NCAxMy4yMDAzIDI0LjYzMDVIMjYuNzk5N0MyNi45OTEzIDIzLjE2NCAyNy4wOTM2IDIxLjYwOTcgMjcuMDkzNiAyMEMyNy4wOTM2IDE4LjM5MDMgMjYuOTkxMyAxNi44MzYgMjYuNzk5NyAxNS4zNjk1SDEzLjIwMDNDMTMuMDA4NyAxNi44MzYgMTIuOTA2NCAxOC4zOTAzIDEyLjkwNjQgMjBaTTIwIDMuMDU0MTlDMjEuMTE0OSAzLjA1NDE5IDIyLjg2MjIgNC4wMzA3OCAyNC41MDAxIDcuMzAwMzlDMjUuMjA2NiA4LjcxNDA4IDI1LjgwNzIgMTAuNDA2NyAyNi4xOTIgMTIuMzE1M0gxMy43NTAxQzE0LjE5MzMgMTAuNDA0NyAxNC43OTQyIDguNzEyNTQgMTUuNDk5OCA3LjMwMDY0QzE3LjEzNzcgNC4wMzA4MyAxOC44ODUxIDMuMDU0MTkgMjAgMy4wNTQxOVpNMzAuMTQ3OCAyMEMzMC4xNDc4IDE4LjQwOTkgMzAuMDU0MyAxNi44NjE3IDI5LjgyMjcgMTUuMzY5NUgzNi4zMDQyQzM2LjcyNTIgMTYuODQyIDM2Ljk0NTggMTguMzk2NCAzNi45NDU4IDIwQzM2Ljk0NTggMjEuNjAzNiAzNi43MjUyIDIzLjE1OCAzNi4zMDQyIDI0LjYzMDVIMjkuODIyN0MzMC4wNTQzIDIzLjEzODMgMzAuMTQ3OCAyMS41OTAxIDMwLjE0NzggMjBaTTI2LjI3NjcgNC4yNTUxMkMyNy42MzY1IDYuMzYwMTkgMjguNzExIDkuMTMyIDI5LjM3NzQgMTIuMzE1M0gzNS4xMDQ2QzMzLjI1MTEgOC42NjggMzAuMTA3IDUuNzgzNDYgMjYuMjc2NyA0LjI1NTEyWk0xMC42MjI2IDEyLjMxNTNINC44OTI5M0M2Ljc1MTQ3IDguNjY3ODQgOS44OTM1MSA1Ljc4MzQxIDEzLjcyMzIgNC4yNTUxM0MxMi4zNjM1IDYuMzYwMjEgMTEuMjg5IDkuMTMyMDEgMTAuNjIyNiAxMi4zMTUzWk0zLjA1NDE5IDIwQzMuMDU0MTkgMjEuNjAzIDMuMjc3NDMgMjMuMTU3NSAzLjY5NDg0IDI0LjYzMDVIMTAuMTIxN0M5Ljk0NjE5IDIzLjE0MiA5Ljg1MjIyIDIxLjU5NDMgOS44NTIyMiAyMEM5Ljg1MjIyIDE4LjQwNTcgOS45NDYxOSAxNi44NTggMTAuMTIxNyAxNS4zNjk1SDMuNjk0ODRDMy4yNzc0MyAxNi44NDI1IDMuMDU0MTkgMTguMzk3IDMuMDU0MTkgMjBaTTI2LjI3NjYgMzUuNzQyN0MyNy42MzY1IDMzLjYzOTMgMjguNzExIDMwLjg2OCAyOS4zNzc0IDI3LjY4NDdIMzUuMTA0NkMzMy4yNTEgMzEuMzMyMiAzMC4xMDY4IDM0LjIxNzkgMjYuMjc2NiAzNS43NDI3Wk0xMy43MjM0IDM1Ljc0MjdDOS44OTM2OSAzNC4yMTc5IDYuNzUxNTUgMzEuMzMyNCA0Ljg5MjkzIDI3LjY4NDdIMTAuNjIyNkMxMS4yODkgMzAuODY4IDEyLjM2MzUgMzMuNjM5MyAxMy43MjM0IDM1Ljc0MjdaIiBmaWxsPSIjM0E0MkU5Ii8+Cjwvc3ZnPgo="},"displayName":"HTTP Request","typeVersion":4,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core 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":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":47,"icon":"file:webhook.svg","name":"n8n-nodes-base.webhook","codex":{"data":{"alias":["HTTP","API","Build","WH"],"resources":{"generic":[{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content with n8n"},{"url":"https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"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/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"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/how-a-digital-strategist-uses-n8n-for-online-marketing/","icon":"💻","label":"How a digital strategist uses n8n for online marketing"},{"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/how-to-automatically-give-kudos-to-contributors-with-github-slack-and-n8n/","icon":"👏","label":"How to automatically give kudos to contributors with GitHub, Slack, 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/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/creating-custom-incident-response-workflows-with-n8n/","label":"How to automate every step of an incident response workflow"},{"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/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"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"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"trigger\"]","defaults":{"name":"Webhook"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"},"displayName":"Webhook","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":112,"icon":"fa:map-signs","name":"n8n-nodes-base.switch","codex":{"data":{"alias":["Router","If","Path","Filter","Condition","Logic","Branch","Case"],"resources":{"generic":[{"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/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/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/","icon":"👦","label":"Build your own virtual assistant with n8n: A step by step guide"},{"url":"https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/","icon":"🏷️","label":"How to automatically manage contributions to open-source projects"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.switch/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"transform\"]","defaults":{"name":"Switch","color":"#506000"},"iconData":{"icon":"map-signs","type":"icon"},"displayName":"Switch","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":535,"icon":"file:webhook.svg","name":"n8n-nodes-base.respondToWebhook","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.respondtowebhook/"}]},"categories":["Core Nodes","Utility"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"transform\"]","defaults":{"name":"Respond to Webhook"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"},"displayName":"Respond to Webhook","typeVersion":2,"nodeCategories":[{"id":7,"name":"Utility"},{"id":9,"name":"Core Nodes"}]},{"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":1179,"icon":"fa:code","name":"@n8n/n8n-nodes-langchain.outputParserStructured","codex":{"data":{"alias":["json","zod"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.outputparserstructured/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Output Parsers"]}}},"group":"[\"transform\"]","defaults":{"name":"Structured Output Parser"},"iconData":{"icon":"code","type":"icon"},"displayName":"Structured Output Parser","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":[]}}