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…
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.
Webhook request
It starts when an ElevenLabs agent sends a POST request to the webhook path test_voice_message_elevenlabs with:
A JSON reply with the answer in a field named output, returned to ElevenLabs in the same request
What you need before you start.
Language model and embeddings
Runs the agent and the answer model, and turns every chunk and question into a vector.
NeedsOpenAI API key
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
Document source
Lists and downloads the files of one folder, turning Google Docs into plain text.
NeedsGoogle Drive OAuth2 credential and a folder ID
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
Checked by Mindket on 13 Nov 2026
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.
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.
| Industry | Who uses it | How they use it | Example |
|---|---|---|---|
| Hospitality | Restaurants and hotels | Load the menu, the opening hours and the house rules, and let a voice agent answer callers | A café loads its allergen list, and a caller asks whether the carrot cake has nuts. |
| Customer support | Small support teams | Put the help articles in one folder and let the agent answer the common questions | A shop loads its returns policy, and the agent explains it to a caller in plain words. |
| Education | School offices | Load term dates and school rules for parents who phone in | A parent asks when the holiday starts, and the agent reads the date from the calendar file. |
| Property management | Building managers | Let tenants ask about house rules without waiting for an office | A 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.
Any n8n with a public address that ElevenLabs can reach, plus a Qdrant database that your n8n can call.
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.
| Need | Detail |
|---|---|
| n8n | On n8n Cloud or on a server of your own, with a public address |
| OpenAI | An API key, for the two chat models and the embeddings |
| Qdrant | The address of an instance and its API key |
| Google Drive | A folder with your documents and an OAuth2 credential |
| ElevenLabs | An account with an agent that can call a webhook tool |
workflow.json.OpenAI, OpenAI Chat Model, Embeddings OpenAI and Embeddings OpenAI1.Qdrant Vector Store and Qdrant Vector Store1.api-key and your Qdrant key, and select it in Create collection and Refresh collection.YOUR_COLLECTION with your collection’s name. In the two HTTP requests also replace YOUR_QDRANT_URL with your Qdrant host.Get folder and Download Files, and replace YOUR_FOLDER_ID in Get folder with your folder’s ID.Listen. In ElevenLabs, add a Webhook tool to your agent with the method POST, that address and one body parameter named question.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.
| To change | Where |
|---|---|
| The documents | The folder in Get folder |
| The chunk size | 300 and 30 in Token Splitter |
| The chunks per answer | The Limit of Vector Store Tool, 4 by default |
| When the agent searches | The name and description of Vector Store Tool |
| The answering models | OpenAI and OpenAI Chat Model |
| The conversation | The session key voice-rag-chat in Window Buffer Memory |
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.
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.
| Node | What it does | What to know |
|---|---|---|
Create collection | Sends a PUT that makes a collection with 1536 dimensions and cosine distance | Its On Error setting is Continue, so an existing collection does not stop a later run |
Refresh collection | Posts a delete with an empty filter | It is meant to remove every point before a reload |
Get folder | Lists the files directly in your folder | It returns up to 50 files and skips subfolders |
Vector Store Tool | Named company, with a description written in Italian | The description decides when the agent searches, so rewrite it in your language |
Window Buffer Memory | Keeps five exchanges under a fixed key | Every caller shares one conversation |
Four services can bill a run, and the load step wipes the collection first. One model default needs a look.
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 theretext-embedding-3-small. Another embedding model needs its own size and a new collectionvoice-rag-chat, so every caller shares one conversation. n8n drops it after an hour without useAn 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.
workflow.json: the workflow as n8n exports it, 18 nodes and five sticky notes. It holds no credential.README.md: these notes.Create collection sent a POST to /collections/<name> with a body of {"filter": {}}, which is a points filter.vectors setting. The node now sends a PUT with a vector size of 1536Cosine, and its On Error setting is Continue, so a second run does not stop when the collectionWindow Buffer Memory had no session setting. Its default reads a sessionId field that a webhook call does notvoice-rag-chat.YOUR_QDRANT_URL, YOUR_COLLECTION and YOUR_FOLDER_ID. The original copy wroteQDRANTURL, COLLECTION and a sample folder name after an equals sign.workflow.json.OpenAI, OpenAI Chat Model, Embeddings OpenAI and Embeddings OpenAI1.Qdrant Vector Store and Qdrant Vector Store1.YOUR_COLLECTION with your collection's name.api-key and your Qdrant key as its value. Select it inCreate collection and Refresh collection. In both, replace YOUR_QDRANT_URL with your Qdrant host, with its portYOUR_COLLECTION with the same collection name.Get folder and Download Files. In Get folder, replaceYOUR_FOLDER_ID with the ID of your folder, the last part of its web address.Listen. It ends in test_voice_message_elevenlabs.question, a string whose value the model fills in from the conversation.Loading the documents runs from When clicking ‘Test workflow’:
Create collection makes the collection in Qdrant. Refresh collection then posts a delete of every point, with anGet folder lists the files directly inside your folder, up to 50. Download Files downloads each one, and turns aQdrant Vector Store1 stores them. Default Data Loader reads each file's binary data and picks a loader by fileToken Splitter cuts the text into chunks of 300 tokens that overlap by 30. Embeddings OpenAI1 turns eachAnswering runs from the webhook:
Listen takes a POST on the path test_voice_message_elevenlabs and waits for Respond to ElevenLabs to answer.AI Agent takes body.question from the request as its message. OpenAI is its chat model, and `Window BufferVector Store Tool, named company. Qdrant Vector Store finds the four closest chunks, usingEmbeddings OpenAI for the question, and OpenAI Chat Model writes an answer from them.Respond to ElevenLabs sends the first item back as JSON, {"output": "..."}, and the ElevenLabs agent speaks it.AI Agent, and tell the ElevenLabs agent how to behave inVector Store Tool. The description is written in Italian, soToken Splitter.Vector Store Tool, 4 by default.OpenAI and OpenAI Chat Model. The file sets no model, so n8n fills in its own default.Embeddings OpenAI and Embeddings OpenAI1. Keep them the same, and change the vector size inCreate collection to match.gpt-5-mini. OpenAI's deprecations page, read ongpt-5.6-terra as the replacement. Choose anothertext-embedding-3-small, is not on that page.Refresh collection expects every point totext-embedding-3-small. A different embedding model needs its own size and a newGet folder reads only the files directly in the folder, not its subfolders.NOTICE.md 664 B README.md 7 KB workflow.json 14 KB
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…
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…
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…
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…
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…
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…