Loading...
Loading...
Manage call recordings, media storage, Dialogflow integration, and external connections for SIP trunking. This skill provides Python SDK examples.
npx skill4agent add team-telnyx/skills telnyx-sip-integrations-pythonpip install telnyximport os
from telnyx import Telnyx
client = Telnyx(
api_key=os.environ.get("TELNYX_API_KEY"), # This is the default and can be omitted
)clientimport telnyx
try:
result = client.messages.send(to="+13125550001", from_="+13125550002", text="Hello")
except telnyx.APIConnectionError:
print("Network error — check connectivity and retry")
except telnyx.RateLimitError:
# 429: rate limited — wait and retry with exponential backoff
import time
time.sleep(1) # Check Retry-After header for actual delay
except telnyx.APIStatusError as e:
print(f"API error {e.status_code}: {e.message}")
if e.status_code == 422:
print("Validation error — check required fields and formats")401403404422429for item in page_result:GET /custom_storage_credentials/{connection_id}custom_storage_credential = client.custom_storage_credentials.retrieve(
"connection_id",
)
print(custom_storage_credential.connection_id)backendconfigurationPOST /custom_storage_credentials/{connection_id}custom_storage_credential = client.custom_storage_credentials.create(
connection_id="550e8400-e29b-41d4-a716-446655440000",
backend="gcs",
configuration={
"backend": "gcs"
},
)
print(custom_storage_credential.connection_id)backendconfigurationPUT /custom_storage_credentials/{connection_id}custom_storage_credential = client.custom_storage_credentials.update(
connection_id="550e8400-e29b-41d4-a716-446655440000",
backend="gcs",
configuration={
"backend": "gcs"
},
)
print(custom_storage_credential.connection_id)backendconfigurationDELETE /custom_storage_credentials/{connection_id}client.custom_storage_credentials.delete(
"connection_id",
)GET /dialogflow_connections/{connection_id}dialogflow_connection = client.dialogflow_connections.retrieve(
"connection_id",
)
print(dialogflow_connection.data)connection_idconversation_profile_idenvironmentrecord_typeservice_accountPOST /dialogflow_connections/{connection_id}dialogflow_connection = client.dialogflow_connections.create(
connection_id="550e8400-e29b-41d4-a716-446655440000",
service_account={
"type": "bar",
"project_id": "bar",
"private_key_id": "bar",
"private_key": "bar",
"client_email": "bar",
"client_id": "bar",
"auth_uri": "bar",
"token_uri": "bar",
"auth_provider_x509_cert_url": "bar",
"client_x509_cert_url": "bar",
},
)
print(dialogflow_connection.data)connection_idconversation_profile_idenvironmentrecord_typeservice_accountPUT /dialogflow_connections/{connection_id}dialogflow_connection = client.dialogflow_connections.update(
connection_id="550e8400-e29b-41d4-a716-446655440000",
service_account={
"type": "bar",
"project_id": "bar",
"private_key_id": "bar",
"private_key": "bar",
"client_email": "bar",
"client_id": "bar",
"auth_uri": "bar",
"token_uri": "bar",
"auth_provider_x509_cert_url": "bar",
"client_x509_cert_url": "bar",
},
)
print(dialogflow_connection.data)connection_idconversation_profile_idenvironmentrecord_typeservice_accountDELETE /dialogflow_connections/{connection_id}client.dialogflow_connections.delete(
"connection_id",
)GET /external_connectionspage = client.external_connections.list()
page = page.data[0]
print(page.id)activecreated_atcredential_activeexternal_sip_connectionidinboundoutboundrecord_typetagsupdated_atwebhook_api_versionwebhook_event_failover_urlwebhook_event_urlwebhook_timeout_secs/phone_numbersPOST /external_connectionsexternal_sip_connectionoutboundactiveinboundtagswebhook_event_failover_urlwebhook_event_urlwebhook_timeout_secsexternal_connection = client.external_connections.create(
external_sip_connection="zoom",
outbound={},
)
print(external_connection.data)activecreated_atcredential_activeexternal_sip_connectionidinboundoutboundrecord_typetagsupdated_atwebhook_api_versionwebhook_event_failover_urlwebhook_event_urlwebhook_timeout_secsGET /external_connections/log_messagespage = client.external_connections.log_messages.list()
page = page.log_messages[0]
print(page.code)log_messagesmetaGET /external_connections/log_messages/{id}log_message = client.external_connections.log_messages.retrieve(
"1293384261075731499",
)
print(log_message.log_messages)log_messagesDELETE /external_connections/log_messages/{id}response = client.external_connections.log_messages.dismiss(
"1293384261075731499",
)
print(response.success)successGET /external_connections/{id}external_connection = client.external_connections.retrieve(
"1293384261075731499",
)
print(external_connection.data)activecreated_atcredential_activeexternal_sip_connectionidinboundoutboundrecord_typetagsupdated_atwebhook_api_versionwebhook_event_failover_urlwebhook_event_urlwebhook_timeout_secsPATCH /external_connections/{id}outboundactiveinboundtagswebhook_event_failover_urlwebhook_event_urlwebhook_timeout_secsexternal_connection = client.external_connections.update(
id="1293384261075731499",
outbound={
"outbound_voice_profile_id": "1911630617284445511"
},
)
print(external_connection.data)activecreated_atcredential_activeexternal_sip_connectionidinboundoutboundrecord_typetagsupdated_atwebhook_api_versionwebhook_event_failover_urlwebhook_event_urlwebhook_timeout_secsDELETE /external_connections/{id}external_connection = client.external_connections.delete(
"1293384261075731499",
)
print(external_connection.data)activecreated_atcredential_activeexternal_sip_connectionidinboundoutboundrecord_typetagsupdated_atwebhook_api_versionwebhook_event_failover_urlwebhook_event_urlwebhook_timeout_secsGET /external_connections/{id}/civic_addressescivic_addresses = client.external_connections.civic_addresses.list(
id="1293384261075731499",
)
print(civic_addresses.data)city_or_towncity_or_town_aliascompany_namecountrycountry_or_districtdefault_location_iddescriptionhouse_numberhouse_number_suffixidlocationspostal_or_zip_coderecord_typestate_or_provincestreet_namestreet_suffixGET /external_connections/{id}/civic_addresses/{address_id}civic_address = client.external_connections.civic_addresses.retrieve(
address_id="318fb664-d341-44d2-8405-e6bfb9ced6d9",
id="1293384261075731499",
)
print(civic_address.data)city_or_towncity_or_town_aliascompany_namecountrycountry_or_districtdefault_location_iddescriptionhouse_numberhouse_number_suffixidlocationspostal_or_zip_coderecord_typestate_or_provincestreet_namestreet_suffixPATCH /external_connections/{id}/locations/{location_id}static_emergency_address_idresponse = client.external_connections.update_location(
location_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
static_emergency_address_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
)
print(response.data)accepted_address_suggestionslocation_idstatic_emergency_address_idGET /external_connections/{id}/phone_numberspage = client.external_connections.phone_numbers.list(
id="1293384261075731499",
)
page = page.data[0]
print(page.civic_address_id)acquired_capabilitiescivic_address_iddisplayed_country_codelocation_idnumber_idtelephone_numberticket_idGET /external_connections/{id}/phone_numbers/{phone_number_id}phone_number = client.external_connections.phone_numbers.retrieve(
phone_number_id="1234567889",
id="1293384261075731499",
)
print(phone_number.data)acquired_capabilitiescivic_address_iddisplayed_country_codelocation_idnumber_idtelephone_numberticket_idPATCH /external_connections/{id}/phone_numbers/{phone_number_id}location_idphone_number = client.external_connections.phone_numbers.update(
phone_number_id="1234567889",
id="1293384261075731499",
)
print(phone_number.data)acquired_capabilitiescivic_address_iddisplayed_country_codelocation_idnumber_idtelephone_numberticket_idconnection_idGET /external_connections/{id}/releasespage = client.external_connections.releases.list(
id="1293384261075731499",
)
page = page.data[0]
print(page.tenant_id)created_aterror_messagestatustelephone_numberstenant_idticket_idGET /external_connections/{id}/releases/{release_id}release = client.external_connections.releases.retrieve(
release_id="7b6a6449-b055-45a6-81f6-f6f0dffa4cc6",
id="1293384261075731499",
)
print(release.data)created_aterror_messagestatustelephone_numberstenant_idticket_idGET /external_connections/{id}/uploadspage = client.external_connections.uploads.list(
id="1293384261075731499",
)
page = page.data[0]
print(page.location_id)available_usageserror_codeerror_messagelocation_idstatustenant_idticket_idtn_upload_entriesPOST /external_connections/{id}/uploadsnumber_idsadditional_usagescivic_address_idlocation_idusageupload = client.external_connections.uploads.create(
id="1293384261075731499",
number_ids=["3920457616934164700", "3920457616934164701", "3920457616934164702", "3920457616934164703"],
)
print(upload.ticket_id)successticket_idPOST /external_connections/{id}/uploads/refreshresponse = client.external_connections.uploads.refresh_status(
"1293384261075731499",
)
print(response.success)successGET /external_connections/{id}/uploads/statusresponse = client.external_connections.uploads.pending_count(
"1293384261075731499",
)
print(response.data)pending_numbers_countpending_orders_countGET /external_connections/{id}/uploads/{ticket_id}upload = client.external_connections.uploads.retrieve(
ticket_id="7b6a6449-b055-45a6-81f6-f6f0dffa4cc6",
id="1293384261075731499",
)
print(upload.data)available_usageserror_codeerror_messagelocation_idstatustenant_idticket_idtn_upload_entriesPOST /external_connections/{id}/uploads/{ticket_id}/retryresponse = client.external_connections.uploads.retry(
ticket_id="7b6a6449-b055-45a6-81f6-f6f0dffa4cc6",
id="1293384261075731499",
)
print(response.data)available_usageserror_codeerror_messagelocation_idstatustenant_idticket_idtn_upload_entriesGET /mediamedia = client.media.list()
print(media.data)content_typecreated_atexpires_atmedia_nameupdated_atPOST /mediamedia_urlmedia_namettl_secsresponse = client.media.upload(
media_url="http://www.example.com/audio.mp3",
)
print(response.data)content_typecreated_atexpires_atmedia_nameupdated_atGET /media/{media_name}media = client.media.retrieve(
"media_name",
)
print(media.data)content_typecreated_atexpires_atmedia_nameupdated_atPUT /media/{media_name}media_urlttl_secsmedia = client.media.update(
media_name="media_name",
)
print(media.data)content_typecreated_atexpires_atmedia_nameupdated_atDELETE /media/{media_name}client.media.delete(
"media_name",
)GET /media/{media_name}/downloadresponse = client.media.download(
"media_name",
)
print(response)
content = response.read()
print(content)POST /operator_connect/actions/refreshresponse = client.operator_connect.actions.refresh()
print(response.message)messagesuccessGET /recording_transcriptionspage = client.recording_transcriptions.list()
page = page.data[0]
print(page.id)created_atduration_millisidrecord_typerecording_idstatustranscription_textupdated_atGET /recording_transcriptions/{recording_transcription_id}recording_transcription = client.recording_transcriptions.retrieve(
"6a09cdc3-8948-47f0-aa62-74ac943d6c58",
)
print(recording_transcription.data)created_atduration_millisidrecord_typerecording_idstatustranscription_textupdated_atDELETE /recording_transcriptions/{recording_transcription_id}recording_transcription = client.recording_transcriptions.delete(
"6a09cdc3-8948-47f0-aa62-74ac943d6c58",
)
print(recording_transcription.data)created_atduration_millisidrecord_typerecording_idstatustranscription_textupdated_atGET /recordingspage = client.recordings.list()
page = page.data[0]
print(page.id)call_control_idcall_leg_idcall_session_idchannelsconference_idconnection_idcreated_atdownload_urlsduration_millisfromidinitiated_byrecord_typerecording_ended_atrecording_started_atsourcestatustoupdated_atPOST /recordings/actions/deleteaction = client.recordings.actions.delete(
ids=["428c31b6-7af4-4bcb-b7f5-5013ef9657c1", "428c31b6-7af4-4bcb-b7f5-5013ef9657c2"],
)
print(action.status)statusGET /recordings/{recording_id}recording = client.recordings.retrieve(
"recording_id",
)
print(recording.data)call_control_idcall_leg_idcall_session_idchannelsconference_idconnection_idcreated_atdownload_urlsduration_millisfromidinitiated_byrecord_typerecording_ended_atrecording_started_atsourcestatustoupdated_atDELETE /recordings/{recording_id}recording = client.recordings.delete(
"recording_id",
)
print(recording.data)call_control_idcall_leg_idcall_session_idchannelsconference_idconnection_idcreated_atdownload_urlsduration_millisfromidinitiated_byrecord_typerecording_ended_atrecording_started_atsourcestatustoupdated_atPOST /siprec_connectorssiprec_connector = client.siprec_connectors.create(
host="siprec.telnyx.com",
name="my-siprec-connector",
port=5060,
)
print(siprec_connector.data)app_subdomaincreated_athostnameportrecord_typeupdated_atGET /siprec_connectors/{connector_name}siprec_connector = client.siprec_connectors.retrieve(
"connector_name",
)
print(siprec_connector.data)app_subdomaincreated_athostnameportrecord_typeupdated_atPUT /siprec_connectors/{connector_name}siprec_connector = client.siprec_connectors.update(
connector_name="connector_name",
host="siprec.telnyx.com",
name="my-siprec-connector",
port=5060,
)
print(siprec_connector.data)app_subdomaincreated_athostnameportrecord_typeupdated_atDELETE /siprec_connectors/{connector_name}client.siprec_connectors.delete(
"connector_name",
)