This workflow corresponds to n8n.io template #10924 — 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 →
{
"id": "T6qmIQKNGZtoGSts",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Voice AI Chatbot with Document Retrieval & Guardrails for Wordpress",
"tags": [
{
"id": "oFVn9SpkmyjWZwco",
"name": "Qdrant",
"createdAt": "2024-12-04T16:52:58.409Z",
"updatedAt": "2024-12-04T16:52:58.409Z"
},
{
"id": "paTcf5QZDJsC2vKY",
"name": "OpenAI",
"createdAt": "2024-12-04T16:52:10.768Z",
"updatedAt": "2024-12-04T16:52:10.768Z"
},
{
"id": "vzwUgh7P86cIspCW",
"name": "Test",
"createdAt": "2024-12-04T16:52:25.021Z",
"updatedAt": "2024-12-04T16:52:25.021Z"
}
],
"nodes": [
{
"id": "84dfbed6-1969-4b52-9984-49dfb52f7843",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
1184,
16
],
"parameters": {
"model": "gpt-5.1",
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "eac2aee4-a8aa-49f8-9246-01de9026ef61",
"name": "Window Buffer Memory",
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"position": [
1328,
16
],
"parameters": {
"sessionKey": "={{ $('Webhook').item.json.headers[\"session-id\"] }}",
"sessionIdType": "customKey",
"contextWindowLength": 200
},
"typeVersion": 1.3
},
{
"id": "0634abd7-07be-43eb-8499-63b368e43f7e",
"name": "Calculator",
"type": "@n8n/n8n-nodes-langchain.toolCalculator",
"position": [
1472,
16
],
"parameters": {},
"typeVersion": 1
},
{
"id": "87dec119-9774-407d-9512-bb30ae7614cb",
"name": "Qdrant Vector Store",
"type": "@n8n/n8n-nodes-langchain.vectorStoreQdrant",
"position": [
1600,
208
],
"parameters": {
"options": {},
"qdrantCollection": {
"__rl": true,
"mode": "list",
"value": "documents",
"cachedResultName": "documents"
}
},
"credentials": {
"qdrantApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "58656ef3-bd6a-42f1-b5a5-fa8b8a63479a",
"name": "Embeddings OpenAI",
"type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
"position": [
1584,
368
],
"parameters": {
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.1
},
{
"id": "eb62f6a3-9004-4b3c-b555-290c1804a8ad",
"name": "OpenAI Chat Model1",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
1872,
208
],
"parameters": {
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "e14baaa6-fa70-408c-bfef-63698b56807a",
"name": "Respond to Webhook",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
1808,
-192
],
"parameters": {
"options": {},
"respondWith": "binary"
},
"typeVersion": 1.1
},
{
"id": "c0711c84-945c-43a3-a704-6b7a3399a881",
"name": "Webhook",
"type": "n8n-nodes-base.webhook",
"position": [
208,
128
],
"parameters": {
"path": "7de25617-5e89-4a54-b9aa-5a353705ddc4",
"options": {
"allowedOrigins": "*"
},
"httpMethod": "POST",
"responseMode": "responseNode"
},
"typeVersion": 2
},
{
"id": "78e48172-8879-436d-b236-fd233ca0ec35",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
160,
0
],
"parameters": {
"color": 7,
"width": 428,
"height": 528,
"content": "## STEP 4 - Wordpress Agent\nInstall the Wordpress [Voicebot AI Agent plugin](https://n3wstorage.b-cdn.net/n3witalia/voice-chatbot-n8n.zip) and enter the Webhook URL in the plugin settings."
},
"typeVersion": 1
},
{
"id": "d9b56072-ee50-41ff-b5f4-be4694bbee9e",
"name": "Guardrails",
"type": "@n8n/n8n-nodes-langchain.guardrails",
"position": [
672,
128
],
"parameters": {
"text": "={{ $json.text }}",
"guardrails": {
"jailbreak": {
"value": {
"threshold": 0.7
}
}
}
},
"typeVersion": 1
},
{
"id": "0aec07f5-572a-4316-94ca-7b176cf36231",
"name": "OpenAI Chat Model2",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
656,
304
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {},
"builtInTools": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "d33b2c95-2f32-435a-893e-67daff6f3ffe",
"name": "RAG",
"type": "@n8n/n8n-nodes-langchain.toolVectorStore",
"position": [
1696,
16
],
"parameters": {
"name": "n3witalia_regreat_knowledgebase",
"description": "Retrieve the data about the business"
},
"typeVersion": 1
},
{
"id": "e8f757c1-bf0e-4b7c-9745-04ac6fa0368c",
"name": "When clicking \u2018Test workflow\u2019",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-80,
-1120
],
"parameters": {},
"typeVersion": 1
},
{
"id": "890070d2-820f-471b-8cad-fdcd89cacda4",
"name": "Embeddings OpenAI1",
"type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
"position": [
1312,
-720
],
"parameters": {
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.1
},
{
"id": "f5adb8cd-6022-4cde-a9d5-a0b239851951",
"name": "Default Data Loader1",
"type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
"position": [
1456,
-720
],
"parameters": {
"options": {
"metadata": {
"metadataValues": [
{
"name": "file_id",
"value": "={{ $('Get files').item.json.id }}"
},
{
"name": "file_name",
"value": "={{ $('Get files').item.json.name }}"
}
]
}
},
"dataType": "binary",
"binaryMode": "specificField"
},
"typeVersion": 1
},
{
"id": "0388a450-4628-4d22-a26c-3e430ea1410a",
"name": "Create collection",
"type": "n8n-nodes-base.httpRequest",
"position": [
224,
-1248
],
"parameters": {
"url": "http:///collections/test_sparse",
"method": "PUT",
"options": {},
"jsonBody": "{\n \"vectors\": {\n \"size\": 1536,\n \"distance\": \"Cosine\" \n },\n \"sparse_vectors\": {\n \"text\": { }\n },\n \"shard_number\": 1, \n \"replication_factor\": 1, \n \"write_consistency_factor\": 1 \n}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "26cb54cf-cdcf-46f1-89e7-cf942aab3647",
"name": "Recursive Character Text Splitter",
"type": "@n8n/n8n-nodes-langchain.textSplitterRecursiveCharacterTextSplitter",
"position": [
1456,
-528
],
"parameters": {
"options": {},
"chunkSize": 500,
"chunkOverlap": 50
},
"typeVersion": 1
},
{
"id": "60b6d1e3-dff7-4da7-845c-364df343d797",
"name": "Loop Over Items",
"type": "n8n-nodes-base.splitInBatches",
"position": [
800,
-976
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "21bea24b-759e-46cf-b68d-9a33207754ad",
"name": "Clear collection",
"type": "n8n-nodes-base.httpRequest",
"position": [
224,
-976
],
"parameters": {
"url": "http:/YOUR_AWS_SECRET_KEY_HERE/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"
}
]
}
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "ac2b368c-2a3c-4f2f-8e63-d185da5e3e85",
"name": "Search files",
"type": "n8n-nodes-base.googleDrive",
"position": [
528,
-976
],
"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": "list",
"value": "1RO5ByPhq2yvYLmbapTNC_kKdU5lZd4W5",
"cachedResultUrl": "https://drive.google.com/drive/folders/1RO5ByPhq2yvYLmbapTNC_kKdU5lZd4W5",
"cachedResultName": "Test Negozio"
}
},
"options": {},
"resource": "fileFolder"
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "e50584cd-c03c-4423-9c2d-f841223afeaf",
"name": "Wait 5 sec.",
"type": "n8n-nodes-base.wait",
"position": [
1760,
-960
],
"parameters": {},
"typeVersion": 1.1
},
{
"id": "286bed0a-8b87-4dbd-970c-05dd8eee54ae",
"name": "Insert file",
"type": "@n8n/n8n-nodes-langchain.vectorStoreQdrant",
"position": [
1376,
-960
],
"parameters": {
"mode": "insert",
"options": {},
"qdrantCollection": {
"__rl": true,
"mode": "list",
"value": "negozio-emporio-verde",
"cachedResultName": "negozio-emporio-verde"
}
},
"credentials": {
"qdrantApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "0333ad8f-301e-46be-ae14-15d10249b717",
"name": "Get files",
"type": "n8n-nodes-base.googleDrive",
"position": [
1072,
-960
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.id }}"
},
"options": {
"googleFileConversion": {
"conversion": {
"docsToFormat": "text/plain"
}
}
},
"operation": "download"
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "d6b9dccf-a331-426a-9927-4ffcc1c428bf",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
128,
-1056
],
"parameters": {
"color": 7,
"width": 348,
"height": 476,
"content": "## STEP 2 - Documents vectorization\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nDocuments vectorization with Qdrant and Google Drive\nChange:\n- QDRANTURL\n- COLLECTION"
},
"typeVersion": 1
},
{
"id": "2ab1d275-6389-44be-a7b7-f1b87c22552c",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
128,
-1440
],
"parameters": {
"color": 7,
"width": 352,
"height": 348,
"content": "## STEP 1 - Create collection\n\nCreate Qdrant Collection\nChange:\n- QDRANTURL\n- COLLECTION"
},
"typeVersion": 1
},
{
"id": "e46c40e6-cef5-4d2e-902e-8c209c85e99e",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
496,
-1056
],
"parameters": {
"color": 7,
"width": 1500,
"height": 476,
"content": "## STEP 3 - Add documents in Qdrant collection\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
},
"typeVersion": 1
},
{
"id": "1ee62ad7-06d6-44e6-ab5f-ccc77540333b",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
608,
0
],
"parameters": {
"color": 7,
"width": 348,
"height": 524,
"content": "## STEP 5 - Guardrail\nAdd Guardrail to prevent jailbrek\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
},
"typeVersion": 1
},
{
"id": "ca642fc5-d19f-4117-ab50-9a2858ddfaf0",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
1136,
-288
],
"parameters": {
"color": 7,
"width": 908,
"height": 812,
"content": "## STEP 6 - Generate voice\nVoicebot AI agent and generate output audio\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
},
"typeVersion": 1
},
{
"id": "3a86fc93-3718-40c1-bec6-4e557e747f69",
"name": "Voicebot AI Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
1264,
-192
],
"parameters": {
"text": "={{ $json.guardrailsInput }}",
"options": {
"systemMessage": "=You are an assistant and your name is Jarvis. You must answer questions regarding the company and be as helpful as possible.\n\nWhen you respond, especially about opening hours, take into account the current date and time {{$now}}.\n\nIf you don\u2019t have answers based on the query asked, you must say that you don\u2019t know."
},
"promptType": "define"
},
"typeVersion": 1.7
},
{
"id": "f9a2730e-3fb1-46fd-a52f-1bbb27dcf57c",
"name": "Generate audio (TTS)",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
1600,
-192
],
"parameters": {
"input": "={{ $json.output }}",
"voice": "onyx",
"options": {},
"resource": "audio"
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.7
},
{
"id": "e1b57053-a570-47c3-bac6-b9b4fd15d217",
"name": "Generate text (STT)",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
432,
128
],
"parameters": {
"options": {},
"resource": "audio",
"operation": "transcribe",
"binaryPropertyName": "audio"
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.7
},
{
"id": "36e3ffa5-6e05-4d58-913e-078a3e76f6b0",
"name": "Default response (TTS)",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
1200,
368
],
"parameters": {
"input": "=I\u2019m sorry, but I\u2019m unable to answer this question because it does not comply with our policies.",
"voice": "onyx",
"options": {},
"resource": "audio"
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.7
},
{
"id": "128b873f-6e1e-4f0a-afc2-29b926a93f39",
"name": "Respond default to Webhook",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
1360,
368
],
"parameters": {
"options": {},
"respondWith": "binary"
},
"typeVersion": 1.1
},
{
"id": "4faa2789-f44a-46db-8389-e42c1288a33b",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
512,
-1744
],
"parameters": {
"width": 912,
"height": 656,
"content": "# Voice AI Chatbot with Document Retrieval & Guardrails for Wordpress\n\n\nThis workflow implements a **complete Voice AI Chatbot system** for **Wordress** that integrates speech recognition, guardrails for safety, retrieval-augmented generation (RAG), Qdrant vector search, and audio responses. It is designed to be connected to a **WordPress Voicebot AI plugin** through a webhook endpoint.\n\nThis workflow creates a Wordpress voice-enabled AI chatbot that processes audio inputs and provides contextual responses using RAG (Retrieval-Augmented Generation) from a Qdrant vector database.\n\n## **How it works:**\n\nThis workflow powers a voice-enabled AI chatbot for WordPress that interprets audio inputs and generates contextual spoken responses using Retrieval-Augmented Generation (RAG). It begins by converting audio to text with OpenAI STT, filtering unsafe content via a guardrail model. Safe queries are passed to an AI agent equipped with contextual memory, a calculator, and a RAG tool that retrieves company-specific data from a Qdrant vector store. The system then formulates a suitable response, converts it back to audio using OpenAI TTS (\u201conyx\u201d voice), and returns it to the webhook for real-time playback.\n\n## **Setup steps:**\n\nSet up a Qdrant vector database and clear or create collections before uploading documents. Integrate Google Drive to source business documents, process them into text chunks, and store their embeddings in Qdrant. Configure a webhook to handle audio input and link multiple OpenAI accounts for STT, TTS, moderation, and chat tasks. Establish Qdrant API connections and manage conversation memory via session IDs. Finally, install and configure the WordPress Voicebot AI plugin with the workflow\u2019s webhook URL to enable real-time voice query handling.\n"
},
"typeVersion": 1
}
],
"active": true,
"settings": {
"executionOrder": "v1"
},
"versionId": "2dad0709-c252-40b0-9c5e-a76131f3e227",
"connections": {
"RAG": {
"ai_tool": [
[
{
"node": "Voicebot AI Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Webhook": {
"main": [
[
{
"node": "Generate text (STT)",
"type": "main",
"index": 0
}
]
]
},
"Get files": {
"main": [
[
{
"node": "Insert file",
"type": "main",
"index": 0
}
]
]
},
"Calculator": {
"ai_tool": [
[
{
"node": "Voicebot AI Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Guardrails": {
"main": [
[
{
"node": "Voicebot AI Agent",
"type": "main",
"index": 0
}
],
[
{
"node": "Default response (TTS)",
"type": "main",
"index": 0
}
]
]
},
"Insert file": {
"main": [
[
{
"node": "Wait 5 sec.",
"type": "main",
"index": 0
}
]
]
},
"Wait 5 sec.": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Search files": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Items": {
"main": [
[],
[
{
"node": "Get files",
"type": "main",
"index": 0
}
]
]
},
"Clear collection": {
"main": [
[
{
"node": "Search files",
"type": "main",
"index": 0
}
]
]
},
"Embeddings OpenAI": {
"ai_embedding": [
[
{
"node": "Qdrant Vector Store",
"type": "ai_embedding",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "Voicebot AI Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Voicebot AI Agent": {
"main": [
[
{
"node": "Generate audio (TTS)",
"type": "main",
"index": 0
}
]
]
},
"Embeddings OpenAI1": {
"ai_embedding": [
[
{
"node": "Insert file",
"type": "ai_embedding",
"index": 0
}
]
]
},
"OpenAI Chat Model1": {
"ai_languageModel": [
[
{
"node": "RAG",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"OpenAI Chat Model2": {
"ai_languageModel": [
[
{
"node": "Guardrails",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Generate text (STT)": {
"main": [
[
{
"node": "Guardrails",
"type": "main",
"index": 0
}
]
]
},
"Qdrant Vector Store": {
"ai_vectorStore": [
[
{
"node": "RAG",
"type": "ai_vectorStore",
"index": 0
}
]
]
},
"Default Data Loader1": {
"ai_document": [
[
{
"node": "Insert file",
"type": "ai_document",
"index": 0
}
]
]
},
"Generate audio (TTS)": {
"main": [
[
{
"node": "Respond to Webhook",
"type": "main",
"index": 0
}
]
]
},
"Window Buffer Memory": {
"ai_memory": [
[
{
"node": "Voicebot AI Agent",
"type": "ai_memory",
"index": 0
}
]
]
},
"Default response (TTS)": {
"main": [
[
{
"node": "Respond default to Webhook",
"type": "main",
"index": 0
}
]
]
},
"Recursive Character Text Splitter": {
"ai_textSplitter": [
[
{
"node": "Default Data Loader1",
"type": "ai_textSplitter",
"index": 0
}
]
]
},
"When clicking \u2018Test workflow\u2019": {
"main": [
[
{
"node": "Create collection",
"type": "main",
"index": 0
},
{
"node": "Clear collection",
"type": "main",
"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.
googleDriveOAuth2ApihttpHeaderAuthopenAiApiqdrantApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow implements a complete Voice AI Chatbot system for Wordress that integrates speech recognition, guardrails for safety, retrieval-augmented generation (RAG), Qdrant vector search, and audio responses. It is designed to be connected to a WordPress Voicebot AI plugin…
Source: https://n8n.io/workflows/10924/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Hi! I’m Amanda, a creator of intelligent automations using n8n and Make. I’ve been building AI-powered workflows for over 2 years, always focused on usability and innovation. This one here is very spe
This workflow automates customer support across multiple channels (Email, Live Chat, WhatsApp, Slack, Discord) using AI-powered responses enhanced with Retrieval Augmented Generation (RAG) and your pr
This workflow automates multi-channel AI-driven sales engagement for lead qualification, service information delivery, and consultation booking. It integrates WhatsApp, Facebook Messenger, Instagram D
YouTube Agent. Uses supabase, agent, lmChatAnthropic, outputParserStructured. Webhook trigger; 56 nodes.
This Workflow simulates an AI-powered phone agent with RetellAI with two main functions: 📅 Appointment Booking – It can schedule appointments directly into Google Calendar. 🧠 RAG-based Information Ret