An operator had bought unified routing to fix first contact resolution and it barely moved. Routing decides who takes the case; whether it closes on first touch depends on knowledge. We rebuilt the knowledge layer, then routing, then the desktop.
A service representative handling a broadband fault opened five things: the case in Dynamics, the provisioning system, the billing platform, a network status page and a shared drive of PDFs that passed for a knowledge base. No owner, no review date, no way to tell whether the troubleshooting steps on page four survived last year's platform change. People had stopped trusting them and escalated instead.
The operator had bought unified routing a year earlier expecting first contact resolution to improve. It did not, and the reason is structural. Routing decides who receives the case, not whether they can close it. If the answer does not exist in a findable, current form, the best routing engine available delivers the case to someone who also does not know, slightly faster than before.
Measurement was making it worse. Resolution was reported as cases closed within a single session, which counts a customer who calls back next day about the same fault as two first-time resolutions. The reported number flattered; the repeat contact rate told a different story. Across 86,000 contacts a month, a large share were the second or third attempt at a problem already raised elsewhere.
Entitlements were the final gap. Consumer, small business and enterprise customers had different contractual response commitments, but one generic service level agreement applied to every case. Enterprise customers ran at consumer priority unless an account manager intervened by email — creating another case.
We took these in dependency order. Knowledge first, because routing and deflection both depend on it. Then routing, then entitlements, then the desktop.
Moved the content from shared drives into knowledge articles in Dataverse on the documented lifecycle: draft, approved, scheduled, published, expired. Publishing requires approval first, the control a shared drive never has. Every article got a named owner, a review date and, where the content has a shelf life, a Publish On date and an expiration date so it leaves search rather than quietly ageing. Templates give a troubleshooting article the same shape every time, scannable during a live call. Keywords and descriptions were populated deliberately, because those fields drive search relevance. Then we mined the search logs for queries returning nothing — 640 articles published, the unowned PDFs retired.
Configured work streams per channel with classification rules setting case type, product and language before assignment. Skills attach through rules and use closest match rather than exact match, so a case is not held for a perfect fit when a capable person is free. Assignment used capacity profiles rather than unit counts: a voice conversation and three chats are not equivalent load. The published quotas shaped the design: 200 route-to-queue rules per workstream, so rules were consolidated rather than added per product variant; 100 incoming conversations a minute across channels; a message payload cap near 28 KB including metadata; and up to 15 minutes for a routing, skill or capacity change to take effect, which makes configuration a planned change, not a peak-hour one. Routing then helped, because the people it selected had something to work from.
Built entitlement templates per customer tier, terms measured in cases or hours, decrementing on resolution and attached to accounts so the right commitment applies without anyone choosing it. Service level agreements carry first response and resolution indicators per tier against business hours matching the real support windows; warning and failure actions fire to the right supervisor through Power Automate; SLAs pause where the operator waits on the customer.
Deployed voice, chat, SMS and the portal on the same unified routing, with presence and capacity shared so nobody receives a chat while on a call. The portal surfaces the published articles staff use, and an AI agent built in Copilot Studio handles repeatable questions grounded on that knowledge. Deflection used our own definition, because no credible external benchmark exists: a session counts only if no case was raised and no contact followed in the window. 23% by the end.
Replaced the five-application workflow with Copilot Service workspace, administered from the Copilot Service admin center. Experience profiles give each team the session and tab templates they need, the productivity pane suggests knowledge articles against the live case, and provisioning and billing sit inside the session through the channel integration framework rather than in browser tabs. One terminology note worth carrying into your reporting: 'agent' now means an AI agent and the humans are service representatives, so every label was renamed before the rollout to 420 of them. First contact resolution was redefined as no related contact from the same customer within the window on any channel, and the baseline restated.
Knowledge: Articles in Dataverse on the draft, approved, scheduled, published, expired lifecycle, with owner, review date, templates and deliberate keywords; backlog from zero-result searches
Routing: Per-channel work streams, rule and model-based classification, closest-match skills and capacity profiles, designed inside the 200-rule-per-workstream and 100-conversation-per-minute quotas
Entitlements and SLA: Templates per customer tier decrementing on resolution, tier-specific first response and resolution indicators against real business hours, with pause states and Power Automate escalation
Channels: Voice, chat, SMS and portal on shared routing and capacity, with a Copilot Studio AI agent grounded on the published knowledge base. Built with our Copilot for Dynamics team
Representative desktop: Copilot Service workspace with experience profiles, session and tab templates, productivity pane knowledge suggestions, and line-of-business systems embedded through the channel integration framework
Client identity withheld under confidentiality. Figures are representative of engagements of this scope.
If your organization is facing a similar challenge, here's what we learned:
Routing cannot fix first contact resolution on its own. Routing decides who receives the case. Whether it closes on first touch depends on a current, findable answer existing. Buying routing to solve a knowledge problem buys the same outcome marginally faster.
Design inside the published routing quotas, not around them. 200 route-to-queue rules per workstream and a 15-minute propagation delay are hard limits. A rule per product variant runs out of room, and a change made at peak lands when it lands.
Knowledge articles need an owner and an expiry date. Content without a review date decays silently, and people stop trusting the whole base long before anyone notices one article went stale. Scheduled expiry beats a review nobody runs.
Measure first contact resolution as no repeat contact, on any channel. Closing a case in one session is not resolution if the customer opens a chat about the same fault next morning. No credible external benchmark exists, so restate your own baseline before claiming against it.
Get the vocabulary right before rollout. An agent is now an AI agent; a human is a service representative. Dashboards, training and role names carry the old word, and fixing that later is harder. Our Dynamics 365 consulting team renames it at design time.
Microsoft Platform · Retail
Microsoft Platform · Manufacturing
Microsoft Platform · Manufacturing
Most operators measure resolution per session and miss the repeat contact on another channel. We restate the baseline honestly, then fix the knowledge layer the number depends on.
Tell us what you need. We will send curated profiles within 4 days.