WhatsApp Support Bot with Google Drive RAG, GPT-4.1-mini and Cohere Reranking
WhatsApp RAG Agent (Text + Voice) with Weekly Google Drive Sync
One-line summary : Answers WhatsApp in under 100 words, understands voice notes, and retrieves trusted answers from your Google Drive docs (RAG) kept fresh weekly.
What this template does
Reply to WhatsApp messages* in a polite, human tone with ≤100 words*. Understands text and voice notes**: auto-downloads audio and transcribes to text. Retrieves answers from your knowledge base (RAG): Google Drive docs → chunk → embed → store in Supabase → rerank with Cohere. Keeps short-term memory across the conversation to avoid repetition. Weekly doc sync** from a selected Google Drive folder so non-technical staff can update content without touching n8n.
Why it matters
Zero busywork:** Update a Google Doc; the bot learns it on the next sync. Trustworthy answers:* Responses come from your* vetted docs, not random web text. Voice-first friendly:** Handles the WhatsApp reality of “send a voice note.” Safer by design:** Guardrails—no pricing unless in KB, no pushy sales, no medical advice.
Triggers
WhatsApp Trigger:** Receives incoming messages (text or audio). Google Drive Trigger (weekly):** Detects new/updated files in the chosen folder for ingestion.
App credentials required
WhatsApp Business Cloud** (App ID, Token, Phone Number ID) OpenAI** (Chat + Embeddings) Cohere** (Rerank) Supabase** (SUPABASE_URL, ANON_KEY) Google Drive** (OAuth2) + target Folder ID
Suggested environment variables
WHATSAPP_APP_ID= WHATSAPP_TOKEN= WHATSAPP_PHONE_NUMBER_ID= OPENAI_API_KEY= COHERE_API_KEY= SUPABASE_URL= SUPABASE_ANON_KEY= GDRIVE_FOLDER_ID= RAG_TABLE_NAME="documents" # table to store vectors/metadata MAX_ANSWER_WORDS=100 # guardrail for concise replies
Architecture overview
Answer-time lane (RAG Tool):**
Receive WhatsApp message → 2) Transcribe audio if present → 3) Maintain short-term memory → 4) Retrieve from Supabase vectors (topK) → 5) Rerank with Cohere → 6) Compose ≤100-word reply with sources → 7) Send on WhatsApp. Ingest lane (Weekly Sync):** A) Detect Drive file updates → B) Download & convert (Docs → text/plain) → C) Chunk (size/overlap) → D) Embed with OpenAI → E) Upsert to Supabase with metadata & hashes.
How it works (node rundown)
| # | Node | Key Inputs | Key Outputs | | -- | ------------------------------------------- | ------------------------------- | --------------------------------- | | 1 | WhatsApp Trigger | Incoming message | Raw WhatsApp payload | | 2 | Switch (Attachment presence/type) | Payload | Route: Text or Audio | | 3 | HTTP Request (Audio path) | attachments[0].data_url | Audio file | | 4 | OpenAI – Translate/ASR | Audio file | Transcribed text | | 5 | Merge | Text path + Audio path | Unified text message | | 6 | Simple Memory | Recent turns | Short-term context | | 7 | OpenAI Chat Model | Prompt + message + memory | Draft answer (tool calls allowed) | | 8 | Supabase Vector Tool (retrieve-as-tool) | Query text, topK=10 | Candidate KB passages | | 9 | Cohere Reranker | Candidates | Re-ranked context | | 10 | Send WhatsApp Message | to, body | Reply sent | | 11 | Google Drive Trigger (weekly) | Folder ID, fileUpdated | Changed files | | 12 | Set (File Id) | id from trigger | File ref | | 13 | Google Drive – Download File | Id (Docs→txt) | Raw text | | 14 | Character Text Splitter | chunkSize=2000, overlap=300 | Chunks | | 15 | Default Data Loader | Binary→Document | Clean docs | | 16 | OpenAI Embeddings (ingest) | Chunks | Vectors | | 17 | Supabase Vector Store (insert) | Table: documents | Upserted KB |
Notes
The KB Tool is the combo of steps 8–9–7 at answer time (retrieve → rerank → answer). The Ingest lane is steps 11–17 (weekly sync of your Drive folder).
Setup (7‑minute sprint)
Import the workflow JSON. Connect credentials: WhatsApp, OpenAI, Cohere, Supabase, Google Drive. Google Drive Trigger: paste your Folder ID; keep fileUpdated event. Download File: ensure Google Docs convert to text/plain. Supabase Vector Store (insert): set table name to documents (or your schema). Character Text Splitter: keep chunkSize=2000, overlap=300 (balanced recall/latency). Retrieve-as-tool: set topK=10 and enable reranker. Send WhatsApp Message mapping:
Recipient: {{$("WhatsApp Trigger").item.json.messages[0].from}} Body: {{$json.output}} Test:
Send a text and a voice note to your WhatsApp number → confirm concise answers. Drop a Google Doc into the watched folder → verify it’s chunked/embedded on the next weekly poll (or run ingest nodes once manually).
Prompt, tone & guardrails
System prompt:**
Be polite, human, and concise (≤ MAX_ANSWER_WORDS). Cite or reference only the KB content; if unknown, say so and offer to escalate. No prices unless present in the KB. No medical advice. Temperature:* start at 0.2* for factual replies. Memory window:** keep a short rolling buffer (e.g., last 4–6 turns).
Data model (minimum viable)
Table documents (example columns):
id (uuid) source_url (text) title (text) chunk (text) embedding (vector/float[] depending on extension) chunk_hash (text) updated_at (timestamp)
Indexes
Unique index on chunk_hash to dedupe Index on updated_at for syncs
Observability & ops
Log question, selected chunk ids/hashes, and final response to a DB/Sheet for QA. Add a low-confidence route (score threshold) → Slack/Telegram escalation to a human. Track latency and token usage to tune topK and chunk sizes.
Customization
Latency vs quality:** try topK=6–8 and chunkSize=1200 for speed. Languages:** ASR node can be swapped for native multilingual output. Escalation:** add channel handoff on low confidence or no KB hits. Sync cadence:* change Drive Trigger to daily* if content updates frequently.
Safety & compliance
No medical advice.** If uncertain or clinical, ask to schedule a consult or refer to the right department. PII:** Don’t log full phone numbers in plaintext analytics; hash where possible. Prices & rates:** Only answer if present in the KB; otherwise hand off to front desk.
Troubleshooting
No reply sent:* Ensure Send message* node reads {{$json.output}} (Agent’s response property). Audio path failing:** Confirm attachments[0].data_url exists and HTTP node fetches a valid file. KB not updating:** Manually execute the ingest lane; check rows in Supabase. Irrelevant answers:* Lower temperature to *0.2, increase overlap to **400, and verify Drive docs are clean and structured.
Categories & tags
Categories:** AI, Customer Support, Healthcare Ops, RAG, WhatsApp Tags:** WhatsApp, RAG, Google Drive, Supabase, OpenAI, Cohere, Voice Notes
Pricing (rough, BYO keys)
n8n:** self-host free; n8n.cloud billed by plan. OpenAI, Cohere:** usage-based by tokens/calls. Supabase:** free tier + usage; vector storage billed by size. WhatsApp Cloud:** Meta pricing per conversation.
Nodes used in workflow
WhatsApp Trigger, Switch, HTTP Request, OpenAI (ASR + Chat + Embeddings), Merge, Simple Memory, Supabase Vector Tool (retrieve), Cohere Reranker, Google Drive Trigger, Set, Google Drive – Download, Character Text Splitter, Default Data Loader.
Related Templates
Use OpenRouter in n8n versions <1.78
What it is: In version 1.78, n8n introduced a dedicated node to use the OpenRouter service, which lets you to use a lot...
AI SEO Readability Audit: Check Website Friendliness for LLMs
Who is this for? This workflow is designed for SEO specialists, content creators, marketers, and website developers who ...
Text automations using Apple Shortcuts
Overview This workflow answers user requests sent via Mac Shortcuts Several Shortcuts call the same webhook, with a quer...
🔒 Please log in to import templates to n8n and favorite templates
Workflow Visualization
Loading...
Preparing workflow renderer
Comments (0)
Login to post comments