What Is First Contact Resolution (FCR)?
The percentage of customer issues fully resolved on the first interaction, with no follow-up call, callback, or repeat ticket.
What Is First Contact Resolution (FCR)?
First Contact Resolution (FCR) is the percentage of customer issues fully resolved in the first interaction with no follow-up call, callback, or repeat ticket inside the chosen measurement window. In AI contact centers, it is a production reliability metric for chat, voice, email, and ticket traces, because it checks whether the issue was solved rather than whether a bot session ended. Unlike containment, FCR catches abandoned or falsely closed AI conversations. FutureAGI measures it as a joined trace-and-repeat-contact signal, not a chatbot containment counter.
Why First Contact Resolution (FCR) matters in production LLM and agent systems
A bot can game containment. It cannot game FCR. When the same customer calls back the next day with the same issue, the second contact wipes out whatever savings the first contact claimed — and adds a CSAT hit. A team that tracks containment alone optimises for confidently-wrong bot answers; the same team tracking FCR sees the truth in the repeat-contact data.
The pain shows up across roles. An ops lead celebrates a 35% containment jump; the next quarter’s FCR shows 9% drop and CSAT down four points. A finance lead models AI cost savings on containment but the savings disappear once repeat contacts are counted. A QA lead is asked which bot answers caused repeat contacts but cannot tie a follow-up call to a specific prior session without trace-level identifiers. End customers internalise that “the bot can’t help” and start dialling 0 immediately.
In 2026 the contact-center industry is split between vendors selling containment as the AI win — and operators waking up to FCR as the only honest metric. Step-level evaluation tied to a session ID lets you join a closed AI session to any subsequent contact within the FCR window, so you can compute true FCR per bot version, per intent, and per channel.
How FutureAGI measures First Contact Resolution (FCR)
FutureAGI’s approach is to compute FCR from trace data joined across sessions. Every interaction — voice, chat, email, ticket — is instrumented with a customer.id and session.id; traceAI integrations langchain, livekit, and pipecat cover the LLM and voice surfaces. ConversationResolution runs on each session and emits a 0–1 resolution score; the FutureAGI workflow joins each session to follow-up contacts within the FCR window and computes per-cohort FCR. The dashboard surfaces FCR alongside containment, so the gap is always visible. Agent Command Center can also gate routing — interactions on a bot version with poor FCR can be auto-shadowed against a candidate version using traffic-mirroring for safe regression comparison.
A concrete example: a telco runs an AI billing-support bot that reports 72% containment. FutureAGI’s dashboard joins each contained session to follow-up contacts in the next 7 days. True FCR comes out at 41% — for every five “contained” sessions, three customers came back. Slicing by intent shows the gap is concentrated in two intents: plan-change and credit-dispute. The team uses simulate-sdk’s Persona and Scenario to reproduce the failures, finds that the bot is acknowledging credit disputes without filing them, and ships a fix. The next month’s FCR for credit-dispute climbs from 28% to 71%, and containment matches FCR within 4 points instead of 31.
How to measure or detect First Contact Resolution (FCR)
True FCR is computed, not assumed; the right signals make the gap with containment visible:
ConversationResolutionper session: a 0–1 score that should correlate with downstream FCR.- Repeat-contact rate within FCR window: the canonical FCR denominator.
- Per-intent FCR: cohort slicing exposes which intents are bot-resolvable and which are not.
TaskCompletionfor agentic flows: did the agent complete the multi-step task, not just chat through it?- Containment vs. FCR delta: the gap is the lie size.
Minimal Python:
from fi.evals import ConversationResolution, TaskCompletion
resolve = ConversationResolution()
task = TaskCompletion()
result = resolve.evaluate(
input="Customer wants to dispute a $42 charge on Mar 14",
output=session_transcript,
)
print(result.score, result.reason)
Common mistakes
- Reporting containment as FCR. Containment counts non-escalated sessions; FCR requires a customer-level follow-up join. Treating them as one metric rewards premature bot exits.
- Using one FCR window for every intent. Password resets may resolve in 24 hours; billing disputes often need 7 or 30 days to reveal repeats.
- Stopping at aggregate FCR. A healthy average can hide two broken intents, one bad bot version, or a single channel handoff path.
- Missing the customer-level join. Without
customer.id, teams cannot connect a chat transcript to the voice call or ticket opened after it. - Ignoring resolution evidence. A polite answer is not resolution; require task state, transcript evidence, or
ConversationResolutionbefore counting the issue closed.
Frequently Asked Questions
What is First Contact Resolution (FCR)?
FCR is the percentage of customer issues fully resolved on the first interaction, with no follow-up contact required. It is the most-cited contact-center quality metric because it correlates with CSAT, retention, and cost-per-interaction.
How is FCR different from containment?
Containment counts sessions a bot handled without escalating to a human; FCR counts issues actually resolved. A bot can have 90% containment and 40% FCR if it just closes sessions on confused users. The two metrics measure different things.
How do you measure FCR for an AI bot?
FutureAGI runs ConversationResolution on every session and TaskCompletion on agentic flows; aggregated against repeat-contact rate over the next 7 days, the result is a true FCR signal — not containment in disguise.