{"id":"d58052f5-e2e8-4242-b6bc-3d5ad305a54b","shortId":"7ZdNeY","kind":"skill","title":"telnyx-voice-streaming-javascript","tagline":">-","description":"<!-- Auto-generated from Telnyx OpenAPI specs. Do not edit. -->\n\n# Telnyx Voice Streaming - JavaScript\n\n## Installation\n\n```bash\nnpm install telnyx\n```\n\n## Setup\n\n```javascript\nimport Telnyx from 'telnyx';\n\nconst client = new Telnyx({\n  apiKey: process.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```javascript\ntry {\n  const result = await client.messages.send({ to: '+13125550001', from: '+13125550002', text: 'Hello' });\n} catch (err) {\n  if (err instanceof Telnyx.APIConnectionError) {\n    console.error('Network error — check connectivity and retry');\n  } else if (err instanceof Telnyx.RateLimitError) {\n    // 429: rate limited — wait and retry with exponential backoff\n    const retryAfter = err.headers?.['retry-after'] || 1;\n    await new Promise(r => setTimeout(r, retryAfter * 1000));\n  } else if (err instanceof Telnyx.APIError) {\n    console.error(`API error ${err.status}: ${err.message}`);\n    if (err.status === 422) {\n      console.error('Validation error — check required fields and formats');\n    }\n  }\n}\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```javascript\nconst response = await client.calls.actions.startForking('v3:550e8400-e29b-41d4-a716-446655440000_gRU1OGRkYQ');\n\nconsole.log(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```javascript\nconst response = await client.calls.actions.stopForking('v3:550e8400-e29b-41d4-a716-446655440000_gRU1OGRkYQ');\n\nconsole.log(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```javascript\nconst response = await client.calls.actions.startStreaming('v3:550e8400-e29b-41d4-a716-446655440000_gRU1OGRkYQ');\n\nconsole.log(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```javascript\nconst response = await client.calls.actions.stopStreaming('v3:550e8400-e29b-41d4-a716-446655440000_gRU1OGRkYQ');\n\nconsole.log(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```javascript\nconst response = await client.calls.actions.startTranscription('v3:550e8400-e29b-41d4-a716-446655440000_gRU1OGRkYQ');\n\nconsole.log(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```javascript\nconst response = await client.calls.actions.stopTranscription('v3:550e8400-e29b-41d4-a716-446655440000_gRU1OGRkYQ');\n\nconsole.log(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```javascript\n// In your webhook handler (e.g., Express — use raw body, not parsed JSON):\napp.post('/webhooks', express.raw({ type: 'application/json' }), async (req, res) => {\n  try {\n    const event = await client.webhooks.unwrap(req.body.toString(), {\n      headers: req.headers,\n    });\n    // Signature valid — event is the parsed webhook payload\n    console.log('Received event:', event.data.event_type);\n    res.status(200).send('OK');\n  } catch (err) {\n    console.error('Webhook verification failed:', err.message);\n    res.status(400).send('Invalid signature');\n  }\n});\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","javascript","team-telnyx","agent-skills","ai-coding-agent","claude-code","cpaas","cursor","iot","llm"],"capabilities":["skill","source-team-telnyx","skill-telnyx-voice-streaming-javascript","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-javascript","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,895 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.554Z","embedding":null,"createdAt":"2026-04-18T22:08:40.025Z","updatedAt":"2026-04-22T00:54:54.554Z","lastSeenAt":"2026-04-22T00:54:54.554Z","tsv":"'+13125550001':82 '+13125550002':84 '/actions/fork_start':243 '/actions/fork_stop':291 '/actions/streaming_start':379 '/actions/streaming_stop':496 '/actions/transcription_start':557 '/actions/transcription_stop':611 '/calls':239,287,375,492,553,607 '/docs/voice/programmable-voice/media-streaming).':373 '/webhooks':676 '1':120 '1000':128 '16000':425 '200':705 '22050':426 '24000':427 '400':716 '401':68,153 '403':157 '404':160 '41d4':268,313,470,516,590,628 '422':64,141,164 '429':61,105,170 '446655440000':270,315,472,518,592,630 '48000':428 '550e8400':265,310,467,513,587,625 '8000':424 '8601':815,939,1060,1212,1346,1480 'a716':269,314,471,517,591,629 'add':1545 'address':335,1300,1434 'ai':221 'ai-gener':220 'allow':181 'alreadi':44 'alway':69,657 'amr':410,445 'amr-wb':409,444 'analysi':205 'api':28,52,135,155,1080,1232,1366 'apikey':25 'app':827,951,1086,1238,1372,1556 'app.post':675 'application/json':679 'array':389 'assum':41 'async':680 'attribut':231,237 'audio':204,223,343,354 'auth':398 'authent':66 'await':79,121,262,307,464,510,584,622,686 'azur':571 'b':573 'backoff':113,176 'base64':349 'base64-encoded':348 'bash':11 'bidirect':402,414,420,430 'bodi':671 'boolean':396 'call':53,179,189,240,282,288,330,376,484,493,536,554,608,754,758,762,766,770,825,836,846,857,876,949,960,970,981,1000,1071,1078,1084,1095,1106,1125,1223,1230,1236,1247,1258,1277,1357,1364,1370,1381,1392,1411,1498,1509,1528,1554,1565 'call.fork.started':795 'call.fork.stopped':285,919 'call.transcription':551,1460 'callforkstart':753,778 'callforkstop':757,902 'callstreamingfail':761,1026 'callstreamingstart':765,1175 'callstreamingstop':769,1309 'case':212 'catch':87,708 'check':96,145,167 'client':22,42,245,293,381,498,559,613 'client.calls.actions.startforking':263 'client.calls.actions.startstreaming':465 'client.calls.actions.starttranscription':585 'client.calls.actions.stopforking':308 'client.calls.actions.stopstreaming':511 'client.calls.actions.stoptranscription':623 'client.messages.send':80 'client.webhooks.unwrap':687,748 'code':74,152 'codec':403,438 'command':248,296,384,501,548,562,616,893,1017,1076,1142,1228,1294,1362,1428 'common':150 'config':392,576 'configur':728 'connect':97,338,831,955,1090,1170,1242,1376,1560 'console.error':93,134,142,710 'console.log':272,317,474,520,594,632,699 'const':21,77,114,260,305,462,508,582,620,684 'control':241,289,377,494,555,609,826,838,844,950,962,968,1068,1079,1085,1220,1231,1237,1354,1365,1371,1488,1496,1555 'correl':863,883,987,1007,1112,1132,1264,1284,1398,1418,1515,1535 'creation':218 'custom':387 'data.event':792,916,1037,1189,1323,1457 'data.id':802,926,1047,1199,1333,1467 'data.occurred':809,933,1054,1206,1340,1474 'data.payload.call':837,847,866,961,971,990,1067,1096,1115,1219,1248,1267,1353,1382,1401,1487,1499,1518 'data.payload.client':886,1010,1135,1287,1421,1538 'data.payload.connection':822,946,1081,1233,1367,1551 'data.payload.failure':1143 'data.payload.stream':894,1018,1155,1161,1295,1429 'data.record':782,906,1030,1179,1313,1447 'date':812,936,1057,1209,1343,1477 'date-tim':811,935,1056,1208,1342,1476 'datetim':816,940,1061,1213,1347,1481 'decrypt':256,303,897,1021 'deepgram':570 'default':33,448 'deliv':346,801,925,1046,1198,1308,1332,1442,1466 'descript':752,781,905,1029,1148,1178,1312,1446 'destin':1298,1432 'detail':362 'detect':215 'developers.telnyx.com':372 'developers.telnyx.com/docs/voice/programmable-voice/media-streaming).':371 'dialogflow':337,391,395,1165 'e.g':667 'e29b':267,312,469,515,589,627 'e29b-41d4-a716':266,311,468,514,588,626 'ed25519':644,651,741,744 'either':228 'els':100,129 'enabl':202,394 'encod':350 'engin':566,575 'enum':255,301,404,416,423,433,439,451,567,784,794,896,908,918,1020,1032,1039,1163,1181,1191,1315,1325,1449,1459 'err':88,90,102,131,709 'err.headers':116 'err.message':138,714 'err.status':137,140 'error':49,58,63,67,71,95,136,144,151,166 'event':685,693,701,723,751,785,799,820,865,885,909,923,944,989,1009,1033,1044,1065,1114,1134,1182,1196,1217,1266,1286,1316,1330,1351,1400,1420,1450,1464,1485,1517,1537 'event.data.event':702 'everi':1548 'exampl':39 'expect':283,488,549 'explan':1149 'exponenti':112,175 'express':668 'express.raw':677 'fail':55,713,764,1154 'field':147,168,777,779,903,1027,1176,1310,1444,1543 'find':360 'follow':721 'fork':177,180,277,280,755,759 'format':149,169 'former':829,953,1088,1240,1374,1558 'found':163 'fraud':214 'g722':407,442 'generat':222 'go':1305,1439 'googl':568 'gru1ogrkyq':271,316,473,519,593,631 'handl':50,70 'handler':666 'hang':538 'hang-up':537 'header':656,689,742 'hello':86 'id':242,249,290,297,378,385,495,502,505,556,563,610,617,823,828,832,839,842,849,851,868,870,947,952,956,963,966,973,975,992,994,1069,1072,1082,1087,1091,1098,1100,1117,1119,1156,1221,1224,1234,1239,1243,1250,1252,1269,1271,1355,1358,1368,1373,1377,1384,1386,1403,1405,1489,1501,1503,1520,1522,1552,1557,1561 'identifi':786,804,910,928,1034,1049,1158,1183,1201,1317,1335,1451,1469,1492 'import':17 'inbound':452 'includ':213,647,733 'initi':45,543 'instal':10,13 'instanceof':91,103,132 'insuffici':158 'invalid':154,718 'iso':814,938,1059,1211,1345,1479 'issu':1075,1227,1361 'javascript':5,9,16,75,259,304,461,507,581,619,662 'json':357,674 'key':29,156 'l16':412,447 'leg':432,848,972,1097,1249,1383,1500 'limit':60,107,172 'link':370 'media':186,327,364,900,1024,1152 'messag':366 'mode':415 'mp3':417 'must':226 'near':341 'near-realtim':340 'network':57,94 'new':23,122 'npm':12 'object':390,393,577 'occur':821,945,1066,1218,1352,1486 'ok':707 'omit':37 'opposit':436 'option':244,292,380,497,558,612 'opus':408,443 'outbound':454 'paramet':388 'pars':673,696 'payload':352,358,698,776 'pcma':406,441 'pcmu':405,440 'perform':1174 'permiss':159 'pleas':359 'post':238,286,374,491,552,606 'process.env':26 'product':73,661 'promis':123 'r':124,126 'rate':59,106,171,422 'raw':302,353,670 'real':529,603 'real-tim':528,602 'realtim':195,203,342 'reason':1144 'receiv':700,890,1014,1139,1291,1425 'req':681 'req.body.tostring':688 'req.headers':690 'request':225,646 'requir':146 'res':682 'res.status':704,715 'resourc':161,791,808,915,932,1036,1053,1188,1205,1322,1339,1456,1473 'respons':224,261,306,463,509,583,621 'response.data':273,318,475,521,595,633 'result':78,275,320,477,523,597,635 'retri':99,110,118,173 'retry-aft':117 'retryaft':115,127 'return':274,319,476,522,596,634 'rtp':351,418 'rx':234,251 'sampl':421 'self':435 'send':706,717 'sent':725 'session':867,877,991,1001,1116,1126,1268,1278,1402,1412,1519,1529 'settimeout':125 'setup':15 'short':1147 'shown':47 'sign':641 'signatur':650,659,691,719,740,745 'skill' 'skill-telnyx-voice-streaming-javascript' 'source-team-telnyx' 'specif':192,333,367 'specifi':227 'start':178,323,324,526,527,756,768 'state':246,294,382,499,560,614,887,889,1011,1013,1136,1138,1288,1290,1422,1424,1539,1546 'stop':278,279,480,481,534,547,600,601,760,772 'stream':4,8,184,197,253,299,322,325,365,397,401,413,419,429,437,449,458,479,482,504,763,767,771,901,1025,1153,1160,1169,1172,1303,1437 'streaming.failed':1040 'streaming.started':1192 'streaming.stopped':490,1326 'string':247,250,252,258,276,295,298,321,383,386,400,460,478,500,503,524,561,564,580,598,615,618,636,824,840,850,869,888,948,964,974,993,1012,1070,1083,1099,1118,1137,1145,1222,1235,1251,1270,1289,1297,1356,1369,1385,1404,1423,1431,1490,1502,1521,1540,1553 'subsequ':1549 'support':207 'target':193,230,431 'telnyx':2,6,14,18,20,24,27,569,640,649,654,735,739,830,954,1089,1241,1375,1559 'telnyx-signature-ed25519':648,738 'telnyx-timestamp':653,734 'telnyx-voice-streaming-javascript':1 'telnyx.apiconnectionerror':92 'telnyx.apierror':133 'telnyx.ratelimiterror':104 'text':85 'time':530,604,813,937,1058,1210,1344,1478 'timestamp':655,736 'token':399,1494 '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':450,453,455,457,579 'transcript':525,531,532,546,565,574,578,599,605,773,774,1443 'tri':76,683 'tx':236,257 'type':254,300,678,703,780,783,788,793,797,806,895,898,904,907,912,917,921,930,1019,1022,1028,1031,1038,1042,1051,1162,1167,1177,1180,1185,1190,1194,1203,1311,1314,1319,1324,1328,1337,1445,1448,1453,1458,1462,1471 'uniqu':841,854,873,965,978,997,1103,1122,1255,1274,1389,1408,1491,1506,1525 'url':459,730,1296,1430 'use':200,211,669,747,833,861,881,957,985,1005,1073,1092,1110,1130,1225,1244,1262,1282,1359,1378,1396,1416,1513,1533,1541,1562 'uuid':506,803,927,1048,1157,1200,1334,1468 'v3':264,309,466,512,586,624 'valid':62,143,165,692 'varieti':209 'verif':639,712,746 'verifi':658,750 'via':544,1077,1229,1363 'voic':3,7 'wait':108 'wb':411,446 'webhook':284,489,550,637,638,642,665,697,711,722,729,732,775,864,884,988,1008,1113,1133,1265,1285,1399,1419,1516,1536,1550 'websocket':334,487,1164,1299,1433 'wrap':355","prices":[{"id":"4f46a46e-9cab-4b21-a963-e5a254e5a27b","listingId":"d58052f5-e2e8-4242-b6bc-3d5ad305a54b","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.025Z"}],"sources":[{"listingId":"d58052f5-e2e8-4242-b6bc-3d5ad305a54b","source":"github","sourceId":"team-telnyx/ai/telnyx-voice-streaming-javascript","sourceUrl":"https://github.com/team-telnyx/ai/tree/main/skills/telnyx-voice-streaming-javascript","isPrimary":false,"firstSeenAt":"2026-04-18T22:08:40.025Z","lastSeenAt":"2026-04-22T00:54:54.554Z"}],"details":{"listingId":"d58052f5-e2e8-4242-b6bc-3d5ad305a54b","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"team-telnyx","slug":"telnyx-voice-streaming-javascript","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":"2b9a1070bd5463ca3ba91e288e2aeea7359f4f11","skill_md_path":"skills/telnyx-voice-streaming-javascript/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/team-telnyx/ai/tree/main/skills/telnyx-voice-streaming-javascript"},"layout":"multi","source":"github","category":"ai","frontmatter":{"name":"telnyx-voice-streaming-javascript","description":">-"},"skills_sh_url":"https://skills.sh/team-telnyx/ai/telnyx-voice-streaming-javascript"},"updatedAt":"2026-04-22T00:54:54.554Z"}}