telnyx-ai-outbound-voice-python
End-to-end setup for making a Telnyx AI assistant call a phone number. Covers provisioning a phone number, creating a TeXML application, assigning the number, configuring telephony settings, whitelisting destination countries, and triggering outbound calls via scheduled events. Use this skill (not telnyx-ai-assistants-python) when the task involves an AI assistant placing, making, or triggering an outbound phone call to a user.
Best use case
telnyx-ai-outbound-voice-python is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
End-to-end setup for making a Telnyx AI assistant call a phone number. Covers provisioning a phone number, creating a TeXML application, assigning the number, configuring telephony settings, whitelisting destination countries, and triggering outbound calls via scheduled events. Use this skill (not telnyx-ai-assistants-python) when the task involves an AI assistant placing, making, or triggering an outbound phone call to a user.
Teams using telnyx-ai-outbound-voice-python should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/telnyx-ai-outbound-voice-python/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How telnyx-ai-outbound-voice-python Compares
| Feature / Agent | telnyx-ai-outbound-voice-python | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
End-to-end setup for making a Telnyx AI assistant call a phone number. Covers provisioning a phone number, creating a TeXML application, assigning the number, configuring telephony settings, whitelisting destination countries, and triggering outbound calls via scheduled events. Use this skill (not telnyx-ai-assistants-python) when the task involves an AI assistant placing, making, or triggering an outbound phone call to a user.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
Related Guides
SKILL.md Source
# Telnyx AI Outbound Voice Calls - Python
Make an AI assistant call any phone number. This skill covers the complete
setup from purchasing a number to triggering the call.
## Installation
```bash
pip install telnyx requests
```
## Setup
```python
import os
from telnyx import Telnyx
client = Telnyx(api_key=os.environ.get("TELNYX_API_KEY"))
```
## Prerequisites
Outbound voice calls require **all** of the following. Missing any one produces
a specific error — see [Troubleshooting](#troubleshooting).
1. A purchased Telnyx phone number
2. A TeXML application
3. The phone number assigned to the TeXML application
4. An outbound voice profile with destination countries whitelisted
5. An AI assistant with `telephony_settings.default_texml_app_id` set to the TeXML app
## Model availability
Model availability varies by account. If `client.ai.assistants.create()` returns
422 "not available for inference", discover working models from existing assistants:
```python
for a in client.ai.assistants.list().data:
print(a.model)
```
Commonly available: `openai/gpt-4o`, `Qwen/Qwen3-235B-A22B`.
## Step 1: Purchase a phone number
```python
import time
available = client.available_phone_numbers.list()
phone = available.data[0].phone_number
number_order = client.number_orders.create(
phone_numbers=[{"phone_number": phone}],
)
time.sleep(3)
order = client.number_orders.retrieve(number_order.data.id)
assert order.data.status == "success"
print(f"Purchased: {phone}")
```
## Step 2: Create a TeXML application
The `voice_url` is required by the API but is not used for outbound AI assistant calls.
The TeXML app ID is also used as the `connection_id` when assigning phone numbers.
```python
texml_app = client.texml_applications.create(
friendly_name="My AI Assistant App",
voice_url="https://example.com/placeholder",
)
app_id = texml_app.data.id # This is also the connection_id for phone number assignment
```
## Step 3: Assign the phone number to the TeXML application
A phone number cannot make calls until it is assigned to a connection.
```python
import requests
requests.patch(
f"https://api.telnyx.com/v2/phone_numbers/{phone}",
headers={
"Authorization": f"Bearer {os.environ['TELNYX_API_KEY']}",
"Content-Type": "application/json",
},
json={"connection_id": app_id},
)
```
## Step 4: Whitelist destination countries
By default only US and CA are whitelisted. Calling any other country without
whitelisting it first returns 403 error code D13.
```python
import requests
headers = {
"Authorization": f"Bearer {os.environ['TELNYX_API_KEY']}",
"Content-Type": "application/json",
}
# Find the outbound voice profile
r = requests.get(
"https://api.telnyx.com/v2/outbound_voice_profiles", headers=headers
)
ovp_id = r.json()["data"][0]["id"]
# Add destination countries (ISO 3166-1 alpha-2 codes)
requests.patch(
f"https://api.telnyx.com/v2/outbound_voice_profiles/{ovp_id}",
headers=headers,
json={"whitelisted_destinations": ["US", "CA", "IE", "GB"]},
)
# Assign the profile to the TeXML app
requests.patch(
f"https://api.telnyx.com/v2/texml_applications/{app_id}",
headers=headers,
json={
"friendly_name": "My AI Assistant App",
"voice_url": "https://example.com/placeholder",
"outbound": {"outbound_voice_profile_id": ovp_id},
},
)
```
## Step 5: Create the AI assistant with telephony settings
`telephony_settings` with `default_texml_app_id` is **required** for outbound
calls. Without it, `scheduled_events.create()` returns 400 "Assistant does not
have telephony settings configured".
```python
assistant = client.ai.assistants.create(
name="My Voice Assistant",
model="openai/gpt-4o",
instructions=(
"You are a helpful phone assistant. "
"Keep your answers concise and conversational since this is a phone call."
),
greeting="Hello! How can I help you today?",
telephony_settings={"default_texml_app_id": app_id},
)
```
To add telephony to an existing assistant:
```python
client.ai.assistants.update(
assistant_id="your-assistant-id",
telephony_settings={"default_texml_app_id": app_id},
)
```
## Step 6: Trigger an outbound call
Use `scheduled_events.create()` with a time a few seconds in the future for
an immediate call.
```python
from datetime import datetime, timezone, timedelta
event = client.ai.assistants.scheduled_events.create(
assistant_id=assistant.id,
telnyx_conversation_channel="phone_call",
telnyx_end_user_target="+13125550001", # Number to call (recipient)
telnyx_agent_target=phone, # Your Telnyx number (caller ID)
scheduled_at_fixed_datetime=(
datetime.now(timezone.utc) + timedelta(seconds=5)
).isoformat(),
)
print(f"Status: {event.status}") # "pending"
```
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `assistant_id` | string (UUID) | Yes | The AI assistant that handles the call. |
| `telnyx_conversation_channel` | string | Yes | Must be `"phone_call"`. |
| `telnyx_end_user_target` | string (E.164) | Yes | Phone number to call (recipient). |
| `telnyx_agent_target` | string (E.164) | Yes | Your Telnyx number (caller ID). Must be assigned to the TeXML app. |
| `scheduled_at_fixed_datetime` | string (ISO 8601) | Yes | When to place the call. ~5s in the future for immediate. |
| `dynamic_variables` | object | No | Variables to pass to the assistant. |
| `conversation_metadata` | object | No | Metadata to attach to the conversation. |
## Complete minimal example
```python
import os, time
from datetime import datetime, timezone, timedelta
from telnyx import Telnyx
import requests
api_key = os.environ["TELNYX_API_KEY"]
client = Telnyx(api_key=api_key)
headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}
# 1. Buy a number
available = client.available_phone_numbers.list()
phone = available.data[0].phone_number
order = client.number_orders.create(phone_numbers=[{"phone_number": phone}])
time.sleep(3)
# 2. Create TeXML app
app = client.texml_applications.create(
friendly_name="AI Outbound App",
voice_url="https://example.com/placeholder",
)
app_id = app.data.id
# 3. Assign number
requests.patch(
f"https://api.telnyx.com/v2/phone_numbers/{phone}",
headers=headers,
json={"connection_id": app_id},
)
# 4. Configure outbound profile
ovp = requests.get("https://api.telnyx.com/v2/outbound_voice_profiles", headers=headers).json()["data"][0]
requests.patch(
f"https://api.telnyx.com/v2/outbound_voice_profiles/{ovp['id']}",
headers=headers,
json={"whitelisted_destinations": ["US", "CA"]},
)
requests.patch(
f"https://api.telnyx.com/v2/texml_applications/{app_id}",
headers=headers,
json={
"friendly_name": "AI Outbound App",
"voice_url": "https://example.com/placeholder",
"outbound": {"outbound_voice_profile_id": ovp["id"]},
},
)
# 5. Create assistant with telephony
assistant = client.ai.assistants.create(
name="Outbound Bot",
model="openai/gpt-4o",
instructions="You are a helpful phone assistant.",
telephony_settings={"default_texml_app_id": app_id},
)
# 6. Trigger call
client.ai.assistants.scheduled_events.create(
assistant_id=assistant.id,
telnyx_conversation_channel="phone_call",
telnyx_end_user_target="+13125550001",
telnyx_agent_target=phone,
scheduled_at_fixed_datetime=(datetime.now(timezone.utc) + timedelta(seconds=5)).isoformat(),
)
```
## Troubleshooting
### 400: "Assistant does not have telephony settings configured"
The assistant is missing:
```python
telephony_settings={"default_texml_app_id": app_id}
```
Fix by updating the assistant with `default_texml_app_id`.
### 400: "Cannot make outbound call with no outbound voice profile"
The TeXML application does not have an outbound voice profile assigned.
Fix Step 4 above: patch the TeXML app with:
```python
"outbound": {"outbound_voice_profile_id": ovp_id}
```
### 403 with `detail.code == "D13"`
The destination country is not whitelisted on the outbound voice profile.
Fix Step 4 above: add the destination country ISO code to `whitelisted_destinations`.
### Call never starts / remains pending
Check:
1. `scheduled_at_fixed_datetime` is in the future and in UTC
2. `telnyx_agent_target` is your purchased Telnyx number
3. `telnyx_end_user_target` is the recipient number
4. The purchased number is assigned to the TeXML app
### 422 "not available for inference"
The selected model is not enabled for your account.
List existing assistants to discover working models:
```python
for a in client.ai.assistants.list().data:
print(a.model)
```Related Skills
telnyx-whatsapp-ruby
Send WhatsApp messages, manage templates, WABAs, and phone numbers via the Telnyx WhatsApp Business API.
telnyx-whatsapp-python
Send WhatsApp messages, manage templates, WABAs, and phone numbers via the Telnyx WhatsApp Business API.
telnyx-whatsapp-javascript
Send WhatsApp messages, manage templates, WABAs, and phone numbers via the Telnyx WhatsApp Business API.
telnyx-whatsapp-java
Send WhatsApp messages, manage templates, WABAs, and phone numbers via the Telnyx WhatsApp Business API.
telnyx-whatsapp-go
Send WhatsApp messages, manage templates, WABAs, and phone numbers via the Telnyx WhatsApp Business API.
telnyx-whatsapp-curl
Send WhatsApp messages, manage templates, WABAs, and phone numbers via the Telnyx WhatsApp Business API.
telnyx-webrtc-ruby
Manage WebRTC credentials and mobile push notification settings. Use when building browser-based or mobile softphone applications. This skill provides Ruby SDK examples.
telnyx-webrtc-python
Manage WebRTC credentials and mobile push notification settings. Use when building browser-based or mobile softphone applications. This skill provides Python SDK examples.
telnyx-webrtc-javascript
Manage WebRTC credentials and mobile push notification settings. Use when building browser-based or mobile softphone applications. This skill provides JavaScript SDK examples.
telnyx-webrtc-java
Manage WebRTC credentials and mobile push notification settings. Use when building browser-based or mobile softphone applications. This skill provides Java SDK examples.
telnyx-webrtc-go
Manage WebRTC credentials and mobile push notification settings. Use when building browser-based or mobile softphone applications. This skill provides Go SDK examples.
telnyx-webrtc-curl
Manage WebRTC credentials and mobile push notification settings. Use when building browser-based or mobile softphone applications. This skill provides REST API (curl) examples.