SIP is separateThis page describes integrations with telephony providers like Twilio, Telnyx, Plivo, and Exotel.
If you want to connect Ultravox to your existing phone system using SIP, see our SIP Guide.
Native Integrations
Ultravox provides native integrations for the following. Each has their own unique callmedium that must be used when creating calls.
| Provider | Call Medium | Streaming API | Import Credentials? | HD audio | Out of Band DTMF? | Cold transfer?* |
|---|---|---|---|---|---|---|
| Twilio | "twilio": {} | Media Streams | ✅ | ❌ | ❌ | ✅ |
| Telnyx | "telnyx": {} | Media Streaming | ✅ | ✅ | ✅ | ❌ |
| Plivo | "plivo": {} | AudioStream | ✅ | ✅ | ✅ | ❌ |
| Exotel | "exotel": {} | Voice Streaming | ❌ | ❌ | ❌ | ❌ |
Providing Telephony Credentials
If you are using Twilio, Telnyx, or Plivo, you can import your credentials to unlock new capabilities:- Simplified Incoming Call Handling → Configure your provider to send webhooks directly to Ultravox for incoming calls. No need to run your own server.
- Simplified Outbound Calling → Allow Ultravox to directly create and connect outbound calls.
- Outbound Call Scheduler → Schedule batches of outbound calls and let us manage the call concurrency and retry logic.
- Out of Band DTMF → Importing credentials allows Ultravox to use out-of-band DTMF.
Incoming Calls
Simplified Incoming Call Handling
Once you’ve added your credentials, just set your telephony provider’s webhook callback tohttps://app.ultravox.ai/api/agents/{agent_id}/telephony_xml to have incoming phone calls automatically create and connect
to Ultravox calls.
Note that agents need to be allowlisted to receive incoming calls. If you did not add your agent when importing your credentials,
you can add it afterward in the Ultravox console or using the PATCH verb: Twilio, Telnyx, or Plivo.
You can also allow all agents to receive calls by setting allowAllAgents to true when importing your credentials or updating them afterward.
If there are fields in your provider’s webhook that you want to use as template variables in your agent, you can set up a mapping from the webhook fields to template context fields. For example, for Twilio you could add an entry like {"From": "user.phone_number"} to add {"user": {"phone_number": "+15551234567"}} to the template context.
Custom Incoming Call Handling
Alternatively, you can use these steps when routing calls through your own application.Create Ultravox Call
Your server creates an Ultravox call using the medium for your provider and gets a
joinUrl.Outbound Calls
firstSpeakerSettingsBy default, Ultravox calls assume the agent begins conversations. This is typically what you want for inbound calls, but for outbound calls consider changing your
firstSpeakerSettings so the agent waits for the user to answer.Simplified Outbound Calling
Once you’ve added your credentials, you can add anoutgoing field to your medium to have Ultravox
create and connect outbound calls for you.
Outgoing Example
systemPrompt and firstSpeakerSettings in an agent so you only need to specify medium when
creating calls with the agent.
Custom Outbound Calling
You can also integrate Ultravox with your existing telephony workflows by creating calls manually through your provider’s API.Batch Outbound Calling
For scheduling large volumes of outbound calls, use the Outbound Call Scheduler which provides:- Automatic Concurrency Management - No more 429 errors from hitting rate limits
- Flexible Scheduling - Define time windows for when calls should be made
- Automatic capacity reservation - Save room for high priority or incoming calls while your campaign is running
- Batch Management - Track progress and control execution
Provider-Specific Integration Examples
Twilio
Outbound Calls with Twilio
Create an Ultravox Call
Create a new call as shown above with
medium: { "twilio": {} }, firstSpeakerSettings: { user: {} }, and get a joinUrl.Full example code in Outbound Quickstart →
Incoming Calls with Twilio
Create an Ultravox Call
Create a new call with
medium: { "twilio": {} } and firstSpeakerSettings set to { agent: {} }.Full example code in Inbound Quickstart →
Telnyx
Outbound Calls with Telnyx
Create an Ultravox Call
Create a new call as shown above with
medium: { "telnyx": {} }, firstSpeakerSettings: { user: {} }, and get a joinUrl.Incoming Calls with Telnyx
Create an Ultravox Call
Create a new call with
medium: { "telnyx": {} } and firstSpeakerSettings set to { agent: {} }.Plivo
Full example code for outbound and inbound calls with Plivo on GitHub here →
Outbound Calls with Plivo
Create an Ultravox Call
Create a new call as shown above with
medium: { "plivo": {} }, firstSpeakerSettings: { user: {} }, and get a joinUrl.Incoming Calls with Plivo
Create an Ultravox Call
Create a new call with
medium: { "plivo": {} } and firstSpeakerSettings set to { agent: {} }.Learn More
- Learn how to handle IVR trees using DTMF.
- Set up your agent to transfer calls to a human.