Mindket

Voice RAG chatbot for an ElevenLabs agent

Newversion 1 · updated

Overview

An n8n workflow that loads a Google Drive folder into Qdrant and answers an ElevenLabs voice agent’s questions from it. An OpenAI agent searches the stored chunks and sends back text for the agent to speak.

Voice RAG chatbot for an ElevenLabs agent is an n8n workflow in the Business category, listed by Mindket. It is free. This is version 1, last updated on . Download it on this page or copy its JSON, then import it into an n8n canvas. Nothing runs until you activate it in n8n.

At a glance

Runs in
  • n8n Cloud: import the file there and use the production address of its webhook
  • Your own n8n server: the same file, with the server open to the internet
  • Qdrant: a cloud cluster or your own server, as long as n8n can call it
  • A website: the widget snippet in the last sticky note puts the agent on a page

Platform

Connects 4 apps

How it works

Trigger

Webhook request

It starts when an ElevenLabs agent sends a POST request to the webhook path test_voice_message_elevenlabs with:

  • The caller’s question, in a body field named question

Actions

  1. The OpenAI agent takes the question
  2. It searches the Qdrant collection for the four closest chunks of your documents
  3. A second OpenAI model writes the answer from those chunks
  4. The last five exchanges are kept in memory
  5. The answer goes back to ElevenLabs as JSON, and the voice agent speaks it
  6. Separately, pressing Test workflow empties the collection and loads your Google Drive folder into it

Result

A JSON reply with the answer in a field named output, returned to ElevenLabs in the same request

Integrations

What you need before you start.

OpenAI

Language model and embeddings

Runs the agent and the answer model, and turns every chunk and question into a vector.

NeedsOpenAI API key

Qdrant

Vector database

Stores the chunks of your documents and finds the closest ones for a question.

NeedsQdrant address and API key, in a Qdrant credential and an HTTP Header Auth credential

Google Drive

Document source

Lists and downloads the files of one folder, turning Google Docs into plain text.

NeedsGoogle Drive OAuth2 credential and a folder ID

ElevenLabs

Voice agent

Calls the webhook as a tool with the caller’s question and speaks the answer.

NeedsAn ElevenLabs account and an agent with a Webhook tool

Workflow check

Checked by Mindket on 13 Nov 2026

Steps
9 steps, starting by hand or when its webhook is called
AI
2 steps call an AI model: Qdrant Vector Store1 and AI Agent
Sign-ins
Signs in to: your_qdrant_url, Google Drive, Qdrant and OpenAI
API keys
No API key is left in the file
Step types
Mindket’s checker reads all 7 of its step types

Read from the workflow’s file, not from a run.

About

What it is

This n8n workflow lets a voice agent answer from your own documents. One part reads the files in a Google Drive folder, cuts them into chunks and stores them in a Qdrant collection. The other part is a webhook. An ElevenLabs agent posts the caller’s question to it, and an OpenAI agent looks up the closest chunks in Qdrant and writes the answer. The reply goes back as JSON, and ElevenLabs speaks it. Eighteen nodes do the work, beside five sticky notes.

Who it suits

Businesses that want a voice assistant to answer from their own price lists, menus or policies, and the developers who set it up for them. Skip it if answers must never go beyond the documents, since the agent has no instruction to stay inside them. Skip it too for a big library, because the folder step reads only 50 files.

Who uses it, and how
IndustryWho uses itHow they use itExample
HospitalityRestaurants and hotelsLoad the menu, the opening hours and the house rules, and let a voice agent answer callersA café loads its allergen list, and a caller asks whether the carrot cake has nuts.
Customer supportSmall support teamsPut the help articles in one folder and let the agent answer the common questionsA shop loads its returns policy, and the agent explains it to a caller in plain words.
EducationSchool officesLoad term dates and school rules for parents who phone inA parent asks when the holiday starts, and the agent reads the date from the calendar file.
Property managementBuilding managersLet tenants ask about house rules without waiting for an officeA tenant asks about parking, and the agent answers from the house rules.

You need some n8n and several accounts: four credentials in n8n, a Qdrant database and an agent on the ElevenLabs side.

Where to use it

Any n8n with a public address that ElevenLabs can reach, plus a Qdrant database that your n8n can call.

  • n8n Cloud: import the file there and use the production address of its webhook
  • Your own n8n server: the same file, with the server open to the internet
  • Qdrant: a cloud cluster or your own server, as long as n8n can call it
  • A website: the widget snippet in the last sticky note puts the agent on a page

Setup

Download saves a zip with workflow.json and Mindket’s setup notes in your downloads folder. Have the accounts ready, because the load step uses Google, Qdrant and OpenAI together.

What you need first
NeedDetail
n8nOn n8n Cloud or on a server of your own, with a public address
OpenAIAn API key, for the two chat models and the embeddings
QdrantThe address of an instance and its API key
Google DriveA folder with your documents and an OAuth2 credential
ElevenLabsAn account with an agent that can call a webhook tool
  1. In n8n, create a workflow, open its menu, choose Import from File and pick workflow.json.
  2. Add an OpenAI credential and select it in OpenAI, OpenAI Chat Model, Embeddings OpenAI and Embeddings OpenAI1.
  3. Add a Qdrant credential and select it in Qdrant Vector Store and Qdrant Vector Store1.
  4. Add an HTTP Header Auth credential with the header name api-key and your Qdrant key, and select it in Create collection and Refresh collection.
  5. In all four Qdrant nodes replace YOUR_COLLECTION with your collection’s name. In the two HTTP requests also replace YOUR_QDRANT_URL with your Qdrant host.
  6. Add a Google Drive OAuth2 credential, select it in Get folder and Download Files, and replace YOUR_FOLDER_ID in Get folder with your folder’s ID.
  7. Press Test workflow once. The collection is made, emptied and filled, so check in Qdrant that it holds points.
  8. Save, press Publish and copy the production address of Listen. In ElevenLabs, add a Webhook tool to your agent with the method POST, that address and one body parameter named question.
  9. Test the agent in ElevenLabs.

How to use it

Talk to your ElevenLabs agent. When it needs a fact, it calls the tool and posts the question in a field named question. The workflow answers with a field named output, and the agent speaks it. Press Test workflow again whenever the documents change, because the load only runs from that button.

What to change for a different result
To changeWhere
The documentsThe folder in Get folder
The chunk size300 and 30 in Token Splitter
The chunks per answerThe Limit of Vector Store Tool, 4 by default
When the agent searchesThe name and description of Vector Store Tool
The answering modelsOpenAI and OpenAI Chat Model
The conversationThe session key voice-rag-chat in Window Buffer Memory

Example

A café puts its menu, its opening hours and an allergen list in the Drive folder and presses Test workflow.

A caller asks the voice agent whether the carrot cake has nuts. The agent posts the question and the OpenAI agent finds the allergen chunk in Qdrant. It writes the answer, and ElevenLabs speaks it. Check the first answers against the documents, because nothing tells the agent to stay inside them.

For newcomers and experts

If you are new. n8n draws a workflow as boxes joined by lines, and each box, a node, does one job. This one has two lines of work. The first reads files and stores them in Qdrant, a database that finds text by meaning. The second waits for a question and searches that database. Load one short document first and ask about it.

For experts. The agent calls a Vector Store Tool that wraps Qdrant retrieval and a second chat model, and Window Buffer Memory uses one fixed key.

Where to look closer
NodeWhat it doesWhat to know
Create collectionSends a PUT that makes a collection with 1536 dimensions and cosine distanceIts On Error setting is Continue, so an existing collection does not stop a later run
Refresh collectionPosts a delete with an empty filterIt is meant to remove every point before a reload
Get folderLists the files directly in your folderIt returns up to 50 files and skips subfolders
Vector Store ToolNamed company, with a description written in ItalianThe description decides when the agent searches, so rewrite it in your language
Window Buffer MemoryKeeps five exchanges under a fixed keyEvery caller shares one conversation

Good to know

Four services can bill a run, and the load step wipes the collection first. One model default needs a look.

  • Models: the two OpenAI chat nodes set no model, so n8n fills in gpt-5-mini. OpenAI’s deprecations page, read on 12 November 2026, lists it for shutdown on 11 December 2026, with gpt-5.6-terra as the replacement. Choose another model in both nodes before then. The embedding default, text-embedding-3-small, is not listed there
  • Collection: the original copy sent a POST with a points filter to make the collection. Mindket’s copy sends the PUT that Qdrant uses, with 1536 dimensions to match text-embedding-3-small. Another embedding model needs its own size and a new collection
  • Reload: every press of Test workflow empties the collection and embeds every file again, and OpenAI bills the embeddings each time. A caller who asks in between gets no help from the documents
  • Delete filter: Qdrant’s API page does not say what an empty filter in a delete matches, so check the point count after a load
  • Folder: only files directly in the folder are read, up to 50
  • Memory: the original copy set no session, so the agent would stop with “No session ID found”. Mindket’s copy uses the fixed key voice-rag-chat, so every caller shares one conversation. n8n drops it after an hour without use
  • Open webhook: anyone with the address can ask questions on your OpenAI key, so turn on the webhook’s authentication and send the same header from the ElevenLabs tool
  • Widget: ElevenLabs shows it only for a public agent with authentication off
  • Billing: OpenAI bills at least one agent call for each question, plus a second model call and an embedding when the agent searches
  • Your data: the documents go to OpenAI to be embedded and are stored in Qdrant, and each question goes to OpenAI
  • Credentials: the JSON holds none

README and files

README

Voice RAG chatbot for an ElevenLabs agent

An n8n workflow that answers a voice agent's questions from your own documents. One part loads the files of a Google
Drive folder into a Qdrant collection. The other is a webhook. An ElevenLabs agent posts the caller's question to it, an
OpenAI agent looks the answer up in Qdrant, and ElevenLabs speaks what comes back.

What is inside

  • workflow.json: the workflow as n8n exports it, 18 nodes and five sticky notes. It holds no credential.
  • README.md: these notes.

What we changed from the original copy

  • Create collection sent a POST to /collections/<name> with a body of {"filter": {}}, which is a points filter.
    Qdrant creates a collection with a PUT and a vectors setting. The node now sends a PUT with a vector size of 1536
    and the distance Cosine, and its On Error setting is Continue, so a second run does not stop when the collection
    already exists.
  • Window Buffer Memory had no session setting. Its default reads a sessionId field that a webhook call does not
    carry, so the agent would stop with "No session ID found". It now uses a fixed key, voice-rag-chat.
  • The address placeholders are now YOUR_QDRANT_URL, YOUR_COLLECTION and YOUR_FOLDER_ID. The original copy wrote
    them as QDRANTURL, COLLECTION and a sample folder name after an equals sign.
  • The five sticky notes are rewritten. The widget snippet in the last one uses the script address ElevenLabs shows now.
  • The original copy was exported with no credential, as these notes expect, and with the workflow switched off.

Before you start

  • An n8n instance with a public address, on n8n Cloud or your own server, so ElevenLabs can reach the webhook.
  • An OpenAI API key. It covers the two chat models and the embeddings.
  • A Qdrant instance, its address and its API key.
  • A Google account, a Drive folder with your documents in it and a Google Drive OAuth2 credential.
  • An ElevenLabs account with an agent that can call a webhook tool.

Set it up

  1. In n8n, create a workflow, open its menu and choose Import from File. Pick workflow.json.
  2. Add an OpenAI credential. Select it in OpenAI, OpenAI Chat Model, Embeddings OpenAI and Embeddings OpenAI1.
  3. Add a Qdrant credential with your address and key. Select it in Qdrant Vector Store and Qdrant Vector Store1.
    In both, replace YOUR_COLLECTION with your collection's name.
  4. Add an HTTP Header Auth credential with the header name api-key and your Qdrant key as its value. Select it in
    Create collection and Refresh collection. In both, replace YOUR_QDRANT_URL with your Qdrant host, with its port
    if it uses one, and YOUR_COLLECTION with the same collection name.
  5. Add a Google Drive OAuth2 credential. Select it in Get folder and Download Files. In Get folder, replace
    YOUR_FOLDER_ID with the ID of your folder, the last part of its web address.
  6. Press Test workflow once. The collection is made, emptied and filled from the folder. Check in Qdrant that it holds
    points.
  7. Save and press Publish. Copy the production address of Listen. It ends in test_voice_message_elevenlabs.
  8. In ElevenLabs, create an agent and give it a first message and a system prompt that tells it to call your tool for
    every question. Add a Webhook tool with the method POST and the production address. Add one body parameter named
    question, a string whose value the model fills in from the conversation.
  9. Test the agent in ElevenLabs. Then add the widget to your site, as the last sticky note shows.

How a run goes

Loading the documents runs from When clicking ‘Test workflow’:

  1. Create collection makes the collection in Qdrant. Refresh collection then posts a delete of every point, with an
    empty filter, so each load starts from nothing.
  2. Get folder lists the files directly inside your folder, up to 50. Download Files downloads each one, and turns a
    Google Doc into plain text.
  3. Qdrant Vector Store1 stores them. Default Data Loader reads each file's binary data and picks a loader by file
    type. Token Splitter cuts the text into chunks of 300 tokens that overlap by 30. Embeddings OpenAI1 turns each
    chunk into a vector.

Answering runs from the webhook:

  1. Listen takes a POST on the path test_voice_message_elevenlabs and waits for Respond to ElevenLabs to answer.
  2. AI Agent takes body.question from the request as its message. OpenAI is its chat model, and `Window Buffer
    Memory` keeps the last five exchanges.
  3. The agent can call Vector Store Tool, named company. Qdrant Vector Store finds the four closest chunks, using
    Embeddings OpenAI for the question, and OpenAI Chat Model writes an answer from them.
  4. Respond to ElevenLabs sends the first item back as JSON, {"output": "..."}, and the ElevenLabs agent speaks it.

Change the look

  • What the agent is allowed to say: add a system message to AI Agent, and tell the ElevenLabs agent how to behave in
    its own prompt.
  • When the agent searches: the name and description of Vector Store Tool. The description is written in Italian, so
    put yours there, in the language of your documents.
  • The chunks: 300 and 30 in Token Splitter.
  • How many chunks an answer uses: the Limit of Vector Store Tool, 4 by default.
  • The chat models: OpenAI and OpenAI Chat Model. The file sets no model, so n8n fills in its own default.
  • The embedding model: Embeddings OpenAI and Embeddings OpenAI1. Keep them the same, and change the vector size in
    Create collection to match.

Good to know

  • Neither OpenAI chat node names a model in the file, so n8n fills in gpt-5-mini. OpenAI's deprecations page, read on
    12 November 2026, lists it for shutdown on 11 December 2026, with gpt-5.6-terra as the replacement. Choose another
    model in both nodes before then. The embedding default, text-embedding-3-small, is not on that page.
  • Qdrant's API page does not say what an empty filter in a delete matches. Refresh collection expects every point to
    go, so look at the point count after a load.
  • The vector size of 1536 matches text-embedding-3-small. A different embedding model needs its own size and a new
    collection.
  • Every press of Test workflow empties the collection and embeds every file again, and OpenAI bills the embeddings each
    time.
  • Get folder reads only the files directly in the folder, not its subfolders.
  • Every caller shares one conversation, because the memory key is fixed. The history lives in the n8n process, and n8n
    drops it after an hour without use.
  • The webhook has no authentication. Anyone with its address can ask questions on your OpenAI key. Turn on the webhook's
    authentication and send the same header from the ElevenLabs tool.
  • The test address works only while n8n is listening, so the ElevenLabs tool needs the production address.
  • ElevenLabs only shows a widget for an agent that is public, with authentication off.
  • Your documents go to OpenAI to be embedded and are stored in Qdrant. Each question goes to OpenAI.
Files
NOTICE.md  664 B
README.md  7 KB
workflow.json  14 KB

3 files, 22 KB, downloaded as a zip.

What’s new

  • Version 1 · 2026-11-12

Reviews

No ratings yet

Write a review

No reviews yet.

More from Mindket

See all from Mindket

Huashu Design

alchaincyf · Skill

Turns a one-line request in your AI agent into a finished design: a launch animation, a clickable app prototype, an editable slide deck, an infographic or a se…

New29.4k

Guizang PPT Skill

op7418 · Skill

Skill that makes single-file HTML slide decks, slide illustrations and platform covers in two visual styles, with a presenter mode for rehearsal. For speakers…

New29.8k

Claude Code Skills & Plugins

alirezarezvani · Skill

Adds 411 ready-made skills for Claude Code and other coding agents, grouped by role from engineering and product to marketing, finance and compliance. Installs…

New29.8k

Similar in Business

See all in Business

pplx-decider-v1.1-27b

perplexity-ai · Kit

Picks the best option for a decision from text and images, such as which team should handle a request, with a probability for each choice, for developers who b…

New

NuExtract3

numind · Kit

Reads documents as text or images and fills a JSON template with the fields you ask for, or converts the pages to Markdown. A 4B model for teams that process s…

New

Drex DLM

nace-ai · Kit

Scores yes or no, multiple choice and rating questions about a document in one pass, with a probability for every option. An 8B decision model from Nace.AI tha…

New