Roark for Customer Support — voice agent quality for deflection, escalation & resolution - Roark
Containment is not resolution.
Your deflection agent says it handled the call. The customer called back angry. Roark scores whether the issue was actually resolved, whether the escalation was clean, and whether the caller was getting more frustrated — on the audio, not just the words.
Backed by YC
Live · scoring every call 1,284 today
Caller: So my refund still hasn’t shown up.
Agent: Thanks for confirming! Anything else?
Vanity containment:
Call logged as resolved with nothing actually fixed.
Resolution
Scoring production voice AI for teams at
01 · When the call goes wrong
Here's how a support call quietly fails.
Each one counts as a contained call in your dashboard and a repeat call in your queue — and most are inaudible to a tool that only reads the transcript.
Deflection
Vanity containment
Caller: So my refund still hasn’t shown up.
Agent: Thanks for confirming! Is there anything else I can help with?
The agent closed the call without solving anything and logged it as contained. The customer calls back in an hour. Real resolution — not hang-up rate — is the metric that matters, and it’s the one most teams never score.
Resolution
Escalation
The dropped handoff
Caller: Just put me through to a person.
Agent: I can help with that. What is your account number again?
A clear escalation request got swallowed by another collection loop. The handoff never carried context, so the human starts from zero and the customer repeats everything. Roark fails the turn that ignores or fumbles the escalation trigger.
Escalation
Knowledge
The confident wrong answer
Caller: Is the annual plan refundable after 30 days?
Agent: Yes, you can get a full refund anytime in the first year.
Stated with total confidence and completely invented. A hallucinated policy answer becomes a chargeback, a complaint, or a promise your team has to honor. Roark flags assertions that aren’t grounded in the knowledge base.
Hallucination
Triage
The loop that won’t end
Caller: I already gave you the order number twice.
Agent: No problem — can you read me the order number?
The agent re-asked for information the caller already provided, three turns running. Repetition is the fastest way to make a calm customer furious, and it reads as a perfectly polite transcript.
Repetition
Frustration
The slow boil
Caller: Fine. Whatever. Let’s just do it your way.
Agent: Great! Let’s continue.
“Fine” and “whatever” read neutral on the page. In the audio the caller is clipped, tense, and about to churn. Only an audio model hears the rising frustration a transcript-only tool scores as agreement.
Emotion
02 · From caught to fixed
Roark catches every one of these — and proves the fix.
Each failure above is filed with its evidence, becomes a repeatable simulation until a candidate passes, and is verified on your next thousand live calls.
01 · Catch
The ledger above — every failure filed live, evidence attached.
02 · Simulate
Your fix, replayed against the exact failures above.
Testing your candidates 161 / 240
- escalate_on_request gatepass
- slot memory: order_number pass
- prompt · confirm fix before close pass
03 · Review
Every change explicit and diffed — you apply it.
Your fix, diffed support_v3 v4
04 · Verify
You ship — Roark confirms the metric moved on live calls.
Verifying support_v4 in production fix confirmed
Resolution, since your deploy 71→94
Issue recurrence none in 1,000 calls
Quality score 94 ↑
Regressions on other metrics none
you ship it — Roark verifies every call, with no change to your CCaaS
…and the loop runs again on the next call.
03 · Simulate before launch
Break it in staging, not in production.
Run your agent against hundreds of simulated callers (realistic personas, accents, background noise and edge cases) and get every conversation scored before a customer ever dials in.
Scenarios & personas
Hundreds of simulated callers (the angry one, the rambler, the interrupter) built from your real call types.
Red teaming
Adversarial callers that try to break it (prompt injection, jailbreaks, social engineering) so your agent holds policy under attack.
45 languages & accents
Native accents, code-switching and background noise, in every market your agent answers.
Load & health tests
Peak-volume concurrency and always-on health checks, so the agent that passed in staging survives launch day.
Regression testing
Rerun the whole suite on every change and diff it against your last green baseline, so fixing one caller never breaks another.
Run it in CI
Every prompt or model change runs the suite before it merges: quality gates for conversations, not just code.
Pre-launch suite · customer_support_v1182 / 200 passed
- Deflection · Vanity containment pass · 92
- Escalation · The dropped handoff pass · 88
- Knowledge · The confident wrong answer fail · 61
- Triage · The loop that won’t end pass · 85
- Frustration · The slow boil pass · 90
1 failure filed as an issue: fix it before launch, not after
04 · Post-call analysis
500+ metrics. Your models, not just an LLM.
Every production call scored as it lands: issues filed, alerts fired, dashboards and OTEL traces on tap, for voice calls and chat threads alike. And where most tools grade a transcript with an LLM, Roark runs purpose-built audio models on the call itself, measuring what your customer actually heard.
Audio-native
custom models
- Emotion
- Vocal stress
- Accent clarity
- Pronunciation
- Pace & pauses
- Interruptions
Conversational
LLM + rules
- Resolution
- Escalation
- Repetition
- Hallucination
- Task success
- Tone
Compliance
policy
- Disclosures
- Identity check
- PII exposure
- Script adherence
Performance
latency
- Time-to-first-word
- Turn latency
- ASR WER
- Barge-in handling
500+ metrics out of the box
∞ custom metrics, your rules
Audio + LLM models on every call
05 · Get started
First call scored in under a minute.
One click on any platform below and production calls stream in on their own, or send any recording with a few lines of code.
import Roark from '@roarkanalytics/sdk'
const client = new Roark({ bearerToken })
await client.call.create({
recordingUrl, startedAt,
interfaceType: 'PHONE',
callDirection: 'INBOUND',
agent: { customId: 'support_v2' },
}) // scored in seconds
Node · Python, plus a REST API for CI/CD and webhooks the instant a call is scored.