How We Reduced Customer Support Tickets by 40% with an AI Chatbot Built in Laravel
How We Reduced Customer Support Tickets by 40% with an AI Chatbot Built in Laravel
In January 2026, our customer support team was drowning. We had 1,200 support tickets per month for a SaaS product with 8,000 active users. The average first-response time was 4.2 hours. Our team of four support agents was burned out, and customer satisfaction scores were declining.
Three months later, support tickets dropped to 720 per month — a 40% reduction. First-response time for the tickets that remained fell to 12 minutes. Customer satisfaction scores increased by 18 points.
The difference was an AI chatbot built in Laravel using the framework's AI SDK.
The Problem
Our product is a project management tool for construction companies. The user base is not technical. Support questions fall into predictable categories:
- Account and billing (35%)
- Feature how-to (30%)
- Bug reports (20%)
- Integration issues (10%)
- Everything else (5%)
The first two categories — 65% of all tickets — are repetitive. The answers exist in our documentation. The problem is that users cannot find the answers.
Why We Built Our Own
We evaluated Intercom Fin, Zendesk AI, and Ada before deciding to build our own. Three reasons pushed us toward a custom solution:
Data sovereignty. Sending conversation logs through a third-party SaaS tool was a dealbreaker for several of our enterprise accounts.
Integration depth. We needed the chatbot to query our application database directly.
Cost. At 8,000 active users, the pricing for AI-powered support platforms ranged from $2,000 to $5,000 per month. Building on Laravel with direct API access to Claude cost us approximately $400 per month.
The Architecture
The system consists of:
- Chat Controller — API endpoint with rate limiting
- Conversation Service — Builds context, calls Claude, processes responses
- Context Builder — Pulls from system prompt, documentation, and conversation history
- Response Processor — Extracts actions and formats responses
- Escalation System — Auto-creates support tickets when needed
The Training Data Strategy
The chatbot is only as good as the documentation it draws from. We created a support_documents table with 247 entries sourced from:
- Existing help articles (120 entries), rewritten in conversational format
- Support ticket history (80 entries), anonymized and structured
- Feature documentation (30 entries)
- Billing and account policies (17 entries)
Three Months of Production Results
Month 1: Calibration
Support tickets decreased by 22%. Main issues:
- Hallucinated features (fixed by tightening the system prompt)
- Inability to handle multi-step questions (fixed by increasing max tokens)
- Tone mismatch (fixed by rewriting tone guidelines)
Month 2: Optimization
Added semantic search using pgvector. Support tickets decreased by 35% cumulative.
Month 3: Maturation
The chatbot handled 72% of all incoming support conversations without escalation. Support tickets decreased by 40% cumulative.
Cost Breakdown
- Claude API calls: $380/month average
- Database storage: ~$5/month
- Development time: One-time (2 developers, 3 weeks)
- Ongoing maintenance: ~4 hours/month
Total monthly operating cost: approximately $385 for 8,000 users.
What We Would Do Differently
Start with fewer documents, higher quality. We loaded 247 documents on day one. About 80 of them were rarely triggered.
Build analytics earlier. We did not track which questions the chatbot failed on until Month 2.
Make the escalation path more visible. Adding a prominent "Talk to a human" button improved user satisfaction.
Version the system prompt. Storing the prompt in the database would have enabled A/B testing.
Conclusion
An AI support chatbot is not a weekend project, but it is also not a moonshot. With Laravel's AI SDK, a clear documentation strategy, and a well-designed escalation path, we reduced support tickets by 40% and cut response times by 95% for the tickets that remain.
The key insight is that the chatbot does not need to answer every question. It needs to answer the 65% of questions that are repetitive, documented, and straightforward. The remaining 35% still needs humans — but those humans now have more time, more context, and better tools.