Running in production across multiple customer agents, with a scheduled job taken from an 82–216 minute hang to a 4.7-second run.
The problem
Customers’ voice agents ran on different platforms in different tenants. There was no single place to see whether an agent was healthy, how calls were ending, or whether something had quietly stopped.
What I did
- Built the ingestion backend on Azure Functions and SQL. A managed Power Automate flow pushes Copilot Studio telemetry; Zoom virtual-agent events arrive via signed webhooks plus a 15-minute reconciliation timer.
- Built a React admin console with a metric explorer, per-call sentiment chart, alert rules, per-customer mutes and Entra ID role gating.
- Audited every advertised metric against live data rather than the code — and found a stub action leaving handle time permanently empty, sentiment read from the wrong table, a field requested by the wrong name (silently dropped), and escalations undercounted by a casing mismatch.
- Found the quality score was structurally unfair to generative voice agents: 91% of sessions report outcome “none”, so a resolution component worth up to 35 of 100 points almost never scored.
- Replaced a deploy action that reported success with zero functions loaded (4 times out of 4) with a publish step plus a post-deploy check that fails loudly.
- Ran successive security reviews across every endpoint and admin page, closing issues before any external exposure.
Result
Corrected metrics, business-hours-aware alerting, and CI that can’t silently ship an empty app. A scheduled flow that had been hanging for 82–216 minutes now completes in 4.7 seconds, and all 47 live functions are verified after every deploy.