AI Customer Support Automation — WhatsApp, Ollama & Qdrant
A fully self-hosted AI support agent that answers customer questions on WhatsApp and web chat, grounded in a private knowledge base — with no message content leaving the host infrastructure.
Project overview
A reference build showing how an AI support agent runs end to end on infrastructure you control. It accepts customer messages from WhatsApp Business Cloud and an embedded web chat, answers them from a private knowledge base, captures leads and raises tickets — with every model call served by a locally hosted LLM, so no message content is sent to a third-party AI provider. We publish it as an open workflow because the architecture, not the copy, is the useful part: it is the same shape we deploy for support automation engagements, with the company name, industry, language and service menu as configuration.
The challenge
Support automation usually forces a trade. Hosted AI services are straightforward to adopt but require sending customer conversations to a third party, which rules them out for businesses handling regulated or commercially sensitive data. Self-hosting solves that, but introduces the problems a managed service hides: conversations that lose context between messages, duplicate replies when a channel retries a webhook, and an agent with no grounding that answers plausibly but wrongly. The build had to work across two channels with different message shapes, hold context across a conversation, and stay accurate without any hosted model.
Our solution
Two entry points — a WhatsApp Business Cloud webhook and an n8n web chat trigger — normalise into one internal message format, so a single agent path serves both channels. WhatsApp messages are filtered to text and deduplicated in Redis by message ID, which is what stops a retried webhook producing a second reply. Redis also holds conversation memory, letting the workflow distinguish a first-time visitor from a returning one and greet accordingly. Anything that is not a greeting routes to an AI agent running Ollama locally, which retrieves grounding context from a Qdrant vector collection so answers come from the knowledge base rather than the model's general knowledge. Google Sheets serves as the lookup source for product and property data, and as the write target for new leads and support tickets. The reply returns on whichever channel the customer used.
How we approached it
We built the channel layer first, because two intake paths with different message shapes are the part most likely to break later: WhatsApp and web chat normalise into one internal format before anything else runs, so the agent path stays single. Redis went in next for deduplication — a retried webhook producing a second reply is the failure customers notice fastest — and then for conversation memory. Only after that did we add the model: Ollama locally, with Qdrant retrieval so answers come from the knowledge base rather than the model's general knowledge. Google Sheets is deliberately the system of record for lookups and lead capture, because it is what a non-technical operator can actually maintain after handover.
The results
Demonstrates a complete support-automation stack that runs without any hosted AI dependency: grounded answers from a private Qdrant collection, conversation state and deduplication in Redis, and lead and ticket capture written back to the business's own systems. It is the architecture we start from for support automation work, adapted to the client's channels, knowledge base and escalation rules.
Key features
Services provided
- AI Automation
- n8n Workflow Development
- RAG & Knowledge Assistants
- AI Chatbots & Conversational AI
- Vector Databases & Semantic Search
