La sfida
When you have thousands of students on different learning paths, the support team ends up spending most of its time answering the same course questions over and over. The challenge wasn't just automating replies — it was doing it without leaking premium content to students who hadn't paid for it. Every student needed answers filtered to exactly what they'd purchased.
La soluzione
An AI chatbot that reads course materials and answers in plain language, 24 hours a day. Each student can only access knowledge from courses they've purchased — the system reads every user's membership profile and builds the retrieval context accordingly, before querying any course materials. The tone and behavior are configurable by question type without any technical intervention. The support team steps in only for cases that require human judgment.
Risultati
🔐 40k+ questions/year handled without human intervention
📉 Human support load reduced dramatically
🎯 Answer built only from that user's purchased courses
⚡ Natural language response within 2–3 seconds, 24h a day
🔧 Tone and context configurable per scenario without technical changes
Stack tecnico
- Java + RESTHeart
- AWS Bedrock (Claude Sonnet)
- MongoDB Atlas Vector Search (RAG)
- Angular SPA
- AWS ECS Fargate + CloudFront
- Memberium / WordPress (auth + tag membership)
- JWT
The premium content access problem
A generic chatbot answers from the entire knowledge base regardless of who’s asking. For a training platform with content at different price points, this is a real problem: a basic student must not receive answers drawn from advanced material they haven’t purchased. The chatbot needs to know each student — not just answer questions. And the restriction has to hold regardless of how a question is phrased.
How the filter works
When a student asks a question, the system first checks their membership profile and builds the retrieval boundary: only materials from courses that user has purchased are considered when searching for relevant documents. This isn’t a filter applied after generating a response — it’s a restriction built into the retrieval step itself. Students on the basic plan cannot access premium content, even by accident, no matter how they word their question.
The architecture: RAG with per-user context
The system works in three distinct phases. First: the user’s identity is retrieved from the WordPress membership system via JWT and their membership tags are verified. Second: a vector search runs on MongoDB Atlas, scoped only to the embeddings of materials that user is authorized to access. Third: the response is generated by Claude Sonnet on AWS Bedrock, using only the documents retrieved within that boundary as context. Everything runs on ECS Fargate, with no servers to manage.
The support team handles the real cases
Simple questions — where’s the lesson, how does this module work, when does the next cohort start — go to the chatbot. The support team steps in only when a question requires human judgment or context that goes beyond the available course materials. With 40,000 questions a year handled automatically, the workload drops significantly and the quality of assistance on complex cases goes up.