WhatsApp + Google Docs: faster support replies
Your support team already has the right answers. They’re just buried in Google Docs, scattered across versions, and impossible to find when a customer is waiting on WhatsApp.
This hits support leads hardest, but product specialists and knowledge managers feel it too. With WhatsApp Docs automation, you stop hunting through docs and start sending consistent replies in minutes, even when the customer sends a voice note or a file.
This workflow turns Google Docs into a living knowledge base, then uses AI to pull the right excerpt and draft a clean WhatsApp response. You’ll see how it works, what you need, and what to watch out for.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: WhatsApp + Google Docs: faster support replies
flowchart LR
subgraph sg0["WhatsApp Flow"]
direction LR
n0@{ icon: "mdi:robot", form: "rounded", label: "Knowledge Base Agent", pos: "b", h: 48 }
n1@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model", pos: "b", h: 48 }
n2@{ icon: "mdi:vector-polygon", form: "rounded", label: "Embeddings OpenAI", pos: "b", h: 48 }
n4@{ icon: "mdi:memory", form: "rounded", label: "Simple Memory", pos: "b", h: 48 }
n5@{ icon: "mdi:cube-outline", form: "rounded", label: "MongoDB Vector Search", pos: "b", h: 48 }
n11["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/whatsapp.svg' width='40' height='40' /></div><br/>WhatsApp Trigger"]
n12@{ icon: "mdi:robot", form: "rounded", label: "OpenAI", pos: "b", h: 48 }
n13@{ icon: "mdi:robot", form: "rounded", label: "OpenAI1", pos: "b", h: 48 }
n14@{ icon: "mdi:cog", form: "rounded", label: "Extract from PDF", pos: "b", h: 48 }
n15@{ icon: "mdi:cog", form: "rounded", label: "Extract from XLS", pos: "b", h: 48 }
n16@{ icon: "mdi:cog", form: "rounded", label: "Extract from XLSX", pos: "b", h: 48 }
n17@{ icon: "mdi:swap-vertical", form: "rounded", label: "Map JSON", pos: "b", h: 48 }
n18["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Map file extensions"]
n19@{ icon: "mdi:swap-vertical", form: "rounded", label: "Map document prompt", pos: "b", h: 48 }
n20@{ icon: "mdi:swap-vertical", form: "rounded", label: "Map image prompt", pos: "b", h: 48 }
n21@{ icon: "mdi:swap-vertical", form: "rounded", label: "Map text prompt", pos: "b", h: 48 }
n22["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/whatsapp.svg' width='40' height='40' /></div><br/>Gets WhatsApp Voicemail Sour.."]
n23["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/whatsapp.svg' width='40' height='40' /></div><br/>Gets WhatsApp Image Source URL"]
n24["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/whatsapp.svg' width='40' height='40' /></div><br/>Gets WhatsApp Document Sourc.."]
n25["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Download Voicemail"]
n26["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Download Image"]
n27["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Download Document"]
n28@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Route Types", pos: "b", h: 48 }
n29@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Route Document Types", pos: "b", h: 48 }
n30["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/whatsapp.svg' width='40' height='40' /></div><br/>Send Unsupported Response"]
n31["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/whatsapp.svg' width='40' height='40' /></div><br/>Send Response"]
n12 --> n0
n13 --> n20
n17 --> n19
n28 --> n21
n28 --> n22
n28 --> n23
n28 --> n24
n4 -.-> n0
n26 --> n13
n21 --> n0
n14 --> n19
n15 --> n17
n20 --> n0
n11 --> n28
n27 --> n18
n2 -.-> n5
n16 --> n17
n1 -.-> n0
n25 --> n12
n19 --> n0
n18 --> n29
n0 --> n31
n29 --> n19
n29 --> n14
n29 --> n17
n29 --> n15
n29 --> n16
n29 --> n30
n5 -.-> n0
n23 --> n26
n24 --> n27
n22 --> n25
end
subgraph sg1["When clicking "Execute Workflow" Flow"]
direction LR
n3@{ icon: "mdi:play-circle", form: "rounded", label: "When clicking 'Execute Workf..", pos: "b", h: 48 }
n6@{ icon: "mdi:robot", form: "rounded", label: "Document Section Loader", pos: "b", h: 48 }
n7@{ icon: "mdi:robot", form: "rounded", label: "Document Chunker", pos: "b", h: 48 }
n8@{ icon: "mdi:cube-outline", form: "rounded", label: "MongoDB Vector Store Inserter", pos: "b", h: 48 }
n9@{ icon: "mdi:vector-polygon", form: "rounded", label: "OpenAI Embeddings Generator", pos: "b", h: 48 }
n10@{ icon: "mdi:cog", form: "rounded", label: "Google Docs Importer", pos: "b", h: 48 }
n7 -.-> n6
n10 --> n8
n6 -.-> n8
n9 -.-> n8
n3 --> n10
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n11,n3 trigger
class n0,n12,n13,n6,n7 ai
class n1 aiModel
class n4 ai
class n5,n8 ai
class n2,n9 ai
class n28,n29 decision
class n25,n26,n27 api
class n18 code
classDef customIcon fill:none,stroke:none
class n11,n18,n22,n23,n24,n25,n26,n27,n30,n31 customIcon
The Problem: Support replies are slow, inconsistent, and hard to scale
When a WhatsApp message comes in, your agent does the same routine: open a doc, search for a keyword, scroll, copy a paragraph, rewrite it to fit the situation, then double-check they didn’t contradict the latest product update. Do that 30 times a day and it’s not just “a little inefficient.” It’s mentally exhausting. And the worst part is that customers feel the delay immediately, so your team starts rushing, which is when mistakes slip in. Wrong plan limits. Outdated setup steps. A confident tone on an uncertain answer. That’s how trust gets dented.
It adds up fast. Here’s where it breaks down in real life.
- Agents waste about 5–10 minutes per question just locating the “right” paragraph in Google Docs.
- Two people answer the same question differently, which creates confusion and follow-up tickets.
- Voice notes and screenshots slow everything down because someone has to translate, interpret, then respond.
- PDFs and spreadsheets arrive in chat, and your team either ignores them or manually extracts what matters.
The Solution: Turn Google Docs into WhatsApp-ready answers (automatically)
This workflow is built around a simple idea: your Google Docs are already your product truth, so treat them like a real knowledge base. First, you ingest the docs into a searchable store by splitting them into smaller sections (“chunks”) and creating embeddings (AI-friendly vectors) for each chunk. Those chunks get stored in MongoDB Atlas Vector Search with metadata like doc ID and source. Then, when a WhatsApp message arrives, the workflow detects what type it is (text, audio, image, or document), converts it into usable text, and searches your knowledge base for the closest matches. Finally, an AI agent uses those matched sections as grounded context to draft a concise, on-brand reply and sends it back via WhatsApp.
The workflow starts with either a manual ingestion run (to pull in Google Docs) or a WhatsApp incoming message trigger. From there, content gets normalized (transcribed, extracted, or analyzed), matched against the vector store, and turned into a clean support answer your customer can actually use. No frantic tab switching.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say your inbox gets 30 WhatsApp questions a day. Manually, if each one takes about 6 minutes to search docs, confirm you’re not quoting an old section, and rewrite the reply, that’s roughly 3 hours daily spent on “finding and rephrasing.” With this workflow, the agent usually only needs a quick review before hitting send, maybe a minute per message. Even with a bit of AI processing wait time in the background, you’re realistically getting about 2 hours back every day, and responses go out while the customer still cares.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- WhatsApp Cloud API (Meta) to receive and send messages
- Google Docs for your product documentation source
- MongoDB Atlas to store and search embeddings
- OpenAI API key (get it from your OpenAI dashboard)
Skill level: Intermediate. You’ll connect accounts, paste a doc URL, and create a MongoDB vector search index once.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
Google Docs get ingested on demand. You run the ingestion workflow when you add or update documentation. It pulls the doc, splits it into smaller segments, and prepares each segment for fast searching.
Embeddings make the docs “searchable by meaning.” OpenAI generates embeddings for each chunk, then the workflow inserts those chunks into MongoDB Atlas Vector Search along with metadata like source and doc ID. That’s what enables semantic matching later (not just keyword search).
Incoming WhatsApp messages get normalized. Text goes straight through. Voice notes are downloaded and transcribed. Images are downloaded and analyzed so a screenshot of an error still becomes a useful query. Documents get downloaded and parsed based on file type (PDF, XLS, XLSX).
The AI agent answers using retrieved context. The workflow embeds the incoming query, looks up the closest documentation chunks in MongoDB, then uses a knowledge-base agent (with a memory buffer for conversation context) to draft a concise WhatsApp reply and send it back.
You can easily modify the system prompt to match your tone and business rules based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the WhatsApp Trigger
Set up the incoming WhatsApp webhook that starts the conversational flow and routes messages by type.
- Add and open WhatsApp Incoming Trigger.
- Credential Required: Connect your whatsAppTriggerApi credentials.
- Ensure Updates includes
messagesso the workflow receives inbound content. - Connect WhatsApp Incoming Trigger to Route Message Types.
Step 2: Connect Google Docs for Knowledge Ingestion
This branch loads a Google Doc and inserts it into the MongoDB vector store for later retrieval by the agent.
- Open Manual Run Trigger and leave default settings (no fields required).
- Open Google Docs Retriever and set Operation to
get. - Set Document URL to
https://docs.google.com/document/d/[YOUR_ID]. - Credential Required: Connect your googleDocsOAuth2Api credentials in Google Docs Retriever.
- Confirm the flow Manual Run Trigger → Google Docs Retriever → MongoDB Vector Inserter.
Step 3: Set Up Vector Storage and Embeddings
These nodes split the document, generate embeddings, and store them in MongoDB so the agent can retrieve knowledge later.
- Open Document Segment Loader and keep JSON Data set to
={{ $json.content }}with metadatadoc_idset to={{ $json.documentId }}. - Open Recursive Text Splitter and set Chunk Size to
3000and Chunk Overlap to200. - Open Embedding Generator and keep it connected to MongoDB Vector Inserter via the ai_embedding connection.
- Credential Required: Connect your openAiApi credentials in Embedding Generator.
- Open MongoDB Vector Inserter and confirm Mode is
insertand Vector Index Name isdata_index. - Credential Required: Connect your mongoDb credentials in MongoDB Vector Inserter.
Step 4: Set Up Message Routing and Media Retrieval
This section routes WhatsApp messages by type and fetches/downloads media before analysis or parsing.
- Open Route Message Types and verify the four rules use
={{ $json.messages[0].type }}to routetext,audio,image, anddocument. - In Fetch Voicemail Media URL, set Media Get ID to
={{ $json.messages[0].audio.id}}and connect whatsAppApi credentials. - In Fetch Image Media URL, set Media Get ID to
={{ $json.messages[0].image.id }}and connect whatsAppApi credentials. - In Fetch Document Media URL, set Media Get ID to
={{ $json.messages[0].document.id }}and connect whatsAppApi credentials. - Open Download Voice Media, Download Image Media, and Download Document Media and set URL to
={{ $json.url }}with Authentication set togenericCredentialTypeand Generic Auth Type tohttpHeaderAuth. - Credential Required: Connect your httpHeaderAuth credentials to all three download nodes.
- Open Normalize File Types and keep the JS Code as provided:
let requests = $("Download Document Media").all() ... return requests;. - Open Route Document Formats and confirm rules match mime types like
application/pdf,application/vnd.ms-excel, andapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet.
Step 5: Set Up AI Processing and Prompt Composition
These nodes build prompts for text, images, and documents, and connect AI services for translation and vision analysis.
- Open Compose Text Prompt and set Text to
={{ $json.messages[0].text.body }}. - Open Compose Image Prompt and set Text to
=User image description: {{ $json.content }} User image caption: {{ $('Route Message Types').item.json.messages[0].image.caption }}. - Open Compose Document Prompt and set Text to
=Parsed text: {{ $json.text || $json.data || $json }} Caption text: {{ $('Route Message Types').item.json.messages[0].document.caption }} MimeType: {{ $('Fetch Document Media URL').item.json.mime_type }}. - Open Audio Translator AI and confirm Resource is
audioand Operation istranslate. - Credential Required: Connect your openAiApi credentials in Audio Translator AI and Image Analyzer AI.
- Open Image Analyzer AI and confirm Operation is
analyzewith Input Type set tobase64.
Step 6: Configure the Knowledge Agent and WhatsApp Replies
This step connects the knowledge retrieval toolset and sends replies back to WhatsApp.
- Open Knowledge Hub Agent and keep Text set to
={{ $json.text }}. - Ensure OpenAI Chat Engine is connected as the language model to Knowledge Hub Agent.
- Credential Required: Connect your openAiApi credentials in OpenAI Chat Engine.
- Ensure MongoDB Vector Lookup is connected as the tool to Knowledge Hub Agent with Mode set to
retrieve-as-tool, Tool NameproductDocs, and Vector Index Namedata_index. - Credential Required: Connect your mongoDb credentials in MongoDB Vector Lookup.
- Open Session Memory Buffer and set Session Key to
=memory_{{ $('WhatsApp Incoming Trigger').item.json.contacts[0].wa_id }}. - Open Send WhatsApp Reply and set Text Body to
={{ $json.output }}with Recipient Phone Number set to={{ $('WhatsApp Incoming Trigger').item.json.messages[0].from }}. - Credential Required: Connect your whatsAppApi credentials in Send WhatsApp Reply and Send Unsupported Notice.
[YOUR_ID] in Send WhatsApp Reply and Send Unsupported Notice with your real WhatsApp phoneNumberId.Step 7: Test and Activate Your Workflow
Verify the knowledge ingestion, media parsing, and reply flow before enabling production use.
- Click Execute Workflow on Manual Run Trigger to confirm Google Docs Retriever inserts vectors into MongoDB Vector Inserter.
- Send a test WhatsApp text, audio, image, and document to verify each branch from Route Message Types and Route Document Formats.
- Successful execution ends with Send WhatsApp Reply returning the AI response in WhatsApp.
- When testing is complete, switch the workflow to Active to accept live WhatsApp messages.
Common Gotchas
- WhatsApp (Meta) credentials can expire or need specific permissions. If things break, check your Meta app settings and token status first.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.
Frequently Asked Questions
Plan on about 60–90 minutes if you already have WhatsApp and MongoDB ready.
No coding required. You’ll mostly be connecting accounts and pasting in IDs, URLs, and prompts.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in OpenAI usage (usually a few cents per conversation, depending on length) and MongoDB Atlas costs based on storage and search usage.
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, and it’s worth doing. You can store separate docs with separate metadata (like product name) during ingestion, then adjust the Knowledge Hub Agent prompt to select the right “source” based on the WhatsApp thread or a keyword. Many teams also customize the Compose Text Prompt / Compose Image Prompt / Compose Document Prompt steps so the agent always answers in the right tone, includes a short checklist, and ends with the same escalation question.
Usually it’s an expired access token or missing Meta permissions for the WhatsApp Cloud API. Double-check your Meta app, make sure the WhatsApp business account is connected, then update the credentials in n8n. If it fails only on media messages, confirm the workflow can fetch media URLs and that the HTTP Request node can download them.
On n8n Cloud Starter, you can handle a few thousand executions per month, which is enough for many small support teams. If you self-host, there’s no hard execution cap, but your server size and OpenAI rate limits become the practical ceiling. For most setups, this workflow can comfortably process several messages per minute, including media, as long as you’re not doing huge file parsing on a tiny VPS.
Often, yes, because this is not a simple two-step “when message arrives, send reply” automation. You’re doing routing, file downloads, transcription or image analysis, vector search, and multi-turn memory, which gets expensive or awkward in Zapier and Make. n8n also gives you the option to self-host, which matters when WhatsApp volume grows. That said, if you only need auto-responders or basic keyword replies, Zapier or Make can be quicker to launch. If you’re unsure, Talk to an automation expert and get a straight recommendation.
Once this is running, your docs stop being “something people should read” and start being something your support channel actually uses. Honestly, that shift is where the speed and consistency come from.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.