Live in production replacing a DTMF menu, with caller lookups cut from 3–5 seconds to about 0.2 seconds.
The problem
The inbound line was a traditional press-1-press-2 menu. Callers were routed by what they pressed, not by who they were — so existing customers often landed in a generic queue instead of with the team that managed their account. The reps taking transferred calls had no Dynamics licences, so they had no context on who was calling either.
What I did
- Built a real-time voice agent in Copilot Studio on Dynamics 365 Contact Center. Identity checks, business-hours gating and routing are deterministic; open questions and FAQs are left to the generative model.
- Wired a caller lookup against the existing SQL database through Power Automate, then prototyped a Dataverse routing cache keyed on normalised phone number to replace the slower live query.
- Pulled routing into one shared “bucket route” topic, so every entry path checks for a matched customer first and sends them to their account team’s queue before falling back to a generic one.
- Built a screen pop for unlicensed reps: a Power Automate HTTP flow returns an HTML card that Teams opens automatically for incoming PSTN calls — showing the caller’s own transcribed words, not just a summary.
- Added a nightly export of call transcripts to SharePoint for QA review.
- Ran a full ALM path — local YAML → dev → customer sandbox → managed production — with pre-export checks for components, topic-to-flow links and secrets.
Result
The agent went live in production with the old menu kept as a rollback path. Caller lookups dropped from 3–5 seconds to about 0.2 seconds, and post-go-live fixes shipped as a single versioned release to sandbox and production within a day.