ChanlChanl
Testing & Evaluation

Your CX agent hits 95% containment. Why is CSAT tanking?

Containment rate tells you how many conversations your agent handled without escalation. It says nothing about whether they went well. Here's the quality-weighted scorecard that tells the real story.

DGDean GroverCo-founderFollow
June 11, 2026
14 min read
Dashboard showing a high containment rate alongside a declining customer satisfaction score, illustrating the gap between the two metrics

Your CX agent just hit 95% containment. The dashboard is green. The weekly report to leadership looks great. Somewhere in the data nobody is pulling, your CSAT score has quietly dropped 8 points over the same quarter.

These two things are related.

Containment rate is easy to optimize. You stop escalating. Or your agent learns to keep customers in the conversation by any means -- circular responses, deflection to FAQ links, confident answers that happen to be wrong. None of those strategies improves customer experience. All of them improve your containment number.

What containment rate actually measures

Containment rate counts conversations that your agent handled without transferring to a human. That's it. A 95% rate means the agent held the conversation. It says nothing about whether the customer left satisfied, whether their issue was resolved, or whether the agent behaved appropriately.

The metric came from IVR-era call centers where "containment" meant completing a self-service interaction without asking for an agent. In that context, containment was a reasonable proxy for task completion -- deterministic IVR flows either completed or they didn't. Completing the flow usually meant the task was done.

AI agents are different. They can hold a conversation indefinitely. They can sound confident while being wrong. They can keep a customer engaged without making any progress toward resolution. The containment metric doesn't know the difference between a customer who got their refund and a customer who gave up after five minutes of circular responses.

The three ways containment rate lies to you

Confident wrong answers. An agent that incorrectly tells a customer their subscription will renew on the 15th (when it's actually the 1st) has contained the conversation. The customer thanks the agent and hangs up. The containment counter increments. Three days later, the customer's account lapses unexpectedly and they call back furious. The original conversation counted as a success in your report.

Loop containment. Some agents respond to escalation requests by restating the same information with slightly different phrasing. "I understand your concern. Let me help you with that." Followed by the same response they just gave. The customer eventually gives up and ends the call. The conversation counts as contained because no escalation occurred.

Too-late escalation. An agent that finally escalates after the customer has repeated their issue four times and explicitly asked for a human has "contained" the first 80% of the conversation. The escalation in the final 20% counts separately. But by the time the human agent picks up, the customer is already upset. The handle time increases, the CSAT takes a hit, and the damage shows up under "escalated conversations" in your report -- not under "contained conversations" where the problem actually started.

All three patterns inflate containment rate while degrading customer experience.

The metrics that tell the real story

Replacing containment rate with a quality-weighted framework requires four additional measurements. None of them require a complete analytics overhaul. They do require intent.

Resolution rate. Did the customer's issue actually get resolved? This is harder to observe directly from the conversation transcript. Useful proxies: no follow-up contact within 7 days for the same issue, a positive satisfaction signal at end of conversation, task completion confirmation (booking confirmed, refund processed, account updated). If you're already logging outcomes in your CRM, you likely have enough data to calculate this today.

Containment quality score. For each contained conversation, a scorecard evaluates whether the agent met quality standards across the dimensions that matter to your business. The output is a numeric score per conversation. Your quality containment rate is the percentage of conversations that were both contained and scored above your quality threshold. This number is the one worth showing leadership.

Escalation appropriateness. Not all escalations are equal. An agent that escalates after genuinely attempting resolution and encountering a case it can't handle is doing its job. An agent that escalates the moment a customer uses an angry tone or asks a slightly complex question is using escalation as an avoidance mechanism. Track the percentage of escalations rated "appropriate" by scoring the context before the transfer.

Post-containment contact rate. How many customers who were "contained" contacted you again within 7 days about the same issue? Cross-reference contained conversations with follow-up contacts on the same customer ID and similar issue type. A 15% post-containment rate means 1 in 7 "contained" conversations was false containment.

Quality analyst reviewing scores
Score
Good
0/100
Tone & Empathy
94%
Resolution
88%
Response Time
72%
Compliance
85%

Calculating quality-weighted containment

The composite metric that captures both efficiency and quality is quality-weighted containment:

text
Quality-Weighted Containment = Containment Rate x Mean Quality Score

If your agent contains 92% of conversations but only 75% of those score above your quality threshold, your quality-weighted containment is 0.92 x 0.75 = 0.69, or 69%.

That's still a meaningful number. But it's a very different story from "92% containment" on its own.

Track both numbers side by side. When they diverge -- containment going up, quality-weighted containment staying flat or falling -- you have an agent that's increasing containment at the expense of quality. This is the diagnostic signal that tells you to look harder at the conversations behind the number.

Yes No Yes No Yes No - customer gave up No - agent looped Conversation ends Issue resolved? Quality threshold met? Was escalation the right call? Quality containment Low-quality containment Appropriate escalation False containment Loop containment
What actually determines a high-quality containment

How to instrument this without a full rebuild

You don't need a complete observability overhaul to start measuring quality. Two additions to your existing pipeline get you most of the way there.

Add a post-conversation quality scorer. For every completed conversation, run the transcript through an AI scorer that evaluates 4-6 dimensions. Store the quality score alongside the containment indicator in your database. This takes an afternoon to implement and immediately gives you quality-weighted containment as a daily metric.

Connect Chanl's analytics pipeline to receive completed conversation data from your orchestration platform, then configure scorecard dimensions that reflect your quality standards:

scorecard-setup.ts·typescript
import Chanl from '@chanl/sdk'
 
const chanl = new Chanl({ apiKey: process.env.CHANL_API_KEY })
 
const scorecard = await chanl.scorecards.evaluate({
  conversationId: conversation.id,
  transcript: conversation.transcript,
  dimensions: [
    { name: 'resolution_accuracy', weight: 0.4 },
    { name: 'communication_quality', weight: 0.2 },
    { name: 'escalation_appropriateness', weight: 0.2 },
    { name: 'policy_compliance', weight: 0.2 }
  ]
})
 
await db.conversations.update({
  where: { id: conversation.id },
  data: {
    qualityScore: scorecard.overall,
    contained: !conversation.escalated,
    qualityWeightedContainment: !conversation.escalated ? scorecard.overall : 0
  }
})

Track post-containment contact rate with a daily job. Join your conversations table with a time-windowed self-join: conversations from the same customer within 7 days of a contained conversation that share a similar issue category. Flag these as potential false containment events and review a sample weekly.

false-containment-detector.ts·typescript
const falsePotentials = await db.query(`
  SELECT c1.id, c1.customer_id, c1.issue_category
  FROM conversations c1
  JOIN conversations c2
    ON c1.customer_id = c2.customer_id
    AND c1.issue_category = c2.issue_category
    AND c2.started_at BETWEEN c1.ended_at AND c1.ended_at + INTERVAL '7 days'
  WHERE c1.contained = true
    AND c1.started_at >= NOW() - INTERVAL '30 days'
`)

Review a sample of these flagged conversations. You'll quickly see the patterns: which intent types your agent consistently fails to resolve, which responses lead to customer give-up, and where the loop patterns occur.

Setting targets that align with quality

Replace "hit 95% containment" with "maintain 85% quality-weighted containment."

The framing shift matters more than the number. When your target is quality-weighted, the path to improvement requires both handling more conversations and handling them better. Teams that optimize purely for containment often find the fastest route to 95% runs through degraded quality. Teams targeting quality-weighted containment have to earn every percentage point legitimately.

Industry benchmarks from 2025-2026 show top-performing CX agent deployments landing between 70-80% quality-weighted containment. Raw containment rates for the same deployments are typically 85-95%. The gap between the two numbers is the quality work still in front of you.

The agent KPI framework covers how to set baseline targets before go-live. Once you're live, use quality-weighted containment as your primary efficiency metric and post-containment contact rate as your primary quality signal. When they tell different stories, the quality signal is right.

For the scorecard design itself, scorecards vs vibes covers how to build dimensions that separate high-quality from low-quality resolutions with enough precision to be actionable.

A note on escalation design

The clearest sign that a team is optimizing for containment over quality is when their escalation design is adversarial. Escalation paths buried behind confirmation dialogs, extra authentication steps, and "let me try one more thing" holding patterns are built to reduce escalation volume, not to serve customers.

If your agent escalates 10% of conversations, look at those escalations. Were they timed appropriately? Did the human agent receive useful context? Was the issue resolved after the transfer? If yes, your escalation design is working. If the escalation is where things go wrong, fixing the escalation path will do more for CSAT than raising your containment target by another two points.

Build escalation as a feature, not a failure mode. An agent that escalates at exactly the right moment -- with full context handed to the human agent -- is delivering excellent customer experience. It just doesn't look as impressive on the containment dashboard.

For a practical handoff implementation, the guide on AI agent human handoffs covers how to structure the context package so the human picks up exactly where the AI left off.

What good looks like

A well-calibrated CX agent program watches two numbers in parallel: the containment rate (efficiency) and the quality-weighted containment rate (quality). When both move up together, the agent is genuinely improving. When containment rises while quality-weighted containment holds flat, quality is eroding to buy efficiency.

The metrics that moved past average handle time -- resolution rate, task completion, escalation patterns -- map directly onto the quality dimensions in a scorecard. You're measuring the same underlying reality from different angles.

What you're measuring will determine what your team optimizes. Raw containment is easy to hit. Quality containment requires that your agent actually resolve issues, communicate clearly, and know when to hand off. That's a harder target, and it's the right one.

The 8-point CSAT drop from the opening scenario didn't come from a software bug. It came from measuring the wrong thing and building toward it. Once you're tracking quality-weighted containment, that signal shows up in the dashboard before it shows up in the customer feedback.

Measure quality, not just containment

Chanl scorecards evaluate every conversation across the dimensions that matter: resolution accuracy, escalation timing, policy compliance. Stop optimizing for containment and start measuring what customers actually experience.

Try Scorecards Free
DG

Co-founder

Building the platform for AI agents at Chanl — tools, testing, and observability for customer experience.

Learn Agentic AI

Weekly. Patterns for shipping agents that work. MCP, scorecards, regression tests, prompts, model comparisons.

500+ builders subscribed

Frequently Asked Questions