Voice AI

AI Voice Agent Integration with Amazon Connect: Six Patterns and How to Choose

The six ways to connect an AI voice agent to Amazon Connect, from a native Connect AI agent to an external agent over A2A, with the setup, limits, security and human handoff for each.

By Naeem Akhtar · 15 min read

In short

  • An AI voice agent attaches to Amazon Connect at the contact flow. There are six patterns: a native Connect AI agent, a Lex or Bedrock bot, Lambda calls from the flow, live media streaming to Kinesis, an external agent over A2A, and a transfer to an external voice system.
  • Only some patterns carry the conversation. Lambda from the flow is for lookups and writes, and Kinesis streaming sends audio out of Connect without carrying a reply back, so both usually sit beside another pattern.
  • The A2A integration is the route for third-party and custom agents. It needs the Connect Customer tier, a Lex bot with the Q in Connect intent, API-only setup, a bearer key in Secrets Manager and trace data from the agent.
  • Every pattern needs a tested path back to a human, and a fallback for when the agent or its endpoint fails.
01

What integrating with Amazon Connect means

Amazon Connect owns the phone number, the queue, routing, recording and the human agent desktop. An AI voice agent is a separate layer that holds the conversation. Integration is the set of hooks that lets the agent sit between the caller and your queues: the contact flow decides when the agent takes the call, what it can see, and where the call goes when the agent is done or fails.

That makes the contact flow the integration point for all six patterns below, however different they look. The patterns differ in who handles the audio, who provides speech recognition and the voice, how much logic you host yourself, and how much of the setup is console clicks versus API calls. If you are still deciding whether to build, buy or mix, read the build, buy or both section of AI Voice Agent for Amazon Connect: Architecture and Build Guide first.

02

The six patterns at a glance

PatternWho talks to the callerWhere the logic runsSetupMain limit
1. Native Connect AI agentConnect, using agentic voiceInside Connect, with tools you attachConsole and flow blocksWithin Connect's agent, tool and security-profile model
2. Lex or Bedrock bot in the flowConnect, through a Lex botLex intents with Lambda fulfilment, or a Bedrock agentConsole and flow blocksIntent design is rigid; extra latency with a Bedrock agent
3. Lambda from the flowWhatever pattern the flow is already usingYour Lambda functionFlow block plus Lambda8 seconds synchronous, 60 seconds asynchronous
4. Live media streaming to KinesisNot applicable: audio goes out onlyYour service reads the streamEnable streaming, then build a consumerOne-way feed; no reply path back to the caller
5. External agent over A2AConnect (text) or the external agent (audio)The external agent, hosted by you or a vendorAPI onlyConnect Customer tier; trace data required; quotas apply
6. External voice transferThe external voice systemThe external systemQuota request, connector, flow blockThe call leaves Connect while the external system holds it

Patterns 1, 2 and 5 carry the conversation. Pattern 3 adds actions to any of them. Pattern 4 adds listening. Pattern 6 hands the whole call to another system. Most production designs combine two or three of these.

03

Pattern 1: a native Connect AI agent in the flow

This is the route AWS recommends for new builds. A Lex V2 bot with the Q in Connect intent receives each caller turn from a Get customer input block and passes it to a Connect AI agent. The agent reasons over the conversation, calls the tools you attach (including MCP tools), and uses its Complete or Escalate tools to send the contact back down the matching path in the flow. Speech recognition and the voice come from Amazon Connect agentic voice, which AWS describes as the default voice provider on the Connect Customer tier.

  1. Create or enable the Connect AI agent and attach its tools.
  2. Create a Lex V2 bot with the Q in Connect intent and associate it with your instance. That intent cannot share a locale with the QnA or Bedrock agent intents.
  3. In the flow, add a Set voice block that selects Amazon Connect agentic voice, then a Get customer input block that calls the bot.
  4. Wire the Complete and Escalate paths: complete goes on to the next step, escalate goes to a human queue.
  5. Set barge-in and end-of-turn behaviour with Lex session attributes where a slot needs it.

Choose this when the call is lookups, FAQs or short multi-step self-service and you want the shortest path to a pilot. The trade-off is that you work inside Connect's model, including a 30-second limit on each MCP tool call. The full console walkthrough is in How to Add an AI Voice Agent to Amazon Connect, and the voice choices are in Amazon Connect Custom Voice: Every Voice Option.

04

Pattern 2: a Lex or Bedrock bot in the flow

Before agentic self-service, this was the standard pattern, and it still suits teams that already have Lex bots or Bedrock agents. The flow's Get customer input block hands the turn to a Lex bot. The bot matches an intent, fills slots, and either answers directly or calls a Lambda fulfilment function. A Bedrock agent can sit behind the bot through its own intent type when you want model-driven reasoning for part of the conversation.

The strengths are tight control of fixed steps and familiar tooling. The weaknesses are intent design that gets rigid as the call grows, and the extra latency a Bedrock agent adds. AWS describes the earlier legacy self-service as no longer receiving new features, so new builds should start with pattern 1 unless there is a reason not to. The detailed comparison is in Amazon Lex vs AI Agent in Amazon Connect.

05

Pattern 3: calling Lambda from the flow

An AWS Lambda function block in the flow calls your function mid-call and returns data you can store in contact attributes. It is the simplest way to add a CRM lookup, a booking check or a case write to any other pattern. It does not carry a conversation: the function receives the contact data, does one job and returns.

  • Add the function to your Connect instance first, then select it in the block.
  • Synchronous mode waits for the result, with a timeout of up to 8 seconds. Asynchronous mode moves on at once, with up to 60 seconds, and you load the result later with a Load Lambda result action.
  • A throttled or failed call is retried, up to three times within the timeout, before the contact goes down the Error branch. Synchronous mode also has a Timeout branch.
  • Set response validation to STRING_MAP for a flat map of string values, or JSON when you need nested data.
Lambda handler for a flow lookup (illustrative)
def lambda_handler(event, context):
    contact = event["Details"]["ContactData"]
    caller = contact["CustomerEndpoint"]["Address"]

    record = lookup_customer(caller)  # your CRM or database call; keep it fast

    # With response validation set to STRING_MAP, return flat string values
    return {
        "customer_found": "true" if record else "false",
        "customer_name": record["name"] if record else "",
        "open_cases": str(record["open_cases"]) if record else "0",
        "call_id": contact["ContactId"],
    }

Because the flow waits at most 8 seconds, put any slow work behind a fast acknowledgement, run it asynchronously, or give the agent a tool for it instead. Tool calls made by a Connect AI agent have their own limits, described under pattern 1. Use the same rules as any tool layer: validate inputs, make writes idempotent with the contact ID, and return a short reason on failure.

06

Pattern 4: live media streaming to Kinesis Video Streams

Connect can send call audio to Kinesis Video Streams. Customer speech and what the customer hears are on separate tracks, at an 8 kHz sampling rate, with one stream per active call. Your service reads the stream to run real-time transcription, sentiment, compliance monitoring or a supervisor view.

This feed runs one way: audio goes out of Connect, but nothing in it carries a reply back to the caller. So it is a listening pattern, not a conversation pattern, and it normally sits beside patterns 1, 2 or 5. Plan for the operational side: keep the streams Connect creates, set a retention period, request a Kinesis Video Streams quota increase if you expect many concurrent calls, and give the roles that read the data access to Kinesis Video Streams and AWS KMS.

07

Pattern 5: an external agent over A2A

This is the route for third-party platforms and custom agents. Your Connect AI agent brings in an outside agent during a live contact using the Agent-to-Agent (A2A) protocol, an open standard that AWS extends for voice streaming, session continuity and observability. The external agent can be hosted by a vendor, by you, or on Amazon Bedrock AgentCore.

ModeWho talks to the callerTransportHow it ends
Handle actions behind the scenes (delegation)Your Connect AI agentText; a new connection per invocationThe collaborator returns a result
Talk to the customer, textThe external agent; Connect converts speech to text and backSecure WebSocket, or HTTPS JSON-RPCThe agent sends FINISH with COMPLETE or ESCALATE
Talk to the customer, audioThe external agent, with its own voiceSecure WebSocket only, 16-bit mono PCM at 8, 16 or 24 kHzThe agent sends FINISH with COMPLETE or ESCALATE

Setup is API only, and every request is SigV4 signed. In outline, you store the agent's API key in Secrets Manager under a customer managed KMS key, register the agent's endpoint as an AppIntegrations application of type A2A_SERVER, associate it with your instance, add it as a collaborator on your Connect AI agent, allow it in the agent's security profile, and publish a new version of the agent.

Registering the external agent's endpoint (from the AWS documentation)
aws appintegrations create-application \
  --name my-agent \
  --namespace my-agent-ns \
  --application-source-config '{"ExternalUrlConfig":{"AccessUrl":"wss://agent.example.com"}}' \
  --application-type A2A_SERVER \
  --auth-config '{"AuthType":"API_KEY","CredentialProviderIdentifier":"SECRET_ARN"}' \
  --region REGION

Several constraints decide whether this fits:

  • The instance must be on the Connect Customer tier, not Customer Basic, and it needs a Lex V2 bot with the Q in Connect intent.
  • Audio streaming needs immediate handoff, and the audio collaborator must be the only collaborator on its Connect AI agent. The orchestrating agent can have no orchestration prompt or guardrail, and its only tools are Complete (required) and Escalate. The bot locale uses Amazon Nova Sonic speech-to-speech with a single Q in Connect intent, and AWS asks you to validate latency and audio quality with your account team before production.
  • Quotas default to 5 collaborators per AI agent, 10 handoffs per customer turn and 5 concurrent outbound third-party connections per instance. All are adjustable.
  • Connect passes the conversation history and the contact and instance ARNs, plus the caller and system addresses and channel only if the security profile grants the Access Contact Control Panel permission. It does not pass custom contact attributes.
  • The external agent must send trace data for every turn. Connect disables endpoints that do not, and stops starting new collaborations with them.

If the connection drops during a voice session, Connect reconnects once. A second drop, or a failed task, ends the collaboration and sends the contact down the Error branch of the flow, which is where your fallback belongs. Vendors package this integration in their own docs, and some list it as limited availability, so check current status with the vendor before you plan around it.

08

Pattern 6: external voice transfer

AWS documents external voice transfer as a way to move calls from Connect to an external voice system, originally aimed at on-premise contact centers. Some voice-agent vendors use the same mechanism to take the call into their own telephony and voice stack. You request a service quota increase for external voice transfer connectors, create a connector under External voice systems in the console, and then use a Transfer to phone number block that targets the external voice system instead of a number. The connector can be set statically or chosen dynamically, and AWS shows passing a customer identifier through user-to-user information.

The strength is that the vendor's stack can run its own voice pipeline. The cost is that the call leaves Connect while the external system holds it, so you lose some Connect-side visibility and need to plan what context travels with the transfer and how the call returns. Vendor guides recommend resuming the flow after the external system disconnects so the contact can continue in Connect. Treat that as vendor guidance and test it in your own flow.

09

Choosing between the patterns

If you needStart withAdd
The shortest path to a pilot for lookups and FAQsPattern 1Pattern 3 for CRM lookups
To reuse existing Lex bots or Bedrock agentsPattern 2Pattern 3 for actions
Mid-call CRM, booking or case actionsAny conversation patternPattern 3, or agent tools in pattern 1
Real-time transcripts, analytics or monitoringAny conversation patternPattern 4
A third-party platform or your own custom agent with its own reasoningPattern 5Pattern 3 and 4 as needed
A vendor's own telephony and voice stackPattern 6A tested return path to Connect
A mix of simple and complex callsPattern 1 for simple callsPattern 5 for the complex ones

Whichever you choose, check Region and compliance availability for each feature and for any vendor, because not every capability is offered in every AWS Region or in GovCloud.

10

Handing back to a human in every pattern

PatternHow the call reaches a personWhat travels with it
1. Native Connect AI agentThe agent's Escalate tool sends the contact down the flow's Escalate path to a queueWhat you store in contact attributes, plus the session context you pass on
2. Lex or Bedrock botA fallback or transfer intent routes to a queue from the flowSlot values and anything you set as contact attributes
3. Lambda from the flowThe Error or Timeout branch routes to a queueThe contact's existing attributes; make the branch say why
4. Kinesis streamingUnchanged: it is a listener, not the owner of the callNot applicable
5. External agent over A2AFINISH with ESCALATE returns control to the Connect AI agent, which uses EscalateA reason from the external agent; Connect merges its history into the session
6. External voice transferThe external system returns the call, or transfers it itselfOnly what the connector and your flow pass along; test it

A caller should never reach dead air. Build the Error branch of every flow block that touches the agent so that a failed endpoint, a slow function or a dropped connection ends in a human queue with a spoken explanation.

11

Security and permissions across the patterns

  • Least privilege for Lambda: add only the functions the flow needs to the instance, and give each function an execution role that reaches only the systems it must.
  • For A2A, use a customer managed KMS key for the secret, with a policy that lets Connect decrypt only through Secrets Manager. AWS managed keys do not work for this. Restrict the secret's resource policy to your account and instance.
  • Allow the external agent explicitly in the Connect AI agent's security profile, and grant Access Contact Control Panel only if the agent should see the caller and system addresses.
  • For Kinesis streams, limit read access to the roles that need it, and treat the audio as sensitive data with a retention period.
  • Keep transcripts and recordings inside your account boundary, redact payment and health details, and confirm consent and disclosure rules for your jurisdiction with counsel.
12

Failure modes to test before launch

What failsWhat happensWhat to build
Lambda is slow or throttledThe flow retries, then takes the Timeout or Error branchA spoken holding line and a fallback path; async for slow work
The external agent endpoint is downConnect retries the connection once, then the contact goes to the Error branchA flow branch that routes to a human queue with a clear message
The agent's trace data is missingConnect disables the endpoint for new contactsTrace checks in your deployment pipeline and an alert if collaborations stop
The agent finishes with ESCALATEControl returns to the Connect AI agent with a reasonInstructions that tell it how to handle each reason, and an Escalate path that reaches a person
The caller interrupts during audio streamingThe agent must send an interruption event so Connect flushes buffered audioInterruption tests with real accents and noise
A secret or key policy is wrongConnect cannot read the secret and collaboration fails at runtimeA smoke test contact after every change to keys, policies or security profiles

Run each of these on a test number before any live traffic, and add them to the regression set you re-run on every change. How to Measure AI Voice Agent Latency in Amazon Connect covers how to time the turns once the integration works.

13

Where Eveonix fits

We build custom AI voice agents on Amazon Connect, AWS Bedrock and Nova Sonic, and choose the integration pattern per call type rather than per project. Our multi-tenant intake agent for Bracken & Cole LLP answers 100% of intake calls day or night, and the firm saw a 30% increase in lead conversion rate. Read the case study, or see the AI voice agent development service if you would like a team to build and integrate yours.

14

Frequently asked questions

What is the best way to integrate an AI voice agent with Amazon Connect?

For lookups, FAQs and short self-service, a native Connect AI agent attached through a Lex bot with the Q in Connect intent is the fastest route and the one AWS recommends for new builds. For a third-party or custom agent with its own reasoning or voice, use the agent-to-agent integration. Most real systems add Lambda calls for business actions.

Can I connect my own AI agent to Amazon Connect?

Yes. An agent that implements the A2A protocol with Connect's extensions can be registered as an external collaborator and hosted anywhere, including Amazon Bedrock AgentCore. It needs the Connect Customer tier, a secure WebSocket or HTTPS endpoint, an API key stored in Secrets Manager and trace data for every turn.

Does Amazon Connect work with third-party AI voice agents?

Yes, through the A2A integration or an external voice transfer, depending on the vendor. Vendors such as ElevenLabs document a Connect integration, and some describe it as limited availability, so confirm current status and Region support with the vendor.

Can a Lambda function run the whole voice conversation?

No. The Lambda block in a flow waits at most 8 seconds in synchronous mode and 60 seconds in asynchronous mode, and it returns data rather than holding a conversation. Use it for lookups and writes alongside a conversation pattern.

Can I stream Amazon Connect audio to my own service and reply to the caller?

Live media streaming sends call audio to Kinesis Video Streams for your service to read, but it is a one-way feed with no reply path. To speak to the caller from your own agent, use the A2A audio streaming integration or an external voice transfer.

How do I hand a call from the AI agent to a human?

Use the agent's Escalate path in the contact flow, which routes to a human queue. For an external agent, it sends a FINISH event with ESCALATE and a reason, and the Connect AI agent returns the contact to the flow. Always configure the Error branch too, so a failure also reaches a person.

What are the limits of the A2A integration with Amazon Connect?

By default, 5 collaborators per AI agent, 10 handoffs per customer turn and 5 concurrent outbound third-party connections per instance, all adjustable. Collaborators cannot have their own collaborators, only one collaborator talks to the caller at a time, and audio streaming requires immediate handoff with the audio agent as the only collaborator.

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