{"id":"dd89fd06-9de2-479b-978d-a9a08c6964d4","shortId":"QhPYde","kind":"skill","title":"telnyx-voice-media-python","tagline":">-","description":"<!-- Auto-generated from Telnyx OpenAPI specs. Do not edit. -->\n\n# Telnyx Voice Media - Python\n\n## Installation\n\n```bash\npip install telnyx\n```\n\n## Setup\n\n```python\nimport os\nfrom telnyx import Telnyx\n\nclient = Telnyx(\n    api_key=os.environ.get(\"TELNYX_API_KEY\"),  # This is the default and can be omitted\n)\n```\n\nAll examples below assume `client` is already initialized as shown above.\n\n## Error Handling\n\nAll API calls can fail with network errors, rate limits (429), validation errors (422),\nor authentication errors (401). Always handle errors in production code:\n\n```python\nimport telnyx\n\ntry:\n    result = client.messages.send(to=\"+13125550001\", from_=\"+13125550002\", text=\"Hello\")\nexcept telnyx.APIConnectionError:\n    print(\"Network error — check connectivity and retry\")\nexcept telnyx.RateLimitError:\n    # 429: rate limited — wait and retry with exponential backoff\n    import time\n    time.sleep(1)  # Check Retry-After header for actual delay\nexcept telnyx.APIStatusError as e:\n    print(f\"API error {e.status_code}: {e.message}\")\n    if e.status_code == 422:\n        print(\"Validation error — check required fields and formats\")\n```\n\nCommon error codes: `401` invalid API key, `403` insufficient permissions,\n`404` resource not found, `422` validation error (check field formats),\n`429` rate limited (retry with exponential backoff).\n\n## Play audio URL\n\nPlay an audio file on the call. If multiple play audio commands are issued consecutively,\nthe audio files will be placed in a queue awaiting playback. *Notes:*\n\n- When `overlay` is enabled, `target_legs` is limited to `self`.\n\n`POST /calls/{call_control_id}/actions/playback_start`\n\nOptional: `audio_type` (enum: mp3, wav), `audio_url` (string), `cache_audio` (boolean), `client_state` (string), `command_id` (string), `loop` (string), `media_name` (string), `overlay` (boolean), `playback_content` (string), `stop` (string), `target_legs` (string)\n\n```python\nresponse = client.calls.actions.start_playback(\n    call_control_id=\"550e8400-e29b-41d4-a716-446655440000\",\n    audio_url=\"https://example.com/audio.mp3\",\n)\nprint(response.data)\n```\n\nReturns: `result` (string)\n\n## Stop audio playback\n\nStop audio being played on the call. **Expected Webhooks:**\n\n- `call.playback.ended` or `call.speak.ended`\n\n`POST /calls/{call_control_id}/actions/playback_stop`\n\nOptional: `client_state` (string), `command_id` (string), `overlay` (boolean), `stop` (string)\n\n```python\nresponse = client.calls.actions.stop_playback(\n    call_control_id=\"550e8400-e29b-41d4-a716-446655440000\",\n)\nprint(response.data)\n```\n\nReturns: `result` (string)\n\n## Record pause\n\nPause recording the call. Recording can be resumed via Resume recording command. **Expected Webhooks:**\n\nThere are no webhooks associated with this command.\n\n`POST /calls/{call_control_id}/actions/record_pause`\n\nOptional: `client_state` (string), `command_id` (string), `recording_id` (uuid)\n\n```python\nresponse = client.calls.actions.pause_recording(\n    call_control_id=\"550e8400-e29b-41d4-a716-446655440000\",\n)\nprint(response.data)\n```\n\nReturns: `result` (string)\n\n## Record resume\n\nResume recording the call. **Expected Webhooks:**\n\nThere are no webhooks associated with this command.\n\n`POST /calls/{call_control_id}/actions/record_resume`\n\nOptional: `client_state` (string), `command_id` (string), `recording_id` (uuid)\n\n```python\nresponse = client.calls.actions.resume_recording(\n    call_control_id=\"550e8400-e29b-41d4-a716-446655440000\",\n)\nprint(response.data)\n```\n\nReturns: `result` (string)\n\n## Recording start\n\nStart recording the call. Recording will stop on call hang-up, or can be initiated via the Stop Recording command. **Expected Webhooks:**\n\n- `call.recording.saved`\n- `call.recording.transcription.saved`\n- `call.recording.error`\n\n`POST /calls/{call_control_id}/actions/record_start` — Required: `format`, `channels`\n\nOptional: `client_state` (string), `command_id` (string), `custom_file_name` (string), `max_length` (int32), `play_beep` (boolean), `recording_track` (enum: both, inbound, outbound), `timeout_secs` (int32), `transcription` (boolean), `transcription_engine` (enum: A, B, deepgram/nova-3), `transcription_language` (enum: af, af-ZA, am, am-ET, ar, ar-AE, ar-BH, ar-DZ, ar-EG, ar-IL, ar-IQ, ar-JO, ar-KW, ar-LB, ar-MA, ar-MR, ar-OM, ar-PS, ar-QA, ar-SA, ar-TN, ar-YE, as, auto_detect, az, az-AZ, ba, be, bg, bg-BG, bn, bn-BD, bn-IN, bo, br, bs, bs-BA, ca, ca-ES, cs, cs-CZ, cy, da, da-DK, de, de-AT, de-CH, de-DE, el, el-GR, en, en-AU, en-CA, en-GB, en-GH, en-HK, en-IE, en-IN, en-KE, en-NG, en-NZ, en-PH, en-PK, en-SG, en-TZ, en-US, en-ZA, es, es-419, es-AR, es-BO, es-CL, es-CO, es-CR, es-DO, es-EC, es-ES, es-GT, es-HN, es-MX, es-NI, es-PA, es-PE, es-PR, es-PY, es-SV, es-US, es-UY, es-VE, et, et-EE, eu, eu-ES, fa, fa-IR, fi, fi-FI, fil-PH, fo, fr, fr-BE, fr-CA, fr-CH, fr-FR, gl, gl-ES, gu, gu-IN, ha, haw, he, hi, hi-IN, hr, hr-HR, ht, hu, hu-HU, hy, hy-AM, id, id-ID, is, is-IS, it, it-CH, it-IT, iw-IL, ja, ja-JP, jv-ID, jw, ka, ka-GE, kk, kk-KZ, km, km-KH, kn, kn-IN, ko, ko-KR, la, lb, ln, lo, lo-LA, lt, lt-LT, lv, lv-LV, mg, mi, mk, mk-MK, ml, ml-IN, mn, mn-MN, mr, mr-IN, ms, ms-MY, mt, my, my-MM, ne, ne-NP, nl, nl-BE, nl-NL, nn, no, no-NO, oc, pa, pa-Guru-IN, pl, pl-PL, ps, pt, pt-BR, pt-PT, ro, ro-RO, ru, ru-RU, rw-RW, sa, sd, si, si-LK, sk, sk-SK, sl, sl-SI, sn, so, sq, sq-AL, sr, sr-RS, ss-latn-za, st-ZA, su, su-ID, sv, sv-SE, sw, sw-KE, sw-TZ, ta, ta-IN, ta-LK, ta-MY, ta-SG, te, te-IN, tg, th, th-TH, tk, tl, tn-latn-za, tr, tr-TR, ts-ZA, tt, uk, uk-UA, ur, ur-IN, ur-PK, uz, uz-UZ, ve-ZA, vi, vi-VN, xh-ZA, yi, yo, yue-Hant-HK, zh, zh-TW, zu-ZA), `transcription_max_speaker_count` (int32), `transcription_min_speaker_count` (int32), `transcription_profanity_filter` (boolean), `transcription_speaker_diarization` (boolean), `trim` (enum: trim-silence)\n\n```python\nresponse = client.calls.actions.start_recording(\n    call_control_id=\"550e8400-e29b-41d4-a716-446655440000\",\n    channels=\"single\",\n    format=\"wav\",\n)\nprint(response.data)\n```\n\nReturns: `result` (string)\n\n## Recording stop\n\nStop recording the call. **Expected Webhooks:**\n\n- `call.recording.saved`\n\n`POST /calls/{call_control_id}/actions/record_stop`\n\nOptional: `client_state` (string), `command_id` (string), `recording_id` (uuid)\n\n```python\nresponse = client.calls.actions.stop_recording(\n    call_control_id=\"550e8400-e29b-41d4-a716-446655440000\",\n)\nprint(response.data)\n```\n\nReturns: `result` (string)\n\n## Speak text\n\nConvert text to speech and play it back on the call. If multiple speak text commands are issued consecutively, the audio files will be placed in a queue awaiting playback. **Expected Webhooks:**\n\n- `call.speak.started`\n- `call.speak.ended`\n\n`POST /calls/{call_control_id}/actions/speak` — Required: `payload`, `voice`\n\nOptional: `client_state` (string), `command_id` (string), `language` (enum: arb, cmn-CN, cy-GB, da-DK, de-DE, en-AU, en-GB, en-GB-WLS, en-IN, en-US, es-ES, es-MX, es-US, fr-CA, fr-FR, hi-IN, is-IS, it-IT, ja-JP, ko-KR, nb-NO, nl-NL, pl-PL, pt-BR, pt-PT, ro-RO, ru-RU, sv-SE, tr-TR), `loop` (string), `payload_type` (enum: text, ssml), `service_level` (enum: basic, premium), `stop` (string), `target_legs` (enum: self, opposite, both), `voice_settings` (object)\n\n```python\nresponse = client.calls.actions.speak(\n    call_control_id=\"550e8400-e29b-41d4-a716-446655440000\",\n    payload=\"Say this on the call\",\n    voice=\"female\",\n    language=\"en-US\",\n)\nprint(response.data)\n```\n\nReturns: `result` (string)\n\n---\n\n## Webhooks\n\n### Webhook Verification\n\nTelnyx signs webhooks with Ed25519. Each request includes `telnyx-signature-ed25519`\nand `telnyx-timestamp` headers. Always verify signatures in production:\n\n```python\n# In your webhook handler (e.g., Flask — use raw body, not parsed JSON):\n@app.route(\"/webhooks\", methods=[\"POST\"])\ndef handle_webhook():\n    payload = request.get_data(as_text=True)  # raw body as string\n    headers = dict(request.headers)\n    try:\n        event = client.webhooks.unwrap(payload, headers=headers)\n    except Exception as e:\n        print(f\"Webhook verification failed: {e}\")\n        return \"Invalid signature\", 400\n    # Signature valid — event is the parsed webhook payload\n    print(f\"Received event: {event.data.event_type}\")\n    return \"OK\", 200\n```\n\nThe following webhook events are sent to your configured webhook URL.\nAll webhooks include `telnyx-timestamp` and `telnyx-signature-ed25519` headers for Ed25519 signature verification. Use `client.webhooks.unwrap()` to verify.\n\n| Event | Description |\n|-------|-------------|\n| `callPlaybackEnded` | Call Playback Ended |\n| `callPlaybackStarted` | Call Playback Started |\n| `callRecordingError` | Call Recording Error |\n| `callRecordingSaved` | Call Recording Saved |\n| `callRecordingTranscriptionSaved` | Call Recording Transcription Saved |\n| `callSpeakEnded` | Call Speak Ended |\n| `callSpeakStarted` | Call Speak Started |\n\n### Webhook payload fields\n\n**`callPlaybackEnded`**\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `data.record_type` | enum: event | Identifies the type of the resource. |\n| `data.event_type` | enum: call.playback.ended | The type of event being delivered. |\n| `data.id` | uuid | Identifies the type of resource. |\n| `data.occurred_at` | date-time | ISO 8601 datetime of when the event occurred. |\n| `data.payload.call_control_id` | string | Call ID used to issue commands via Call Control API. |\n| `data.payload.connection_id` | string | Call Control App ID (formerly Telnyx connection ID) used in the call. |\n| `data.payload.call_leg_id` | string | ID that is unique to the call and can be used to correlate webhook events. |\n| `data.payload.call_session_id` | string | ID that is unique to the call session and can be used to correlate webhook events. |\n| `data.payload.client_state` | string | State received from a command. |\n| `data.payload.media_url` | string | The audio URL being played back, if audio_url has been used to start. |\n| `data.payload.media_name` | string | The name of the audio media file being played back, if media_name has been used to start. |\n| `data.payload.overlay` | boolean | Whether the stopped audio was in overlay mode or not. |\n| `data.payload.status` | enum: file_not_found, call_hangup, unknown, cancelled, cancelled_amd, completed, failed | Reflects how command ended. |\n| `data.payload.status_detail` | string | Provides details in case of failure. |\n\n**`callPlaybackStarted`**\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `data.record_type` | enum: event | Identifies the type of the resource. |\n| `data.event_type` | enum: call.playback.started | The type of event being delivered. |\n| `data.id` | uuid | Identifies the type of resource. |\n| `data.occurred_at` | date-time | ISO 8601 datetime of when the event occurred. |\n| `data.payload.call_control_id` | string | Call ID used to issue commands via Call Control API. |\n| `data.payload.connection_id` | string | Call Control App ID (formerly Telnyx connection ID) used in the call. |\n| `data.payload.call_leg_id` | string | ID that is unique to the call and can be used to correlate webhook events. |\n| `data.payload.call_session_id` | string | ID that is unique to the call session and can be used to correlate webhook events. |\n| `data.payload.client_state` | string | State received from a command. |\n| `data.payload.media_url` | string | The audio URL being played back, if audio_url has been used to start. |\n| `data.payload.media_name` | string | The name of the audio media file being played back, if media_name has been used to start. |\n| `data.payload.overlay` | boolean | Whether the audio is going to be played in overlay mode or not. |\n\n**`callRecordingError`**\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `data.record_type` | enum: event | Identifies the type of the resource. |\n| `data.event_type` | enum: call.recording.error | The type of event being delivered. |\n| `data.id` | uuid | Identifies the type of resource. |\n| `data.occurred_at` | date-time | ISO 8601 datetime of when the event occurred. |\n| `data.payload.call_control_id` | string | Call ID used to issue commands via Call Control API. |\n| `data.payload.connection_id` | string | Call Control App ID (formerly Telnyx connection ID) used in the call. |\n| `data.payload.call_leg_id` | string | ID that is unique to the call and can be used to correlate webhook events. |\n| `data.payload.call_session_id` | string | ID that is unique to the call session and can be used to correlate webhook events. |\n| `data.payload.client_state` | string | State received from a command. |\n| `data.payload.reason` | enum: Failed to authorize with storage using custom credentials, Invalid credentials json, Unsupported backend, Internal server error | Indication that there was a problem recording the call. |\n\n**`callRecordingSaved`**\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `data.record_type` | enum: event | Identifies the type of the resource. |\n| `data.event_type` | enum: call.recording.saved | The type of event being delivered. |\n| `data.id` | uuid | Identifies the type of resource. |\n| `data.occurred_at` | date-time | ISO 8601 datetime of when the event occurred. |\n| `data.payload.call_leg_id` | string | ID that is unique to the call and can be used to correlate webhook events. |\n| `data.payload.call_session_id` | string | ID that is unique to the call session and can be used to correlate webhook events. |\n| `data.payload.connection_id` | string | Call Control App ID (formerly Telnyx connection ID) used in the call. |\n| `data.payload.client_state` | string | State received from a command. |\n| `data.payload.recording_started_at` | date-time | ISO 8601 datetime of when recording started. |\n| `data.payload.recording_ended_at` | date-time | ISO 8601 datetime of when recording ended. |\n| `data.payload.channels` | enum: single, dual | Whether recording was recorded in `single` or `dual` channel. |\n\n**`callRecordingTranscriptionSaved`**\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `data.record_type` | enum: event | Identifies the type of the resource. |\n| `data.event_type` | enum: call.recording.transcription.saved | The type of event being delivered. |\n| `data.id` | uuid | Identifies the type of resource. |\n| `data.occurred_at` | date-time | ISO 8601 datetime of when the event occurred. |\n| `data.payload.call_control_id` | string | Call ID used to issue commands via Call Control API. |\n| `data.payload.connection_id` | string | Call Control App ID (formerly Telnyx connection ID) used in the call. |\n| `data.payload.call_leg_id` | string | ID that is unique to the call and can be used to correlate webhook events. |\n| `data.payload.call_session_id` | string | ID that is unique to the call session and can be used to correlate webhook events. |\n| `data.payload.client_state` | string | State received from a command. |\n| `data.payload.calling_party_type` | enum: pstn, sip | The type of calling party connection. |\n| `data.payload.recording_id` | string | ID that is unique to the recording session and can be used to correlate webhook events. |\n| `data.payload.recording_transcription_id` | string | ID that is unique to the transcription process and can be used to correlate webhook events. |\n| `data.payload.status` | enum: completed | The transcription status. |\n| `data.payload.transcription_text` | string | The transcribed text |\n\n**`callSpeakEnded`**\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `data.record_type` | enum: event | Identifies the type of the resource. |\n| `data.event_type` | enum: call.speak.ended | The type of event being delivered. |\n| `data.id` | uuid | Identifies the type of resource. |\n| `data.occurred_at` | date-time | ISO 8601 datetime of when the event occurred. |\n| `data.payload.call_control_id` | string | Call ID used to issue commands via Call Control API. |\n| `data.payload.connection_id` | string | Call Control App ID (formerly Telnyx connection ID) used in the call. |\n| `data.payload.call_leg_id` | string | ID that is unique to the call and can be used to correlate webhook events. |\n| `data.payload.call_session_id` | string | ID that is unique to the call session and can be used to correlate webhook events. |\n| `data.payload.client_state` | string | State received from a command. |\n| `data.payload.status` | enum: completed, call_hangup, cancelled_amd | Reflects how the command ended. |\n\n**`callSpeakStarted`**\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `data.record_type` | enum: event | Identifies the type of the resource. |\n| `data.event_type` | enum: call.speak.started | The type of event being delivered. |\n| `data.id` | uuid | Identifies the type of resource. |\n| `data.occurred_at` | date-time | ISO 8601 datetime of when the event occurred. |\n| `data.payload.call_control_id` | string | Call ID used to issue commands via Call Control API. |\n| `data.payload.connection_id` | string | Call Control App ID (formerly Telnyx connection ID) used in the call. |\n| `data.payload.call_leg_id` | string | ID that is unique to the call and can be used to correlate webhook events. |\n| `data.payload.call_session_id` | string | ID that is unique to the call session and can be used to correlate webhook events. |\n| `data.payload.client_state` | string | State received from a command. |","tags":["telnyx","voice","media","python","team-telnyx","agent-skills","ai-coding-agent","claude-code","cpaas","cursor","iot","llm"],"capabilities":["skill","source-team-telnyx","skill-telnyx-voice-media-python","topic-agent-skills","topic-ai-coding-agent","topic-claude-code","topic-cpaas","topic-cursor","topic-iot","topic-llm","topic-sdk","topic-sip","topic-sms","topic-speech-to-text","topic-telephony"],"categories":["ai"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/team-telnyx/ai/telnyx-voice-media-python","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add team-telnyx/ai","source_repo":"https://github.com/team-telnyx/ai","install_from":"skills.sh"}},"qualityScore":"0.533","qualityRationale":"deterministic score 0.53 from registry signals: · indexed on github topic:agent-skills · 167 github stars · SKILL.md body (17,368 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-22T00:54:53.788Z","embedding":null,"createdAt":"2026-04-18T22:08:34.525Z","updatedAt":"2026-04-22T00:54:53.788Z","lastSeenAt":"2026-04-22T00:54:53.788Z","tsv":"'+13125550001':83 '+13125550002':85 '-419':668 '/actions/playback_start':215 '/actions/playback_stop':292 '/actions/record_pause':351 '/actions/record_resume':401 '/actions/record_start':463 '/actions/record_stop':1102 '/actions/speak':1172 '/audio.mp3':266 '/calls':211,288,347,397,459,1098,1168 '/webhooks':1362 '1':111 '200':1417 '400':1400 '401':69,146 '403':150 '404':153 '41d4':259,314,372,422,1076,1123,1303 '422':65,134,157 '429':62,99,163 '446655440000':261,316,374,424,1078,1125,1305 '550e8400':256,311,369,419,1073,1120,1300 '8601':1520,1716,1889,2036,2112,2125,2181,2364,2496 'a716':260,315,373,423,1077,1124,1304 'actual':118 'ae':515 'af':504,506 'af-za':505 'al':942 'alreadi':45 'alway':70,1343 'am-et':509 'amd':1663,2453 'api':25,29,53,126,148,1540,1736,1909,2201,2384,2516 'app':1546,1742,1915,2087,2207,2390,2522 'app.route':1361 'ar':512,514,517,520,523,526,529,532,535,538,541,544,547,550,553,556,559,562,671 'ar-a':513 'ar-bh':516 'ar-dz':519 'ar-eg':522 'ar-il':525 'ar-iq':528 'ar-jo':531 'ar-kw':534 'ar-lb':537 'ar-ma':540 'ar-mr':543 'ar-om':546 'ar-p':549 'ar-qa':552 'ar-sa':555 'ar-tn':558 'ar-y':561 'arb':1185 'associ':342,392 'assum':42 'au':620,1200 'audio':171,175,183,189,217,222,226,262,273,276,1153,1607,1613,1627,1646,1803,1809,1823,1841 'authent':67 'author':1976 'auto':565 'await':197,1161 'az':567,569,570 'az-az':568 'b':499 'ba':571,589 'back':1140,1611,1632,1807,1828 'backend':1986 'backoff':107,169 'bash':11 'basic':1281 'bd':580 'beep':482 'bg':573,575,576 'bg-bg':574 'bh':518 'bn':577,579,582 'bn-bd':578 'bn-in':581 'bo':584,674 'bodi':1357,1375 'boolean':227,240,301,483,494,1056,1060,1642,1838 'br':585,908,1255 'bs':586,588 'bs-ba':587 'ca':590,592,623,755,1225 'ca-e':591 'cach':225 'call':54,179,212,253,281,289,308,327,348,366,385,398,416,435,440,460,1070,1093,1099,1117,1143,1169,1297,1311,1452,1456,1460,1464,1468,1473,1477,1531,1538,1544,1555,1566,1585,1658,1727,1734,1740,1751,1762,1781,1900,1907,1913,1924,1935,1954,1998,2053,2072,2085,2096,2192,2199,2205,2216,2227,2246,2273,2375,2382,2388,2399,2410,2429,2450,2507,2514,2520,2531,2542,2561 'call.playback.ended':284,1500 'call.playback.started':1696 'call.recording.error':457,1869 'call.recording.saved':455,1096,2016 'call.recording.transcription.saved':456,2161 'call.speak.ended':286,1166,2344 'call.speak.started':1165,2476 'callplaybackend':1451,1483 'callplaybackstart':1455,1679 'callrecordingerror':1459,1852 'callrecordingsav':1463,1999 'callrecordingtranscriptionsav':1467,2144 'callspeakend':1472,2327 'callspeakstart':1476,2459 'cancel':1661,1662,2452 'case':1676 'ch':609,758,801 'channel':466,1079,2143 'check':93,112,138,160 'cl':677 'client':23,43,228,294,353,403,468,1104,1177 'client.calls.actions.pause':364 'client.calls.actions.resume':414 'client.calls.actions.speak':1296 'client.calls.actions.start':251,1068 'client.calls.actions.stop':306,1115 'client.messages.send':81 'client.webhooks.unwrap':1383,1446 'cmn':1187 'cmn-cn':1186 'cn':1188 'co':680 'code':75,129,133,145 'command':184,231,297,335,345,356,395,406,452,471,1107,1148,1180,1536,1602,1668,1732,1798,1905,1971,2104,2197,2263,2380,2446,2457,2512,2578 'common':143 'complet':1664,2317,2449 'configur':1426 'connect':94,1550,1746,1919,2091,2211,2275,2394,2526 'consecut':187,1151 'content':242 'control':213,254,290,309,349,367,399,417,461,1071,1100,1118,1170,1298,1528,1539,1545,1724,1735,1741,1897,1908,1914,2086,2189,2200,2206,2372,2383,2389,2504,2515,2521 'convert':1133 'correl':1572,1592,1768,1788,1941,1961,2059,2079,2233,2253,2292,2312,2416,2436,2548,2568 'count':1046,1051 'cr':683 'credenti':1981,1983 'cs':594,596 'cs-cz':595 'custom':474,1980 'cy':598,1190 'cy-gb':1189 'cz':597 'da':599,601,1193 'da-dk':600,1192 'data':1370 'data.event':1497,1693,1866,2013,2158,2341,2473 'data.id':1507,1703,1876,2023,2168,2351,2483 'data.occurred':1514,1710,1883,2030,2175,2358,2490 'data.payload.call':1527,1556,1575,1723,1752,1771,1896,1925,1944,2043,2062,2188,2217,2236,2371,2400,2419,2503,2532,2551 'data.payload.calling':2264 'data.payload.channels':2131 'data.payload.client':1595,1791,1964,2097,2256,2439,2571 'data.payload.connection':1541,1737,1910,2082,2202,2385,2517 'data.payload.media':1603,1620,1799,1816 'data.payload.overlay':1641,1837 'data.payload.reason':1972 'data.payload.recording':2105,2118,2276,2295 'data.payload.status':1653,1670,2315,2447 'data.payload.transcription':2321 'data.record':1487,1683,1856,2003,2148,2331,2463 'date':1517,1713,1886,2033,2109,2122,2178,2361,2493 'date-tim':1516,1712,1885,2032,2108,2121,2177,2360,2492 'datetim':1521,1717,1890,2037,2113,2126,2182,2365,2497 'de':603,605,608,611,612,1196,1197 'de-at':604 'de-ch':607 'de-d':610,1195 'deepgram/nova-3':500 'def':1365 'default':34 'delay':119 'deliv':1506,1702,1875,2022,2167,2350,2482 'descript':1450,1486,1682,1855,2002,2147,2330,2462 'detail':1671,1674 'detect':566 'diariz':1059 'dict':1379 'dk':602,1194 'dual':2134,2142 'dz':521 'e':123,1390,1396 'e.g':1353 'e.message':130 'e.status':128,132 'e29b':258,313,371,421,1075,1122,1302 'e29b-41d4-a716':257,312,370,420,1074,1121,1301 'ec':689 'ed25519':1330,1337,1439,1442 'ee':732 'eg':524 'el':613,615 'el-gr':614 'en':617,619,622,625,628,631,634,637,640,643,646,649,652,655,658,661,664,1199,1202,1205,1209,1212,1316 'en-au':618,1198 'en-ca':621 'en-gb':624,1201 'en-gb-wl':1204 'en-gh':627 'en-hk':630 'en-i':633 'en-in':636,1208 'en-k':639 'en-ng':642 'en-nz':645 'en-ph':648 'en-pk':651 'en-sg':654 'en-tz':657 'en-us':660,1211,1315 'en-za':663 'enabl':203 'end':1454,1475,1669,2119,2130,2458 'engin':496 'enum':219,486,497,503,1062,1184,1275,1280,1287,1489,1499,1654,1685,1695,1858,1868,1973,2005,2015,2132,2150,2160,2267,2316,2333,2343,2448,2465,2475 'error':50,59,64,68,72,92,127,137,144,159,1462,1989 'es':593,666,667,670,673,676,679,682,685,688,691,692,694,697,700,703,706,709,712,715,718,721,724,727,736,765,1215,1216,1218,1221 'es-':690,1214 'es-ar':669 'es-bo':672 'es-cl':675 'es-co':678 'es-cr':681 'es-do':684 'es-ec':687 'es-gt':693 'es-hn':696 'es-mx':699,1217 'es-ni':702 'es-p':708 'es-pa':705 'es-pi':714 'es-pr':711 'es-sv':717 'es-us':720,1220 'es-uy':723 'es-v':726 'et':511,729,731 'et-e':730 'eu':733,735 'eu-':734 'event':1382,1403,1412,1421,1449,1490,1504,1525,1574,1594,1686,1700,1721,1770,1790,1859,1873,1894,1943,1963,2006,2020,2041,2061,2081,2151,2165,2186,2235,2255,2294,2314,2334,2348,2369,2418,2438,2466,2480,2501,2550,2570 'event.data.event':1413 'exampl':40 'example.com':265 'example.com/audio.mp3':264 'except':88,97,120,1387,1388 'expect':282,336,386,453,1094,1163 'exponenti':106,168 'f':125,1392,1410 'fa':737,739 'fa-ir':738 'fail':56,1395,1665,1974 'failur':1678 'femal':1313 'fi':741,743,744 'fi-fi':742 'field':140,161,1482,1484,1680,1853,2000,2145,2328,2460 'fil':746 'fil-ph':745 'file':176,190,475,1154,1629,1655,1825 'filter':1055 'flask':1354 'fo':748 'follow':1419 'format':142,162,465,1081 'former':1548,1744,1917,2089,2209,2392,2524 'found':156,1657 'fr':749,751,754,757,760,761,1224,1227,1228 'fr-be':750 'fr-ca':753,1223 'fr-ch':756 'fr-fr':759,1226 'gb':626,1191,1203,1206 'ge':819 'gh':629 'gl':762,764 'gl-es':763 'go':1843 'gr':616 'gt':695 'gu':766,768 'gu-in':767 'guru':898 'ha':770 'handl':51,71,1366 'handler':1352 'hang':442 'hang-up':441 'hangup':1659,2451 'hant':1034 'haw':771 'header':116,1342,1378,1385,1386,1440 'hello':87 'hi':773,775,1230 'hi-in':774,1229 'hk':632,1035 'hn':698 'hr':777,779,780 'hr-hr':778 'ht':781 'hu':782,784,785 'hu-hu':783 'hy':786,788 'hy-am':787 'id':214,232,255,291,298,310,350,357,360,368,400,407,410,418,462,472,790,792,793,814,957,1072,1101,1108,1111,1119,1171,1181,1299,1529,1532,1542,1547,1551,1558,1560,1577,1579,1725,1728,1738,1743,1747,1754,1756,1773,1775,1898,1901,1911,1916,1920,1927,1929,1946,1948,2045,2047,2064,2066,2083,2088,2092,2190,2193,2203,2208,2212,2219,2221,2238,2240,2277,2279,2297,2299,2373,2376,2386,2391,2395,2402,2404,2421,2423,2505,2508,2518,2523,2527,2534,2536,2553,2555 'id-id':791 'identifi':1491,1509,1687,1705,1860,1878,2007,2025,2152,2170,2335,2353,2467,2485 'ie':635 'il':527,807 'import':17,21,77,108 'inbound':488 'includ':1333,1431 'indic':1990 'initi':46,447 'instal':10,13 'insuffici':151 'int32':480,492,1047,1052 'intern':1987 'invalid':147,1398,1982 'iq':530 'ir':740 'is-i':795,1232 'iso':1519,1715,1888,2035,2111,2124,2180,2363,2495 'issu':186,1150,1535,1731,1904,2196,2379,2511 'it-ch':799 'it-it':802,1235 'iw':806 'iw-il':805 'ja':808,810,1239 'ja-jp':809,1238 'jo':533 'jp':811,1240 'json':1360,1984 'jv':813 'jv-id':812 'jw':815 'ka':816,818 'ka-g':817 'ke':641,965 'key':26,30,149 'kh':827 'kk':820,822 'kk-kz':821 'km':824,826 'km-kh':825 'kn':828,830 'kn-in':829 'ko':832,834,1242 'ko-kr':833,1241 'kr':835,1243 'kw':536 'kz':823 'la':836,842 'languag':502,1183,1314 'latn':949,995 'lb':539,837 'leg':205,247,1286,1557,1753,1926,2044,2218,2401,2533 'length':479 'level':1279 'limit':61,101,165,207 'lk':928,975 'ln':838 'lo':839,841 'lo-la':840 'loop':234,1271 'lt':843,845,846 'lt-lt':844 'lv':847,849,850 'lv-lv':848 'ma':542 'max':478,1044 'media':4,8,236,1628,1634,1824,1830 'method':1363 'mg':851 'mi':852 'min':1049 'mk':853,855,856 'mk-mk':854 'ml':857,859 'ml-in':858 'mm':877 'mn':861,863,864 'mn-mn':862 'mode':1650,1849 'mp3':220 'mr':545,865,867 'mr-in':866 'ms':869,871 'ms-mi':870 'mt':873 'multipl':181,1145 'mx':701,1219 'my-mm':875 'name':237,476,1621,1624,1635,1817,1820,1831 'nb':1245 'nb-no':1244 'ne':878,880 'ne-np':879 'network':58,91 'ng':644 'ni':704 'nl':882,884,887,888,1248,1249 'nl-be':883 'nl-nl':886,1247 'nn':889 'no-no':891 'note':199 'np':881 'nz':647 'object':1293 'oc':894 'occur':1526,1722,1895,2042,2187,2370,2502 'ok':1416 'om':548 'omit':38 'opposit':1289 'option':216,293,352,402,467,1103,1176 'os':18 'os.environ.get':27 'outbound':489 'overlay':201,239,300,1649,1848 'pa':707,895,897 'pa-guru-in':896 'pars':1359,1406 'parti':2265,2274 'paus':323,324 'payload':1174,1273,1306,1368,1384,1408,1481 'pe':710 'permiss':152 'ph':650,747 'pip':12 'pk':653,1015 'pl':900,902,903,1251,1252 'pl-pl':901,1250 'place':193,1157 'play':170,173,182,278,481,1138,1610,1631,1806,1827,1846 'playback':198,241,252,274,307,1162,1453,1457 'post':210,287,346,396,458,1097,1167,1364 'pr':713 'premium':1282 'print':90,124,135,267,317,375,425,1083,1126,1318,1391,1409 'problem':1995 'process':2306 'product':74,1347 'profan':1054 'provid':1673 'ps':551,904 'pstn':2268 'pt':905,907,910,911,1254,1257,1258 'pt-br':906,1253 'pt-pt':909,1256 'py':716 'python':5,9,16,76,249,304,362,412,1066,1113,1294,1348 'qa':554 'queue':196,1160 'rate':60,100,164 'raw':1356,1374 'receiv':1411,1599,1795,1968,2101,2260,2443,2575 'record':322,325,328,334,359,365,380,383,409,415,430,433,436,451,484,1069,1088,1091,1110,1116,1461,1465,1469,1996,2116,2129,2136,2138,2285 'reflect':1666,2454 'request':1332 'request.get':1369 'request.headers':1380 'requir':139,464,1173 'resourc':154,1496,1513,1692,1709,1865,1882,2012,2029,2157,2174,2340,2357,2472,2489 'respons':250,305,363,413,1067,1114,1295 'response.data':268,318,376,426,1084,1127,1319 'result':80,270,320,378,428,1086,1129,1321 'resum':331,333,381,382 'retri':96,104,114,166 'retry-aft':113 'return':269,319,377,427,1085,1128,1320,1397,1415 'ro':912,914,915,1260,1261 'ro-ro':913,1259 'rs':946 'ru':916,918,919,1263,1264 'ru-ru':917,1262 'rw':921,922 'rw-rw':920 'sa':557,923 'save':1466,1471 'say':1307 'sd':924 'se':961,1267 'sec':491 'self':209,1288 'sent':1423 'server':1988 'servic':1278 'session':1576,1586,1772,1782,1945,1955,2063,2073,2237,2247,2286,2420,2430,2552,2562 'set':1292 'setup':15 'sg':656,981 'shown':48 'si':925,927,936 'si-lk':926 'sign':1327 'signatur':1336,1345,1399,1401,1438,1443 'silenc':1065 'singl':1080,2133,2140 'sip':2269 'sk':929,931,932 'sk-sk':930 'skill' 'skill-telnyx-voice-media-python' 'sl':933,935 'sl-si':934 'sn':937 'source-team-telnyx' 'speak':1131,1146,1474,1478 'speaker':1045,1050,1058 'speech':1136 'sq':939,941 'sq-al':940 'sr':943,945 'sr-rs':944 'ss':948 'ss-latn-za':947 'ssml':1277 'st':952 'st-za':951 'start':431,432,1458,1479,1619,1640,1815,1836,2106,2117 'state':229,295,354,404,469,1105,1178,1596,1598,1792,1794,1965,1967,2098,2100,2257,2259,2440,2442,2572,2574 'status':2320 'stop':244,272,275,302,438,450,1089,1090,1283,1645 'storag':1978 'string':224,230,233,235,238,243,245,248,271,296,299,303,321,355,358,379,405,408,429,470,473,477,1087,1106,1109,1130,1179,1182,1272,1284,1322,1377,1530,1543,1559,1578,1597,1605,1622,1672,1726,1739,1755,1774,1793,1801,1818,1899,1912,1928,1947,1966,2046,2065,2084,2099,2191,2204,2220,2239,2258,2278,2298,2323,2374,2387,2403,2422,2441,2506,2519,2535,2554,2573 'su':954,956 'su-id':955 'sv':719,958,960,1266 'sv-se':959,1265 'sw':962,964,967 'sw-ke':963 'sw-tz':966 'ta':969,971,974,977,980 'ta-in':970 'ta-lk':973 'ta-mi':976 'ta-sg':979 'target':204,246,1285 'te':982,984 'te-in':983 'telnyx':2,6,14,20,22,24,28,78,1326,1335,1340,1433,1437,1549,1745,1918,2090,2210,2393,2525 'telnyx-signature-ed25519':1334,1436 'telnyx-timestamp':1339,1432 'telnyx-voice-media-python':1 'telnyx.apiconnectionerror':89 'telnyx.apistatuserror':121 'telnyx.ratelimiterror':98 'text':86,1132,1134,1147,1276,1372,2322,2326 'tg':986 'th':987,989,990 'th-th':988 'time':109,1518,1714,1887,2034,2110,2123,2179,2362,2494 'time.sleep':110 'timeout':490 'timestamp':1341,1434 'tk':991 'tl':992 'tn':560,994 'tn-latn-za':993 'topic-agent-skills' 'topic-ai-coding-agent' 'topic-claude-code' 'topic-cpaas' 'topic-cursor' 'topic-iot' 'topic-llm' 'topic-sdk' 'topic-sip' 'topic-sms' 'topic-speech-to-text' 'topic-telephony' 'tr':997,999,1000,1269,1270 'tr-tr':998,1268 'track':485 'transcrib':2325 'transcript':493,495,501,1043,1048,1053,1057,1470,2296,2305,2319 'tri':79,1381 'trim':1061,1064 'trim-sil':1063 'true':1373 'ts':1002 'ts-za':1001 'tt':1004 'tw':1039 'type':218,1274,1414,1485,1488,1493,1498,1502,1511,1681,1684,1689,1694,1698,1707,1854,1857,1862,1867,1871,1880,2001,2004,2009,2014,2018,2027,2146,2149,2154,2159,2163,2172,2266,2271,2329,2332,2337,2342,2346,2355,2461,2464,2469,2474,2478,2487 'tz':659,968 'ua':1008 'uk':1005,1007 'uk-ua':1006 'uniqu':1563,1582,1759,1778,1932,1951,2050,2069,2224,2243,2282,2302,2407,2426,2539,2558 'unknown':1660 'unsupport':1985 'ur':1009,1011,1014 'ur-in':1010 'ur-pk':1013 'url':172,223,263,1428,1604,1608,1614,1800,1804,1810 'us':662,722,1213,1222,1317 'use':1355,1445,1533,1552,1570,1590,1617,1638,1729,1748,1766,1786,1813,1834,1902,1921,1939,1959,1979,2057,2077,2093,2194,2213,2231,2251,2290,2310,2377,2396,2414,2434,2509,2528,2546,2566 'uuid':361,411,1112,1508,1704,1877,2024,2169,2352,2484 'uy':725 'uz':1016,1018,1019 'uz-uz':1017 'valid':63,136,158,1402 've':728,1021 've-za':1020 'verif':1325,1394,1444 'verifi':1344,1448 'vi':1023,1025 'vi-vn':1024 'via':332,448,1537,1733,1906,2198,2381,2513 'vn':1026 'voic':3,7,1175,1291,1312 'wait':102 'wav':221,1082 'webhook':283,337,341,387,391,454,1095,1164,1323,1324,1328,1351,1367,1393,1407,1420,1427,1430,1480,1573,1593,1769,1789,1942,1962,2060,2080,2234,2254,2293,2313,2417,2437,2549,2569 'whether':1643,1839,2135 'wls':1207 'xh':1028 'xh-za':1027 'ye':563 'yi':1030 'yo':1031 'yue':1033 'yue-hant-hk':1032 'za':507,665,950,953,996,1003,1022,1029,1042 'zh':1036,1038 'zh-tw':1037 'zu':1041 'zu-za':1040","prices":[{"id":"53e205ef-ab8b-4760-b2e3-be68c1a3f9d3","listingId":"dd89fd06-9de2-479b-978d-a9a08c6964d4","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"team-telnyx","category":"ai","install_from":"skills.sh"},"createdAt":"2026-04-18T22:08:34.525Z"}],"sources":[{"listingId":"dd89fd06-9de2-479b-978d-a9a08c6964d4","source":"github","sourceId":"team-telnyx/ai/telnyx-voice-media-python","sourceUrl":"https://github.com/team-telnyx/ai/tree/main/skills/telnyx-voice-media-python","isPrimary":false,"firstSeenAt":"2026-04-18T22:08:34.525Z","lastSeenAt":"2026-04-22T00:54:53.788Z"}],"details":{"listingId":"dd89fd06-9de2-479b-978d-a9a08c6964d4","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"team-telnyx","slug":"telnyx-voice-media-python","github":{"repo":"team-telnyx/ai","stars":167,"topics":["agent-skills","ai","ai-coding-agent","claude-code","cpaas","cursor","iot","llm","sdk","sip","sms","speech-to-text","telephony","telnyx","tts","twilio-migration","voice-agents","voice-ai","webrtc","windsurf"],"license":"mit","html_url":"https://github.com/team-telnyx/ai","pushed_at":"2026-04-21T22:09:49Z","description":"Official one-stop shop for AI Agents and developers building with Telnyx.","skill_md_sha":"62684bb5376e06e3e8408ec363eb805668f7f356","skill_md_path":"skills/telnyx-voice-media-python/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/team-telnyx/ai/tree/main/skills/telnyx-voice-media-python"},"layout":"multi","source":"github","category":"ai","frontmatter":{"name":"telnyx-voice-media-python","description":">-"},"skills_sh_url":"https://skills.sh/team-telnyx/ai/telnyx-voice-media-python"},"updatedAt":"2026-04-22T00:54:53.788Z"}}