Integrate your contact center platform with Ada Voice to route calls to your AI Agent and transfer calls to human agents when needed. If you don’t see your contact center platform listed here, contact your Ada team to determine the best way to integrate. Ada Voice can integrate with any contact center platform.
This section takes you through how to integrate Ada with your SIP infrastructure.
<your_domain_name>.sip.twilio.com. This needs to be a unique domain name that is not currently being used in Twilio.You must allow all of Twilio’s following IP address ranges and ports on your firewall for SIP signaling traffic. Please also note that these IP addresses are provided for firewall configuration purposes only and not all of these IP addresses will host active gateways at a given time. Customers should also avoid sending traffic directly to these IP addresses and instead use your SIP domain.
Global Media IP Gateway
The Public Connections Destination IP Ranges and Port Ranges are now identical across all locations:
Regional Signaling IP Gateways
Port
5061 (TLS)
North America Virginia Gateways
North America Oregon Gateways
Europe Ireland Gateways
Europe Frankfurt Gateways
Asia-Pacific Tokyo Gateways
Asia-Pacific Singapore Gateways
Asia-Pacific Sydney Gateways
South America São Paulo Gateways
When sending SIP to Ada, you must send the end user’s phone number in the SIP UUI header:
You can send additional metadata to Ada Voice, such as name, language, account number — or any other information you choose — as key-value pairs using the SIP UUI header.
Any data sent will be available as a purple metavariable in Ada to help personalize the conversation.
If an end user using your AI Agent needs to escalate to a human agent, you can hand them off using a SIP REFER transfer to your SIP infrastructure.
To transfer calls from Ada to your SIP infrastructure:
phone_number.phone_number metavariable.This section takes you through how to transfer calls between Ada and Aircall.
To have your AI Agent handle inbound calls originating in Aircall, configure an Aircall Smartflow that connects calls to your Ada Twilio Application:
When a call reaches the Ada Voice Smartflow widget in your Aircall Smartflow, it’s automatically routed to your AI Agent in Ada.
If your AI Agent determines an end user needs human assistance, you can transfer the call back to an Aircall team.
This section takes you through how to transfer calls between Ada and Amazon Connect.
End users continue to call an Amazon Connect provisioned phone number. From your Amazon Connect contact flow, the call is transferred to your Ada AI Agent using the Transfer to phone number block, with Resume flow after disconnect set to Yes. With this setting enabled, whenever the AI Agent disconnects from the call, the call returns to your Amazon Connect contact flow and continues from the next block.
The AI Agent disconnects from the call in two scenarios, and the call returns to your Amazon Connect contact flow in both:
It is up to you to decide what happens in your Amazon Connect contact flow once the AI Agent disconnects, including whether to route the call to an agent or disconnect it. See Escalate calls directly to agents using Amazon Connect below for the configuration that distinguishes between these two scenarios.
You will continue to receive phone calls using an Amazon Connect provisioned phone number, and you will transfer phone calls from Amazon Connect to your Ada AI Agent’s phone number using the Amazon Connect Transfer to phone number module.
If they have not done so already, your Ada Team will configure a Twilio phone number for your AI Agent to use to receive phone calls. For more information, see Set up your Twilio account in Get started with Voice at Ada’s Help Docs.
Log into your Amazon Connect account.
Create a new flow in Amazon Connect for inbound phone calls that you want to transfer to Ada.
In order to track the end user across Amazon Connect and your Ada AI Agent, you will need to create an AWS Lambda function in the AWS Instance associated with your Amazon Connect account. This function will retrieve an transfer ID for the call from Ada prior to the call being transferred to Ada, and optionally pass metadata from Amazon Connect to Ada.
Choose which Lambda version to use
There are two versions of the Lambda function available. We recommend using the newer, v2 version of the Lambda function which provides additional capabilities.
Sends a POST request to retrieve a transfer ID and pass metadata from Amazon Connect to Ada. Any key-value pairs included in the metadata object are available as metavariables in your AI Agent (for example, amazon_connect_contact_id).
Navigate to the Console Home of the AWS instance that is associated with your Amazon Connect account. It should look like this:

Navigate to Lambda. (Note: You might need to use Search to find it if it isn’t listed under your Recently visited.)
Click Create Function on your Lambda homepage.
Enter the following property values under your Lambda’s Basic information:

Click Create function.
Once created, you will see an editor where you are able to create a new function. Enter the following — replace bot-handle with your AI Agent’s handle. Replace the example metadata keys and values with the data you want to pass to Ada. To pass no metadata, set metadata to {}.
Click the Deploy button.
Sends a GET request to retrieve a transfer ID. Does not support passing metadata to Ada.
Follow the same steps as Version 2 above, but use the following code in step 6:
After creating, allow your Amazon Connect instance to access the Lambda.
Use the Invoke an AWS Lambda function block to call your newly created AWS Lambda function and to retrieve the uuid from Ada for your call. Enter the following property values:
Use the Transfer to phone number block to transfer the call to Ada. Enter the following property values:
If an end user needs to escalate to a human agent, the AI Agent disconnects from the call and your Amazon Connect contact flow resumes where you left off. Your contact flow also resumes when the AI Agent ends a call without escalating, so the steps below include the configuration that distinguishes between these two scenarios and ends those calls in Amazon Connect.

In Amazon Connect, after the Transfer to phone number block that you set-up in Step 9 of Get calls into Ada above, you will need to invoke another AWS Lambda function. This function will retrieve transfer data for the call — you can use this to determine which queue in Amazon Connect to route the call to, along with other call metadata.
Choose which Lambda version to use
There are two versions of the Lambda function available. We recommend using the newer, v2 version of the Lambda function which provides additional capabilities.
Returns: Enhanced transfer data including:
destinationQueue - Queue routing information.
twilioCallId - Twilio call identifier.
conversationId - Ada conversation identifier.
endUserId - End user identifier.
shouldContinue - "true" if the AI Agent escalated the call to a human agent and the call should continue in Amazon Connect, "false" if the AI Agent intended to end the call and the call should be ended in Amazon Connect, or "null" if no transfer data is available. You must branch on this value in your Amazon Connect contact flow — see step 4 of Escalate calls directly to agents using Amazon Connect below.
Navigate to the Console Home of the AWS instance that is associated with your Amazon Connect account.

Navigate to Lambda. (Note: You might need to use Search to find it if it isn’t listed under your Recently visited.)
Click Create Function on your Lambda homepage.
Enter the following property values under your Lambda’s Basic information:
Click Create function.
Once created, you will see an editor where you are able to create a new function. Enter the following — replace bot-handle with your AI Agent’s handle:
Click the Deploy button.
Returns only the destinationQueue value for basic routing.
Navigate to the Console Home of the AWS instance that is associated with your Amazon Connect account. It should look like this:

Navigate to Lambda. (Note: You might need to use Search to find it if it isn’t listed under your Recently visited.)
Click Create Function on your Lambda homepage.
Enter the following property values under your Lambda’s Basic information:

Click Create function.
Once created, you will see an editor where you are able to create a new function. Enter the following — replace bot-handle with your AI Agent’s handle:
Click the Deploy button.
After creating, allow your Amazon Connect instance to access the Lambda:
Use the Invoke an AWS lambda function block to call your newly created AWS Lambda function and to retrieve the transfer data for your call. Enter the following property values:

Branch on shouldContinue so calls the AI Agent intended to end are disconnected in Amazon Connect. This step is only available when using Version 2 of the Lambda (Ada-Get-Transfer-Data).
When the AI Agent disconnects from a call, your contact flow resumes regardless of whether the AI Agent escalated to a human agent or intended to end the conversation. You must check shouldContinue after the Lambda runs and disconnect the call when it is "false". If you skip this step, calls that the AI Agent intended to end will fall through to the rest of your flow and may be transferred to an agent unexpectedly.
shouldContinuefalse — connect this branch to a Disconnect block. This ends the call in Amazon Connect when the AI Agent intended to end the conversation.true — connect this branch to your queue routing logic (see step 5 below).shouldContinue returns "null"). A common choice is to also send this branch to a Disconnect block, but you may instead route to a default queue or play a fallback prompt.Use destinationQueue to route the call to a specific queue when shouldContinue is "true".
Amazon Connect requires a queue ID or queue ARN — not a queue name — when setting a queue dynamically. Use the queue ID that you entered in the Amazon Connect destination queue field of the AI Agent Handoff (step 2 above), and combine the Set working queue and Transfer to queue blocks to route the call:
On the "true" branch from step 4, add a Set working queue block. Configure it as follows:
destinationQueueThe queue ID can be found in the URL of the queue editor in Amazon Connect (the part of the URL after /queue/). The full queue ARN follows this format:
After the Set working queue block, add a Transfer to queue block. This routes the call to the queue you set in the previous step.
Connect the Set working queue block’s Error branch and the Transfer to queue block’s Error branch to fallback behavior — for example, a Disconnect block or a default queue.
Your flow should look like this:
This section takes you through how to integrate Ada Voice with a Cisco CUBE.
<your_domain_name>.sip.twilio.com. This needs to be a unique domain name that is not currently being used in Twilio.You must allow all of Twilio’s following IP address ranges and ports on your firewall for SIP signaling traffic. Please also note that these IP addresses are provided for firewall configuration purposes only and not all of these IP addresses will host active gateways at a given time. Customers should also avoid sending traffic directly to these IP addresses and instead use your SIP domain.
Global Media IP Gateway
The Public Connections Destination IP Ranges and Port Ranges are now identical across all locations:
Regional Signaling IP Gateways
Port
5061 (TLS)
North America Virginia Gateways
North America Oregon Gateways
Europe Ireland Gateways
Europe Frankfurt Gateways
Asia-Pacific Tokyo Gateways
Asia-Pacific Singapore Gateways
Asia-Pacific Sydney Gateways
South America São Paulo Gateways
In order to route calls to Ada, you must make a SIP INVITE to Ada.
TO SIP address should be <DID>@<YOUR_ADA_SIP_DOMAIN>, where:
<DID>: The phone number that you used to receive the call.<YOUR_ADA_SIP_DOMAIN>: The Ada SIP domain for your Ada AI Agent.FROM SIP address should be <ANI>@<YOUR_IP_ADDRESS> where:
<ANI>: The end user’s phone number.<YOUR_IP_ADDRESS>: The IP addresses of your SIP infrastructure.If a caller using your AI Agent needs to escalate to a human agent, you can hand them off using a SIP REFER transfer to your SIP infrastructure.
To transfer calls from Ada to your Cisco CUBE:
<DID>@<YOUR_IP_ADDRESS>, where:
<DID>: The line or extension that you want to transfer the call to.<YOUR_ADA_SIP_DOMAIN>: The IP addresses of your SIP infrastructure.This section takes you through how to transfer calls between Ada and Dixa.
If an end user using your AI Agent needs to escalate to a human agent, you can hand them off using a SIP INVITE transfer to Dixa.
<DID>@<DIXA_SIP_DOMAIN>, where:
<DID>: The destination number in Dixa that is being reached, in E164 format with a leading +.<DIXA_SIP_DOMAIN>: Dixa’s SIP domain, which you got from the Dixa team.phone_number.phone_number metavariable.If required, you can assign different phone numbers to different departments. For example, you can configure one number for handoffs related to billing issues, and another one related to sales inquiries. To learn how to do this, see Buy a Phone Number at Dixa’s documentation.
This guide explains how to connect your Ada AI Agent to the Five9 contact center platform so that:
Five9 delivers calls to Ada over a secure SIP trunk that terminates on a Twilio SIP domain.
acme.ada.sip.twilio.com).OPTIONS are successful.What is a pseudo number?
A pseudo number is an E.164 phone number that Five9 uses to route calls to a designated SIP trunk without ever going over the public phone network.
If the Ada conversation needs a human handoff, configure the Transfer Call block inside your Ada AI Agent Handoff to send a SIP INVITE directly to Five9.
<INBOUND_PSEUDO_NUMBER>@<FIVE9_IP_ADDRESS>:5061;secure=true, where:
<INBOUND_PSEUDO_NUMBER>: The inbound pseudo number provided by Five9 in step 1 above.<FIVE9_IP_ADDRESS>: Five9 signalling IPs.:5061;secure=true: Specifies the port the call is being sent to and that SRTP is being used.Using SIP X-headers you can exchange contextual data such as ticket IDs, language codes, or queue names.
X-<key>: <value> header into a metavariable your AI Agent can reference.<INBOUND_PSEUDO_NUMBER>@<FIVE9_IP_ADDRESS>:5061;secure=true?x-ticket-id=12345&x-language=frYou will continue to receive phone calls using a Genesys Cloud provisioned phone number, and you will transfer phone calls from Genesys Cloud to your Ada AI Agent using a SIP INVITE made to your AI Agent’s SIP domain.
If you have not done so already, configure a Twilio SIP domain for your AI Agent to use. For more information, see Set up your Twilio account in Get started with Voice at Ada’s Help Docs.
Log into your Genesys Cloud account, then go to the Admin tab.
Under Telephony, click Trunks.


On the Create External Trunk page, fill in the following fields:
Ada Voice trunk).
In the Inbound section, fill in the following fields:
ada-voice).
In the Outbound section, fill in the following fields:
admin.5061. Then, click the + icon to add it.
Under SIP Access Control, in the Add an IP or CIDR address field, enter each of the following CIDR addresses, one at a time, and click the + icon to add it.
These are all of Twilio’s SIP IP addresses. For more information, see IP Addresses for Elastic SIP Trunking Services at Twilio Docs.

Click the Protocol section of the page to expand it. Then, under User to User Information (UUI), do the following:


Under Transfer, click the Take Back and Transfer and Release Link Transfer (RLT) toggles so they’re both Enabled.
Click Save External Trunk.


On the page that opens, fill in the following fields:

Click Save Number Plans.
On the Outbound Routes tab, click New Outbound Route.

On the page that opens, fill in the following fields:


Select the call flow you want to transfer to Ada Voice. The Inbound Call Flow page opens.
On the Inbound Call Flow page, under Toolbox, click Task to expand it, then drag the Task action into your Starting Menu. This creates the task used to transfer end users to Ada Voice. The New Task pane opens.



Click the same menu again and click Expression. The String Builder window opens. In the String Builder window, under Expression, enter this string:
This is a Genesys expression that extracts the end user’s number and
adds it to the UUI header in the format Ada Voice expects (e.g.,
phone_number=+14035555555).

Click Save to save the string and close the String Builder window.
Under Toolbox, click Transfer to expand it, then drag the Transfer to Number action into the New Task pane, under the Set UUI Data action you just added. The Transfer to Number pane opens.

In the Transfer to Number pane, do the following:

Under Toolbox, click Disconnect to expand it, then drag the Disconnect action into the New Task pane, under the Transfer to Number action you just added.
Click Publish.
At this point, you should be able to call your Genesys Cloud IVR and be successfully transferred to Ada Voice.
If an end user using your AI Agent needs to escalate to a human agent, you can hand them off using a SIP REFER transfer to Genesys Cloud.
<DID>@admin.byoc.usw2.pure.cloud, where <DID> is the destination number in Genesys Cloud that is being reached, in E164 format with a leading +.phone_number.phone_number metavariable.This section takes you through how to transfer calls between Ada and Gladly.
If an end user using your AI Agent needs to escalate to a human agent, you can hand them off using a SIP INVITE transfer to Gladly.
<DID>@<GLADLY_SIP_DOMAIN>, where:
<DID>: The destination number in Gladly that is being reached, in E164 format with a leading +.<GLADLY_SIP_DOMAIN>: A unique SIP domain created by Gladly.<DID>@<GLADLY_SIP_DOMAIN>;transport=tls.X-Gladly-Caller-Id=<ANI> to your SIP address as a query parameter, where:
<ANI>: The end user’s phone number in E164 format with a leading +. You should use the phone_number metavariable in Ada for this.<DID>@<GLADLY_SIP_DOMAIN>;transport=tls?X-Gladly-Caller-Id=<ANI>X-Gladly-Routing-Selector=<topic> to your SIP address as a query parameter, where:
<topic>: The specific queue that you want to send a call to. This is a free-form, alphanumeric string identifying the specific queue to send a call to.<DID>@<GLADLY_SIP_DOMAIN>;transport=tls?X-Gladly-Caller-Id=<ANI>&X-Gladly-Routing-Selector=<topic>This guide explains how to connect your Ada Voice AI Agent to NICE CXone so that:
Nice CXone delivers calls to Ada over a secure SIP trunk that terminates on a Twilio SIP domain.
acme.ada.sip.twilio.com).What is a pseudo number?
A pseudo number is an E.164 phone number that Nice CXone uses to route calls to a designated SIP trunk without ever going over the public phone network.
OPTIONS are successful.With SIP Backchannel, a Nice Studio script retains control of the parent contact while a child script places a dedicated call leg to the AI Agent. Ada will signal back to the parent when to end or escalate.
X-ContactId = {ContactId} so that the CXone contact ID is passed to Ada as a metavariable.phone_number=+14155550123 (E.164).LinkContactId = {MasterId} and SourceLegPersistent = True so CXone correlates the legs.If the Ada conversation needs a human handoff, configure the HTTP Request block inside your Ada AI Agent Handoff to make an API call to the CXone Admin API “Signal a Contact” endpoint to indicate the call should be escalated. Then configure the End Call block so that Ada drops from the call and the call continues in Nice CXone.
p1 key which indicates which skill or queue a call should be transferred to (for example, p1=QueueName).Example:
POST https://api-<region>.niceincontact.com/inContactAPI/services/v23.0/interactions/{ContactId}/signal?p1=billing
P1, and uses the [REQAGENT] action (https://help.nicecxone.com/content/studio/actions/reqagent/reqagent.htm) on the chosen skill.phone_number metavariable is populated; confirm X-Contact-Id metavariable is populatedUse this integration when you want to keep your existing Twilio call routing (Studio, Functions, Flex, or your own webhook) while connecting callers to the AI Agent on Ada’s Twilio account, then returning control back to your Twilio flow when Ada escalates to a human.
This is done using Twilio Application Connect (<Dial><Application>):
<Dial><Application>.<Dial action="..."> URL, where you route the caller to a human agent.You’ll need:
You do not need to give Ada access to your Twilio account for this integration. Your Twilio account simply connects calls to Ada’s Twilio Application.
Twilio Studio’s “Connect Call To” widget doesn’t directly connect to a TwiML Application SID. The most reliable pattern is:
<Dial><Application> to connect to AdaCreate a TwiML endpoint using one of:
Use this TwiML, replacing:
APXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX with the Ada Twilio Application SIDhttps://YOUR_DOMAIN.example.com/twilio/after-ada with your handler URL for when Ada returns controlRequired: Application Key authentication
All calls sent to Ada via <Dial><Application> must include an Application Key for authentication. Without this key, Ada will reject the inbound call.
Add a <Parameter> element with the name applicationKey inside your <Application> block:
The Application Key is not publicly available. Contact your Ada team to obtain the Application Key for your AI Agent.
When Twilio sends the request to Ada’s webhook endpoint, this parameter will arrive as Param_applicationKey in the POST body, which Ada uses to authenticate the call.
What this does:
<Dial><Application> connects the live call to Ada’s Twilio Application.<Dial action="..."> URL is where Twilio will send control after Ada disconnects (for example, after escalation).<Parameter> values are passed into Ada at connect time.Choose one option below.
Option A: Twilio Studio Flow (common)
Option B: Direct voice webhook (no Studio)
In Ada, configure an escalation path that uses the Transfer Call block:
Examples of useful return parameters:
handoff_reason = billing_issuehandoff_intent = cancel_subscriptioncustomer_id = 12345summary = Caller wants to change plan and asked about prorationWhen this block runs:
<Dial action="..."> URL (from Step 1), including any returned parameters.The action URL in your <Dial> is required if you want Twilio to reliably resume your flow after Ada returns control.
Your <Dial action="..."> URL should respond with TwiML that routes the caller to the right agent destination.
Below is a minimal example that routes to a phone number:
Common routing patterns:
handoff_reason) to decide which queue/agent group to send to<Dial action="..."> handlerThe call never reaches Ada
AP...).The call connects but drops immediately
<Dial> is well-formed and includes a valid <ApplicationSid>.Escalation doesn’t return to my Twilio flow
<Dial> includes an action="..." URL.action URL responds quickly and returns valid TwiML.I don’t see the parameters from Ada
<Dial action="..."> handler is reading request parameters sent by Twilio.<Parameter>)This section takes you through how to transfer calls between Ada and Zendesk Talk. For more information about how to integrate an AI Agent to Zendesk Talk, you can also reference the Connecting an external AI agent using a SIP-IN line article at Zendesk’s documentation.
If an end user using your AI Agent needs to escalate to a human agent, you can hand them off using a SIP INVITE transfer to Zendesk Talk.
75.2.49.249/32, 76.223.86.157/32, 18.206.106.116/32, 18.210.50.31/32, 18.210.67.149/32166.117.74.213/32, 166.117.171.147/32, 15.222.120.242/32, 3.97.45.129/32, 99.79.166.148/3252.223.18.128/32, 76.223.70.216/32, 3.69.16.220/32, 3.69.102.172/32, 3.124.63.244/32<USERNAME>@<YOUR-UNIQUE-NAME-zendesk.sip.twilio.com>, where:
<USERNAME>: A friendly username of your choice. Using a unique username for Ada is recommended.<YOUR-UNIQUE-NAME-zendesk.sip.twilio.com>: The URI for your SIP-IN line.X-Zendesk-Ticket-Id=<TICKET_NUMBER> where:
<TICKET_NUMBER> - Is the number of the ticket you created.<USERNAME>@<YOUR-UNIQUE-NAME-zendesk.sip.twilio.com>?X-Zendesk-Ticket-Id=<TICKET_NUMBER>