{"id":"68000374-a40c-49d9-9b60-3c09846d850e","shortId":"SQXvHq","kind":"skill","title":"telnyx-voice-javascript","tagline":">-","description":"<!-- Auto-generated from Telnyx OpenAPI specs. Do not edit. -->\n\n# Telnyx Voice - 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 response = await client.calls.dial({\n    connection_id: '7267xxxxxxxxxxxxxx',\n    from: '+18005550101',\n    to: '+18005550100',\n  });\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    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## Important Notes\n\n- **Phone numbers** must be in E.164 format (e.g., `+13125550001`). Include the `+` prefix and country code. No spaces, dashes, or parentheses.\n- **Pagination:** List methods return an auto-paginating iterator. Use `for await (const item of result) { ... }` to iterate through all pages automatically.\n\n## Operational Caveats\n\n- Call Control is event-driven. After `dial()` or an inbound webhook, issue follow-up commands from webhook handlers using the `call_control_id` in the event payload.\n- Outbound and inbound flows are different: outbound calls start with `dial()`, while inbound calls must be answered from the incoming webhook before other commands run.\n- A publicly reachable webhook endpoint is required for real call control. Without it, calls may connect but your application cannot drive the live call state.\n\n## Reference Use Rules\n\nDo not invent Telnyx parameters, enums, response fields, or webhook fields.\n\n- If the parameter, enum, or response field you need is not shown inline in this skill, read [references/api-details.md](references/api-details.md) before writing code.\n- Before using any operation in `## Additional Operations`, read [the optional-parameters section](references/api-details.md#optional-parameters) and [the response-schemas section](references/api-details.md#response-schemas).\n- Before reading or matching webhook fields beyond the inline examples, read [the webhook payload reference](references/api-details.md#webhook-payload-fields).\n\n## Core Tasks\n\n### Dial an outbound call\n\nPrimary voice entrypoint. Agents need the async call-control identifiers returned here.\n\n`client.calls.dial()` — `POST /calls`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `to` | string (E.164) | Yes | The DID or SIP URI to dial out to. |\n| `from` | string (E.164) | Yes | The `from` number to be used as the caller id presented to t... |\n| `connectionId` | string (UUID) | Yes | The ID of the Call Control App (formerly ID of the connectio... |\n| `timeoutSecs` | integer | No | The number of seconds that Telnyx will wait for the call to ... |\n| `billingGroupId` | string (UUID) | No | Use this field to set the Billing Group ID for the call. |\n| `clientState` | string | No | Use this field to add state to every subsequent webhook. |\n| ... | | | +48 optional params in [references/api-details.md](references/api-details.md) |\n\n```javascript\nconst response = await client.calls.dial({\n  connection_id: '7267xxxxxxxxxxxxxx',\n  from: '+18005550101',\n  to: '+18005550100',\n});\n\nconsole.log(response.data);\n```\n\nPrimary response fields:\n- `response.data.callControlId`\n- `response.data.callLegId`\n- `response.data.callSessionId`\n- `response.data.isAlive`\n- `response.data.recordingId`\n- `response.data.callDuration`\n\n### Answer an inbound call\n\nPrimary inbound call-control command.\n\n`client.calls.actions.answer()` — `POST /calls/{call_control_id}/actions/answer`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `callControlId` | string (UUID) | Yes | Unique identifier and token for controlling the call |\n| `billingGroupId` | string (UUID) | No | Use this field to set the Billing Group ID for the call. |\n| `clientState` | string | No | Use this field to add state to every subsequent webhook. |\n| `webhookUrl` | string (URL) | No | Use this field to override the URL for which Telnyx will sen... |\n| ... | | | +26 optional params in [references/api-details.md](references/api-details.md) |\n\n```javascript\nconst response = await client.calls.actions.answer('v3:550e8400-e29b-41d4-a716-446655440000_gRU1OGRkYQ');\n\nconsole.log(response.data);\n```\n\nPrimary response fields:\n- `response.data.result`\n- `response.data.recordingId`\n\n### Transfer a live call\n\nCommon post-answer control path with downstream webhook implications.\n\n`client.calls.actions.transfer()` — `POST /calls/{call_control_id}/actions/transfer`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `to` | string (E.164) | Yes | The DID or SIP URI to dial out to. |\n| `callControlId` | string (UUID) | Yes | Unique identifier and token for controlling the call |\n| `timeoutSecs` | integer | No | The number of seconds that Telnyx will wait for the call to ... |\n| `clientState` | string | No | Use this field to add state to every subsequent webhook. |\n| `webhookUrl` | string (URL) | No | Use this field to override the URL for which Telnyx will sen... |\n| ... | | | +33 optional params in [references/api-details.md](references/api-details.md) |\n\n```javascript\nconst response = await client.calls.actions.transfer('call_control_id', {\n  to: '+18005550100',\n});\n\nconsole.log(response.data);\n```\n\nPrimary response fields:\n- `response.data.result`\n\n---\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\n## Webhooks\n\nThese webhook payload fields are inline because they are part of the primary integration path.\n\n### Call Answered\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `data.record_type` | enum: event | Identifies the type of the resource. |\n| `data.event_type` | enum: call.answered | 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 ev... |\n\n### Call Hangup\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `data.record_type` | enum: event | Identifies the type of the resource. |\n| `data.event_type` | enum: call.hangup | 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 ev... |\n\n### Call Initiated\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `data.record_type` | enum: event | Identifies the type of the resource. |\n| `data.event_type` | enum: call.initiated | 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.connection_codecs` | string | The list of comma-separated codecs enabled for the connection. |\n| `data.payload.offered_codecs` | string | The list of comma-separated codecs offered by caller. |\n\nIf you need webhook fields that are not listed inline here, read [the webhook payload reference](references/api-details.md#webhook-payload-fields) before writing the handler.\n\n---\n\n## Important Supporting Operations\n\nUse these when the core tasks above are close to your flow, but you need a common variation or follow-up step.\n\n### Hangup call\n\nEnd a live call from your webhook-driven control flow.\n\n`client.calls.actions.hangup()` — `POST /calls/{call_control_id}/actions/hangup`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `callControlId` | string (UUID) | Yes | Unique identifier and token for controlling the call |\n| `clientState` | string | No | Use this field to add state to every subsequent webhook. |\n| `commandId` | string (UUID) | No | Use this field to avoid duplicate commands. |\n| `customHeaders` | array[object] | No | Custom headers to be added to the SIP BYE message. |\n\n```javascript\nconst response = await client.calls.actions.hangup('v3:550e8400-e29b-41d4-a716-446655440000_gRU1OGRkYQ');\n\nconsole.log(response.data);\n```\n\nPrimary response fields:\n- `response.data.result`\n\n### Bridge calls\n\nTrigger a follow-up action in an existing workflow rather than creating a new top-level resource.\n\n`client.calls.actions.bridge()` — `POST /calls/{call_control_id}/actions/bridge`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `callControlId` | string (UUID) | Yes | The Call Control ID of the call you want to bridge with, can... |\n| `callControlId` | string (UUID) | Yes | Unique identifier and token for controlling the call |\n| `clientState` | string | No | Use this field to add state to every subsequent webhook. |\n| `commandId` | string (UUID) | No | Use this field to avoid duplicate commands. |\n| `videoRoomId` | string (UUID) | No | The ID of the video room you want to bridge with, can't be u... |\n| ... | | | +16 optional params in [references/api-details.md](references/api-details.md) |\n\n```javascript\nconst response = await client.calls.actions.bridge('call_control_id', {\n  call_control_id_to_bridge_with: 'v3:MdI91X4lWFEs7IgbBEOT9M4AigoY08M0WWZFISt1Yw2axZ_IiE4pqg',\n});\n\nconsole.log(response.data);\n```\n\nPrimary response fields:\n- `response.data.result`\n\n### Reject a call\n\nTrigger a follow-up action in an existing workflow rather than creating a new top-level resource.\n\n`client.calls.actions.reject()` — `POST /calls/{call_control_id}/actions/reject`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `cause` | enum (CALL_REJECTED, USER_BUSY) | Yes | Cause for call rejection. |\n| `callControlId` | string (UUID) | Yes | Unique identifier and token for controlling the call |\n| `clientState` | string | No | Use this field to add state to every subsequent webhook. |\n| `commandId` | string (UUID) | No | Use this field to avoid duplicate commands. |\n\n```javascript\nconst response = await client.calls.actions.reject('call_control_id', { cause: 'USER_BUSY' });\n\nconsole.log(response.data);\n```\n\nPrimary response fields:\n- `response.data.result`\n\n### Retrieve a call status\n\nFetch the current state before updating, deleting, or making control-flow decisions.\n\n`client.calls.retrieveStatus()` — `GET /calls/{call_control_id}`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `callControlId` | string (UUID) | Yes | Unique identifier and token for controlling the call |\n\n```javascript\nconst response = await client.calls.retrieveStatus('v3:550e8400-e29b-41d4-a716-446655440000_gRU1OGRkYQ');\n\nconsole.log(response.data);\n```\n\nPrimary response fields:\n- `response.data.callControlId`\n- `response.data.callDuration`\n- `response.data.callLegId`\n- `response.data.callSessionId`\n- `response.data.clientState`\n- `response.data.endTime`\n\n### List all active calls for given connection\n\nFetch the current state before updating, deleting, or making control-flow decisions.\n\n`client.connections.listActiveCalls()` — `GET /connections/{connection_id}/active_calls`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `connectionId` | string (UUID) | Yes | Telnyx connection id |\n| `page` | object | No | Consolidated page parameter (deepObject style). |\n\n```javascript\n// Automatically fetches more pages as needed.\nfor await (const connectionListActiveCallsResponse of client.connections.listActiveCalls(\n  '1293384261075731461',\n)) {\n  console.log(connectionListActiveCallsResponse.call_control_id);\n}\n```\n\nResponse wrapper:\n- items: `connectionListActiveCallsResponse.data`\n- pagination: `connectionListActiveCallsResponse.meta`\n\nPrimary item fields:\n- `callControlId`\n- `callDuration`\n- `callLegId`\n- `callSessionId`\n- `clientState`\n- `recordType`\n\n### List call control applications\n\nInspect available resources or choose an existing resource before mutating it.\n\n`client.callControlApplications.list()` — `GET /call_control_applications`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `sort` | enum (created_at, connection_name, active) | No | Specifies the sort order for results. |\n| `filter` | object | No | Consolidated filter parameter (deepObject style). |\n| `page` | object | No | Consolidated page parameter (deepObject style). |\n\n```javascript\n// Automatically fetches more pages as needed.\nfor await (const callControlApplication of client.callControlApplications.list()) {\n  console.log(callControlApplication.id);\n}\n```\n\nResponse wrapper:\n- items: `callControlApplication.data`\n- pagination: `callControlApplication.meta`\n\nPrimary item fields:\n- `id`\n- `createdAt`\n- `updatedAt`\n- `active`\n- `anchorsiteOverride`\n- `applicationName`\n\n---\n\n## Additional Operations\n\nUse the core tasks above first. The operations below are indexed here with exact SDK methods and required params; use [references/api-details.md](references/api-details.md) for full optional params, response schemas, and lower-frequency webhook payloads.\nBefore using any operation below, read [the optional-parameters section](references/api-details.md#optional-parameters) and [the response-schemas section](references/api-details.md#response-schemas) so you do not guess missing fields.\n\n| Operation | SDK method | Endpoint | Use when | Required params |\n|-----------|------------|----------|----------|-----------------|\n| Create a call control application | `client.callControlApplications.create()` | `POST /call_control_applications` | Create or provision an additional resource when the core tasks do not cover this flow. | `applicationName`, `webhookEventUrl` |\n| Retrieve a call control application | `client.callControlApplications.retrieve()` | `GET /call_control_applications/{id}` | Fetch the current state before updating, deleting, or making control-flow decisions. | `id` |\n| Update a call control application | `client.callControlApplications.update()` | `PATCH /call_control_applications/{id}` | Modify an existing resource without recreating it. | `applicationName`, `webhookEventUrl`, `id` |\n| Delete a call control application | `client.callControlApplications.delete()` | `DELETE /call_control_applications/{id}` | Remove, detach, or clean up an existing resource. | `id` |\n| SIP Refer a call | `client.calls.actions.refer()` | `POST /calls/{call_control_id}/actions/refer` | Trigger a follow-up action in an existing workflow rather than creating a new top-level resource. | `sipAddress`, `callControlId` |\n| Send SIP info | `client.calls.actions.sendSipInfo()` | `POST /calls/{call_control_id}/actions/send_sip_info` | Trigger a follow-up action in an existing workflow rather than creating a new top-level resource. | `contentType`, `body`, `callControlId` |\n\n### Other Webhook Events\n\n| Event | `data.event_type` | Description |\n|-------|-------------------|-------------|\n| `callBridged` | `call.bridged` | Call Bridged |\n\n---\n\nFor exhaustive optional parameters, full response schemas, and complete webhook payloads, see [references/api-details.md](references/api-details.md).","tags":["telnyx","voice","javascript","team-telnyx","agent-skills","ai-coding-agent","claude-code","cpaas","cursor","iot","llm","sdk"],"capabilities":["skill","source-team-telnyx","skill-telnyx-voice-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-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 (17,712 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:53.293Z","embedding":null,"createdAt":"2026-04-18T22:08:30.412Z","updatedAt":"2026-04-22T00:54:53.293Z","lastSeenAt":"2026-04-22T00:54:53.293Z","tsv":"'+13125550001':177 '+16':1413 '+18005550100':85,508,733 '+18005550101':83,506 '+26':598 '+33':718 '+48':491 '/actions/answer':536 '/actions/bridge':1336 '/actions/hangup':1235 '/actions/refer':1933 '/actions/reject':1470 '/actions/send_sip_info':1964 '/actions/transfer':644 '/active_calls':1627 '/call_control_applications':1697,1845,1870,1893,1912 '/calls':396,532,640,1231,1332,1466,1558,1929,1960 '/connections':1624 '/webhooks':778 '1':110 '1000':118 '1293384261075731461':1660 '200':807 '400':818 '401':66,143 '403':147 '404':150 '41d4':613,1299,1587 '422':62,131,154 '429':59,160 '446655440000':615,1301,1589 '550e8400':610,1296,1584 '7267xxxxxxxxxxxxxx':81,504 '8601':876,989,1102 'a716':614,1300,1588 'action':1316,1450,1939,1970 'activ':1604,1708,1759 'ad':1284 'add':485,576,696,1259,1377,1505 'addit':333,1762,1850 'agent':384 'alreadi':42 'alway':67,759 'anchorsiteoverrid':1760 'answer':258,520,631,839 'api':26,50,125,145,896,1009,1122 'apikey':23 'app':441,902,1015,1128 'app.post':777 'applic':285,1683,1842,1867,1890,1909 'application/json':781 'applicationnam':1761,1861,1902 'array':1277 'assum':39 'async':387,782 'authent':64 'auto':195 'auto-pagin':194 'automat':210,1648,1733 'avail':1685 'avoid':1273,1391,1519 'await':77,111,200,500,607,727,788,1293,1422,1525,1581,1655,1740 'backoff':166 'bash':9 'beyond':361 'bill':472,563 'billinggroupid':462,553 'bodi':773,1985 'bridg':1309,1355,1407,1431,1997 'busi':1480,1532 'bye':1288 'call':51,213,235,249,255,276,280,290,380,389,439,460,477,523,527,533,552,568,627,641,673,687,729,838,887,894,900,911,922,941,951,1000,1007,1013,1024,1035,1054,1064,1113,1120,1126,1137,1217,1221,1232,1251,1310,1333,1346,1351,1369,1424,1427,1444,1467,1477,1484,1497,1527,1541,1559,1577,1605,1681,1840,1865,1888,1907,1926,1930,1961,1996 'call-control':388,526 'call.answered':856 'call.bridged':1995 'call.hangup':969 'call.initiated':1082 'callbridg':1994 'callcontrolappl':1742 'callcontrolapplication.data':1750 'callcontrolapplication.id':1746 'callcontrolapplication.meta':1752 'callcontrolid':541,662,1240,1341,1358,1486,1566,1674,1954,1986 'calldur':1675 'caller':426,1164 'calllegid':1676 'callsessionid':1677 'cannot':286 'catch':86,810 'caus':1475,1482,1530 'caveat':212 'check':95,135,157 'choos':1688 'clean':1917 'client':20,40 'client.callcontrolapplications.create':1843 'client.callcontrolapplications.delete':1910 'client.callcontrolapplications.list':1695,1744 'client.callcontrolapplications.retrieve':1868 'client.callcontrolapplications.update':1891 'client.calls.actions.answer':530,608 'client.calls.actions.bridge':1330,1423 'client.calls.actions.hangup':1229,1294 'client.calls.actions.refer':1927 'client.calls.actions.reject':1464,1526 'client.calls.actions.sendsipinfo':1958 'client.calls.actions.transfer':638,728 'client.calls.dial':78,394,501 'client.calls.retrievestatus':1556,1582 'client.connections.listactivecalls':1622,1659 'client.webhooks.unwrap':789 'clientstat':478,569,689,1252,1370,1498,1678 'close':1201 'code':72,142,183,327 'codec':1139,1147,1153,1161 'comma':1145,1159 'comma-separ':1144,1158 'command':229,265,529,892,1005,1118,1275,1393,1521 'commandid':1265,1383,1511 'common':140,628,1209 'complet':2006 'connect':79,96,282,502,906,1019,1132,1151,1608,1625,1637,1706 'connectio':446 'connectionid':431,1632 'connectionlistactivecallsrespons':1657 'connectionlistactivecallsresponse.call':1662 'connectionlistactivecallsresponse.data':1668 'connectionlistactivecallsresponse.meta':1670 'console.error':92,124,132,812 'console.log':509,617,734,801,1303,1436,1533,1591,1661,1745 'consolid':1642,1719,1727 'const':19,75,104,201,498,605,725,786,1291,1420,1523,1579,1656,1741 'contenttyp':1984 'control':214,236,277,390,440,528,534,550,632,642,671,730,884,895,901,997,1008,1014,1110,1121,1127,1227,1233,1249,1334,1347,1367,1425,1428,1468,1495,1528,1553,1560,1575,1619,1663,1682,1841,1866,1882,1889,1908,1931,1962 'control-flow':1552,1618,1881 'core':375,1197,1766,1854 'correl':928,948,1041,1061 'countri':182 'cover':1858 'creat':1323,1457,1704,1838,1846,1946,1977 'createdat':1757 'current':1545,1611,1874 'custom':1280 'customhead':1276 'dash':186 'data.event':853,966,1079,1991 'data.id':863,976,1089 'data.occurred':870,983,1096 'data.payload.call':883,912,931,996,1025,1044,1109 'data.payload.connection':897,1010,1123,1138 'data.payload.offered':1152 'data.record':843,956,1069 'date':873,986,1099 'date-tim':872,985,1098 'datetim':877,990,1103 'decis':1555,1621,1884 'deepobject':1645,1722,1730 'default':31 'delet':1549,1615,1878,1905,1911 'deliv':862,975,1088 'descript':400,540,648,842,955,1068,1239,1340,1474,1565,1631,1701,1993 'detach':1915 'dial':220,252,377,411,659 'differ':247 'downstream':635 'drive':287 'driven':218,1226 'duplic':1274,1392,1520 'e.164':174,403,416,651 'e.g':176,769 'e29b':612,1298,1586 'e29b-41d4-a716':611,1297,1585 'ed25519':746,753 'els':99,119 'enabl':1148 'end':1218 'endpoint':271,1833 'entrypoint':383 'enum':300,309,845,855,958,968,1071,1081,1476,1703 'err':87,89,101,121,811 'err.headers':106 'err.message':128,816 'err.status':127,130 'error':47,56,61,65,69,94,126,134,141,156 'ev':950,1063 'event':217,240,787,795,803,846,860,881,930,959,973,994,1043,1072,1086,1107,1989,1990 'event-driven':216 'event.data.event':804 'everi':488,579,699,1262,1380,1508 'exact':1777 'exampl':37,364 'exhaust':1999 'exist':1319,1453,1690,1897,1920,1942,1973 'exponenti':165 'express':770 'express.raw':779 'fail':53,815 'fetch':1543,1609,1649,1734,1872 'field':137,158,302,305,312,360,374,468,483,513,559,574,588,621,694,708,738,826,840,953,1066,1169,1185,1257,1271,1307,1375,1389,1440,1503,1517,1537,1595,1673,1755,1829 'filter':1716,1720 'first':1769 'flow':245,1204,1228,1554,1620,1860,1883 'follow':227,1213,1314,1448,1937,1968 'follow-up':226,1212,1313,1447,1936,1967 'format':139,159,175 'former':442,904,1017,1130 'found':153 'frequenc':1795 'full':1787,2002 'get':1557,1623,1696,1869 'given':1607 'group':473,564 'gru1ogrkyq':616,1302,1590 'guess':1827 'handl':48,68 'handler':232,768,1189 'hangup':952,1216 'header':758,791,1281 'id':80,237,427,436,443,474,503,535,565,643,731,885,888,898,903,907,914,916,933,935,998,1001,1011,1016,1020,1027,1029,1046,1048,1111,1114,1124,1129,1133,1234,1335,1348,1399,1426,1429,1469,1529,1561,1626,1638,1664,1756,1871,1885,1894,1904,1913,1922,1932,1963 'identifi':391,546,667,847,865,960,978,1073,1091,1245,1363,1491,1571 'iie4pqg':1435 'implic':637 'import':15,167,1190 'inbound':223,244,254,522,525 'includ':178,749 'incom':261 'index':1774 'info':1957 'initi':43,1065 'inlin':318,363,828,1174 'inspect':1684 'instal':8,11 'instanceof':90,102,122 'insuffici':148 'integ':448,675 'integr':836 'invalid':144,820 'invent':297 'iso':875,988,1101 'issu':225,891,1004,1117 'item':202,1667,1672,1749,1754 'iter':197,206 'javascript':4,7,14,73,497,604,724,764,1290,1419,1522,1578,1647,1732 'json':776 'key':27,146 'leg':913,1026 'level':1328,1462,1951,1982 'limit':58,162 'list':190,1142,1156,1173,1602,1680 'live':289,626,1220 'lower':1794 'lower-frequ':1793 'make':1551,1617,1880 'match':358 'may':281 'mdi91x4lwfes7igbbeot9m4aigoy08m0wwzfist1yw2axz':1434 'messag':1289 'method':191,1779,1832 'miss':1828 'modifi':1895 'must':171,256 'mutat':1693 'name':1707 'need':314,385,1167,1207,1653,1738 'network':55,93 'new':21,112,1325,1459,1948,1979 'note':168 'npm':10 'number':170,420,451,678 'object':1278,1640,1717,1725 'occur':882,995,1108 'offer':1162 'ok':809 'omit':35 'oper':211,331,334,1192,1763,1771,1801,1830 'option':338,343,492,599,719,1414,1788,1806,1811,2000 'optional-paramet':337,342,1805,1810 'order':1713 'outbound':242,248,379 'overrid':590,710 'page':209,1639,1643,1651,1724,1728,1736 'pagin':189,196,1669,1751 'param':493,600,720,1415,1782,1789,1837 'paramet':299,308,339,344,397,537,645,1236,1337,1471,1562,1628,1644,1698,1721,1729,1807,1812,2001 'parenthes':188 'pars':775,798 'part':832 'patch':1892 'path':633,837 'payload':241,368,373,800,825,1179,1184,1797,2008 'permiss':149 'phone':169 'post':395,531,630,639,1230,1331,1465,1844,1928,1959 'post-answ':629 'prefix':180 'present':428 'primari':381,511,524,619,736,835,1305,1438,1535,1593,1671,1753 'process.env':24 'product':71,763 'promis':113 'provis':1848 'public':268 'r':114,116 'rate':57,161 'rather':1321,1455,1944,1975 'raw':772 'reachabl':269 'read':322,335,356,365,1176,1803 'real':275 'receiv':802 'recordtyp':1679 'recreat':1900 'refer':292,369,1180,1924 'references/api-details.md':323,324,341,351,370,495,496,602,603,722,723,1181,1417,1418,1784,1785,1809,1819,2010,2011 'reject':1442,1478,1485 'remov':1914 'req':783 'req.body.tostring':790 'req.headers':792 'request':748 'requir':136,273,399,539,647,1238,1339,1473,1564,1630,1700,1781,1836 'res':784 'res.status':806,817 'resourc':151,852,869,965,982,1078,1095,1329,1463,1686,1691,1851,1898,1921,1952,1983 'respons':76,301,311,348,353,499,512,606,620,726,737,1292,1306,1421,1439,1524,1536,1580,1594,1665,1747,1790,1816,1821,2003 'response-schema':347,352,1815,1820 'response.data':510,618,735,1304,1437,1534,1592 'response.data.callcontrolid':514,1596 'response.data.callduration':519,1597 'response.data.calllegid':515,1598 'response.data.callsessionid':516,1599 'response.data.clientstate':1600 'response.data.endtime':1601 'response.data.isalive':517 'response.data.recordingid':518,623 'response.data.result':622,739,1308,1441,1538 'result':204,1715 'retri':98,108,163 'retriev':1539,1863 'retry-aft':107 'retryaft':105,117 'return':192,392 'room':1403 'rule':294 'run':266 'schema':349,354,1791,1817,1822,2004 'sdk':1778,1831 'second':453,680 'section':340,350,1808,1818 'see':2009 'sen':597,717 'send':808,819,1955 'separ':1146,1160 'session':932,942,1045,1055 'set':470,561 'settimeout':115 'setup':13 'shown':45,317 'sign':743 'signatur':752,761,793,821 'sip':408,656,1287,1923,1956 'sipaddress':1953 'skill':321 'skill-telnyx-voice-javascript' 'sort':1702,1712 'source-team-telnyx' 'space':185 'specifi':1710 'start':250 'state':291,486,577,697,1260,1378,1506,1546,1612,1875 'status':1542 'step':1215 'string':402,415,432,463,479,542,554,570,583,650,663,690,703,886,899,915,934,999,1012,1028,1047,1112,1125,1140,1154,1241,1253,1266,1342,1359,1371,1384,1395,1487,1499,1512,1567,1633 'style':1646,1723,1731 'subsequ':489,580,700,1263,1381,1509 'support':1191 'task':376,1198,1767,1855 'telnyx':2,5,12,16,18,22,25,298,455,595,682,715,742,751,756,905,1018,1131,1636 'telnyx-signature-ed25519':750 'telnyx-timestamp':755 'telnyx-voice-javascript':1 'telnyx.apiconnectionerror':91 'telnyx.apierror':123 'telnyx.ratelimiterror':103 'time':874,987,1100 'timeoutsec':447,674 'timestamp':757 'token':548,669,1247,1365,1493,1573 'top':1327,1461,1950,1981 'top-level':1326,1460,1949,1980 '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' 'transfer':624 'tri':74,785 'trigger':1311,1445,1934,1965 'type':398,538,646,780,805,841,844,849,854,858,867,954,957,962,967,971,980,1067,1070,1075,1080,1084,1093,1237,1338,1472,1563,1629,1699,1992 'u':1412 'uniqu':545,666,919,938,1032,1051,1244,1362,1490,1570 'updat':1548,1614,1877,1886 'updatedat':1758 'uri':409,657 'url':584,592,704,712 'use':198,233,293,329,423,466,481,557,572,586,692,706,771,889,908,926,946,1002,1021,1039,1059,1115,1134,1193,1255,1269,1373,1387,1501,1515,1764,1783,1799,1834 'user':1479,1531 'uuid':433,464,543,555,664,864,977,1090,1242,1267,1343,1360,1385,1396,1488,1513,1568,1634 'v3':609,1295,1433,1583 'valid':60,133,155,794 'variat':1210 'verif':741,814 'verifi':760 'via':893,1006,1119 'video':1402 'videoroomid':1394 'voic':3,6,382 'wait':457,684 'want':1353,1405 'webhook':224,231,262,270,304,359,367,372,490,581,636,701,740,744,767,799,813,822,824,929,949,1042,1062,1168,1178,1183,1225,1264,1382,1510,1796,1988,2007 'webhook-driven':1224 'webhook-payload-field':371,1182 'webhookeventurl':1862,1903 'webhookurl':582,702 'without':278,1899 'workflow':1320,1454,1943,1974 'wrapper':1666,1748 'write':326,1187 'yes':404,417,434,544,652,665,1243,1344,1361,1481,1489,1569,1635","prices":[{"id":"df3b697f-1602-4aa1-b941-3ed7a4f4278f","listingId":"68000374-a40c-49d9-9b60-3c09846d850e","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:30.412Z"}],"sources":[{"listingId":"68000374-a40c-49d9-9b60-3c09846d850e","source":"github","sourceId":"team-telnyx/ai/telnyx-voice-javascript","sourceUrl":"https://github.com/team-telnyx/ai/tree/main/skills/telnyx-voice-javascript","isPrimary":false,"firstSeenAt":"2026-04-18T22:08:30.412Z","lastSeenAt":"2026-04-22T00:54:53.293Z"}],"details":{"listingId":"68000374-a40c-49d9-9b60-3c09846d850e","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"team-telnyx","slug":"telnyx-voice-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":"fa72753171f51056cf3c535e281581d5c2028285","skill_md_path":"skills/telnyx-voice-javascript/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/team-telnyx/ai/tree/main/skills/telnyx-voice-javascript"},"layout":"multi","source":"github","category":"ai","frontmatter":{"name":"telnyx-voice-javascript","description":">-"},"skills_sh_url":"https://skills.sh/team-telnyx/ai/telnyx-voice-javascript"},"updatedAt":"2026-04-22T00:54:53.293Z"}}