{"id":"5a08d4c7-5b70-4e83-8cab-9024f38f3600","shortId":"expWgN","kind":"skill","title":"telnyx-voice-gather-ruby","tagline":">-","description":"<!-- Auto-generated from Telnyx OpenAPI specs. Do not edit. -->\n\n# Telnyx Voice Gather - Ruby\n\n## Installation\n\n```bash\ngem install telnyx\n```\n\n## Setup\n\n```ruby\nrequire \"telnyx\"\n\nclient = Telnyx::Client.new(\n  api_key: ENV[\"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```ruby\nbegin\n  result = client.messages.send_(to: \"+13125550001\", from: \"+13125550002\", text: \"Hello\")\nrescue Telnyx::Errors::APIConnectionError\n  puts \"Network error — check connectivity and retry\"\nrescue Telnyx::Errors::RateLimitError\n  # 429: rate limited — wait and retry with exponential backoff\n  sleep(1) # Check Retry-After header for actual delay\nrescue Telnyx::Errors::APIStatusError => e\n  puts \"API error #{e.status}: #{e.message}\"\n  if e.status == 422\n    puts \"Validation error — check required fields and formats\"\n  end\nend\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```ruby\nresponse = client.calls.actions.add_ai_assistant_messages(\"v3:550e8400-e29b-41d4-a716-446655440000_gRU1OGRkYQ\")\n\nputs(response)\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```ruby\nresponse = client.calls.actions.start_ai_assistant(\"v3:550e8400-e29b-41d4-a716-446655440000_gRU1OGRkYQ\")\n\nputs(response)\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```ruby\nresponse = client.calls.actions.stop_ai_assistant(\"v3:550e8400-e29b-41d4-a716-446655440000_gRU1OGRkYQ\")\n\nputs(response)\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```ruby\nresponse = client.calls.actions.gather(\"v3:550e8400-e29b-41d4-a716-446655440000_gRU1OGRkYQ\")\n\nputs(response)\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```ruby\nresponse = client.calls.actions.stop_gather(\"v3:550e8400-e29b-41d4-a716-446655440000_gRU1OGRkYQ\")\n\nputs(response)\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```ruby\nresponse = client.calls.actions.gather_using_ai(\n  \"call_control_id\",\n  parameters: {properties: \"bar\", required: \"bar\", type: \"bar\"}\n)\n\nputs(response)\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```ruby\nresponse = client.calls.actions.gather_using_audio(\"v3:550e8400-e29b-41d4-a716-446655440000_gRU1OGRkYQ\")\n\nputs(response)\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```ruby\nresponse = client.calls.actions.gather_using_speak(\"call_control_id\", payload: \"say this on call\", voice: \"male\")\n\nputs(response)\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```ruby\n# In your webhook handler (e.g., Sinatra — use raw body):\npost \"/webhooks\" do\n  payload = request.body.read\n  headers = {\n    \"telnyx-signature-ed25519\" => request.env[\"HTTP_TELNYX_SIGNATURE_ED25519\"],\n    \"telnyx-timestamp\" => request.env[\"HTTP_TELNYX_TIMESTAMP\"],\n  }\n  begin\n    event = client.webhooks.unwrap(payload, headers)\n  rescue => e\n    halt 400, \"Invalid signature: #{e.message}\"\n  end\n  # Signature valid — event is the parsed webhook payload\n  puts \"Received event: #{event.data.event_type}\"\n  status 200\nend\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","ruby","team-telnyx","agent-skills","ai-coding-agent","claude-code","cpaas","cursor","iot","llm"],"capabilities":["skill","source-team-telnyx","skill-telnyx-voice-gather-ruby","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-ruby","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,201 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.870Z","embedding":null,"createdAt":"2026-04-18T22:08:28.055Z","updatedAt":"2026-04-22T00:54:52.870Z","lastSeenAt":"2026-04-22T00:54:52.870Z","tsv":"'+13125550001':78 '+13125550002':80 '/actions/ai_assistant_add_messages':190 '/actions/ai_assistant_start':239 '/actions/ai_assistant_stop':309 '/actions/gather':366 '/actions/gather_stop':430 '/actions/gather_using_ai':494 '/actions/gather_using_audio':626 '/actions/gather_using_speak':752 '/calls':186,235,305,362,426,490,622,748 '/webhooks':946 '1':108 '200':994 '400':975 '401':66,143 '403':147 '404':150 '41d4':211,282,326,408,446,680 '422':62,129,154 '429':59,98,160 '446655440000':213,284,328,410,448,682 '550e8400':208,279,323,405,443,677 '8601':1091,1267,1416,1584 'a716':212,283,327,409,447,681 'actual':115 'add':167,172 'ai':170,180,204,221,225,276,295,299,320,457,546,1031,1036,1043,1200,1208,1376,1525,1535 'along':594,721 'alreadi':42 'alway':67,930 'amd':1702 'answer':352 'api':22,26,50,123,145,1111,1287,1436,1604 'apiconnectionerror':86 'apistatuserror':120 'app':1610 'arb':773 'array':199,256,259,519,1190,1366,1515 'assist':171,181,205,222,226,241,277,296,300,321,468,482,498 'assum':39 'attempt':484 'au':788 'audio':567,570,598,628,643,675 'authent':64 'back':604,730 'backoff':106,166 'bar':552,554,556 'bash':11 'basic':876 'begin':74,607,733,967 'bodi':944 'boolean':265,525,529 'br':843 'build':340,583,710 'ca':813 'call':51,184,187,229,236,303,306,363,427,491,547,574,623,701,749,895,902,1030,1035,1042,1048,1102,1109,1121,1132,1151,1177,1187,1278,1285,1297,1308,1327,1353,1363,1427,1434,1446,1457,1476,1502,1512,1595,1602,1608,1619,1630,1649,1675,1685,1698 'call.ai_gather.ended':1071 'call.ai_gather.message':1245 'call.ai_gather.partial':1395 'call.conversation.ended':232 'call.conversation_insights.generated':233 'call.gather.ended':424,1564 'callaigatherend':1029,1054 'callaigathermessagehistoryupd':1034,1228 'callaigatherpartialresult':1041,1378 'callgatherend':1047,1547 'cancel':1700,1701 'check':90,109,133,157 'client':19,40,192,243,311,368,432,500,631,757 'client.calls.actions.add':203 'client.calls.actions.gather':403,544,673,892 'client.calls.actions.start':275 'client.calls.actions.stop':319,440 'client.messages.send':76 'client.new':21 'client.webhooks.unwrap':969,1024 'cmn':775 'cmn-cn':774 'cn':776 'code':72,142 'command':195,246,314,353,360,371,435,503,634,760,1107,1168,1219,1226,1283,1344,1432,1493,1546,1600,1666,1706 'common':140 'configur':1004 'connect':91,1116,1292,1441,1614 'control':188,237,307,364,428,492,548,624,750,896,1099,1110,1275,1286,1424,1435,1592,1603,1609 'convers':176,289,560 'convert':692 'correl':1138,1158,1314,1334,1463,1483,1636,1656 'current':420 'cy':778 'cy-gb':777 'da':781 'da-dk':780 'data.event':1068,1242,1392,1561 'data.id':1078,1254,1403,1571 'data.occurred':1085,1261,1410,1578 'data.payload.call':1098,1122,1141,1274,1298,1317,1423,1447,1466,1591,1620,1639 'data.payload.client':1161,1337,1486,1659 'data.payload.connection':1112,1288,1437,1605 'data.payload.digits':1686 'data.payload.from':1169,1345,1494,1667 'data.payload.message':1188,1364,1513 'data.payload.partial':1527 'data.payload.result':1202 'data.payload.status':1220,1694 'data.payload.to':1178,1354,1503,1676 'data.record':1058,1232,1382,1551 'date':1088,1264,1413,1581 'date-tim':1087,1263,1412,1580 'datetim':1092,1268,1417,1585 'de':784,785 'de-d':783 'default':31 'defin':460 'delay':116 'deliv':1077,1253,1402,1570 'depend':1212,1539 'describ':473 'descript':1028,1057,1231,1381,1550 'destin':1180,1356,1505,1678 'digit':350,382,387,390,393,399,593,638,651,660,663,669,720,764,860,866,879,885,1691 'dk':782 'dtmf':337,578,617,705,743,1690 'e':121,973 'e.g':940 'e.message':126,978 'e.status':125,128 'e29b':210,281,325,407,445,679 'e29b-41d4-a716':209,280,324,406,444,678 'ed25519':917,924,954,959,1017,1020 'en':787,790,793,797,800 'en-au':786 'en-gb':789 'en-gb-wl':792 'en-in':796 'en-us':799 'end':138,139,507,979,995,1033,1050,1227,1707 'enum':772,870,875,1060,1070,1221,1234,1244,1384,1394,1553,1563,1695 'env':24 'error':47,56,61,65,69,85,89,96,119,124,132,141,156 'es':803,804,806,809 'es-':802 'es-mx':805 'es-us':808 'event':968,982,990,999,1027,1061,1075,1096,1140,1160,1235,1251,1272,1316,1336,1385,1400,1421,1465,1485,1554,1568,1589,1638,1658 'event.data.event':991 'exampl':37 'exchang':1197,1373,1522 'expect':230,422 'exponenti':105,165 'fail':53 'field':135,158,1053,1055,1229,1379,1548 'file':571 'follow':997 'format':137,159 'former':1612 'found':153 'fr':812,815,816 'fr-ca':811 'fr-fr':814 'gather':4,8,335,336,359,374,417,421,441,455,458,486,506,565,581,689,708,1032,1037,1044,1049,1201,1209,1377,1526,1536 'gb':779,791,794 'gem':12 'greet':249,510 'gru1ogrkyq':214,285,329,411,449,683 'halt':974 'handl':48,68 'handler':939 'hangup':1699 'header':113,929,950,971,1018 'hello':82 'hi':818 'hi-in':817 'histori':255,263,518,523,1039,1189,1193,1246,1365,1369,1514,1518 'http':956,964 'id':189,196,238,247,290,308,315,365,372,375,429,436,493,504,549,561,625,635,751,761,897,1100,1103,1113,1117,1124,1126,1143,1145,1276,1279,1289,1293,1300,1302,1319,1321,1425,1428,1438,1442,1449,1451,1468,1470,1593,1596,1606,1611,1615,1622,1624,1641,1643 'identifi':1062,1080,1236,1256,1386,1405,1555,1573 'includ':920,1009 'inform':488 'initi':43,377 'instal':10,13 'insuffici':148 'int32':380,385,388,391,397,641,652,655,661,667,767,861,864,867,883 'integ':536 'inter':381,637,763 'interact':341,584,711 'interrupt':251,512,614,740 'invalid':144,597,642,646,724,768,976,1223,1697 'is-i':820 'iso':1090,1266,1415,1583 'issu':356,1106,1282,1431,1599 'it-it':823 'ja':827 'ja-jp':826 'jp':828 'json':476 'key':23,27,146 'ko':830 'ko-kr':829 'kr':831 'languag':515,771 'leg':1123,1299,1448,1621 'level':874 'limit':58,100,162 'list':347,590,717 'male':904 'maximum':386,650,653,859,862 'media':647,656 'menus':342,585,712 'messag':168,173,198,206,254,262,517,522,1038,1196,1372,1521 'milli':379,384,396,640,666,766,882 'minimum':389,659,865 'ms':535 'must':354 'mx':807 'name':648,657 'nb':833 'nb-no':832 'network':55,88 'nl':836,837 'nl-nl':835 'number':1171,1181,1347,1357,1496,1506,1669,1679 'object':200,242,253,257,260,267,272,478,499,514,516,520,531,541,889,1191,1203,1367,1516,1529 'occur':1097,1273,1422,1590 'omit':35 'option':191,240,310,367,431,497,627,756 'paramet':459,472,496,550,1215,1542 'pars':985 'partial':527,1045,1531 'particip':258 'pass':345,471,588,715 'payload':464,725,755,769,868,898,948,970,987,1052 'permiss':149 'pl':839,840 'pl-pl':838 'place':1175,1351,1500,1673 'play':568,603,697,729 'playback':611 'post':185,234,304,361,425,489,621,747,945 'premium':877 'product':71,934 'prompt':610,736 'properti':551 'provid':1216,1543 'pt':842,845,846 'pt-br':841 'pt-pt':844 'put':87,122,130,215,286,330,412,450,557,684,905,988 'rate':57,99,161 'ratelimiterror':97 'raw':943 'receiv':620,746,989,1165,1341,1490,1663,1689 'reflect':1224,1704 'request':463,919 'request.body.read':949 'request.env':955,963 'requir':17,134,495,553,577,704,753 'rescu':83,94,117,972 'resourc':151,1067,1084,1241,1260,1391,1409,1560,1577 'respons':202,216,274,287,318,331,402,413,439,451,533,543,558,672,685,891,906 'result':75,218,292,333,415,453,528,563,687,908,1046,1205,1396,1528,1532 'retri':93,103,111,163 'retry-aft':110 'return':217,288,332,414,452,559,686,907 'ro':848,849 'ro-ro':847 'ru':851,852 'ru-ru':850 'rubi':5,9,16,73,201,273,317,401,438,542,671,890,935 'say':899 'schema':477 'se':855 'send':261,521,526 'sent':1001 'servic':873 'session':1142,1152,1318,1328,1467,1477,1640,1650 'set':252,271,513,540,888 'setup':15 'shown':45 'sign':914 'signal':338,579,618,706,744 'signatur':923,932,953,958,977,980,1016,1021 'sinatra':941 'sip':1173,1183,1349,1359,1498,1508,1671,1681 'skill' 'skill-telnyx-voice-gather-ruby' 'sleep':107 'source-team-telnyx' 'speak':691,894 'speech':508,695,737 'ssml':872 'start':177,220,223 'state':193,244,312,369,433,501,632,758,1162,1164,1338,1340,1487,1489,1660,1662 'status':993 'stop':294,297,418,419 'string':194,197,219,245,248,250,269,293,313,316,334,370,373,376,394,400,416,434,437,454,502,505,509,511,538,564,630,633,636,645,649,658,664,670,688,759,762,770,880,886,909,1101,1114,1125,1144,1163,1170,1179,1277,1290,1301,1320,1339,1346,1355,1426,1439,1450,1469,1488,1495,1504,1594,1607,1623,1642,1661,1668,1677,1687 'sv':854 'sv-se':853 'symbol':1693 'telnyx':2,6,14,18,20,25,84,95,118,913,922,927,952,957,961,965,1011,1015,1115,1291,1440,1613 'telnyx-signature-ed25519':921,951,1014 'telnyx-timestamp':926,960,1010 'telnyx-voice-gather-rubi':1 'termin':392,662,878 'text':81,693,871 'time':1089,1265,1414,1582 'timeout':378,383,395,534,639,665,765,881,1703 'timestamp':928,962,966,1012 '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':857,858 'tr-tr':856 'transcript':266,530 'tri':654,863 'type':555,869,992,1056,1059,1064,1069,1073,1082,1211,1230,1233,1238,1243,1249,1258,1380,1383,1388,1393,1398,1407,1538,1549,1552,1557,1562,1566,1575 'uniqu':1129,1148,1305,1324,1454,1473,1627,1646 'updat':264,524,1040,1247 'uri':1174,1184,1350,1360,1499,1509,1672,1682 'url':599,629,644,1006 'us':801,810 'use':456,465,545,566,674,690,893,942,1023,1104,1118,1136,1156,1280,1294,1312,1332,1429,1443,1461,1481,1597,1616,1634,1654 'user':532 'uuid':291,562,1079,1255,1404,1572 'v3':207,278,322,404,442,676 'valid':60,131,155,349,398,592,668,719,884,981,1222,1696 'verif':912,1022 'verifi':931,1026 'via':1108,1284,1433,1601 'voic':3,7,268,270,467,481,537,539,754,887,903 'wait':101 'webhook':231,423,910,911,915,938,986,998,1005,1008,1051,1139,1159,1315,1335,1464,1484,1637,1657 'wls':795","prices":[{"id":"38cc5d16-5c6f-4d5b-8270-39e2fdaa233d","listingId":"5a08d4c7-5b70-4e83-8cab-9024f38f3600","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:28.055Z"}],"sources":[{"listingId":"5a08d4c7-5b70-4e83-8cab-9024f38f3600","source":"github","sourceId":"team-telnyx/ai/telnyx-voice-gather-ruby","sourceUrl":"https://github.com/team-telnyx/ai/tree/main/skills/telnyx-voice-gather-ruby","isPrimary":false,"firstSeenAt":"2026-04-18T22:08:28.055Z","lastSeenAt":"2026-04-22T00:54:52.870Z"}],"details":{"listingId":"5a08d4c7-5b70-4e83-8cab-9024f38f3600","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"team-telnyx","slug":"telnyx-voice-gather-ruby","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":"ddf862821ad8cc6296aa5fed3b4f53cb7c8299e9","skill_md_path":"skills/telnyx-voice-gather-ruby/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/team-telnyx/ai/tree/main/skills/telnyx-voice-gather-ruby"},"layout":"multi","source":"github","category":"ai","frontmatter":{"name":"telnyx-voice-gather-ruby","description":">-"},"skills_sh_url":"https://skills.sh/team-telnyx/ai/telnyx-voice-gather-ruby"},"updatedAt":"2026-04-22T00:54:52.870Z"}}