AutomationFlowsAI & RAG › Answer Restaurant Voice Queries with Elevenlabs, Openai, Qdrant, and Google…

Answer Restaurant Voice Queries with Elevenlabs, Openai, Qdrant, and Google…

Original n8n title: Answer Restaurant Voice Queries with Elevenlabs, Openai, Qdrant, and Google Drive

ByRedowan Ahmed Farhan @redowanfarhan on n8n.io

This workflow rebuilds a Qdrant-based knowledge base from Google Drive documents and then answers ElevenLabs voice-assistant questions using an OpenAI-powered RAG agent with conversation memory, returning the response via webhook. Runs manually to (re)build the knowledge base by…

Event trigger★★★★☆ complexityAI-powered22 nodesAgentTool Vector StoreQdrant Vector StoreOpenAI EmbeddingsHTTP RequestGoogle DriveDocument Default Data LoaderText Splitter Token Splitter
AI & RAG Trigger: Event Nodes: 22 Complexity: ★★★★☆ AI nodes: yes Added:

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

This workflow follows the Agent → Documentdefaultdataloader 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
{
  "id": "dd2mK6aG4p6XKh09",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Voice RAG Chatbot with ElevenLabs and OpenAI",
  "tags": [],
  "nodes": [
    {
      "id": "ec9a13ea-8141-40e0-bf97-8d8ed059abd9",
      "name": "Overview",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2032,
        864
      ],
      "parameters": {
        "color": 7,
        "width": 580,
        "height": 1460,
        "content": "## \ud83c\udf99\ufe0f Voice RAG Chatbot with ElevenLabs and OpenAI\n\nAnswers spoken restaurant questions forwarded by ElevenLabs using a RAG-grounded AI Agent, with a separate one-click flow to (re)build the Qdrant knowledge base from Google Drive documents.\n\n**Perfect for:** Restaurant owners running an ElevenLabs voice assistant who need answers grounded in their own menu/FAQ documents.\n\n---\n\n## How it works\n\n1. **When clicking 'Test workflow'** \u2014 Manual trigger that (re)builds the knowledge base; runs Create collection and Refresh collection in parallel.\n2. **Create collection** \u2014 Creates the Qdrant collection via HTTP request (safe to run once).\n3. **Refresh collection** \u2014 Deletes existing points in the Qdrant collection so it can be rebuilt from scratch.\n4. **Get folder** \u2014 Lists files in the configured Google Drive folder (test-whatsapp).\n5. **Download Files** \u2014 Downloads each file, converting Google Docs to plain text.\n6. **Token Splitter** \u2014 Splits document text into ~300-token chunks with 30-token overlap.\n7. **Default Data Loader** \u2014 Loads the binary file content into LangChain documents, using the Token Splitter.\n8. **Embeddings OpenAI1** \u2014 Generates OpenAI embeddings for each chunk.\n9. **Qdrant Vector Store1** *(insert mode)* \u2014 Writes the embedded chunks into the Qdrant collection.\n10. **Listen** \u2014 Webhook that receives the incoming voice question from ElevenLabs (as body.question).\n11. **AI Agent** \u2014 LangChain agent that answers the question, backed by memory and the vector store tool.\n12. **Window Buffer Memory** \u2014 Keeps recent conversation turns for the agent.\n13. **OpenAI** *(LLM)* \u2014 Powers the AI Agent's reasoning.\n14. **Vector Store Tool** \u2014 Tool the agent calls to search company knowledge (\"company\").\n15. **Qdrant Vector Store** *(retrieve mode)* \u2014 Backs the Vector Store Tool with similarity search over the Qdrant collection.\n16. **Embeddings OpenAI** \u2014 Embeds the incoming query for the retrieval tool.\n17. **OpenAI Chat Model** \u2014 LLM used by the Vector Store Tool for query understanding.\n18. **Respond to ElevenLabs** \u2014 Returns the AI Agent's answer back to ElevenLabs as the webhook response.\n\n---\n\n## Setup (~15 minutes)\n\n1. **Qdrant** \u2014 Set your Qdrant URL in *Create collection*, *Refresh collection*, and the collection name in both *Qdrant Vector Store* nodes; add your Qdrant API header credential.\n2. **Google Drive** \u2014 Connect your account in *Get folder* and *Download Files*; point *Get folder* at the source folder (currently `test-whatsapp`).\n3. **OpenAI** \u2014 Add your API key in *Embeddings OpenAI*, *Embeddings OpenAI1*, *OpenAI*, and *OpenAI Chat Model*.\n4. **ElevenLabs webhook** \u2014 Copy the *Listen* node's production webhook URL (`test_voice_message_elevenlabs`) into your ElevenLabs Conversational AI tool config.\n> Run *When clicking 'Test workflow'* once (or after adding new documents) to rebuild the Qdrant index before going live."
      },
      "typeVersion": 1
    },
    {
      "id": "ebc07f1a-b50d-4804-aad9-a3e91dd7f827",
      "name": "Section 1 - Knowledge Base Setup",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1152,
        864
      ],
      "parameters": {
        "color": 5,
        "width": 1196,
        "height": 700,
        "content": "## 1\ufe0f\u20e3 Knowledge Base Setup\n\nRunning **When clicking 'Test workflow'** kicks off a full reindex: **Create collection** ensures the Qdrant collection exists, **Refresh collection** clears any existing points, **Get folder** lists the source documents in Google Drive, and **Download Files** pulls each one down (converting Google Docs to plain text) ready for embedding."
      },
      "typeVersion": 1
    },
    {
      "id": "e194271b-2e2a-414c-9a70-bf6e9dfa4750",
      "name": "Section 2 - Document Processing & Embedding",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        320,
        1040
      ],
      "parameters": {
        "color": 6,
        "width": 520,
        "height": 800,
        "content": "## 2\ufe0f\u20e3 Document Processing & Embedding\n\nThe **Token Splitter** breaks downloaded documents into 300-token chunks with light overlap, which the **Default Data Loader** feeds into **Embeddings OpenAI1** for vectorization. **Qdrant Vector Store1** then writes the resulting embeddings into the Qdrant collection in insert mode, building the searchable knowledge base."
      },
      "typeVersion": 1
    },
    {
      "id": "3c4d8437-0115-4cd7-a585-071496643bd1",
      "name": "Section 3 - Voice Query & AI Response",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1168,
        1616
      ],
      "parameters": {
        "color": 3,
        "width": 1440,
        "height": 1052,
        "content": "## 3\ufe0f\u20e3 Voice Query & AI Response\n\nThe **Listen** webhook receives each spoken question forwarded by ElevenLabs. The **AI Agent** answers it using **OpenAI** as its reasoning model, **Window Buffer Memory** for conversation context, and the **Vector Store Tool** \u2014 backed by **Qdrant Vector Store**, **Embeddings OpenAI**, and **OpenAI Chat Model** \u2014 to search the indexed knowledge base. **Respond to ElevenLabs** sends the answer back as the webhook response."
      },
      "typeVersion": 1
    },
    {
      "id": "a747efd2-ed2d-4a83-9190-486f9a611884",
      "name": "AI Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -544,
        1808
      ],
      "parameters": {
        "text": "={{ $json.body.question }}",
        "options": {},
        "promptType": "define"
      },
      "typeVersion": 1.7
    },
    {
      "id": "a8da5ce6-5805-4900-946b-97d091c96126",
      "name": "Vector Store Tool",
      "type": "@n8n/n8n-nodes-langchain.toolVectorStore",
      "position": [
        -336,
        2048
      ],
      "parameters": {
        "name": "company",
        "description": "Risponde alle domande relative a ci\u00f2 che ti viene chiesto"
      },
      "typeVersion": 1
    },
    {
      "id": "28f7510f-d0d6-47b3-8ed2-2b7051499fab",
      "name": "Qdrant Vector Store",
      "type": "@n8n/n8n-nodes-langchain.vectorStoreQdrant",
      "position": [
        -496,
        2304
      ],
      "parameters": {
        "options": {},
        "qdrantCollection": {
          "__rl": true,
          "mode": "id",
          "value": "=COLLECTION"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "64f154a3-e68d-47de-b8f3-f5b523461417",
      "name": "Embeddings OpenAI",
      "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
      "position": [
        -496,
        2464
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1.1
    },
    {
      "id": "90490347-835b-4b94-bc4e-e58a7efd8606",
      "name": "When clicking \u2018Test workflow\u2019",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -1024,
        1168
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "24a4c9a2-33ff-4935-a46c-2b26e8312a03",
      "name": "Create collection",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -720,
        1024
      ],
      "parameters": {
        "url": "https://QDRANTURL/collections/COLLECTION",
        "method": "POST",
        "options": {},
        "jsonBody": "{\n \"filter\": {}\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "21cbc377-a03b-4e0a-b003-998a05d7bc68",
      "name": "Refresh collection",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -720,
        1296
      ],
      "parameters": {
        "url": "https://QDRANTURL/collections/COLLECTION/points/delete",
        "method": "POST",
        "options": {},
        "jsonBody": "{\n \"filter\": {}\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "e340ef27-342a-4796-bbec-1470a404eeb2",
      "name": "Get folder",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        -496,
        1296
      ],
      "parameters": {
        "filter": {
          "driveId": {
            "__rl": true,
            "mode": "list",
            "value": "My Drive",
            "cachedResultUrl": "https://drive.google.com/drive/my-drive",
            "cachedResultName": "My Drive"
          },
          "folderId": {
            "__rl": true,
            "mode": "id",
            "value": "=test-whatsapp"
          }
        },
        "options": {},
        "resource": "fileFolder"
      },
      "typeVersion": 3
    },
    {
      "id": "b15a9bf1-f86d-4fbe-8189-4f0a230da371",
      "name": "Download Files",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        -272,
        1296
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $json.id }}"
        },
        "options": {
          "googleFileConversion": {
            "conversion": {
              "docsToFormat": "text/plain"
            }
          }
        },
        "operation": "download"
      },
      "typeVersion": 3
    },
    {
      "id": "67703d98-b1de-4e4f-bc9e-0d5c60c82784",
      "name": "Default Data Loader",
      "type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
      "position": [
        592,
        1488
      ],
      "parameters": {
        "options": {},
        "dataType": "binary"
      },
      "typeVersion": 1
    },
    {
      "id": "916ce1ae-3d5c-47a4-9c46-7fd45f5c7307",
      "name": "Token Splitter",
      "type": "@n8n/n8n-nodes-langchain.textSplitterTokenSplitter",
      "position": [
        560,
        1648
      ],
      "parameters": {
        "chunkSize": 300,
        "chunkOverlap": 30
      },
      "typeVersion": 1
    },
    {
      "id": "01826335-ba9b-42d8-8f3c-a0c07c2465df",
      "name": "Qdrant Vector Store1",
      "type": "@n8n/n8n-nodes-langchain.vectorStoreQdrant",
      "position": [
        448,
        1296
      ],
      "parameters": {
        "mode": "insert",
        "options": {},
        "qdrantCollection": {
          "__rl": true,
          "mode": "id",
          "value": "=COLLECTION"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "6dc96fc7-f9ab-4ea7-8671-a2e52074ba0b",
      "name": "Embeddings OpenAI1",
      "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
      "position": [
        432,
        1488
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1.1
    },
    {
      "id": "2a4f0089-81ed-42a4-9e58-8f5a3b93ebe7",
      "name": "Respond to ElevenLabs",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        32,
        1808
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1.1
    },
    {
      "id": "5c2263c7-c3f6-4c95-b66f-8adf6cebe086",
      "name": "OpenAI",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -656,
        2048
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "358254e2-2d5c-42f9-bda4-4907bc1f8d61",
      "name": "Listen",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -1056,
        1808
      ],
      "parameters": {
        "path": "test_voice_message_elevenlabs",
        "options": {},
        "httpMethod": "POST",
        "responseMode": "responseNode"
      },
      "typeVersion": 2
    },
    {
      "id": "2617c1ec-0802-4dcc-b990-2eaa69c18ccf",
      "name": "Window Buffer Memory",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        -496,
        2048
      ],
      "parameters": {},
      "typeVersion": 1.3
    },
    {
      "id": "4f5dfdca-d3a4-4280-ae6e-072838baae52",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -160,
        2320
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "binaryMode": "separate",
    "executionOrder": "v1"
  },
  "versionId": "ddba5089-5fd4-456c-8cdf-2fe469c3962f",
  "nodeGroups": [],
  "connections": {
    "Listen": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent": {
      "main": [
        [
          {
            "node": "Respond to ElevenLabs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get folder": {
      "main": [
        [
          {
            "node": "Download Files",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download Files": {
      "main": [
        [
          {
            "node": "Qdrant Vector Store1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Token Splitter": {
      "ai_textSplitter": [
        [
          {
            "node": "Default Data Loader",
            "type": "ai_textSplitter",
            "index": 0
          }
        ]
      ]
    },
    "Embeddings OpenAI": {
      "ai_embedding": [
        [
          {
            "node": "Qdrant Vector Store",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Vector Store Tool",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Vector Store Tool": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Embeddings OpenAI1": {
      "ai_embedding": [
        [
          {
            "node": "Qdrant Vector Store1",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "Refresh collection": {
      "main": [
        [
          {
            "node": "Get folder",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Default Data Loader": {
      "ai_document": [
        [
          {
            "node": "Qdrant Vector Store1",
            "type": "ai_document",
            "index": 0
          }
        ]
      ]
    },
    "Qdrant Vector Store": {
      "ai_vectorStore": [
        [
          {
            "node": "Vector Store Tool",
            "type": "ai_vectorStore",
            "index": 0
          }
        ]
      ]
    },
    "Window Buffer Memory": {
      "ai_memory": [
        [
          {
            "node": "AI Agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "When clicking \u2018Test workflow\u2019": {
      "main": [
        [
          {
            "node": "Create collection",
            "type": "main",
            "index": 0
          },
          {
            "node": "Refresh collection",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Pro

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

About this workflow

This workflow rebuilds a Qdrant-based knowledge base from Google Drive documents and then answers ElevenLabs voice-assistant questions using an OpenAI-powered RAG agent with conversation memory, returning the response via webhook. Runs manually to (re)build the knowledge base by…

Source: https://n8n.io/workflows/17436/ — 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

📌 Overview

Redis, WhatsApp, OpenAI Chat +12
AI & RAG

Alfred (funcional). Uses gmailTool, googleCalendarTool, gmail, embeddingsOpenAi. Event-driven trigger; 83 nodes.

Gmail Tool, Google Calendar Tool, Gmail +24
AI & RAG

This comprehensive workflow bundle is designed as a powerful starter kit, enabling you to build a multi-functional AI assistant on Telegram. It seamlessly integrates AI-powered voice interactions, an

Telegram Trigger, Telegram, OpenAI +19
AI & RAG

Agent IA Projet Client. Uses executeWorkflowTrigger, lmChatOpenAi, toolWorkflow, vectorStoreQdrant. Event-driven trigger; 79 nodes.

Execute Workflow Trigger, OpenAI Chat, Tool Workflow +16
AI & RAG

This advanced n8n workflow automates the full lead enrichment, qualification, and personalized outreach process tailored specifically for the B2B real estate sector. Integrating top platforms like Api

N8N Nodes Fillout, OpenAI Chat, Pinecone Vector Store +11