Skip to content
DenisXhabrahimi
Back to work
AI & AutomationCompleted2026

Automating unstructured IT support intake and ticket routing with AI

AI-Powered IT Support Agent

IT requests reached RYCO's helpdesk as ad-hoc emails and Teams messages with no categorization, routing or SLA tracking, so every request began with manual triage.

Summary

Challenge
RYCO's IT helpdesk received a high volume of support requests as unstructured emails and Teams messages, with no consistent categorization, routing or SLA tracking — creating manual triage overhead and slow first response on repetitive issues.
What I built
A conversational intake agent in Microsoft Copilot Studio backed by a Power Automate flow: guided slot-filling for issue, requester and urgency, then validation, categorization, team routing, ticket creation in Dataverse and an automatic confirmation email. Separately, a public demo reproducing the same pattern on Groq, Vercel, Supabase and Resend.
My role
At RYCO I designed the dialog topics, the automation flow and the Teams deployment. I built the public demo end to end: conversational flow, serverless backend, ticket store and email confirmation.
Outcome
Employees describe a problem in chat and receive a ticket ID, assigned team and SLA without filling in a form. The public demo runs the same flow live — creating a real ticket record and sending a real confirmation email — with no RYCO data, endpoints or configuration involved.

Stack

Groq APICopilot Studio (original)Power Automate (original)SupabaseVercel

Solo build

My contribution
At RYCO I designed the Copilot Studio dialog topics, the Power Automate flow and the Teams deployment, as part of my Technology Officer role. The public demo — conversational flow, serverless backend, ticket store and email confirmation — I built end to end.

Detailed write-up

Overview

RYCO's IT helpdesk received a high volume of support requests via ad-hoc emails and Teams messages, with no structured intake or routing. I designed and built an automation using Microsoft Copilot Studio (conversational agent) and Power Automate (backend flow) that turns a chat message into a validated, categorized, routed ticket with an automatic confirmation. This case study describes that original design, alongside a public demo I built to showcase the same pattern without exposing any proprietary RYCO data or configuration.

Context

Designed and deployed during my role as Technology Officer at RYCO (Regional Youth Cooperation Office). Because the original implementation is tied to RYCO's Microsoft 365 tenant and cannot be shared publicly, I separately built a from-scratch public demo that reproduces the same conversational-intake → automated-ticket → routed-team → confirmation pattern on a public-friendly stack, with all organization-specific data, endpoints and configuration replaced by anonymized/reconstructed equivalents.

What I owned

At RYCO, I designed the Copilot Studio dialog topics (slot filling for issue description, requester email, urgency), the Power Automate cloud flow (validation, Dataverse ticket creation, category routing, Outlook confirmation), and the Teams deployment. Separately, I designed and built the public demo end-to-end: the Groq-based conversational flow, the Vercel serverless backend, the Supabase ticket store, and the Resend email confirmation.

The problem

IT support requests arrived as unstructured messages across email and Teams, with no consistent categorization, routing, or SLA tracking — creating manual triage overhead and slow first response for common, repetitive issue types.

Requirements

  • Guided conversational intake collecting issue description, requester email and urgency
  • Automatic validation, categorization and team routing
  • Ticket creation in a structured store with an ID returned to the user
  • Automatic confirmation (chat + email) with ticket ID, assigned team and SLA
  • For the public demo specifically: zero real organizational data, endpoints or credentials

Architecture

Original (RYCO): Employee → Microsoft Teams → Copilot Studio (dialog engine, NLU + slot filling) → Power Automate (validation, routing, ticket creation) → Dataverse (ticket storage) + ITSM system + Outlook (confirmation email). Public demo: the same five-stage shape, with Groq API (system-prompt-driven conversation) in place of Copilot Studio, a Vercel serverless function in place of the Power Automate flow, a Supabase Postgres table in place of Dataverse, and Resend in place of the Outlook connector. See the architecture diagram below.

Implementation

The public demo's frontend is a static chat UI (vanilla JS) that POSTs to a `/api/chat` Vercel function. A system prompt run on Groq's Llama 3.3 70B guides a five-step conversation — greet, collect email, collect issue details, collect urgency, then emit a structured `<TICKET_DATA>` block — which the backend parses, inserts into a Supabase `tickets` table, and confirms via a Resend HTML email, returning the ticket ID and assigned team to the chat UI.

Product screens

  • The IT support agent opening a conversation, showing quick-reply issue categories and the intake steps it walks the user through
    The public demo's intake conversation — quick-reply categories and guided slot-filling.
  • Add Ticket confirmation screenshot

    Chat reply with ticket ID, assigned team and SLA

  • Add Confirmation email screenshot

    The Resend HTML email the demo sends

Architecture and results

  • Architecture diagram of the AI-powered IT support agent, tracing an employee message through the dialog engine, backend flow, ticket store and confirmation email
    Architecture — employee message through to routed ticket and confirmation, with the original Microsoft stack mapped to its public-demo equivalents.

Technical challenges

Reconstructing the automation pattern for a public audience without carrying over any real RYCO data, internal endpoints, or Microsoft-tenant-specific configuration — while still faithfully representing the actual design (dialog engine → backend flow → structured store → confirmation) — was the main constraint on the demo build.

Solutions

Rebuilt each component with a public-stack equivalent chosen to mirror the real component's role one-to-one (Groq for Copilot Studio's dialog engine, a Vercel function for the Power Automate flow, Supabase for Dataverse, Resend for the Outlook connector), and included an explicit component-mapping table in the demo itself so the correspondence to the original Microsoft-stack design stays transparent rather than implied.

Results

The public demo's own metrics panel is explicitly labeled: figures like “~80% reduction in unstructured intake requests” and “hours → minutes first-response time” are illustrative/representative for this class of automation, not measured production numbers from RYCO — the demo carries this disclaimer directly rather than implying they were measured. What is real: the live demo runs an actual Groq-driven conversation that creates a real row in Supabase and sends a real confirmation email end-to-end.

Lessons learned

Rebuilding the same automation pattern on a completely different stack (Groq/Supabase/Resend instead of Copilot Studio/Dataverse/Outlook) clarified that the pattern itself — guided slot-filling, validation, structured storage, confirmation — is genuinely product-agnostic, not something that only works inside the Microsoft ecosystem.

Future improvements

  • Add multilingual support for the conversational intake
  • Add SLA-breach escalation alerts, matching the original Outlook-based escalation
  • Add analytics on the most common ticket categories to identify further automation candidates

Contact

Let's build
something
useful.

Hiring for AI, data or platform engineering — or building something technically difficult? Tell me what you are working on.

  • AI & data engineering
  • Forward-deployed / customer-facing engineering
  • Distributed systems
  • Applied AI & automation
  • Data platforms