This guide explains how to integrate ElevenLabs Agents with Genesys Cloud using the Audio Connector integration. This integration enables seamless voice AI capabilities within your existing Genesys contact center infrastructure over websocket, without requiring SIP trunking.
The Genesys integration uses a native WebSocket connection through the Audio Connector integration:
Before setting up the Genesys integration, ensure you have:
Click “Add Integration” and search for “Audio Connector”, and click “Install”
Select the Audio Connector integration type
Provide a descriptive name for your integration
Navigate to the Configuration section of your Audio Connector integration
In Properties, in the Base Connection URI field, enter the appropriate URL for your environment:
If your ElevenLabs account is on an isolated residency environment (EU or India), you must use the corresponding residency URL. Using the wrong URL will result in authentication failures. Learn more about data residency.
In Credentials, enter your ElevenLabs API key in the authentication configuration
Save the integration configuration
Open an existing inbound, outbound, or in-queue call flow, or create a new one where you want to use the ElevenLabs agent.
In your flow, add a “Call Audio Connector” action from the Bot category
Select your Audio Connector integration from the integration dropdown
In the Connector ID field, specify your ElevenLabs agent ID
Your ElevenLabs Agents agent must be configured with specific audio settings for Genesys compatibility:
The Genesys integration supports only the following client events:
Other client event types are not supported in the Genesys integration and will be silently ignored if configured.
You can pass dynamic context from your Genesys flow to your ElevenLabs agent using input session variables and receive data back through output session variables. Session variables can also be used to override specific agent configuration settings directly from your Genesys flow.
Learn more about dynamic variables.
The following session variables can modify your agent’s configuration at runtime:
system__override_system_prompt: Overrides the agent’s system prompt.system__override_first_message: Overrides the agent’s first message to the user.system__override_language: Sets the agent’s language for this session.system__override_voice_id: Sets the agent’s voice ID for this session.Genesys flow input session variables:
customer_name = "John Smith"system__override_first_message = "Hello! Welcome to our support line."system__override_language = "en"ElevenLabs agent prompt: Hi {{customer_name}}, how can I help you today?
You can now receive data from your ElevenLabs agent back to your Genesys flow using output session variables.
Any data collected through Data Collection in your ElevenLabs agent will be available as output session variables in your Genesys flow after the conversation ends.
After your ElevenLabs agent conversation completes, you can use the output variables in your Genesys flow:
The ElevenLabs integration now supports call transfers back to Genesys for routing to specific numbers or queues.
In your ElevenLabs agent, add a data collection item with a detailed identifier and description to collect where the user should be transferred.
Add instructions to your agent’s system prompt to use the end_call tool when a transfer is requested. For example:
In your Genesys Architect flow, add decision nodes after the Audio Connector action to check output variables and route the call accordingly:
The following tools and features are not supported in the Genesys integration:
Verify that your API key is correctly configured in the Audio Connector integration and the ElevenLabs agent ID is correctly configured in the Connector ID field in your Architect flow. If there are any dynamic variables defined on your agent, they must be passed in as input session variables.
Verify that input session variables are properly defined in your Genesys flow’s “Call Audio Connector” action and that they’re referenced correctly in your ElevenLabs agent using the {{variable_name}} syntax.