Voice AI

How to Measure AI Voice Agent Latency in Amazon Connect, Turn by Turn

Average response time hides the pauses callers hate. This guide shows which latency data Amazon Connect, Lex and Bedrock already give you, what they leave out, and how to build a turn-by-turn report.

By Naeem Akhtar · 12 min read

In short

  • Callers feel the gap between the end of their sentence and the first word of the reply. Measure that per turn, not as one average per call.
  • Lex, Bedrock and Connect each report part of the delay, but we found no single AWS turn-latency metric. You assemble it from logs and metrics.
  • Report p50 and p95 per stage and per turn number. A slow tail on turn three is invisible in an average.
  • Turn on Lex conversation logs before launch. They hold timestamps, silence, barge-in and transcripts, and cannot be recovered afterwards.
01

What latency means on a phone call

On a call, latency is not how long a request takes. It is the silence the caller hears between finishing a sentence and hearing the first word of the answer. People notice that gap quickly. Research on conversation across ten languages (Stivers and colleagues, 2009) found the typical gap between speakers is only around 200 milliseconds, so anything the caller perceives as a pause is long by human standards. You do not need to hit that number, since callers know they are talking to a system, but it explains why a two-second pause feels like something went wrong.

A single average hides most of the problem. A call can average 1.2 seconds per turn and still contain one eight-second silence that makes the caller hang up. That is why this guide is about a turn-by-turn view: one row per caller turn, with the delay split into the stages that cause it.

We checked the AWS documentation referred to below on 10 November 2026. Metric names and log fields change, so verify them against your own account before building dashboards. If you are still building the agent, start with How to Add an AI Voice Agent to Amazon Connect.

02

Where the time goes in one turn

Each turn passes through the same stages. Knowing them lets you assign a number, and an owner, to each part of the pause.

StageWhat happensWhat controls itWhere you can see it
End-of-turn detectionThe system decides the caller has finished speakingSpeech settings: end-of-turn confidence and silence timeoutLex conversation logs (audio silence), flow and bot settings
Speech recognitionAudio becomes textSpeech model, language, audio qualityLex logs: transcript, confidence, input mode
ReasoningThe model or intent logic picks the replyModel, prompt length, tokens producedBedrock InvocationLatency, TimeToFirstToken, token counts
Tool callsLookups and actions in your systemsYour APIs, Lambda, networkLambda duration, your own API timings, Lex Lambda metrics
Speech synthesisText becomes audioVoice provider and voiceLex Polly error metric, call recording
TelephonyAudio travels to and from the callerCarrier, region, mobile networkCall recording compared with logs

One setting is a hidden floor under every turn. AWS documents default speech settings for the advanced speech model of a 0.7 end-of-turn confidence threshold and a 640 millisecond silence timeout, adjustable between 500 and 10,000 milliseconds. The silence timeout is time the system waits to be sure you have finished, so lowering it shortens every turn but raises the risk of cutting callers off. Measure before and after you change it.

03

What AWS already measures for you

SourceWhat it gives youGood for
Lex runtime metrics in CloudWatch (AWS/Lex)RuntimeSucessfulRequestLatency in milliseconds, RuntimeRequestCount, RuntimeRequestLength for streaming conversations, throttling and error counts, split by operation, input mode and localeSpotting a slow or throttled bot across all calls
Lex conversation logsPer-utterance timestamp, request ID, transcript and confidence, whether the caller interrupted, audio total, voice and silence durations, and why each response was producedRebuilding what happened on a specific call, turn by turn
Amazon Bedrock runtime metrics (AWS/Bedrock)InvocationLatency to the last token, TimeToFirstToken for streaming calls, input and output token counts, throttles and errors, by modelSeparating model time from everything else
Connect bot metricsAverage bot conversation time, average turns, completed conversations and outcomes: success, failed or droppedOutcome and length trends, not pauses
Connect conversational analyticsTalk time and non-talk time, sentiment and transcripts for self-service callsFinding calls where customers went quiet or got frustrated

Two notes from the documentation matter in practice. The Lex runtime latency metric is spelled RuntimeSucessfulRequestLatency, with that spelling, and AWS calls this out. And the Connect Bot Analytics page only shows conversations triggered from flows, not bots invoked directly through Lex APIs.

04

What AWS does not give you in one place

We did not find a single AWS metric that reports 'time from the caller stopping to the agent speaking' for an Amazon Connect call, and none that splits it into the stages above for agentic self-service. The pieces exist in different places, with different clocks. That is not a flaw in your setup. It simply means the turn-by-turn view is something you build, and the rest of this guide shows how.

If AWS has added such a metric since our check, use it, but still keep the per-stage numbers, because the stages are where you find the fix.

05

Step 1: Turn on logging before launch

Conversation logs are configured per bot alias, and they only record conversations that happen after you enable them. You cannot reconstruct last week's calls later, so switch them on in the test environment and keep them on in production.

  1. Open the bot alias you route calls to and enable text logs, which store transcripts and metadata in CloudWatch Logs.
  2. Enable audio logs as well if you are allowed to store caller audio. They go to Amazon S3, and the log entry records the audio duration, how much of it was speech and how much was silence.
  3. Encrypt both with a customer-managed KMS key.
  4. Use Lex's option to obscure slot values so names, numbers and dates do not sit in plain text in the logs.
  5. Set a retention period for the log group that matches your data policy.

Logs hold personal data. AWS notes that conversation logs cannot be used with bots subject to COPPA, and you should treat the rest as you would any call recording: restrict access, redact where you can, and delete on schedule. See Logging conversations with conversation logs.

06

Step 2: Chart the Lex and Bedrock metrics

Start with a dashboard of the aggregate metrics, because it tells you whether a problem is everywhere or only in some calls.

  • Lex: RuntimeSucessfulRequestLatency at p50 and p95, RuntimeRequestCount, RuntimeThrottledEvents, RuntimeLambdaErrors and RuntimePollyErrors, split by InputMode so speech is separate from text.
  • Bedrock: InvocationLatency and TimeToFirstToken at p50 and p95 for the model you use, plus OutputTokenCount and InvocationThrottles. Long answers take longer, so compare latency against output tokens, which AWS also documents a way to do.
  • Lambda or your tool APIs: duration at p95 for each function the agent calls.
  • Connect: average bot conversation time and turns, filtered by outcome, to see whether slow calls end badly.

For voice, TimeToFirstToken is usually more informative than InvocationLatency, because speech can start once the first words arrive. That only holds if your design streams the reply to the voice layer. Check how your own architecture uses the model before reading too much into either number.

07

Step 3: Build the per-turn report

The report is one row per caller turn. Take the Lex conversation log as the spine, because it gives each turn an ID and a timestamp, then attach the other timings to it by session and time.

ColumnWhere it comes from
Session ID, turn number, request IDLex conversation log
Turn start timeLog timestamp
Caller audio total, speech and silence secondsLog audio properties (needs audio logs)
Barge-in (caller interrupted the agent)Log barge-in field
Response reasonLog response reason: for example a timeout prompt or a fulfilment-progress message
Transcript and confidenceLog input transcript and transcription confidence
Model time and first-token timeBedrock metrics or your own application logging for the same request
Tool time per callLambda or API logs, joined on session or request ID
Total turn gapMeasured from the call recording, or from your own timestamps

A starting point in CloudWatch Logs Insights, against the Lex text log group for your alias, is a query that lists each turn in order with its audio and barge-in fields. Field names depend on how your log group is parsed, so treat this as a sketch to adapt.

CloudWatch Logs Insights sketch (illustrative)
fields @timestamp, sessionId, requestId, inputMode, inputTranscript,
       audioProperties.duration.total, audioProperties.duration.silence,
       bargeIn, responseReason, missedUtterance
| filter inputMode = "Speech"
| sort sessionId, @timestamp asc
| limit 500

The one number the logs do not hand you is the real gap the caller heard. The most reliable way to get it is from the call recording: find where the caller's speech ends and the agent's begins, either by listening on a test set or with a small script that detects speech boundaries in the two channels. If you control the application layer, you can also log your own timestamps at three points, when the transcript arrives, when the model starts to answer, and when audio is handed to the voice layer. Either route works. What matters is using one method consistently, so before and after numbers compare fairly.

08

Step 4: Report percentiles, by stage and by turn number

  • Report p50, p90 and p95, not the mean. The mean hides the pauses that make people hang up.
  • Split by turn number. The first turn often carries extra work such as identity lookup or a greeting, and later turns can slow down as the conversation history grows.
  • Split by whether a tool was called. Turns with tool calls will be slower, and that is the cost your tool design controls.
  • Split by voice option and by channel. A mobile caller in a noisy place and a landline caller will not see the same numbers.
  • Show the worst ten turns each week with their transcripts. Reading them tells you more than any chart.

A short weekly table is usually enough: turns measured, p50 and p95 gap overall, p95 per stage, share of turns with barge-in, and share of calls that ended with a transfer or a drop. Keep the same layout from week to week so the trend is obvious.

09

What a finished report looks like

Here is a layout for one call, with invented numbers to show the shape. The point is the pattern a report makes visible, not the values.

TurnCaller saidTool calledGap heard (s)Model first token (s)Tool time (s)Barge-in
1Greeting and reason for callingNo1.10.50No
2Name and date of birthNo1.00.40No
3Asks to move an appointmentYes: look up booking3.40.62.1No
4Confirms Thursday afternoonYes: change booking2.80.51.6Yes
5Thanks, goodbyeNo0.90.40No

Read it the way you would at review. The model is steady at about half a second, so it is not the problem. Turns 3 and 4 are slow, and the tool time explains most of the gap. The barge-in on turn 4 suggests the caller started talking because the wait felt too long. The fix is in the booking lookup, not the model or the voice. Without a per-turn view, the call would simply have averaged to about two seconds and nobody would know why it felt slow.

Add one more column once you have it: the transcript confidence. A turn that is slow and also low confidence often means the system waited for the caller to repeat themselves, which is a recognition problem wearing a latency costume.

10

Alarms: catch it before callers do

Once the metrics exist, put alarms on the ones that change first. CloudWatch alarms can watch the Lex and Bedrock metrics directly.

Watch thisAlarm whenWhy
Lex request latency, p95It rises above your baseline for several periods in a rowEarly sign of a slow tool, a throttled model or a regional issue
Lex throttled eventsAbove zero for a sustained periodYou are exceeding the account limit and callers are paying for it
Bedrock TimeToFirstToken, p95Above your baselineThe model, not the rest of the system, got slower
Bedrock throttlesAbove zeroCapacity or quota problem; the SDK may be retrying, which adds delay
Lambda duration, p95, per toolAbove your tool budgetOne backend is dragging every call that uses it
Lambda and Polly error countsAny sustained increaseErrors often show up as long pauses before a fallback

Choose thresholds from your own week-one baseline, not from a number in a blog post. An alarm that fires all day gets muted, and then it protects nobody. Start loose, tighten as you learn what normal looks like, and send alerts to the person who can actually change the tool or the prompt.

11

Reading the results: symptom, cause, fix

What you seeLikely causeWhat to try
Every turn has a similar delay before anything happensEnd-of-turn silence timeoutReview the silence timeout and end-of-turn confidence settings, and re-test for cut-offs
Slow only on turns with a lookupTool or API timeCache, trim the response, or return quickly and finish in the background. MCP tools time out at 30 seconds
First-token time high, tools fastModel or prompt sizeShorten the prompt and tool descriptions, or try a faster model, and compare on your call set
Latency rises with answer lengthLong spoken repliesTell the model to answer in one or two sentences for voice
Spikes at busy timesThrottlingCheck Bedrock and Lex throttle metrics and your quotas
Callers repeat themselves or interrupt a lotPauses feel like failure, or reply is too longLook at barge-in rate and transcripts together
Fine in tests, slow in productionCarrier, region or loadCompare Regions and test from the networks callers actually use

Change one thing at a time and re-run the same call set. If you change the model and the prompt together you will not know which one moved the number.

12

Setting targets and running a fair test

We do not quote a universal target, because the right gap depends on the task and the caller. A simple intake call tolerates a little more than a quick yes or no. What we do recommend is deciding your own thresholds from listening. Record a test set of realistic calls, play them to people who were not involved in the build, and ask at which point a pause feels wrong. Use that to set a p95 target, then track against it.

  1. Write a script of 15 to 20 caller turns that includes names, numbers, a correction and one question that needs a lookup.
  2. Call from a mobile phone, at least twice at different times of day, and once from a noisy place.
  3. Run the script a few dozen times so p95 means something. A handful of calls cannot show a tail.
  4. Keep the script, the voice, the model and the prompt fixed while you change only the setting under test.
  5. Record every call, and keep the logs, so you can go back to a bad turn.

For the architecture choices that move these numbers, see our architecture and build guide, the voice options guide, and Amazon Lex vs AI Agent in Amazon Connect. To have latency measured and tuned on your own call flow, see our AI voice agent development service.

13

A pre-launch latency checklist

  • Conversation logs are on for the live alias, with a customer-managed key, slot obscuring and a retention period.
  • A dashboard shows Lex, Bedrock and tool latency at p50 and p95, with speech separated from text.
  • You know your silence timeout and end-of-turn settings, and have tested one change in each direction.
  • Every tool has a time budget, and the slowest one has been reviewed for caching or an asynchronous path.
  • The prompt tells the model to keep spoken answers short.
  • You have a recorded test set and a baseline p95 gap from it.
  • Alarms exist for throttling and for p95 drift, and someone owns them.
  • A failed or slow tool leads to a spoken holding message or a transfer to a person, never to silence.

If you can tick every line before launch, the first week of real calls will teach you something. If you cannot, the first week will teach you only that callers hang up.

14

Frequently asked questions

What is a good latency for an AI voice agent?

There is no single standard. Human conversation has gaps of about 200 milliseconds, but callers accept longer from a system, especially for a task that needs a lookup. Set your own p95 target by playing recorded calls to people who were not involved in the build and noting where the pause starts to feel wrong, then measure against it every week.

Does Amazon Connect report voice agent response time?

Connect reports bot conversation time, turns and outcomes, and conversational analytics reports talk and non-talk time. Amazon Lex reports request latency in CloudWatch and Amazon Bedrock reports model latency and time to first token. We did not find one AWS metric for the gap the caller hears, so you combine logs, metrics and the call recording.

Which Amazon Lex metric shows latency?

RuntimeSucessfulRequestLatency in the AWS/Lex CloudWatch namespace, which reports the time between a request being made and the response being passed back, in milliseconds. AWS notes the metric name is spelled with that spelling. Use InputMode to separate speech from text, and chart percentiles rather than averages.

Should I use InvocationLatency or TimeToFirstToken for a voice agent?

TimeToFirstToken is usually more useful for voice when your design streams the reply, because speech can begin once the first words arrive. InvocationLatency measures until the last token and grows with answer length. Track both along with output token count so you can tell a slow model from a long answer.

Can I measure latency without storing call audio?

Partly. Text conversation logs give timestamps, transcripts and barge-in without storing audio, and Bedrock and Lambda give model and tool timings. Audio logs add speech and silence durations per turn, and the recording lets you measure the real gap. If you cannot store audio, log your own timestamps in your application layer instead.

How many test calls do I need before trusting p95?

Enough that the slowest few percent contains several real turns. A few dozen calls with 15 to 20 turns each gives hundreds of turns, which is a reasonable start. A handful of calls cannot show a slow tail, so a clean-looking test can still hide the pauses real callers will meet.

Work with Eveonix

Need help with AI Voice Agents? Talk to the engineers.

Tell us what you want to build. You'll get a straight answer on scope, approach and cost from the people who do the work.

In production

See this in production