{"id":"e5ef6342-bc43-4303-8408-08bbe35aa337","shortId":"pHcAkg","kind":"skill","title":"telnyx-voice-streaming-python","tagline":">-","description":"<!-- Auto-generated from Telnyx OpenAPI specs. Do not edit. -->\n\n# Telnyx Voice Streaming - 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## Forking start\n\nCall forking allows you to stream the media from a call to a specific target in realtime. This stream can be used to enable realtime audio analysis to support a \nvariety of use cases, including fraud detection, or the creation of AI-generated audio responses. Requests must specify either the `target` attribute or the `rx` and `tx` attributes.\n\n`POST /calls/{call_control_id}/actions/fork_start`\n\nOptional: `client_state` (string), `command_id` (string), `rx` (string), `stream_type` (enum: decrypted), `tx` (string)\n\n```python\nresponse = client.calls.actions.start_forking(\n    call_control_id=\"550e8400-e29b-41d4-a716-446655440000\",\n)\nprint(response.data)\n```\n\nReturns: `result` (string)\n\n## Forking stop\n\nStop forking a call. **Expected Webhooks:**\n\n- `call.fork.stopped`\n\n`POST /calls/{call_control_id}/actions/fork_stop`\n\nOptional: `client_state` (string), `command_id` (string), `stream_type` (enum: raw, decrypted)\n\n```python\nresponse = client.calls.actions.stop_forking(\n    call_control_id=\"550e8400-e29b-41d4-a716-446655440000\",\n)\nprint(response.data)\n```\n\nReturns: `result` (string)\n\n## Streaming start\n\nStart streaming the media from a call to a specific WebSocket address or Dialogflow connection in near-realtime. Audio will be delivered as base64-encoded RTP payload (raw audio), wrapped in JSON payloads. Please find more details about media streaming messages specification under the [link](https://developers.telnyx.com/docs/voice/programmable-voice/media-streaming).\n\n`POST /calls/{call_control_id}/actions/streaming_start`\n\nOptional: `client_state` (string), `command_id` (string), `custom_parameters` (array[object]), `dialogflow_config` (object), `enable_dialogflow` (boolean), `stream_auth_token` (string), `stream_bidirectional_codec` (enum: PCMU, PCMA, G722, OPUS, AMR-WB, L16), `stream_bidirectional_mode` (enum: mp3, rtp), `stream_bidirectional_sampling_rate` (enum: 8000, 16000, 22050, 24000, 48000), `stream_bidirectional_target_legs` (enum: both, self, opposite), `stream_codec` (enum: PCMU, PCMA, G722, OPUS, AMR-WB, L16, default), `stream_track` (enum: inbound_track, outbound_track, both_tracks), `stream_url` (string)\n\n```python\nresponse = client.calls.actions.start_streaming(\n    call_control_id=\"550e8400-e29b-41d4-a716-446655440000\",\n    stream_url=\"wss://example.com/audio-stream\",\n)\nprint(response.data)\n```\n\nReturns: `result` (string)\n\n## Streaming stop\n\nStop streaming a call to a WebSocket. **Expected Webhooks:**\n\n- `streaming.stopped`\n\n`POST /calls/{call_control_id}/actions/streaming_stop`\n\nOptional: `client_state` (string), `command_id` (string), `stream_id` (uuid)\n\n```python\nresponse = client.calls.actions.stop_streaming(\n    call_control_id=\"550e8400-e29b-41d4-a716-446655440000\",\n)\nprint(response.data)\n```\n\nReturns: `result` (string)\n\n## Transcription start\n\nStart real-time transcription. Transcription will stop on call hang-up, or can be initiated via the Transcription stop command. **Expected Webhooks:**\n\n- `call.transcription`\n\n`POST /calls/{call_control_id}/actions/transcription_start`\n\nOptional: `client_state` (string), `command_id` (string), `transcription_engine` (enum: Google, Telnyx, Deepgram, Azure, A, B), `transcription_engine_config` (object), `transcription_tracks` (string)\n\n```python\nresponse = client.calls.actions.start_transcription(\n    call_control_id=\"550e8400-e29b-41d4-a716-446655440000\",\n)\nprint(response.data)\n```\n\nReturns: `result` (string)\n\n## Transcription stop\n\nStop real-time transcription.\n\n`POST /calls/{call_control_id}/actions/transcription_stop`\n\nOptional: `client_state` (string), `command_id` (string)\n\n```python\nresponse = client.calls.actions.stop_transcription(\n    call_control_id=\"550e8400-e29b-41d4-a716-446655440000\",\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| `callForkStarted` | Call Fork Started |\n| `callForkStopped` | Call Fork Stopped |\n| `callStreamingFailed` | Call Streaming Failed |\n| `callStreamingStarted` | Call Streaming Started |\n| `callStreamingStopped` | Call Streaming Stopped |\n| `transcription` | Transcription |\n\n### Webhook payload fields\n\n**`callForkStarted`**\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `data.record_type` | enum: event | Identifies the type of the resource. |\n| `data.event_type` | enum: call.fork.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.connection_id` | string | Call Control App ID (formerly Telnyx connection ID) used in the call. |\n| `data.payload.call_control_id` | string | Unique ID for controlling 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.stream_type` | enum: decrypted | Type of media streamed. |\n\n**`callForkStopped`**\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `data.record_type` | enum: event | Identifies the type of the resource. |\n| `data.event_type` | enum: call.fork.stopped | 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.connection_id` | string | Call Control App ID (formerly Telnyx connection ID) used in the call. |\n| `data.payload.call_control_id` | string | Unique ID for controlling 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.stream_type` | enum: decrypted | Type of media streamed. |\n\n**`callStreamingFailed`**\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `data.record_type` | enum: event | Identifies the resource. |\n| `data.event_type` | enum: streaming.failed | 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.failure_reason` | string | A short description explaning why the media streaming failed. |\n| `data.payload.stream_id` | uuid | Identifies the streaming. |\n| `data.payload.stream_type` | enum: websocket, dialogflow | The type of stream connection the stream is performing. |\n\n**`callStreamingStarted`**\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `data.record_type` | enum: event | Identifies the type of the resource. |\n| `data.event_type` | enum: streaming.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.stream_url` | string | Destination WebSocket address where the stream is going to be delivered. |\n\n**`callStreamingStopped`**\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `data.record_type` | enum: event | Identifies the type of the resource. |\n| `data.event_type` | enum: streaming.stopped | 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.stream_url` | string | Destination WebSocket address where the stream is going to be delivered. |\n\n**`transcription`**\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `data.record_type` | enum: event | Identifies the type of the resource. |\n| `data.event_type` | enum: call.transcription | 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 | Unique identifier and token for controlling 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 | Use this field to add state to every subsequent webhook. |\n| `data.payload.connection_id` | string | Call Control App ID (formerly Telnyx connection ID) used in the call. |","tags":["telnyx","voice","streaming","python","team-telnyx","agent-skills","ai-coding-agent","claude-code","cpaas","cursor","iot","llm"],"capabilities":["skill","source-team-telnyx","skill-telnyx-voice-streaming-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-streaming-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 (12,688 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:54.651Z","embedding":null,"createdAt":"2026-04-18T22:08:40.798Z","updatedAt":"2026-04-22T00:54:54.651Z","lastSeenAt":"2026-04-22T00:54:54.651Z","tsv":"'+13125550001':83 '+13125550002':85 '/actions/fork_start':236 '/actions/fork_stop':284 '/actions/streaming_start':372 '/actions/streaming_stop':494 '/actions/transcription_start':555 '/actions/transcription_stop':609 '/audio-stream':471 '/calls':232,280,368,490,551,605 '/docs/voice/programmable-voice/media-streaming).':366 '/webhooks':674 '1':111 '16000':418 '200':729 '22050':419 '24000':420 '400':712 '401':69,146 '403':150 '404':153 '41d4':262,307,464,515,589,627 '422':65,134,157 '429':62,99,163 '446655440000':264,309,466,517,591,629 '48000':421 '550e8400':259,304,461,512,586,624 '8000':417 '8601':825,949,1070,1222,1356,1490 'a716':263,308,465,516,590,628 'actual':118 'add':1555 'address':328,1310,1444 'ai':214 'ai-gener':213 'allow':174 'alreadi':45 'alway':70,655 'amr':403,438 'amr-wb':402,437 'analysi':198 'api':25,29,53,126,148,1090,1242,1376 'app':837,961,1096,1248,1382,1566 'app.route':673 'array':382 'assum':42 'attribut':224,230 'audio':197,216,336,347 'auth':391 'authent':67 'azur':569 'b':571 'backoff':107,169 'base64':342 'base64-encoded':341 'bash':11 'bidirect':395,407,413,423 'bodi':669,687 'boolean':389 'call':54,172,182,233,256,275,281,301,323,369,458,482,491,509,534,552,583,606,621,764,768,772,776,780,835,846,856,867,886,959,970,980,991,1010,1081,1088,1094,1105,1116,1135,1233,1240,1246,1257,1268,1287,1367,1374,1380,1391,1402,1421,1508,1519,1538,1564,1575 'call.fork.started':805 'call.fork.stopped':278,929 'call.transcription':549,1470 'callforkstart':763,788 'callforkstop':767,912 'callstreamingfail':771,1036 'callstreamingstart':775,1185 'callstreamingstop':779,1319 'case':205 'check':93,112,138,160 'client':23,43,238,286,374,496,557,611 'client.calls.actions.start':254,456,581 'client.calls.actions.stop':299,507,619 'client.messages.send':81 'client.webhooks.unwrap':695,758 'code':75,129,133,145 'codec':396,431 'command':241,289,377,499,546,560,614,903,1027,1086,1152,1238,1304,1372,1438 'common':143 'config':385,574 'configur':738 'connect':94,331,841,965,1100,1180,1252,1386,1570 'control':234,257,282,302,370,459,492,510,553,584,607,622,836,848,854,960,972,978,1078,1089,1095,1230,1241,1247,1364,1375,1381,1498,1506,1565 'correl':873,893,997,1017,1122,1142,1274,1294,1408,1428,1525,1545 'creation':211 'custom':380 'data':682 'data.event':802,926,1047,1199,1333,1467 'data.id':812,936,1057,1209,1343,1477 'data.occurred':819,943,1064,1216,1350,1484 'data.payload.call':847,857,876,971,981,1000,1077,1106,1125,1229,1258,1277,1363,1392,1411,1497,1509,1528 'data.payload.client':896,1020,1145,1297,1431,1548 'data.payload.connection':832,956,1091,1243,1377,1561 'data.payload.failure':1153 'data.payload.stream':904,1028,1165,1171,1305,1439 'data.record':792,916,1040,1189,1323,1457 'date':822,946,1067,1219,1353,1487 'date-tim':821,945,1066,1218,1352,1486 'datetim':826,950,1071,1223,1357,1491 'decrypt':249,296,907,1031 'deepgram':568 'def':677 'default':34,441 'delay':119 'deliv':339,811,935,1056,1208,1318,1342,1452,1476 'descript':762,791,915,1039,1158,1188,1322,1456 'destin':1308,1442 'detail':355 'detect':208 'developers.telnyx.com':365 'developers.telnyx.com/docs/voice/programmable-voice/media-streaming).':364 'dialogflow':330,384,388,1175 'dict':691 'e':123,702,708 'e.g':665 'e.message':130 'e.status':128,132 'e29b':261,306,463,514,588,626 'e29b-41d4-a716':260,305,462,513,587,625 'ed25519':642,649,751,754 'either':221 'enabl':195,387 'encod':343 'engin':564,573 'enum':248,294,397,409,416,426,432,444,565,794,804,906,918,928,1030,1042,1049,1173,1191,1201,1325,1335,1459,1469 'error':50,59,64,68,72,92,127,137,144,159 'event':694,715,724,733,761,795,809,830,875,895,919,933,954,999,1019,1043,1054,1075,1124,1144,1192,1206,1227,1276,1296,1326,1340,1361,1410,1430,1460,1474,1495,1527,1547 'event.data.event':725 'everi':1558 'exampl':40 'example.com':470 'example.com/audio-stream':469 'except':88,97,120,699,700 'expect':276,486,547 'explan':1159 'exponenti':106,168 'f':125,704,722 'fail':56,707,774,1164 'field':140,161,787,789,913,1037,1186,1320,1454,1553 'find':353 'flask':666 'follow':731 'fork':170,173,255,270,273,300,765,769 'format':142,162 'former':839,963,1098,1250,1384,1568 'found':156 'fraud':207 'g722':400,435 'generat':215 'go':1315,1449 'googl':566 'handl':51,71,678 'handler':664 'hang':536 'hang-up':535 'header':116,654,690,697,698,752 'hello':87 'id':235,242,258,283,290,303,371,378,460,493,500,503,511,554,561,585,608,615,623,833,838,842,849,852,859,861,878,880,957,962,966,973,976,983,985,1002,1004,1079,1082,1092,1097,1101,1108,1110,1127,1129,1166,1231,1234,1244,1249,1253,1260,1262,1279,1281,1365,1368,1378,1383,1387,1394,1396,1413,1415,1499,1511,1513,1530,1532,1562,1567,1571 'identifi':796,814,920,938,1044,1059,1168,1193,1211,1327,1345,1461,1479,1502 'import':17,21,77,108 'inbound':445 'includ':206,645,743 'initi':46,541 'instal':10,13 'insuffici':151 'invalid':147,710 'iso':824,948,1069,1221,1355,1489 'issu':1085,1237,1371 'json':350,672 'key':26,30,149 'l16':405,440 'leg':425,858,982,1107,1259,1393,1510 'limit':61,101,165 'link':363 'media':179,320,357,910,1034,1162 'messag':359 'method':675 'mode':408 'mp3':410 'must':219 'near':334 'near-realtim':333 'network':58,91 'object':383,386,575 'occur':831,955,1076,1228,1362,1496 'ok':728 'omit':38 'opposit':429 'option':237,285,373,495,556,610 'opus':401,436 'os':18 'os.environ.get':27 'outbound':447 'paramet':381 'pars':671,718 'payload':345,351,680,696,720,786 'pcma':399,434 'pcmu':398,433 'perform':1184 'permiss':152 'pip':12 'pleas':352 'post':231,279,367,489,550,604,676 'print':90,124,135,265,310,472,518,592,630,703,721 'product':74,659 'python':5,9,16,76,252,297,454,505,579,617,660 'rate':60,100,164,415 'raw':295,346,668,686 'real':527,601 'real-tim':526,600 'realtim':188,196,335 'reason':1154 'receiv':723,900,1024,1149,1301,1435 'request':218,644 'request.get':681 'request.headers':692 'requir':139 'resourc':154,801,818,925,942,1046,1063,1198,1215,1332,1349,1466,1483 'respons':217,253,298,455,506,580,618 'response.data':266,311,473,519,593,631 'result':80,268,313,475,521,595,633 'retri':96,104,114,166 'retry-aft':113 'return':267,312,474,520,594,632,709,727 'rtp':344,411 'rx':227,244 'sampl':414 'self':428 'sent':735 'session':877,887,1001,1011,1126,1136,1278,1288,1412,1422,1529,1539 'setup':15 'short':1157 'shown':48 'sign':639 'signatur':648,657,711,713,750,755 'skill' 'skill-telnyx-voice-streaming-python' 'source-team-telnyx' 'specif':185,326,360 'specifi':220 'start':171,316,317,524,525,766,778 'state':239,287,375,497,558,612,897,899,1021,1023,1146,1148,1298,1300,1432,1434,1549,1556 'stop':271,272,478,479,532,545,598,599,770,782 'stream':4,8,177,190,246,292,315,318,358,390,394,406,412,422,430,442,451,457,467,477,480,502,508,773,777,781,911,1035,1163,1170,1179,1182,1313,1447 'streaming.failed':1050 'streaming.started':1202 'streaming.stopped':488,1336 'string':240,243,245,251,269,288,291,314,376,379,393,453,476,498,501,522,559,562,578,596,613,616,634,689,834,850,860,879,898,958,974,984,1003,1022,1080,1093,1109,1128,1147,1155,1232,1245,1261,1280,1299,1307,1366,1379,1395,1414,1433,1441,1500,1512,1531,1550,1563 'subsequ':1559 'support':200 'target':186,223,424 'telnyx':2,6,14,20,22,24,28,78,567,638,647,652,745,749,840,964,1099,1251,1385,1569 'telnyx-signature-ed25519':646,748 'telnyx-timestamp':651,744 'telnyx-voice-streaming-python':1 'telnyx.apiconnectionerror':89 'telnyx.apistatuserror':121 'telnyx.ratelimiterror':98 'text':86,684 'time':109,528,602,823,947,1068,1220,1354,1488 'time.sleep':110 'timestamp':653,746 'token':392,1504 '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' 'track':443,446,448,450,577 'transcript':523,529,530,544,563,572,576,582,597,603,620,783,784,1453 'tri':79,693 'true':685 'tx':229,250 'type':247,293,726,790,793,798,803,807,816,905,908,914,917,922,927,931,940,1029,1032,1038,1041,1048,1052,1061,1172,1177,1187,1190,1195,1200,1204,1213,1321,1324,1329,1334,1338,1347,1455,1458,1463,1468,1472,1481 'uniqu':851,864,883,975,988,1007,1113,1132,1265,1284,1399,1418,1501,1516,1535 'url':452,468,740,1306,1440 'use':193,204,667,757,843,871,891,967,995,1015,1083,1102,1120,1140,1235,1254,1272,1292,1369,1388,1406,1426,1523,1543,1551,1572 'uuid':504,813,937,1058,1167,1210,1344,1478 'valid':63,136,158,714 'varieti':202 'verif':637,706,756 'verifi':656,760 'via':542,1087,1239,1373 'voic':3,7 'wait':102 'wb':404,439 'webhook':277,487,548,635,636,640,663,679,705,719,732,739,742,785,874,894,998,1018,1123,1143,1275,1295,1409,1429,1526,1546,1560 'websocket':327,485,1174,1309,1443 'wrap':348","prices":[{"id":"0565e02f-c9ba-433c-a3fb-302cfa832202","listingId":"e5ef6342-bc43-4303-8408-08bbe35aa337","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:40.798Z"}],"sources":[{"listingId":"e5ef6342-bc43-4303-8408-08bbe35aa337","source":"github","sourceId":"team-telnyx/ai/telnyx-voice-streaming-python","sourceUrl":"https://github.com/team-telnyx/ai/tree/main/skills/telnyx-voice-streaming-python","isPrimary":false,"firstSeenAt":"2026-04-18T22:08:40.798Z","lastSeenAt":"2026-04-22T00:54:54.651Z"}],"details":{"listingId":"e5ef6342-bc43-4303-8408-08bbe35aa337","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"team-telnyx","slug":"telnyx-voice-streaming-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":"de358dc77ff1392465cf3bdd27e3ce55a7fe1581","skill_md_path":"skills/telnyx-voice-streaming-python/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/team-telnyx/ai/tree/main/skills/telnyx-voice-streaming-python"},"layout":"multi","source":"github","category":"ai","frontmatter":{"name":"telnyx-voice-streaming-python","description":">-"},"skills_sh_url":"https://skills.sh/team-telnyx/ai/telnyx-voice-streaming-python"},"updatedAt":"2026-04-22T00:54:54.651Z"}}