{"id":"e803a413-86af-4ace-a68d-99f619135c88","shortId":"WyWV2k","kind":"skill","title":"telnyx-voice-streaming-ruby","tagline":">-","description":"<!-- Auto-generated from Telnyx OpenAPI specs. Do not edit. -->\n\n# Telnyx Voice Streaming - 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## 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```ruby\nresponse = client.calls.actions.start_forking(\"v3:550e8400-e29b-41d4-a716-446655440000_gRU1OGRkYQ\")\n\nputs(response)\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```ruby\nresponse = client.calls.actions.stop_forking(\"v3:550e8400-e29b-41d4-a716-446655440000_gRU1OGRkYQ\")\n\nputs(response)\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```ruby\nresponse = client.calls.actions.start_streaming(\"v3:550e8400-e29b-41d4-a716-446655440000_gRU1OGRkYQ\")\n\nputs(response)\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```ruby\nresponse = client.calls.actions.stop_streaming(\"v3:550e8400-e29b-41d4-a716-446655440000_gRU1OGRkYQ\")\n\nputs(response)\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```ruby\nresponse = client.calls.actions.start_transcription(\"v3:550e8400-e29b-41d4-a716-446655440000_gRU1OGRkYQ\")\n\nputs(response)\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```ruby\nresponse = client.calls.actions.stop_transcription(\"v3:550e8400-e29b-41d4-a716-446655440000_gRU1OGRkYQ\")\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| `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","ruby","team-telnyx","agent-skills","ai-coding-agent","claude-code","cpaas","cursor","iot","llm"],"capabilities":["skill","source-team-telnyx","skill-telnyx-voice-streaming-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-streaming-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 (12,441 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.731Z","embedding":null,"createdAt":"2026-04-18T22:08:41.556Z","updatedAt":"2026-04-22T00:54:54.731Z","lastSeenAt":"2026-04-22T00:54:54.731Z","tsv":"'+13125550001':78 '+13125550002':80 '/actions/fork_start':233 '/actions/fork_stop':280 '/actions/streaming_start':367 '/actions/streaming_stop':483 '/actions/transcription_start':543 '/actions/transcription_stop':596 '/calls':229,276,363,479,539,592 '/docs/voice/programmable-voice/media-streaming).':361 '/webhooks':657 '1':108 '16000':413 '200':705 '22050':414 '24000':415 '400':686 '401':66,143 '403':147 '404':150 '41d4':257,301,457,502,575,612 '422':62,129,154 '429':59,98,160 '446655440000':259,303,459,504,577,614 '48000':416 '550e8400':254,298,454,499,572,609 '8000':412 '8601':802,926,1047,1199,1333,1467 'a716':258,302,458,503,576,613 'actual':115 'add':1532 'address':323,1287,1421 'ai':211 'ai-gener':210 'allow':171 'alreadi':42 'alway':67,641 'amr':398,433 'amr-wb':397,432 'analysi':195 'api':22,26,50,123,145,1067,1219,1353 'apiconnectionerror':86 'apistatuserror':120 'app':814,938,1073,1225,1359,1543 'array':377 'assum':39 'attribut':221,227 'audio':194,213,331,342 'auth':386 'authent':64 'azur':557 'b':559 'backoff':106,166 'base64':337 'base64-encoded':336 'bash':11 'begin':74,678 'bidirect':390,402,408,418 'bodi':655 'boolean':384 'call':51,169,179,230,271,277,318,364,471,480,522,540,593,741,745,749,753,757,812,823,833,844,863,936,947,957,968,987,1058,1065,1071,1082,1093,1112,1210,1217,1223,1234,1245,1264,1344,1351,1357,1368,1379,1398,1485,1496,1515,1541,1552 'call.fork.started':782 'call.fork.stopped':274,906 'call.transcription':537,1447 'callforkstart':740,765 'callforkstop':744,889 'callstreamingfail':748,1013 'callstreamingstart':752,1162 'callstreamingstop':756,1296 'case':202 'check':90,109,133,157 'client':19,40,235,282,369,485,545,598 'client.calls.actions.start':251,451,569 'client.calls.actions.stop':295,496,606 'client.messages.send':76 'client.new':21 'client.webhooks.unwrap':680,735 'code':72,142 'codec':391,426 'command':238,285,372,488,534,548,601,880,1004,1063,1129,1215,1281,1349,1415 'common':140 'config':380,562 'configur':715 'connect':91,326,818,942,1077,1157,1229,1363,1547 'control':231,278,365,481,541,594,813,825,831,937,949,955,1055,1066,1072,1207,1218,1224,1341,1352,1358,1475,1483,1542 'correl':850,870,974,994,1099,1119,1251,1271,1385,1405,1502,1522 'creation':208 'custom':375 'data.event':779,903,1024,1176,1310,1444 'data.id':789,913,1034,1186,1320,1454 'data.occurred':796,920,1041,1193,1327,1461 'data.payload.call':824,834,853,948,958,977,1054,1083,1102,1206,1235,1254,1340,1369,1388,1474,1486,1505 'data.payload.client':873,997,1122,1274,1408,1525 'data.payload.connection':809,933,1068,1220,1354,1538 'data.payload.failure':1130 'data.payload.stream':881,1005,1142,1148,1282,1416 'data.record':769,893,1017,1166,1300,1434 'date':799,923,1044,1196,1330,1464 'date-tim':798,922,1043,1195,1329,1463 'datetim':803,927,1048,1200,1334,1468 'decrypt':246,292,884,1008 'deepgram':556 'default':31,436 'delay':116 'deliv':334,788,912,1033,1185,1295,1319,1429,1453 'descript':739,768,892,1016,1135,1165,1299,1433 'destin':1285,1419 'detail':350 'detect':205 'developers.telnyx.com':360 'developers.telnyx.com/docs/voice/programmable-voice/media-streaming).':359 'dialogflow':325,379,383,1152 'e':121,684 'e.g':651 'e.message':126,689 'e.status':125,128 'e29b':256,300,456,501,574,611 'e29b-41d4-a716':255,299,455,500,573,610 'ed25519':628,635,665,670,728,731 'either':218 'enabl':192,382 'encod':338 'end':138,139,690,706 'engin':552,561 'enum':245,290,392,404,411,421,427,439,553,771,781,883,895,905,1007,1019,1026,1150,1168,1178,1302,1312,1436,1446 'env':24 'error':47,56,61,65,69,85,89,96,119,124,132,141,156 'event':679,693,701,710,738,772,786,807,852,872,896,910,931,976,996,1020,1031,1052,1101,1121,1169,1183,1204,1253,1273,1303,1317,1338,1387,1407,1437,1451,1472,1504,1524 'event.data.event':702 'everi':1535 'exampl':37 'expect':272,475,535 'explan':1136 'exponenti':105,165 'fail':53,751,1141 'field':135,158,764,766,890,1014,1163,1297,1431,1530 'find':348 'follow':708 'fork':167,170,252,266,269,296,742,746 'format':137,159 'former':816,940,1075,1227,1361,1545 'found':153 'fraud':204 'g722':395,430 'gem':12 'generat':212 'go':1292,1426 'googl':554 'gru1ogrkyq':260,304,460,505,578,615 'halt':685 'handl':48,68 'handler':650 'hang':524 'hang-up':523 'header':113,640,661,682,729 'hello':82 'http':667,675 'id':232,239,279,286,366,373,482,489,492,542,549,595,602,810,815,819,826,829,836,838,855,857,934,939,943,950,953,960,962,979,981,1056,1059,1069,1074,1078,1085,1087,1104,1106,1143,1208,1211,1221,1226,1230,1237,1239,1256,1258,1342,1345,1355,1360,1364,1371,1373,1390,1392,1476,1488,1490,1507,1509,1539,1544,1548 'identifi':773,791,897,915,1021,1036,1145,1170,1188,1304,1322,1438,1456,1479 'inbound':440 'includ':203,631,720 'initi':43,529 'instal':10,13 'insuffici':148 'invalid':144,687 'iso':801,925,1046,1198,1332,1466 'issu':1062,1214,1348 'json':345 'key':23,27,146 'l16':400,435 'leg':420,835,959,1084,1236,1370,1487 'limit':58,100,162 'link':358 'media':176,315,352,887,1011,1139 'messag':354 'mode':403 'mp3':405 'must':216 'near':329 'near-realtim':328 'network':55,88 'object':378,381,563 'occur':808,932,1053,1205,1339,1473 'omit':35 'opposit':424 'option':234,281,368,484,544,597 'opus':396,431 'outbound':442 'paramet':376 'pars':696 'payload':340,346,659,681,698,763 'pcma':394,429 'pcmu':393,428 'perform':1161 'permiss':149 'pleas':347 'post':228,275,362,478,538,591,656 'product':71,645 'put':87,122,130,261,305,461,506,579,616,699 'rate':57,99,161,410 'ratelimiterror':97 'raw':291,341,654 'real':515,588 'real-tim':514,587 'realtim':185,193,330 'reason':1131 'receiv':700,877,1001,1126,1278,1412 'request':215,630 'request.body.read':660 'request.env':666,674 'requir':17,134 'rescu':83,94,117,683 'resourc':151,778,795,902,919,1023,1040,1175,1192,1309,1326,1443,1460 'respons':214,250,262,294,306,450,462,495,507,568,580,605,617 'result':75,264,308,464,509,582,619 'retri':93,103,111,163 'retry-aft':110 'return':263,307,463,508,581,618 'rtp':339,406 'rubi':5,9,16,73,249,293,449,494,567,604,646 'rx':224,241 'sampl':409 'self':423 'sent':712 'session':854,864,978,988,1103,1113,1255,1265,1389,1399,1506,1516 'setup':15 'short':1134 'shown':45 'sign':625 'signatur':634,643,664,669,688,691,727,732 'sinatra':652 'skill' 'skill-telnyx-voice-streaming-ruby' 'sleep':107 'source-team-telnyx' 'specif':182,321,355 'specifi':217 'start':168,311,312,512,513,743,755 'state':236,283,370,486,546,599,874,876,998,1000,1123,1125,1275,1277,1409,1411,1526,1533 'status':704 'stop':267,268,467,468,520,533,585,586,747,759 'stream':4,8,174,187,243,288,310,313,353,385,389,401,407,417,425,437,446,452,466,469,491,497,750,754,758,888,1012,1140,1147,1156,1159,1290,1424 'streaming.failed':1027 'streaming.started':1179 'streaming.stopped':477,1313 'string':237,240,242,248,265,284,287,309,371,374,388,448,465,487,490,510,547,550,566,583,600,603,620,811,827,837,856,875,935,951,961,980,999,1057,1070,1086,1105,1124,1132,1209,1222,1238,1257,1276,1284,1343,1356,1372,1391,1410,1418,1477,1489,1508,1527,1540 'subsequ':1536 'support':197 'target':183,220,419 'telnyx':2,6,14,18,20,25,84,95,118,555,624,633,638,663,668,672,676,722,726,817,941,1076,1228,1362,1546 'telnyx-signature-ed25519':632,662,725 'telnyx-timestamp':637,671,721 'telnyx-voice-streaming-rubi':1 'text':81 'time':516,589,800,924,1045,1197,1331,1465 'timestamp':639,673,677,723 'token':387,1481 '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':438,441,443,445,565 'transcript':511,517,518,532,551,560,564,570,584,590,607,760,761,1430 'tx':226,247 'type':244,289,703,767,770,775,780,784,793,882,885,891,894,899,904,908,917,1006,1009,1015,1018,1025,1029,1038,1149,1154,1164,1167,1172,1177,1181,1190,1298,1301,1306,1311,1315,1324,1432,1435,1440,1445,1449,1458 'uniqu':828,841,860,952,965,984,1090,1109,1242,1261,1376,1395,1478,1493,1512 'url':447,717,1283,1417 'use':190,201,653,734,820,848,868,944,972,992,1060,1079,1097,1117,1212,1231,1249,1269,1346,1365,1383,1403,1500,1520,1528,1549 'uuid':493,790,914,1035,1144,1187,1321,1455 'v3':253,297,453,498,571,608 'valid':60,131,155,692 'varieti':199 'verif':623,733 'verifi':642,737 'via':530,1064,1216,1350 'voic':3,7 'wait':101 'wb':399,434 'webhook':273,476,536,621,622,626,649,697,709,716,719,762,851,871,975,995,1100,1120,1252,1272,1386,1406,1503,1523,1537 'websocket':322,474,1151,1286,1420 'wrap':343","prices":[{"id":"d27939c8-5383-4bf1-a4c5-cfc280d4ee4b","listingId":"e803a413-86af-4ace-a68d-99f619135c88","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:41.556Z"}],"sources":[{"listingId":"e803a413-86af-4ace-a68d-99f619135c88","source":"github","sourceId":"team-telnyx/ai/telnyx-voice-streaming-ruby","sourceUrl":"https://github.com/team-telnyx/ai/tree/main/skills/telnyx-voice-streaming-ruby","isPrimary":false,"firstSeenAt":"2026-04-18T22:08:41.556Z","lastSeenAt":"2026-04-22T00:54:54.731Z"}],"details":{"listingId":"e803a413-86af-4ace-a68d-99f619135c88","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"team-telnyx","slug":"telnyx-voice-streaming-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":"2c4692e6926b2944ce9c4d9c925802bd5bfc37b1","skill_md_path":"skills/telnyx-voice-streaming-ruby/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/team-telnyx/ai/tree/main/skills/telnyx-voice-streaming-ruby"},"layout":"multi","source":"github","category":"ai","frontmatter":{"name":"telnyx-voice-streaming-ruby","description":">-"},"skills_sh_url":"https://skills.sh/team-telnyx/ai/telnyx-voice-streaming-ruby"},"updatedAt":"2026-04-22T00:54:54.731Z"}}