AutomationFlowsAI & RAG › Ai-powered Whatsapp Chatbot with Venom Bot & Google Gemini (no Official Api)

Ai-powered Whatsapp Chatbot with Venom Bot & Google Gemini (no Official Api)

ByObisDev @obisdev on n8n.io

**Get Started **

Webhook trigger★★★★☆ complexityAI-powered19 nodesGoogle DocsHTTP RequestAgentGoogle Gemini ChatMemory Buffer Window
AI & RAG Trigger: Webhook Nodes: 19 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #5736 — we link there as the canonical source.

This workflow follows the Agent → Google Docs recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "9b1d5dc1-88ef-4c49-a287-9f22d10689c8",
      "name": "Process Message",
      "type": "n8n-nodes-base.code",
      "position": [
        40,
        40
      ],
      "parameters": {
        "jsCode": "// Extract and validate incoming WhatsApp message data\nconst incomingData = $input.first().json;\n\n// Extract message details\nconst from = incomingData.body.from || '';\nconst message = incomingData.body.message || '';\nconst messageType = incomingData.body.messageType || 'text';\nconst timestamp = incomingData.body.timestamp || new Date().toISOString();\nconst businessName = incomingData.body.businessName || 'Your Business';\n\n// Clean phone number for logging\nconst cleanPhone = from.replace('@c.us', '');\n\n// Log incoming message\nconsole.log(`\ud83d\udce5 Processing message from ${cleanPhone}: ${message}`);\n\n// Validate message\nif (!message || message.trim() === '') {\n  return [{\n    json: {\n      error: 'Empty message received',\n      from: from,\n      timestamp: timestamp\n    }\n  }];\n}\n\n// Skip if message is too long (over 1000 characters)\nif (message.length > 1000) {\n  return [{\n    json: {\n      error: 'Message too long',\n      from: from,\n      message: 'Sorry, your message is too long. Please keep it under 1000 characters.',\n      timestamp: timestamp\n    }\n  }];\n}\n\n// Prepare data for next nodes\nreturn [{\n  json: {\n    from: from,\n    message: message.trim(),\n    messageType: messageType,\n    timestamp: timestamp,\n    businessName: businessName,\n    cleanPhone: cleanPhone\n  }\n}];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "57c02336-984d-4f9f-ac40-e8343217697f",
      "name": "Get Knowledge Base",
      "type": "n8n-nodes-base.googleDocs",
      "position": [
        280,
        -60
      ],
      "parameters": {
        "operation": "get",
        "documentURL": "1cxGMdYYKtMAADRQiJsV4tmITsY25Z3b9FarxdNmcKXk"
      },
      "credentials": {
        "googleDocsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "1cc28857-f848-46e7-a9f8-55c53e9c645e",
      "name": "Extract Knowledge",
      "type": "n8n-nodes-base.code",
      "position": [
        500,
        -60
      ],
      "parameters": {
        "jsCode": "// Get message data from previous node (Process Message)\nconst messageData = $(\"Process Message\").first().json;\n\n// Get knowledge base content from the Google Docs node\nconst docData = $input.first().json;\n\nlet knowledgeBase = \"\";\n\n// Check if the content exists and is a string\nif (docData && typeof docData.content === \"string\") {\n  knowledgeBase = docData.content;\n}\n\n// Clean up the knowledge base text (optional, but good practice)\nknowledgeBase = knowledgeBase\n  .replace(/\\n\\s*\\n/g, \"\\n\") // Remove multiple newlines\n  .replace(/\\s+/g, \" \") // Replace multiple spaces with single space\n  .trim();\n\nconsole.log(`\ud83d\udcda Knowledge base loaded: ${knowledgeBase.length} characters`);\n\n// Prepare data for next nodes, combining message and knowledge base\nreturn [{\n  json: {\n    ...messageData,\n    knowledgeBase: knowledgeBase\n  }\n}];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "92914414-6165-4352-866b-f7872ad8bab4",
      "name": "Format Response",
      "type": "n8n-nodes-base.code",
      "position": [
        1096,
        -60
      ],
      "parameters": {
        "jsCode": "// Process Gemini AI response and prepare for WhatsApp\nconst messageData = $(\"Extract Knowledge\").first().json;\nconst aiResponse = $input.first().json;\n\n// Extract the AI response text\nlet responseText = \"\";\n\n// Check if the AI response has an 'output' field\nif (aiResponse && aiResponse.output) {\n  responseText = aiResponse.output.trim();\n} else if (aiResponse && aiResponse.text) {\n  // Fallback for older Gemini node versions or different structures\n  responseText = aiResponse.text.trim();\n} else if (aiResponse && aiResponse.response) {\n  // Another fallback\n  responseText = aiResponse.response.trim();\n} else {\n  responseText = \"Sorry, I\\\"m having trouble processing your request right now. Please try again later.\";\n}\n\n// Ensure response is not too long for WhatsApp\nif (responseText.length > 1500) {\n  responseText = responseText.substring(0, 1450) + \"... (continued in next message)\";\n}\n\n// Log the response\nconsole.log(`\ud83e\udd16 AI Response for ${messageData.cleanPhone}: ${responseText.substring(0, 100)}...`);\n\n// Prepare response for WhatsApp bot\nreturn [{\n  json: {\n    to: messageData.from,\n    message: responseText,\n    timestamp: new Date().toISOString(),\n    originalMessage: messageData.message,\n    businessName: messageData.businessName\n  }\n}];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "6cec684a-4026-42cb-9795-1378b1bcc493",
      "name": "Send to WhatsApp",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1316,
        -60
      ],
      "parameters": {
        "url": "http://0.0.0.0:3000/webhook/send-message",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "sendHeaders": true,
        "authentication": "genericCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "to",
              "value": "={{ $json.to }}"
            },
            {
              "name": "message",
              "value": "={{ $json.message }}"
            }
          ]
        },
        "genericAuthType": "httpBearerAuth",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer YOUR_TOKEN_HERE"
            },
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        }
      },
      "credentials": {
        "httpBearerAuth": {
          "name": "<your credential>"
        },
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "3d28ad8d-d9ef-47b1-b961-a31493641721",
      "name": "Webhook Response",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        1536,
        -60
      ],
      "parameters": {
        "options": {},
        "respondWith": "json",
        "responseBody": "={\n  \"success\": true,\n  \"message\": \"Message processed successfully\",\n  \"timestamp\": \"{{ $json.timestamp }}\",\n  \"to\": \"{{ $json.to }}\"\n}"
      },
      "typeVersion": 1
    },
    {
      "id": "6459dfa3-94c7-456c-8a02-763edd3ab1a6",
      "name": "Check for Errors",
      "type": "n8n-nodes-base.if",
      "position": [
        -60,
        340
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 1,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "error-condition",
              "operator": {
                "type": "string",
                "operation": "notEmpty"
              },
              "leftValue": "={{ $json.error }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "97884f27-0769-477a-9fb9-27361ecdf945",
      "name": "Send Error Response",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        200,
        320
      ],
      "parameters": {
        "url": "http://srv892192.hstgr.cloud/webhook/send-message",
        "options": {
          "timeout": 10000
        },
        "jsonBody": "={\n  \"to\": \"{{ $json.from }}\",\n  \"message\": \"{{ $json.message || 'Sorry, I couldn\\'t process your message. Please try again later.' }}\"\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpBearerAuth"
      },
      "credentials": {
        "httpBearerAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "d0f921a3-e5b9-4432-bd4b-0b497952030d",
      "name": "Error Webhook Response",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        420,
        320
      ],
      "parameters": {
        "options": {},
        "respondWith": "json",
        "responseBody": "={\n  \"success\": false,\n  \"error\": \"{{ $json.error }}\",\n  \"timestamp\": \"{{ $json.timestamp }}\"\n}"
      },
      "typeVersion": 1
    },
    {
      "id": "d89ea320-b376-4786-a79e-78294d2f2e74",
      "name": "AI Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        720,
        -160
      ],
      "parameters": {
        "text": "={{ $json.message }}",
        "options": {
          "systemMessage": "You are an customer service representative for Adeola Commodities Ltd, a leading agricultural products and equipment distributor based in Lagos, Nigeria. You are knowledgeable, professional, and helpful in assisting customers with their agricultural needs.\nCompany Overview:\n\nEstablished in 2012, serving wholesale and retail markets across Nigeria\nHeadquarters: 14 Agric Road, Ikeja, Lagos\nAdditional branches in Ibadan and Port Harcourt\nDelivery available to all 36 states in Nigeria\nOperating hours: Monday to Saturday, 8:00 AM to 6:00 PM WAT\n\nYour Role:\n\nProvide accurate product information and pricing\nAssist with order inquiries and delivery details\nOffer agricultural advice and product recommendations\nHandle customer complaints and feedback professionally\nPromote bulk discounts and seasonal offers when relevant\n\nCommunication Style:\n\nBe warm, professional, and respectful\nUse clear, simple language\nShow genuine interest in helping customers succeed\nAcknowledge the customer's agricultural goals and challenges\nBe patient and thorough in explanations\n\nKey Guidelines:\n\nAlways greet customers warmly and introduce yourself as representing Adeola Commodities Ltd\nListen to customer needs before making recommendations\nProvide specific product details, pricing, and availability when requested\nExplain delivery options and costs clearly\nOffer bulk discounts for qualifying orders\nIf you don't know something, offer to connect them with our sales team\nEnd conversations by asking if there's anything else you can help with.\n\nHello! Welcome to Adeola Commodities Ltd.\nNOTE - ONLY USE HELLO IN THE FIRST MESSAGE. DO NOT REPEAT HELLO AGAIN AFTER CHAT HAS STARTED.\n\nNOTE - GIVE SHORT AND PRECISE ANSWER \n - your trusted partner in agricultural excellence since 2012! \ud83c\udf3e\nI'm here to help you with all your agricultural needs, from fresh farm produce and quality dairy products to modern farming equipment and tools. \n\nWhether you're a farmer looking to boost productivity, a retailer seeking reliable suppliers, or a household needing quality agricultural products, I'm here to assist you.\nWhat we offer:\n\ud83e\udd55 Farm Products: Yams, cassava, maize, rice, beans, fresh vegetables\n\ud83e\uddc0 Dairy Products: Fresh milk, cheese, butter, yogurt\n\ud83d\ude9c Agricultural Equipment: Tractors, ploughs, irrigation pumps, harvesting tools\nWhy choose us:\n\u2705 Competitive pricing with bulk discounts (10% off orders over \u20a6100,000)\n\u2705 Free delivery within Lagos for orders above \u20a650,000\n\u2705 Nationwide delivery to all 36 states\n\u2705 Fresh products sourced directly from over 200 local farmers\n\u2705 24/7 customer support\nHow can I help you today?\n\nBrowse our products and get pricing information\nPlace an order or check order status\nLearn about our delivery options\nGet farming tips and product recommendations\nInquire about bulk discounts for wholesale orders\n\nFeel free to ask me anything about our products, services, or how we can support your agricultural goals. I'm here to make your experience with Adeola Commodities Ltd exceptional!\nWhat would you like to know about our agricultural products and services?\n\nQuick Reference - Key Information\nContact Details:\n\nPhone: +1234567890\nEmail: user@example.com\n\nWebsite: www.adelaagrotech.com\n\nInstagram: https://www.instagram.com/agromachineboss_tillers_weeder/profilecard\n\nFacebook: Facebook: https://www.facebook.com/share/16RfS9kHpC/\n\nYouTube: https://youtube.com/@adela_agric_machines?si=NiaPKKVmJxApUdhk\n\nDelivery Information:\nFree delivery within Lagos for orders above \u20a650,000\nFlat rate of \u20a65,000 for other regions\nDelivery available to all 36 states\n\nBulk Discounts:\n\n10% off for purchases over \u20a6100,000\n15% off for orders exceeding \u20a6500,000\n\nSample Pricing (Current rates in NGN):\n\nYams: \u20a6500-900/kg (depending on size)\nRice: \u20a6350-400/kg\nMaize: \u20a6250/kg\nMilk: \u20a6400/liter\nCheese: \u20a6600-1100/block\nTractors: \u20a62,500,000/unit\nIrrigation pumps: \u20a660,000-80,000/unit\n\nOperating Hours:\nMonday to Saturday, 8:00 AM to 6:00 PM WAT\n{{ $json.message }}"
        },
        "promptType": "define"
      },
      "typeVersion": 2
    },
    {
      "id": "a83e7504-b239-4419-ae7a-de8deda865e8",
      "name": "Google Gemini Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        748,
        60
      ],
      "parameters": {
        "options": {},
        "modelName": "models/gemini-2.5-flash"
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "1b1d83ee-3492-4d4c-982c-ffb96b3398ec",
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -160,
        40
      ],
      "parameters": {
        "path": "whatsapp-incoming",
        "options": {},
        "httpMethod": "POST",
        "responseMode": "responseNode"
      },
      "typeVersion": 2
    },
    {
      "id": "9d21e890-8807-42bc-a00c-021b690cfee0",
      "name": "Simple Memory",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        868,
        60
      ],
      "parameters": {
        "sessionKey": "=={{ $(\"Process Message\").first().json.from }}",
        "sessionIdType": "customKey",
        "contextWindowLength": 10
      },
      "typeVersion": 1.3
    },
    {
      "id": "eb58e303-77ee-4119-97db-d1bc19aab4ca",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -180,
        -300
      ],
      "parameters": {
        "width": 400,
        "height": 480,
        "content": "## Webhook Trigger Receives incoming Message from Venom Bot server.\n \nThis section receives incoming WhatsApp messages via webhook, extracts key details (sender, message content), and performs initial validation (e.g., message length check). All incoming messages are then prepared for AI processing."
      },
      "typeVersion": 1
    },
    {
      "id": "301b6de2-0c22-4589-816e-350d98d498f1",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        240,
        -440
      ],
      "parameters": {
        "width": 440,
        "height": 620,
        "content": "## Memory Retriver \nThe workflow retrieves general knowledge from Google Docs and combines it with the user's message. The AI Agent, powered by Google Gemini and equipped with Simple Memory, uses this combined context to generate intelligent, persona-driven responses, maintaining conversational flow."
      },
      "typeVersion": 1
    },
    {
      "id": "ddf940f0-2449-454c-a795-810885c68879",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        700,
        -500
      ],
      "parameters": {
        "width": 540,
        "height": 1020,
        "content": "## Response Formatting.\n\nThe AI's generated response is formatted for WhatsApp, ensuring it meets length requirements. It's then sent back to the user via the Venom bot. The Webhook Response node ensures n8n properly acknowledges the initial incoming message."
      },
      "typeVersion": 1
    },
    {
      "id": "cdae635d-5749-4dc2-8d83-498c7cbee364",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -180,
        220
      ],
      "parameters": {
        "width": 820,
        "height": 300,
        "content": "## Error Call\ud83c\udd98\ud83c\udd98\ud83c\udd98\non Failed Request from Venom bot, Venom sends a default \"Get back Soon\" Message"
      },
      "typeVersion": 1
    },
    {
      "id": "086d160c-8789-422d-88e3-a025852a9c7e",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1260,
        -260
      ],
      "parameters": {
        "width": 480,
        "height": 420,
        "content": "## Send Response to Venom Bot.\n\nThis node sends a final response back to the initiating webhook (your Venom bot) to confirm that the workflow has completed its execution. This is crucial for proper communication and to prevent timeouts on the bot's end."
      },
      "typeVersion": 1
    },
    {
      "id": "d10b8882-0dc6-43f2-87a6-41b74640115d",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1420,
        -560
      ],
      "parameters": {
        "width": 1120,
        "height": 1600,
        "content": "# GUIDE TO INSTALL AND RUN VENOM BOT \n## Venom WhatsApp Bot Installation Guide\n\nThis guide outlines the basic steps to install and run the Venom WhatsApp bot on a Linux server (e.g., a VPS).\n\n## Prerequisites\n\n*   A Linux server (Ubuntu 20.04+ recommended)\n*   Node.js (v16 or higher) and npm installed\n*   PM2 (Process Manager 2) for keeping the bot running in the background\n*   Basic command-line knowledge\n\n## Step-by-Step Installation\n\n1.  **Connect to your server via SSH:**\n    ```bash\n    ssh your_username@your_server_ip\n    ```\n\n2.  **Install Node.js and npm (if not already installed):**\n    ```bash\n    sudo apt update\n    sudo apt install -y nodejs npm\n    ```\n    *Verify installation:*\n    ```bash\n    node -v\n    npm -v\n    ```\n\n3.  **Install PM2:**\n    ```bash\n    sudo npm install -g pm2\n    ```\n\n4.  **Create a dedicated user for the bot (recommended for security):**\n    ```bash\n    sudo adduser whatsappbot\n    sudo usermod -aG sudo whatsappbot # Grant sudo access temporarily if needed for setup\n    su - whatsappbot\n    ```\n    *(You will be prompted to set a password for the new user)*\n\n5.  **Clone the Venom Bot repository (or your custom bot code):**\n    ```bash\n    git clone https://github.com/orkestral/venom-bot.git /home/whatsappbot/venom-whatsapp-bot\n    # Or, if you have your custom bot code:\n    # git clone your_bot_repo_url /home/whatsappbot/venom-whatsapp-bot\n    cd /home/whatsappbot/venom-whatsapp-bot\n    ```\n\n6.  **Install dependencies:**\n    ```bash\n    npm install\n    ```\n\n7.  **Configure your bot (e.g., `config.js` or `.env` file ):**\n    *   Create a `.env` file in your bot's root directory (`/home/whatsappbot/venom-whatsapp-bot/.env`).\n    *   Add necessary environment variables, such as `N8N_WEBHOOK_URL` (the URL of your n8n webhook), `API_SECRET_KEY`, `BOT_SESSION_NAME`, etc.\n    Example `.env` content:\n    ```\n    N8N_WEBHOOK_URL=https://your-n8n-instance.com/webhook/whatsapp-incoming\n    API_SECRET_KEY=1234567890\n    BOT_SESSION_NAME=venom-whatsapp-bot\n    PORT=3000\n    ```\n\n8.  **Start the bot with PM2:**\n    ```bash\n    pm2 start index.js --name venom-whatsapp-bot\n    # If your main bot file is named differently (e.g., bot.js ):\n    # pm2 start bot.js --name venom-whatsapp-bot\n    ```\n\n9.  **Save PM2 process list (to restart on server reboot):**\n    ```bash\n    pm2 save\n    pm2 startup\n    ```\n    *Follow the instructions provided by `pm2 startup` to enable auto-start.*\n\n10. **Link WhatsApp:**\n    *   When you start the bot for the first time, it will generate a QR code in the terminal.\n    *   Scan this QR code with your WhatsApp mobile app (WhatsApp Settings -> Linked Devices -> Link a Device).\n\n## Common PM2 Commands\n\n*   `pm2 list`: List all running PM2 processes\n*   `pm2 logs venom-whatsapp-bot`: View logs for your bot\n*   `pm2 restart venom-whatsapp-bot`: Restart your bot\n*   `pm2 stop venom-whatsapp-bot`: Stop your bot\n*   `pm2 delete venom-whatsapp-bot`: Remove your bot from PM2\n\nRemember to replace placeholder values like `your_username`, `your_server_ip`, `your_bot_repo_url`, and `your-n8n-instance.com` with your actual details."
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Webhook": {
      "main": [
        [
          {
            "node": "Process Message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent": {
      "main": [
        [
          {
            "node": "Format Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Simple Memory": {
      "ai_memory": [
        [
          {
            "node": "AI Agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Format Response": {
      "main": [
        [
          {
            "node": "Send to WhatsApp",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Process Message": {
      "main": [
        [
          {
            "node": "Get Knowledge Base",
            "type": "main",
            "index": 0
          },
          {
            "node": "Check for Errors",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check for Errors": {
      "main": [
        [
          {
            "node": "Send Error Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send to WhatsApp": {
      "main": [
        [
          {
            "node": "Webhook Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Knowledge": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Knowledge Base": {
      "main": [
        [
          {
            "node": "Extract Knowledge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Error Response": {
      "main": [
        [
          {
            "node": "Error Webhook Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Gemini Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

**Get Started **

Source: https://n8n.io/workflows/5736/ — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

L&D_AgentsAI_ATIVO. Uses httpRequest, agent, googleCalendarTool, toolSerpApi. Webhook trigger; 93 nodes.

HTTP Request, Agent, Google Calendar Tool +9
AI & RAG

This workflow acts as an AI-powered research assistant that takes a topic from the user, performs multi-step intelligent research, and stores the final report in Notion. It uses advanced search, conte

Memory Buffer Window, Output Parser Structured, Agent +6
AI & RAG

This n8n template demonstrates how to build O'Carla, an advanced all-in-one Discord AI assistant. It intelligently handles natural conversations, professional image generation, and visual file analysi

Memory Buffer Window, Agent, Google Gemini Chat +2
AI & RAG

This workflow turns a spreadsheet row into a fully formatted, media-rich WordPress article. It pulls the outline and brand context from Google Sheets/Docs, drafts the article with Anthropic or Gemini,

Agent, Google Sheets, Google Docs +5
AI & RAG

veo limpo new. Uses moveBinaryData, httpRequest, chatTrigger, baserow. Webhook trigger; 36 nodes.

Move Binary Data, HTTP Request, Chat Trigger +8