The problem
A three-person support team was handling every ticket by hand: reading it, figuring out which product area it belonged to, hunting for a similar past case, then writing a reply from scratch. Urgent tickets waited behind trivial ones, first responses averaged four hours, and the tone of answers depended heavily on who picked the ticket up.
The approach
The copilot sits between the helpdesk and the team, and a human stays in charge of every send:
- Classification and routing — a .NET 8 worker service picks tickets off a Service Bus queue and uses Azure OpenAI to tag product area, severity, and sentiment. Urgent-looking tickets jump the queue and ping the right person immediately.
- Grounded drafts — for each ticket the copilot retrieves matching product documentation and similar resolved tickets, then drafts a reply with the sources listed under it. Agents edit or discard; the system never sends anything on its own.
- A feedback loop that matters — every edit an agent makes is stored. Once a week the largest gaps between draft and final answer are reviewed, and the prompts and retrieval get adjusted. The copilot improves because the team's corrections feed it, not because anyone retrains a model.
- Simple by design — no fine-tuning, no exotic infrastructure: a worker service, a queue, SQL Server, and a React review panel embedded into the helpdesk the team already used.
The result
First response time dropped from around four hours to under thirty minutes, because drafting an answer became editing an answer. Reply tone stopped depending on who was on shift, the backlog cleared within the first month, and the weekly review meeting — reading the copilot's worst misses — turned out to be the team's favourite ritual.