Case study
Slack Thread Tracker (SLA + AI Triage)
Support-ops platform that ingests Slack threads, classifies EV/Auth work with Azure OpenAI (incl. images), and monitors first-reply / resolution SLAs.
Problem
Support work for eligibility and prior auth often lives in Slack channels. Without structured queues, SLA clocks, or triage, threads go unanswered, after-hours carry-over is invisible, and managers lack response-time analytics.
Solution
Built a Slack Thread Tracker FastAPI service behind the App Hub BFF:
- Signed Events API ingestion — parents, replies, reactions, full message mirror (incl. bots) for audit; auto-resolve image-only messages; team emoji reactions map to RESOLVED / ANSWERED and can seed first-reply SLA timing
- Per-workspace Slack credentials managed server-side (not in the portfolio or browser)
- AI classification: EV / Auth / other — keyword fast-path or multimodal Azure OpenAI when images are present
- AI-assisted resolution detection (vs acknowledgements / pending)
- SLA engine: first-reply & resolution deadlines, shifts, after-hours / carry-over, warning & breach stamps via APScheduler
App Hub experience
- Dashboard, resolved view, analytics, channel assignment & configuration (permission-gated) — notification users vs handling users; pre-shift HTML digest emails
- Queues and reports scoped to channels assigned to the current user in the active org
- Volume reporting in turnaround buckets (≤10 through 60+ minutes) with CSV export
- Admin chat-style thread mirror for operational review across workspaces
Architecture
Slack delivers to POST /slack/events on the .NET BFF (anonymous ingress; signature verified in Python). Authenticated App Hub users hit /slack-api/{orgId}/... with JWT + org permission checks, then the Slack service applies channel-assignment scoping.
What I Built
- Event ingestion, mirror, thread, resolve, and settings APIs
- Classification + SLA monitor background jobs
- Analytics / reports surface and App Hub integration wiring
Tech Stack
PythonFastAPIAzure OpenAIAPSchedulerSlack APISQL ServerReact.NET