team-telnyx/ai

telnyx-voice-advanced-python

- Advanced call control features including DTMF sending, SIPREC recording, noise suppression, client state, and supervisor controls.

Ver código-fonte

Como usar

  1. Copie o comando e verifique o pacote antes de instalar no seu ambiente de agente.
  2. Consulte no original as ferramentas, credenciais e ambientes necessários.
  3. Descreva os dados de entrada e a entrega esperada; confira a saída com as fontes.
npx skills add https://github.com/team-telnyx/ai --skill telnyx-voice-advanced-python

Antes de começar

  • A instalação não inclui assinatura de modelo, franquia API ou acesso aos seus arquivos.
  • Estrelas e instalações indicam atividade, não um teste independente de qualidade ou segurança.
Documento original do Skill

Renderizado do repositório de origem, preservando títulos, exemplos, código, tabelas, links e imagens.

<!-- Auto-generated from Telnyx OpenAPI specs. Do not edit. -->

Telnyx Voice Advanced - Python

Installation

bash
pip install telnyx

Setup

python
import os
from telnyx import Telnyx

client = Telnyx(
    api_key=os.environ.get("TELNYX_API_KEY"),  # This is the default and can be omitted
)

All examples below assume client is already initialized as shown above.

Error Handling

All API calls can fail with network errors, rate limits (429), validation errors (422), or authentication errors (401). Always handle errors in production code:

python
import 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")

Common error codes: 401 invalid API key, 403 insufficient permissions, 404 resource not found, 422 validation error (check field formats), 429 rate limited (retry with exponential backoff).

Join AI Assistant Conversation

Add a participant to an existing AI assistant conversation. Use this command to bring an additional call leg into a running AI conversation.

POST /calls/{call_control_id}/actions/ai_assistant_join — Required: conversation_id, participant

Optional: client_state (string), command_id (string)

python
response = client.calls.actions.join_ai_assistant(
    call_control_id="550e8400-e29b-41d4-a716-446655440000",
    conversation_id="v3:abc123",
    participant={
        "id": "v3:abc123def456",
        "role": "user",
    },
)
print(response.data)

Returns: conversation_id (uuid), result (string)

Update client state

Updates client state

PUT /calls/{call_control_id}/actions/client_state_update — Required: client_state

python
response = client.calls.actions.update_client_state(
    call_control_id="550e8400-e29b-41d4-a716-446655440000",
    client_state="aGF2ZSBhIG5pY2UgZGF5ID1d",
)
print(response.data)

Returns: result (string)

Start Conversation Relay

Start a Conversation Relay session on an active call. Conversation Relay connects the call audio to your WebSocket so your application can exchange realtime messages with the caller while Telnyx handles speech recognition and text-to-speech. Only one AI Assistant or Conversation Relay session can be active on a call at a time.

POST /calls/{call_control_id}/actions/conversation_relay_start

Optional: assistant (object), client_state (string), command_id (string), conversation_relay_dtmf_detection (boolean), conversation_relay_settings (object), conversation_relay_url (string), custom_parameters (object), dtmf_detection (boolean), greeting (string), interruptible (enum: none, any, speech, dtmf), interruptible_greeting (enum: none, any, speech, dtmf), interruption_settings (object), language (string), languages (array[object]), provider (string), structured_provider (object), transcription (object), transcription_engine (enum: Google, Telnyx, Deepgram, Azure, xAI, AssemblyAI, Speechmatics, Soniox, A, B), transcription_engine_config (object), tts_provider (string), url (string), voice (string), voice_settings (object)

python
response = client.calls.actions.start_conversation_relay(
    call_control_id="550e8400-e29b-41d4-a716-446655440000",
)
print(response.data)

Returns: conversation_relay_id (string), result (string)

Stop Conversation Relay

Stop the active Conversation Relay session on a call.

POST /calls/{call_control_id}/actions/conversation_relay_stop

Optional: client_state (string), command_id (string)

python
response = client.calls.actions.stop_conversation_relay(
    call_control_id="550e8400-e29b-41d4-a716-446655440000",
)
print(response.data)

Returns: result (string)

Send DTMF

Sends DTMF tones from this leg. DTMF tones will be heard by the other end of the call. Expected Webhooks:

There are no webhooks associated with this command.

POST /calls/{call_control_id}/actions/send_dtmf — Required: digits

Optional: client_state (string), command_id (string), duration_millis (int32)

python
response = client.calls.actions.send_dtmf(
    call_control_id="550e8400-e29b-41d4-a716-446655440000",
    digits="1www2WABCDw9",
)
print(response.data)

Returns: result (string)

SIPREC start

Start siprec session to configured in SIPREC connector SRS.

Expected Webhooks:

  • siprec.started
  • siprec.stopped
  • siprec.failed

POST /calls/{call_control_id}/actions/siprec_start

Optional: client_state (string), connector_name (string), include_metadata_custom_headers (boolean), secure (boolean), session_timeout_secs (integer), sip_transport (enum: udp, tcp, tls), siprec_track (enum: inboundtrack, outboundtrack, both_tracks)

python
response = client.calls.actions.start_siprec(
    call_control_id="550e8400-e29b-41d4-a716-446655440000",
)
print(response.data)

Returns: result (string)

SIPREC stop

Stop SIPREC session. Expected Webhooks:

  • siprec.stopped

POST /calls/{call_control_id}/actions/siprec_stop

Optional: client_state (string), command_id (string)

python
response = client.calls.actions.stop_siprec(
    call_control_id="550e8400-e29b-41d4-a716-446655440000",
)
print(response.data)

Returns: result (string)

Noise Suppression Start (BETA)

POST /calls/{call_control_id}/actions/suppression_start

Optional: client_state (string), command_id (string), direction (enum: inbound, outbound, both), noise_suppression_engine (enum: Denoiser, DeepFilterNet, Krisp, AiCoustics, aiclquail, aiclrook, aicsquail, aicsrook, quailvoicefocuss, quailvoicefocusxs), noise_suppression_engine_config (object)

python
response = client.calls.actions.start_noise_suppression(
    call_control_id="550e8400-e29b-41d4-a716-446655440000",
)
print(response.data)

Returns: result (string)

Noise Suppression Stop (BETA)

POST /calls/{call_control_id}/actions/suppression_stop

Optional: client_state (string), command_id (string)

python
response = client.calls.actions.stop_noise_suppression(
    call_control_id="550e8400-e29b-41d4-a716-446655440000",
)
print(response.data)

Returns: result (string)

Switch supervisor role

Switch the supervisor role for a bridged call. This allows switching between different supervisor modes during an active call

POST /calls/{call_control_id}/actions/switch_supervisor_role — Required: role

python
response = client.calls.actions.switch_supervisor_role(
    call_control_id="550e8400-e29b-41d4-a716-446655440000",
    role="barge",
)
print(response.data)

Returns: result (string)


Webhooks

Webhook Verification

Telnyx signs webhooks with Ed25519. Each request includes telnyx-signature-ed25519 and telnyx-timestamp headers. Always verify signatures in production:

python
# In your webhook handler (e.g., Flask — use raw body, not parsed JSON):
@app.route("/webhooks", methods=["POST"])
def handle_webhook():
    payload = request.get_data(as_text=True)  # raw body as string
    headers = dict(request.headers)
    try:
        event = client.webhooks.unwrap(payload, headers=headers)
    except Exception as e:
        print(f"Webhook verification failed: {e}")
        return "Invalid signature", 400
    # Signature valid — event is the parsed webhook payload
    print(f"Received event: {event.data.event_type}")
    return "OK", 200

The following webhook events are sent to your configured webhook URL. All webhooks include telnyx-timestamp and telnyx-signature-ed25519 headers for Ed25519 signature verification. Use client.webhooks.unwrap() to verify.

EventDescription
callConversationEndedCall Conversation Ended
callConversationInsightsGeneratedCall Conversation Insights Generated
callDtmfReceivedCall Dtmf Received
callMachineDetectionEndedCall Machine Detection Ended
callMachineGreetingEndedCall Machine Greeting Ended
callMachinePremiumDetectionEndedCall Machine Premium Detection Ended
callMachinePremiumGreetingEndedCall Machine Premium Greeting Ended
callReferCompletedCall Refer Completed
callReferFailedCall Refer Failed
callReferStartedCall Refer Started
callSiprecFailedCall Siprec Failed
callSiprecStartedCall Siprec Started
callSiprecStoppedCall Siprec Stopped

Webhook payload fields

`callConversationEnded`

FieldTypeDescription
data.record_typeenum: eventIdentifies the type of the resource.
data.event_typeenum: call.conversation.endedThe type of event being delivered.
data.iduuidUnique identifier for the event.
data.occurred_atdate-timeISO 8601 datetime of when the event occurred.
data.created_atdate-timeTimestamp when the event was created in the system.
data.payload.assistant_idstringUnique identifier of the assistant involved in the call.
data.payload.call_control_idstringCall ID used to issue commands via Call Control API.
data.payload.connection_idstringCall Control App ID (formerly Telnyx connection ID) used in the call.
data.payload.call_leg_idstringID that is unique to the call leg.
data.payload.call_session_idstringID that is unique to the call session (group of related call legs).
data.payload.client_statestringBase64-encoded state received from a command.
data.payload.calling_party_typeenum: pstn, sipThe type of calling party connection.
data.payload.conversation_idstringID unique to the conversation or insight group generated for the call.
data.payload.duration_secintegerDuration of the conversation in seconds.
data.payload.reasonstring \nullReason the conversation ended.
data.payload.fromstringThe caller's number or identifier.
data.payload.tostringThe callee's number or SIP address.
data.payload.llm_modelstringThe large language model used during the conversation.
data.payload.stt_modelstringThe speech-to-text model used in the conversation.
data.payload.tts_providerstringThe text-to-speech provider used in the call.
data.payload.tts_model_idstringThe model ID used for text-to-speech synthesis.
data.payload.tts_voice_idstringVoice ID used for TTS.

`callConversationInsightsGenerated`

FieldTypeDescription
data.record_typeenum: eventIdentifies the type of the resource.
data.event_typeenum: call.conversation_insights.generatedThe type of event being delivered.
data.iduuidIdentifies the type of resource.
data.occurred_atdate-timeISO 8601 datetime of when the event occurred.
data.payload.call_control_idstringCall ID used to issue commands via Call Control API.
data.payload.connection_idstringCall Control App ID (formerly Telnyx connection ID) used in the call.
data.payload.call_leg_idstringID that is unique to the call and can be used to correlate webhook events.
data.payload.call_session_idstringID that is unique to the call session and can be used to correlate webhook events.
data.payload.client_statestringState received from a command.
data.payload.calling_party_typeenum: pstn, sipThe type of calling party connection.
data.payload.insight_group_idstringID that is unique to the insight group being generated for the call.
data.payload.resultsarray[object]Array of insight results being generated for the call.

`callDtmfReceived`

FieldTypeDescription
data.record_typeenum: eventIdentifies the type of the resource.
data.event_typeenum: call.dtmf.receivedThe type of event being delivered.
data.iduuidIdentifies the type of resource.
data.occurred_atdate-timeISO 8601 datetime of when the event occurred.
data.payload.call_control_idstringCall ID used to issue commands via Call Control API.
data.payload.connection_idstringIdentifies the type of resource.
data.payload.call_leg_idstringID that is unique to the call and can be used to correlate webhook events.
data.payload.call_session_idstringID that is unique to the call session and can be used to correlate webhook events.
data.payload.client_statestringState received from a command.
data.payload.fromstringNumber or SIP URI placing the call.
data.payload.tostringDestination number or SIP URI of the call.
data.payload.digitstringThe received DTMF digit or symbol.

`callMachineDetectionEnded`

FieldTypeDescription
data.record_typeenum: eventIdentifies the type of the resource.
data.event_typeenum: call.machine.detection.endedThe type of event being delivered.
data.iduuidIdentifies the type of resource.
data.occurred_atdate-timeISO 8601 datetime of when the event occurred.
data.payload.call_control_idstringCall ID used to issue commands via Call Control API.
data.payload.connection_idstringCall Control App ID (formerly Telnyx connection ID) used in the call.
data.payload.call_leg_idstringID that is unique to the call and can be used to correlate webhook events.
data.payload.call_session_idstringID that is unique to the call session and can be used to correlate webhook events.
data.payload.client_statestringState received from a command.
data.payload.fromstringNumber or SIP URI placing the call.
data.payload.tostringDestination number or SIP URI of the call.
data.payload.resultenum: human, machine, not_sureAnswering machine detection result.

`callMachineGreetingEnded`

FieldTypeDescription
data.record_typeenum: eventIdentifies the type of the resource.
data.event_typeenum: call.machine.greeting.endedThe type of event being delivered.
data.iduuidIdentifies the type of resource.
data.occurred_atdate-timeISO 8601 datetime of when the event occurred.
data.payload.call_control_idstringCall ID used to issue commands via Call Control API.
data.payload.connection_idstringCall Control App ID (formerly Telnyx connection ID) used in the call.
data.payload.call_leg_idstringID that is unique to the call and can be used to correlate webhook events.
data.payload.call_session_idstringID that is unique to the call session and can be used to correlate webhook events.
data.payload.client_statestringState received from a command.
data.payload.fromstringNumber or SIP URI placing the call.
data.payload.tostringDestination number or SIP URI of the call.
data.payload.resultenum: beepdetected, ended, notsureAnswering machine greeting ended result.

`callMachinePremiumDetectionEnded`

FieldTypeDescription
data.record_typeenum: eventIdentifies the type of the resource.
data.event_typeenum: call.machine.premium.detection.endedThe type of event being delivered.
data.iduuidIdentifies the type of resource.
data.occurred_atdate-timeISO 8601 datetime of when the event occurred.
data.payload.call_control_idstringCall ID used to issue commands via Call Control API.
data.payload.connection_idstringCall Control App ID (formerly Telnyx connection ID) used in the call.
data.payload.call_leg_idstringID that is unique to the call and can be used to correlate webhook events.
data.payload.call_session_idstringID that is unique to the call session and can be used to correlate webhook events.
data.payload.client_statestringState received from a command.
data.payload.fromstringNumber or SIP URI placing the call.
data.payload.tostringDestination number or SIP URI of the call.
data.payload.resultenum: humanresidence, humanbusiness, machine, silence, faxdetected, notsurePremium Answering Machine Detection result.

`callMachinePremiumGreetingEnded`

FieldTypeDescription
data.record_typeenum: eventIdentifies the type of the resource.
data.event_typeenum: call.machine.premium.greeting.endedThe type of event being delivered.
data.iduuidIdentifies the type of resource.
data.occurred_atdate-timeISO 8601 datetime of when the event occurred.
data.payload.call_control_idstringCall ID used to issue commands via Call Control API.
data.payload.connection_idstringCall Control App ID (formerly Telnyx connection ID) used in the call.
data.payload.call_leg_idstringID that is unique to the call and can be used to correlate webhook events.
data.payload.call_session_idstringID that is unique to the call session and can be used to correlate webhook events.
data.payload.client_statestringState received from a command.
data.payload.fromstringNumber or SIP URI placing the call.
data.payload.tostringDestination number or SIP URI of the call.
data.payload.resultenum: beepdetected, nobeep_detectedPremium Answering Machine Greeting Ended result.

`callReferCompleted`

FieldTypeDescription
data.record_typeenum: eventIdentifies the type of the resource.
data.event_typeenum: call.refer.completedThe type of event being delivered.
data.iduuidIdentifies the type of resource.
data.occurred_atdate-timeISO 8601 datetime of when the event occurred.
data.payload.call_control_idstringUnique ID for controlling the call.
data.payload.call_leg_idstringID that is unique to the call and can be used to correlate webhook events.
data.payload.call_session_idstringID that is unique to the call session and can be used to correlate webhook events.
data.payload.connection_idstringCall Control App ID (formerly Telnyx connection ID) used in the call.
data.payload.client_statestringState received from a command.
data.payload.fromstringNumber or SIP URI placing the call.
data.payload.sip_notify_responseintegerSIP NOTIFY event status for tracking the REFER attempt.
data.payload.tostringDestination number or SIP URI of the call.

`callReferFailed`

FieldTypeDescription
data.record_typeenum: eventIdentifies the type of the resource.
data.event_typeenum: call.refer.failedThe type of event being delivered.
data.iduuidIdentifies the type of resource.
data.occurred_atdate-timeISO 8601 datetime of when the event occurred.
data.payload.call_control_idstringUnique ID for controlling the call.
data.payload.call_leg_idstringID that is unique to the call and can be used to correlate webhook events.
data.payload.call_session_idstringID that is unique to the call session and can be used to correlate webhook events.
data.payload.connection_idstringCall Control App ID (formerly Telnyx connection ID) used in the call.
data.payload.client_statestringState received from a command.
data.payload.fromstringNumber or SIP URI placing the call.
data.payload.sip_notify_responseintegerSIP NOTIFY event status for tracking the REFER attempt.
data.payload.tostringDestination number or SIP URI of the call.

`callReferStarted`

FieldTypeDescription
data.record_typeenum: eventIdentifies the type of the resource.
data.event_typeenum: call.refer.startedThe type of event being delivered.
data.iduuidIdentifies the type of resource.
data.occurred_atdate-timeISO 8601 datetime of when the event occurred.
data.payload.call_control_idstringUnique ID for controlling the call.
data.payload.call_leg_idstringID that is unique to the call and can be used to correlate webhook events.
data.payload.call_session_idstringID that is unique to the call session and can be used to correlate webhook events.
data.payload.connection_idstringCall Control App ID (formerly Telnyx connection ID) used in the call.
data.payload.client_statestringState received from a command.
data.payload.fromstringNumber or SIP URI placing the call.
data.payload.sip_notify_responseintegerSIP NOTIFY event status for tracking the REFER attempt.
data.payload.tostringDestination number or SIP URI of the call.

`callSiprecFailed`

FieldTypeDescription
data.record_typeenum: eventIdentifies the resource.
data.event_typeenum: siprec.failedThe type of event being delivered.
data.iduuidIdentifies the type of resource.
data.occurred_atdate-timeISO 8601 datetime of when the event occurred.
data.payload.call_control_idstringCall ID used to issue commands via Call Control API.
data.payload.connection_idstringCall Control App ID (formerly Telnyx connection ID) used in the call.
data.payload.call_leg_idstringID that is unique to the call and can be used to correlate webhook events.
data.payload.call_session_idstringID that is unique to the call session and can be used to correlate webhook events.
data.payload.client_statestringState received from a command.
data.payload.failure_causestringQ850 reason why siprec session failed.

`callSiprecStarted`

FieldTypeDescription
data.record_typeenum: eventIdentifies the type of the resource.
data.event_typeenum: siprec.startedThe type of event being delivered.
data.iduuidIdentifies the type of resource.
data.occurred_atdate-timeISO 8601 datetime of when the event occurred.
data.payload.call_control_idstringCall ID used to issue commands via Call Control API.
data.payload.connection_idstringCall Control App ID (formerly Telnyx connection ID) used in the call.
data.payload.call_leg_idstringID that is unique to the call and can be used to correlate webhook events.
data.payload.call_session_idstringID that is unique to the call session and can be used to correlate webhook events.
data.payload.client_statestringState received from a command.

`callSiprecStopped`

FieldTypeDescription
data.record_typeenum: eventIdentifies the type of the resource.
data.event_typeenum: siprec.stoppedThe type of event being delivered.
data.iduuidIdentifies the type of resource.
data.occurred_atdate-timeISO 8601 datetime of when the event occurred.
data.payload.call_control_idstringCall ID used to issue commands via Call Control API.
data.payload.connection_idstringCall Control App ID (formerly Telnyx connection ID) used in the call.
data.payload.call_leg_idstringID that is unique to the call and can be used to correlate webhook events.
data.payload.call_session_idstringID that is unique to the call session and can be used to correlate webhook events.
data.payload.client_statestringState received from a command.
data.payload.hangup_causestringQ850 reason why the SIPREC session was stopped.

Relacionados por tarefa

do mesmo repositório

Mais Skills

Todos os Skills