{"id":"d01caeba-a38d-42c0-b9b9-77d4d1d2483d","shortId":"2p96nH","kind":"skill","title":"telnyx-voice-gather-python","tagline":">-","description":"<!-- Auto-generated from Telnyx OpenAPI specs. Do not edit. -->\n\n# Telnyx Voice Gather - 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## Add messages to AI Assistant\n\nAdd messages to the conversation started by an AI assistant on the call.\n\n`POST /calls/{call_control_id}/actions/ai_assistant_add_messages`\n\nOptional: `client_state` (string), `command_id` (string), `messages` (array[object])\n\n```python\nresponse = client.calls.actions.add_ai_assistant_messages(\n    call_control_id=\"550e8400-e29b-41d4-a716-446655440000\",\n)\nprint(response.data)\n```\n\nReturns: `result` (string)\n\n## Start AI Assistant\n\nStart an AI assistant on the call. **Expected Webhooks:**\n\n- `call.conversation.ended`\n- `call.conversation_insights.generated`\n\n`POST /calls/{call_control_id}/actions/ai_assistant_start`\n\nOptional: `assistant` (object), `client_state` (string), `command_id` (string), `greeting` (string), `interruption_settings` (object), `message_history` (array[object]), `participants` (array[object]), `send_message_history_updates` (boolean), `transcription` (object), `voice` (string), `voice_settings` (object)\n\n```python\nresponse = client.calls.actions.start_ai_assistant(\n    call_control_id=\"550e8400-e29b-41d4-a716-446655440000\",\n)\nprint(response.data)\n```\n\nReturns: `conversation_id` (uuid), `result` (string)\n\n## Stop AI Assistant\n\nStop an AI assistant on the call.\n\n`POST /calls/{call_control_id}/actions/ai_assistant_stop`\n\nOptional: `client_state` (string), `command_id` (string)\n\n```python\nresponse = client.calls.actions.stop_ai_assistant(\n    call_control_id=\"550e8400-e29b-41d4-a716-446655440000\",\n)\nprint(response.data)\n```\n\nReturns: `result` (string)\n\n## Gather\n\nGather DTMF signals to build interactive menus. You can pass a list of valid digits. The `Answer` command must be issued before the `gather` command.\n\n`POST /calls/{call_control_id}/actions/gather`\n\nOptional: `client_state` (string), `command_id` (string), `gather_id` (string), `initial_timeout_millis` (int32), `inter_digit_timeout_millis` (int32), `maximum_digits` (int32), `minimum_digits` (int32), `terminating_digit` (string), `timeout_millis` (int32), `valid_digits` (string)\n\n```python\nresponse = client.calls.actions.gather(\n    call_control_id=\"550e8400-e29b-41d4-a716-446655440000\",\n    minimum_digits=1,\n    maximum_digits=4,\n)\nprint(response.data)\n```\n\nReturns: `result` (string)\n\n## Gather stop\n\nStop current gather. **Expected Webhooks:**\n\n- `call.gather.ended`\n\n`POST /calls/{call_control_id}/actions/gather_stop`\n\nOptional: `client_state` (string), `command_id` (string)\n\n```python\nresponse = client.calls.actions.stop_gather(\n    call_control_id=\"550e8400-e29b-41d4-a716-446655440000\",\n)\nprint(response.data)\n```\n\nReturns: `result` (string)\n\n## Gather using AI\n\nGather parameters defined in the request payload using a voice assistant. You can pass parameters described as a JSON Schema object and the voice assistant will attempt to gather these informations.\n\n`POST /calls/{call_control_id}/actions/gather_using_ai` — Required: `parameters`\n\nOptional: `assistant` (object), `client_state` (string), `command_id` (string), `gather_ended_speech` (string), `greeting` (string), `interruption_settings` (object), `language` (object), `message_history` (array[object]), `send_message_history_updates` (boolean), `send_partial_results` (boolean), `transcription` (object), `user_response_timeout_ms` (integer), `voice` (string), `voice_settings` (object)\n\n```python\nresponse = client.calls.actions.gather_using_ai(\n    call_control_id=\"550e8400-e29b-41d4-a716-446655440000\",\n    parameters={\n        \"properties\": \"bar\",\n        \"required\": \"bar\",\n        \"type\": \"bar\",\n    },\n)\nprint(response.data)\n```\n\nReturns: `conversation_id` (uuid), `result` (string)\n\n## Gather using audio\n\nPlay an audio file on the call until the required DTMF signals are gathered to build interactive menus. You can pass a list of valid digits along with an 'invalid_audio_url', which will be played back at the beginning of each prompt. Playback will be interrupted when a DTMF signal is received.\n\n`POST /calls/{call_control_id}/actions/gather_using_audio`\n\nOptional: `audio_url` (string), `client_state` (string), `command_id` (string), `inter_digit_timeout_millis` (int32), `invalid_audio_url` (string), `invalid_media_name` (string), `maximum_digits` (int32), `maximum_tries` (int32), `media_name` (string), `minimum_digits` (int32), `terminating_digit` (string), `timeout_millis` (int32), `valid_digits` (string)\n\n```python\nresponse = client.calls.actions.gather_using_audio(\n    call_control_id=\"550e8400-e29b-41d4-a716-446655440000\",\n)\nprint(response.data)\n```\n\nReturns: `result` (string)\n\n## Gather using speak\n\nConvert text to speech and play it on the call until the required DTMF signals are gathered to build interactive menus. You can pass a list of valid digits along with an 'invalid_payload', which will be played back at the beginning of each prompt. Speech will be interrupted when a DTMF signal is received.\n\n`POST /calls/{call_control_id}/actions/gather_using_speak` — Required: `voice`, `payload`\n\nOptional: `client_state` (string), `command_id` (string), `inter_digit_timeout_millis` (int32), `invalid_payload` (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), `maximum_digits` (int32), `maximum_tries` (int32), `minimum_digits` (int32), `payload_type` (enum: text, ssml), `service_level` (enum: basic, premium), `terminating_digit` (string), `timeout_millis` (int32), `valid_digits` (string), `voice_settings` (object)\n\n```python\nresponse = client.calls.actions.gather_using_speak(\n    call_control_id=\"550e8400-e29b-41d4-a716-446655440000\",\n    payload=\"say this on call\",\n    voice=\"male\",\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| `CallAIGatherEnded` | Call AI Gather Ended |\n| `CallAIGatherMessageHistoryUpdated` | Call AI Gather Message History Updated |\n| `CallAIGatherPartialResults` | Call AI Gather Partial Results |\n| `callGatherEnded` | Call Gather Ended |\n\n### Webhook payload fields\n\n**`CallAIGatherEnded`**\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `data.record_type` | enum: event | Identifies the type of the resource. |\n| `data.event_type` | enum: call.ai_gather.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 | 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.from` | string | Number or SIP URI placing the call. |\n| `data.payload.to` | string | Destination number or SIP URI of the call. |\n| `data.payload.message_history` | array[object] | The history of the messages exchanged during the AI gather |\n| `data.payload.result` | object | The result of the AI gather, its type depends of the `parameters` provided in the command |\n| `data.payload.status` | enum: valid, invalid | Reflects how command ended. |\n\n**`CallAIGatherMessageHistoryUpdated`**\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `data.record_type` | enum: event | Identifies the type of the resource. |\n| `data.event_type` | enum: call.ai_gather.message_history_updated | 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 | 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.from` | string | Number or SIP URI placing the call. |\n| `data.payload.to` | string | Destination number or SIP URI of the call. |\n| `data.payload.message_history` | array[object] | The history of the messages exchanged during the AI gather |\n\n**`CallAIGatherPartialResults`**\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `data.record_type` | enum: event | Identifies the type of the resource. |\n| `data.event_type` | enum: call.ai_gather.partial_results | 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 | 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.from` | string | Number or SIP URI placing the call. |\n| `data.payload.to` | string | Destination number or SIP URI of the call. |\n| `data.payload.message_history` | array[object] | The history of the messages exchanged during the AI gather |\n| `data.payload.partial_results` | object | The partial result of the AI gather, its type depends of the `parameters` provided in the command |\n\n**`callGatherEnded`**\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `data.record_type` | enum: event | Identifies the type of the resource. |\n| `data.event_type` | enum: call.gather.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.from` | string | Number or SIP URI placing the call. |\n| `data.payload.to` | string | Destination number or SIP URI of the call. |\n| `data.payload.digits` | string | The received DTMF digit or symbol. |\n| `data.payload.status` | enum: valid, invalid, call_hangup, cancelled, cancelled_amd, timeout | Reflects how command ended. |","tags":["telnyx","voice","gather","python","team-telnyx","agent-skills","ai-coding-agent","claude-code","cpaas","cursor","iot","llm"],"capabilities":["skill","source-team-telnyx","skill-telnyx-voice-gather-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-gather-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 (13,585 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:52.784Z","embedding":null,"createdAt":"2026-04-18T22:08:27.264Z","updatedAt":"2026-04-22T00:54:52.784Z","lastSeenAt":"2026-04-22T00:54:52.784Z","tsv":"'+13125550001':83 '+13125550002':85 '/actions/ai_assistant_add_messages':193 '/actions/ai_assistant_start':243 '/actions/ai_assistant_stop':314 '/actions/gather':372 '/actions/gather_stop':443 '/actions/gather_using_ai':508 '/actions/gather_using_audio':646 '/actions/gather_using_speak':773 '/calls':189,239,310,368,439,504,642,769 '/webhooks':976 '1':111,421 '200':1031 '4':424 '400':1014 '401':69,146 '403':150 '404':153 '41d4':216,288,333,416,461,567,702,922 '422':65,134,157 '429':62,99,163 '446655440000':218,290,335,418,463,569,704,924 '550e8400':213,285,330,413,458,564,699,919 '8601':1127,1303,1452,1620 'a716':217,289,334,417,462,568,703,923 'actual':118 'add':170,175 'ai':173,183,207,225,229,280,300,304,325,471,560,1067,1072,1079,1236,1244,1412,1561,1571 'along':614,742 'alreadi':45 'alway':70,957 'amd':1738 'answer':358 'api':25,29,53,126,148,1147,1323,1472,1640 'app':1646 'app.route':975 'arb':794 'array':202,260,263,533,1226,1402,1551 'assist':174,184,208,226,230,245,281,301,305,326,482,496,512 'assum':42 'attempt':498 'au':809 'audio':587,590,618,648,663,695 'authent':67 'back':624,751 'backoff':107,169 'bar':572,574,576 'bash':11 'basic':897 'begin':627,754 'bodi':971,989 'boolean':269,539,543 'br':864 'build':346,603,731 'ca':834 'call':54,187,190,210,233,240,282,308,311,327,369,410,440,455,505,561,594,643,696,722,770,916,929,1066,1071,1078,1084,1138,1145,1157,1168,1187,1213,1223,1314,1321,1333,1344,1363,1389,1399,1463,1470,1482,1493,1512,1538,1548,1631,1638,1644,1655,1666,1685,1711,1721,1734 'call.ai_gather.ended':1107 'call.ai_gather.message':1281 'call.ai_gather.partial':1431 'call.conversation.ended':236 'call.conversation_insights.generated':237 'call.gather.ended':437,1600 'callaigatherend':1065,1090 'callaigathermessagehistoryupd':1070,1264 'callaigatherpartialresult':1077,1414 'callgatherend':1083,1583 'cancel':1736,1737 'check':93,112,138,160 'client':23,43,195,247,316,374,445,514,651,778 'client.calls.actions.add':206 'client.calls.actions.gather':409,558,693,913 'client.calls.actions.start':279 'client.calls.actions.stop':324,453 'client.messages.send':81 'client.webhooks.unwrap':997,1060 'cmn':796 'cmn-cn':795 'cn':797 'code':75,129,133,145 'command':198,250,319,359,366,377,448,517,654,781,1143,1204,1255,1262,1319,1380,1468,1529,1582,1636,1702,1742 'common':143 'configur':1040 'connect':94,1152,1328,1477,1650 'control':191,211,241,283,312,328,370,411,441,456,506,562,644,697,771,917,1135,1146,1311,1322,1460,1471,1628,1639,1645 'convers':179,294,580 'convert':713 'correl':1174,1194,1350,1370,1499,1519,1672,1692 'current':433 'cy':799 'cy-gb':798 'da':802 'da-dk':801 'data':984 'data.event':1104,1278,1428,1597 'data.id':1114,1290,1439,1607 'data.occurred':1121,1297,1446,1614 'data.payload.call':1134,1158,1177,1310,1334,1353,1459,1483,1502,1627,1656,1675 'data.payload.client':1197,1373,1522,1695 'data.payload.connection':1148,1324,1473,1641 'data.payload.digits':1722 'data.payload.from':1205,1381,1530,1703 'data.payload.message':1224,1400,1549 'data.payload.partial':1563 'data.payload.result':1238 'data.payload.status':1256,1730 'data.payload.to':1214,1390,1539,1712 'data.record':1094,1268,1418,1587 'date':1124,1300,1449,1617 'date-tim':1123,1299,1448,1616 'datetim':1128,1304,1453,1621 'de':805,806 'de-d':804 'def':979 'default':34 'defin':474 'delay':119 'deliv':1113,1289,1438,1606 'depend':1248,1575 'describ':487 'descript':1064,1093,1267,1417,1586 'destin':1216,1392,1541,1714 'dict':993 'digit':356,388,393,396,399,405,420,423,613,658,671,680,683,689,741,785,881,887,900,906,1727 'dk':803 'dtmf':343,598,637,726,764,1726 'e':123,1004,1010 'e.g':967 'e.message':130 'e.status':128,132 'e29b':215,287,332,415,460,566,701,921 'e29b-41d4-a716':214,286,331,414,459,565,700,920 'ed25519':944,951,1053,1056 'en':808,811,814,818,821 'en-au':807 'en-gb':810 'en-gb-wl':813 'en-in':817 'en-us':820 'end':521,1069,1086,1263,1743 'enum':793,891,896,1096,1106,1257,1270,1280,1420,1430,1589,1599,1731 'error':50,59,64,68,72,92,127,137,144,159 'es':824,825,827,830 'es-':823 'es-mx':826 'es-us':829 'event':996,1017,1026,1035,1063,1097,1111,1132,1176,1196,1271,1287,1308,1352,1372,1421,1436,1457,1501,1521,1590,1604,1625,1674,1694 'event.data.event':1027 'exampl':40 'except':88,97,120,1001,1002 'exchang':1233,1409,1558 'expect':234,435 'exponenti':106,168 'f':125,1006,1024 'fail':56,1009 'field':140,161,1089,1091,1265,1415,1584 'file':591 'flask':968 'follow':1033 'format':142,162 'former':1648 'found':156 'fr':833,836,837 'fr-ca':832 'fr-fr':835 'gather':4,8,341,342,365,380,430,434,454,469,472,500,520,585,601,710,729,1068,1073,1080,1085,1237,1245,1413,1562,1572 'gb':800,812,815 'greet':253,524 'handl':51,71,980 'handler':966 'hangup':1735 'header':116,956,992,999,1000,1054 'hello':87 'hi':839 'hi-in':838 'histori':259,267,532,537,1075,1225,1229,1282,1401,1405,1550,1554 'id':192,199,212,242,251,284,295,313,320,329,371,378,381,412,442,449,457,507,518,563,581,645,655,698,772,782,918,1136,1139,1149,1153,1160,1162,1179,1181,1312,1315,1325,1329,1336,1338,1355,1357,1461,1464,1474,1478,1485,1487,1504,1506,1629,1632,1642,1647,1651,1658,1660,1677,1679 'identifi':1098,1116,1272,1292,1422,1441,1591,1609 'import':17,21,77,108 'includ':947,1045 'inform':502 'initi':46,383 'instal':10,13 'insuffici':151 'int32':386,391,394,397,403,661,672,675,681,687,788,882,885,888,904 'integ':550 'inter':387,657,784 'interact':347,604,732 'interrupt':255,526,634,761 'invalid':147,617,662,666,745,789,1012,1259,1733 'is-i':841 'iso':1126,1302,1451,1619 'issu':362,1142,1318,1467,1635 'it-it':844 'ja':848 'ja-jp':847 'jp':849 'json':490,974 'key':26,30,149 'ko':851 'ko-kr':850 'kr':852 'languag':529,792 'leg':1159,1335,1484,1657 'level':895 'limit':61,101,165 'list':353,610,738 'male':931 'maximum':392,422,670,673,880,883 'media':667,676 'menus':348,605,733 'messag':171,176,201,209,258,266,531,536,1074,1232,1408,1557 'method':977 'milli':385,390,402,660,686,787,903 'minimum':395,419,679,886 'ms':549 'must':360 'mx':828 'name':668,677 'nb':854 'nb-no':853 'network':58,91 'nl':857,858 'nl-nl':856 'number':1207,1217,1383,1393,1532,1542,1705,1715 'object':203,246,257,261,264,271,276,492,513,528,530,534,545,555,910,1227,1239,1403,1552,1565 'occur':1133,1309,1458,1626 'ok':1030 'omit':38 'option':194,244,315,373,444,511,647,777 'os':18 'os.environ.get':27 'paramet':473,486,510,570,1251,1578 'pars':973,1020 'partial':541,1081,1567 'particip':262 'pass':351,485,608,736 'payload':478,746,776,790,889,925,982,998,1022,1088 'permiss':152 'pip':12 'pl':860,861 'pl-pl':859 'place':1211,1387,1536,1709 'play':588,623,718,750 'playback':631 'post':188,238,309,367,438,503,641,768,978 'premium':898 'print':90,124,135,219,291,336,425,464,577,705,932,1005,1023 'product':74,961 'prompt':630,757 'properti':571 'provid':1252,1579 'pt':863,866,867 'pt-br':862 'pt-pt':865 'python':5,9,16,76,204,277,322,407,451,556,691,911,962 'rate':60,100,164 'raw':970,988 'receiv':640,767,1025,1201,1377,1526,1699,1725 'reflect':1260,1740 'request':477,946 'request.get':983 'request.headers':994 'requir':139,509,573,597,725,774 'resourc':154,1103,1120,1277,1296,1427,1445,1596,1613 'respons':205,278,323,408,452,547,557,692,912 'response.data':220,292,337,426,465,578,706,933 'result':80,222,297,339,428,467,542,583,708,935,1082,1241,1432,1564,1568 'retri':96,104,114,166 'retry-aft':113 'return':221,293,338,427,466,579,707,934,1011,1029 'ro':869,870 'ro-ro':868 'ru':872,873 'ru-ru':871 'say':926 'schema':491 'se':876 'send':265,535,540 'sent':1037 'servic':894 'session':1178,1188,1354,1364,1503,1513,1676,1686 'set':256,275,527,554,909 'setup':15 'shown':48 'sign':941 'signal':344,599,638,727,765 'signatur':950,959,1013,1015,1052,1057 'sip':1209,1219,1385,1395,1534,1544,1707,1717 'skill' 'skill-telnyx-voice-gather-python' 'source-team-telnyx' 'speak':712,915 'speech':522,716,758 'ssml':893 'start':180,224,227 'state':196,248,317,375,446,515,652,779,1198,1200,1374,1376,1523,1525,1696,1698 'stop':299,302,431,432 'string':197,200,223,249,252,254,273,298,318,321,340,376,379,382,400,406,429,447,450,468,516,519,523,525,552,584,650,653,656,665,669,678,684,690,709,780,783,791,901,907,936,991,1137,1150,1161,1180,1199,1206,1215,1313,1326,1337,1356,1375,1382,1391,1462,1475,1486,1505,1524,1531,1540,1630,1643,1659,1678,1697,1704,1713,1723 'sv':875 'sv-se':874 'symbol':1729 'telnyx':2,6,14,20,22,24,28,78,940,949,954,1047,1051,1151,1327,1476,1649 'telnyx-signature-ed25519':948,1050 'telnyx-timestamp':953,1046 'telnyx-voice-gather-python':1 'telnyx.apiconnectionerror':89 'telnyx.apistatuserror':121 'telnyx.ratelimiterror':98 'termin':398,682,899 'text':86,714,892,986 'time':109,1125,1301,1450,1618 'time.sleep':110 'timeout':384,389,401,548,659,685,786,902,1739 'timestamp':955,1048 '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':878,879 'tr-tr':877 'transcript':270,544 'tri':79,674,884,995 'true':987 'type':575,890,1028,1092,1095,1100,1105,1109,1118,1247,1266,1269,1274,1279,1285,1294,1416,1419,1424,1429,1434,1443,1574,1585,1588,1593,1598,1602,1611 'uniqu':1165,1184,1341,1360,1490,1509,1663,1682 'updat':268,538,1076,1283 'uri':1210,1220,1386,1396,1535,1545,1708,1718 'url':619,649,664,1042 'us':822,831 'use':470,479,559,586,694,711,914,969,1059,1140,1154,1172,1192,1316,1330,1348,1368,1465,1479,1497,1517,1633,1652,1670,1690 'user':546 'uuid':296,582,1115,1291,1440,1608 'valid':63,136,158,355,404,612,688,740,905,1016,1258,1732 'verif':939,1008,1058 'verifi':958,1062 'via':1144,1320,1469,1637 'voic':3,7,272,274,481,495,551,553,775,908,930 'wait':102 'webhook':235,436,937,938,942,965,981,1007,1021,1034,1041,1044,1087,1175,1195,1351,1371,1500,1520,1673,1693 'wls':816","prices":[{"id":"7f07b757-2b2b-4d76-8dff-e126ef0de1a5","listingId":"d01caeba-a38d-42c0-b9b9-77d4d1d2483d","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:27.264Z"}],"sources":[{"listingId":"d01caeba-a38d-42c0-b9b9-77d4d1d2483d","source":"github","sourceId":"team-telnyx/ai/telnyx-voice-gather-python","sourceUrl":"https://github.com/team-telnyx/ai/tree/main/skills/telnyx-voice-gather-python","isPrimary":false,"firstSeenAt":"2026-04-18T22:08:27.264Z","lastSeenAt":"2026-04-22T00:54:52.784Z"}],"details":{"listingId":"d01caeba-a38d-42c0-b9b9-77d4d1d2483d","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"team-telnyx","slug":"telnyx-voice-gather-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":"3a666c8a867c96ba18ec117d4d6e1c8a6e60b0c2","skill_md_path":"skills/telnyx-voice-gather-python/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/team-telnyx/ai/tree/main/skills/telnyx-voice-gather-python"},"layout":"multi","source":"github","category":"ai","frontmatter":{"name":"telnyx-voice-gather-python","description":">-"},"skills_sh_url":"https://skills.sh/team-telnyx/ai/telnyx-voice-gather-python"},"updatedAt":"2026-04-22T00:54:52.784Z"}}