Your Voice Agent Booked the Wrong Name. WER Said It Was 95% Accurate.

A voice agent only acts on a few words in any sentence — the ones that become tool-call arguments. We measured how often real speech-to-text corrupts them, why Word Error Rate hides it completely, and the verification layer that stops an agent from silently booking the wrong name.

A restaurant’s voice agent took a reservation and booked it under Beatty. The caller’s name was Abadi. By the industry’s favorite metric the slip barely registered — one wrong word in an otherwise clean sentence, the sort of high-nineties word accuracy speech-to-text vendors print on their landing pages. The one word it got wrong was the name, and the name was the entire point of the call.

So we measured it properly. We took ten ordinary booking sentences, synthesized them as clean studio speech — no noise, no background, no accent tricks — and ran each one through five production speech-to-text engines, then handed the result to the same language model with the same booking tool. The party sizes came through. The days came through. The times came through. The names did not.

Hear it for yourself

Each clip below is a synthetic caller saying a perfectly ordinary sentence. The audio is crisp. Underneath is what the engines actually wrote down.

“Book under Abadi for five guests, Friday at 9 PM.” — The five engines variously transcribed the name as Beatty, Abati, and “a beehive.”

“Book for fifteen people under Okafor, Sunday at 5 PM.” — Heard as Aquafor, Akofo, acafour.

Listen again to the Abadi clip. There is nothing hard about that audio. A person hears the name on the first pass. The party size, the day, and the time all survived every engine. Only the name broke — and the name is the field that defines the booking.

Word Error Rate is the wrong scorecard

Word Error Rate counts every word equally. But a voice agent doesn’t act on every word — it acts on a few: the ones that become tool-call arguments. The name. The party size. The time. Everything else is connective tissue the agent never looks at.

“Book under Abadi for five guests” → “Book under Beatty for five guests” is one substitution in eleven words — about 9% word error rate, an A on any speech-to-text report card. It is also a 100% failure of the only field that mattered. WER took the catastrophe, divided it by ten harmless words, and reported a great score.

This is the trap: the words that break are the words that matter, and they are exactly the words the standard metric averages into invisibility. A provider can top the WER leaderboard and still be the one quietly corrupting the names, account numbers, and dollar amounts your agent is there to capture. WER will never tell you, because WER was never measuring that.

How we measured the part WER can’t see

For each booking request we ran two paths and compared them.

  • Path A — clean text. Hand the language model the perfect transcript and read back the tool call it fills. It is correct every time. The model is not the problem.
  • Path B — real speech. Speak the same sentence, run it through a real speech-to-text engine, hand that transcript to the same model.

The gap between A and B is caused entirely by the speech-to-text — it is the only thing that changed between the two paths. We score it not on words but on whether the tool arguments survived: did the booking get the right name, party, day, and time? We call the gap the tool-call corruption delta.

We widened the test on purpose — booking names, refund dollar amounts, and spoken confirmation numbers, 54 scenarios across five engines — to find out whether names are special or whether every argument breaks. Names are special.

Across the four engines that transcribed cleanly, names were corrupted on roughly a third of attempts — between 28% and 42%, depending on the engine. Everything else held. Dollar amounts came back right zero times out of ninety — “fifty,” “fifteen,” “thirty,” the homophone slip we most expected, and it never once happened. Party sizes, days, and times were near-perfect. The only other weak spot was the occasional single wrong or extra digit in a long confirmation number (1632681632668).

The reason is mechanical: proper nouns are low-frequency and out-of-vocabulary, exactly where acoustic models are weakest, while “fifty dollars” and “Friday at nine” are high-frequency phrases the models have heard a million times. (A fifth engine truncated audio mid-utterance and dropped whole fields — on the same clean audio every other engine handled — so we treat that as an integration/reliability issue and leave it out of the rates above, rather than a transcription-quality result. These are per-argument-type rates; engine-to-engine, the clean four are still within noise of each other, so we are not publishing a provider ranking yet.)

The fix: stop trying to never mishear

You can’t. A brand-new name with no surrounding context cannot be recovered from audio alone — a human receptionist can’t do it either, which is why they say “can you spell that for me?” Perfect hearing is the wrong goal. The right goal is narrower and achievable: never silently book the wrong thing.

So the fix is a decision the agent makes on every high-stakes argument — name, confirmation number, dollar amount:

  • You have a list for this call — the caller’s account, today’s reservations, the contact directory? Snap the mishearing to the closest known entry. Beatty → Abadi. Silent and invisible. Most real calls land here: you almost always know something about who is on the line.
  • No list, but the engine is confident? Use it.
  • No list, or low confidence? Confirm it the way a person would, at the end: “Just to confirm — Abadi, A-B-A-D-I?”

The dangerous outcome is none of those. It is the agent confidently booking “Beatty” and hanging up. Every branch above converts that into either a silent correction or a one-line confirmation. That is the whole job.

Where Speko fits

Because Speko routes the whole pipeline through one gateway, the fix belongs between the stages, not bolted onto your app.

Available today: hand Speko the names you already know for a call — sttOptions.keywords per request, or keywords on the agent — and they are forwarded to whichever engine the router picks, biasing it toward the right spelling before the mistake happens. That is the context-biasing half of the fix, and it is live now.

What we are building: turning the corruption delta into a routing signal — so argument-heavy use cases like booking and billing go to the engine that corrupts the fewest tool arguments, not the one with the lowest WER — and a confidence-gated spell-back for the open-vocabulary case, where the agent confirms a name it has no list to check against.

We benchmark voice pipelines on the metrics that actually decide whether an agent works in production at speko.ai — not just word accuracy, but whether the words that become actions survive. If your agent takes names, numbers, or dates over the phone, that is the number to watch.