{"id":"47aa7a53-7e95-4d57-bd45-7aaa3ec8c68a","shortId":"eesXpa","kind":"skill","title":"telnyx-voice-go","tagline":">-","description":"<!-- Auto-generated from Telnyx OpenAPI specs. Do not edit. -->\n\n# Telnyx Voice - Go\n\n## Installation\n\n```bash\ngo get github.com/team-telnyx/telnyx-go\n```\n\n## Setup\n\n```go\nimport (\n  \"context\"\n  \"fmt\"\n  \"os\"\n\n  \"github.com/team-telnyx/telnyx-go\"\n  \"github.com/team-telnyx/telnyx-go/option\"\n)\n\nclient := telnyx.NewClient(\n  option.WithAPIKey(os.Getenv(\"TELNYX_API_KEY\")),\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```go\nimport \"errors\"\n\nresponse, err := client.Calls.Dial(context.Background(), telnyx.CallDialParams{\n\t\tConnectionID: \"7267xxxxxxxxxxxxxx\",\n\t\tFrom:         \"+18005550101\",\n\t\tTo: telnyx.CallDialParamsToUnion{\n\t\t\tOfString: telnyx.String(\"+18005550100\"),\n\t\t},\n\t})\nif err != nil {\n  var apiErr *telnyx.Error\n  if errors.As(err, &apiErr) {\n    switch apiErr.StatusCode {\n    case 422:\n      fmt.Println(\"Validation error — check required fields and formats\")\n    case 429:\n      fmt.Println(\"Rate limited, retrying...\")\n    default:\n      fmt.Printf(\"API error %d: %s\\n\", apiErr.StatusCode, apiErr.Error())\n    }\n  } else {\n    fmt.Println(\"Network error — check connectivity and retry\")\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:** Use `ListAutoPaging()` for automatic iteration: `iter := client.Resource.ListAutoPaging(ctx, params); for iter.Next() { item := iter.Current() }`.\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```go\n\tresponse, err := client.Calls.Dial(context.Background(), telnyx.CallDialParams{\n\t\tConnectionID: \"7267xxxxxxxxxxxxxx\",\n\t\tFrom:         \"+18005550101\",\n\t\tTo: telnyx.CallDialParamsToUnion{\n\t\t\tOfString: telnyx.String(\"+18005550100\"),\n\t\t},\n\t})\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tfmt.Printf(\"%+v\\n\", 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```go\n\tresponse, err := client.Calls.Actions.Answer(\n\t\tcontext.Background(),\n\t\t\"call_control_id\",\n\t\ttelnyx.CallActionAnswerParams{},\n\t)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tfmt.Printf(\"%+v\\n\", 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```go\n\tresponse, err := client.Calls.Actions.Transfer(\n\t\tcontext.Background(),\n\t\t\"call_control_id\",\n\t\ttelnyx.CallActionTransferParams{\n\t\t\tTo: \"+18005550100\",\n\t\t},\n\t)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tfmt.Printf(\"%+v\\n\", 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```go\n// In your webhook handler:\nfunc handleWebhook(w http.ResponseWriter, r *http.Request) {\n  body, _ := io.ReadAll(r.Body)\n  event, err := client.Webhooks.Unwrap(body, r.Header)\n  if err != nil {\n    http.Error(w, \"Invalid signature\", http.StatusBadRequest)\n    return\n  }\n  // Signature valid — event is the parsed webhook payload\n  fmt.Println(\"Received event:\", event.Data.EventType)\n  w.WriteHeader(http.StatusOK)\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```go\n\tresponse, err := client.Calls.Actions.Hangup(\n\t\tcontext.Background(),\n\t\t\"call_control_id\",\n\t\ttelnyx.CallActionHangupParams{},\n\t)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tfmt.Printf(\"%+v\\n\", 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```go\n\tresponse, err := client.Calls.Actions.Bridge(\n\t\tcontext.Background(),\n\t\t\"call_control_id\",\n\t\ttelnyx.CallActionBridgeParams{\n\t\t\tCallControlIDToBridgeWith: \"v3:MdI91X4lWFEs7IgbBEOT9M4AigoY08M0WWZFISt1Yw2axZ_IiE4pqg\",\n\t\t},\n\t)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tfmt.Printf(\"%+v\\n\", 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```go\n\tresponse, err := client.Calls.Actions.Reject(\n\t\tcontext.Background(),\n\t\t\"call_control_id\",\n\t\ttelnyx.CallActionRejectParams{\n\t\t\tCause: telnyx.CallActionRejectParamsCauseUserBusy,\n\t\t},\n\t)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tfmt.Printf(\"%+v\\n\", 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.GetStatus()` — `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```go\n\tresponse, err := client.Calls.GetStatus(context.Background(), \"call_control_id\")\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tfmt.Printf(\"%+v\\n\", 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```go\n\tpage, err := client.Connections.ListActiveCalls(\n\t\tcontext.Background(),\n\t\t\"1293384261075731461\",\n\t\ttelnyx.ConnectionListActiveCallsParams{},\n\t)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tfmt.Printf(\"%+v\\n\", page)\n```\n\nResponse wrapper:\n- items: `page.data`\n- pagination: `page.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```go\n\tpage, err := client.CallControlApplications.List(context.Background(), telnyx.CallControlApplicationListParams{})\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tfmt.Printf(\"%+v\\n\", page)\n```\n\nResponse wrapper:\n- items: `page.data`\n- pagination: `page.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.New()` | `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.Get()` | `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","team-telnyx","agent-skills","ai-coding-agent","claude-code","cpaas","cursor","iot","llm","sdk","sip"],"capabilities":["skill","source-team-telnyx","skill-telnyx-voice-go","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-go","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 (18,063 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.963Z","embedding":null,"createdAt":"2026-04-18T22:08:28.857Z","updatedAt":"2026-04-22T00:54:52.963Z","lastSeenAt":"2026-04-22T00:54:52.963Z","tsv":"'+13125550001':170 '+16':1406 '+18005550100':87,496,732 '+18005550101':82,491 '+26':593 '+33':716 '+48':476 '/actions/answer':531 '/actions/bridge':1329 '/actions/hangup':1225 '/actions/refer':1936 '/actions/reject':1466 '/actions/send_sip_info':1967 '/actions/transfer':642 '/active_calls':1632 '/call_control_applications':1700,1848,1873,1896,1915 '/calls':381,527,638,1221,1325,1462,1561,1932,1963 '/connections':1629 '/team-telnyx/telnyx-go':14,23 '/team-telnyx/telnyx-go/option':26 '1293384261075731461':1657 '401':64,136 '403':140 '404':143 '422':60,101,147 '429':57,111,153 '7267xxxxxxxxxxxxxx':80,489 '8601':866,979,1092 'action':1309,1446,1942,1973 'activ':1609,1711,1762 'ad':1274 'add':470,571,694,1249,1370,1501 'addit':318,1765,1853 'agent':369 'alreadi':40 'alway':65,765 'anchorsiteoverrid':1763 'answer':243,515,629,829 'api':32,48,118,138,886,999,1112 'apierr':92,97 'apierr.error':124 'apierr.statuscode':99,123 'app':426,892,1005,1118 'applic':270,1686,1845,1870,1893,1912 'applicationnam':1764,1864,1905 'array':1267 'assum':37 'async':372 'authent':62 'automat':186 'avail':1688 'avoid':1263,1384,1515 'backoff':159 'bash':9 'beyond':346 'bill':457,558 'billinggroupid':447,548 'bodi':781,787,1988 'bridg':1302,1348,1400,2000 'busi':1476 'bye':1278 'call':49,198,220,234,240,261,265,275,365,374,424,445,462,518,522,528,547,563,604,625,639,671,685,727,828,877,884,890,901,912,931,941,990,997,1003,1014,1025,1044,1054,1103,1110,1116,1127,1207,1211,1222,1241,1285,1303,1326,1339,1344,1362,1417,1440,1463,1473,1480,1493,1523,1544,1562,1580,1586,1610,1684,1843,1868,1891,1910,1929,1933,1964,1999 'call-control':373,521 'call.answered':846 'call.bridged':1998 'call.hangup':959 'call.initiated':1072 'callbridg':1997 'callcontrolid':536,660,1230,1334,1351,1482,1569,1677,1957,1989 'callcontrolidtobridgewith':1421 'calldur':1678 'caller':411,1154 'calllegid':1679 'callsessionid':1680 'cannot':271 'case':100,110 'caus':1471,1478,1527 'caveat':197 'check':105,129,150 'choos':1691 'clean':1920 'client':27,38 'client.callcontrolapplications.delete':1913 'client.callcontrolapplications.get':1871 'client.callcontrolapplications.list':1698,1738 'client.callcontrolapplications.new':1846 'client.callcontrolapplications.update':1894 'client.calls.actions.answer':525,602 'client.calls.actions.bridge':1323,1415 'client.calls.actions.hangup':1219,1283 'client.calls.actions.refer':1930 'client.calls.actions.reject':1460,1521 'client.calls.actions.sendsipinfo':1961 'client.calls.actions.transfer':636,725 'client.calls.dial':76,379,485 'client.calls.getstatus':1559,1584 'client.connections.listactivecalls':1627,1655 'client.resource.listautopaging':189 'client.webhooks.unwrap':786 'clientstat':463,564,687,1242,1363,1494,1681 'close':1191 'code':70,135,176,312 'codec':1129,1137,1143,1151 'comma':1135,1149 'comma-separ':1134,1148 'command':214,250,524,882,995,1108,1265,1386,1517 'commandid':1255,1376,1507 'common':133,626,1199 'complet':2009 'connect':130,267,896,1009,1122,1141,1613,1630,1642,1709 'connectio':431 'connectionid':79,416,488,1637 'consolid':1647,1722,1730 'contenttyp':1987 'context':18 'context.background':77,486,603,726,1284,1416,1522,1585,1656,1739 'control':199,221,262,375,425,523,529,545,605,630,640,669,728,874,885,891,987,998,1004,1100,1111,1117,1217,1223,1239,1286,1327,1340,1360,1418,1464,1491,1524,1556,1563,1578,1587,1624,1685,1844,1869,1885,1892,1911,1934,1965 'control-flow':1555,1623,1884 'core':360,1187,1769,1857 'correl':918,938,1031,1051 'countri':175 'cover':1861 'creat':1316,1453,1707,1841,1849,1949,1980 'createdat':1760 'ctx':190 'current':1548,1616,1877 'custom':1270 'customhead':1266 'd':120 'dash':179 'data.event':843,956,1069,1994 'data.id':853,966,1079 'data.occurred':860,973,1086 'data.payload.call':873,902,921,986,1015,1034,1099 'data.payload.connection':887,1000,1113,1128 'data.payload.offered':1142 'data.record':833,946,1059 'date':863,976,1089 'date-tim':862,975,1088 'datetim':867,980,1093 'decis':1558,1626,1887 'deepobject':1650,1725,1733 'default':116 'delet':1552,1620,1881,1908,1914 'deliv':852,965,1078 'descript':385,535,646,832,945,1058,1229,1333,1470,1568,1636,1704,1996 'detach':1918 'dial':205,237,362,396,657 'differ':232 'downstream':633 'drive':272 'driven':203,1216 'duplic':1264,1385,1516 'e.164':167,388,401,649 'e.g':169 'ed25519':752,759 'els':125 'enabl':1138 'end':1208 'endpoint':256,1836 'entrypoint':368 'enum':285,294,835,845,948,958,1061,1071,1472,1706 'err':75,89,96,484,498,501,601,609,612,724,734,737,785,790,1282,1290,1293,1414,1426,1429,1520,1530,1533,1583,1590,1593,1654,1660,1663,1737,1742,1745 'error':45,54,59,63,67,73,104,119,128,134,149 'errors.as':95 'ev':940,1053 'event':202,225,784,800,808,836,850,871,920,949,963,984,1033,1062,1076,1097,1992,1993 'event-driven':201 'event.data.eventtype':809 'everi':473,574,697,1252,1373,1504 'exact':1780 'exampl':35,349 'exhaust':2002 'exist':1312,1449,1693,1900,1923,1945,1976 'exponenti':158 'fail':51 'fetch':1546,1614,1875 'field':107,151,287,290,297,345,359,453,468,508,554,569,583,619,692,706,744,816,830,943,1056,1159,1175,1247,1261,1300,1368,1382,1436,1499,1513,1540,1600,1676,1758,1832 'filter':1719,1723 'first':1772 'flow':230,1194,1218,1557,1625,1863,1886 'fmt':19 'fmt.printf':117,502,613,738,1294,1430,1534,1594,1664,1746 'fmt.println':102,112,126,806 'follow':212,1203,1307,1444,1940,1971 'follow-up':211,1202,1306,1443,1939,1970 'format':109,152,168 'former':427,894,1007,1120 'found':146 'frequenc':1798 'full':1790,2005 'func':775 'get':11,1560,1628,1699,1872 'github.com':13,22,25 'github.com/team-telnyx/telnyx-go':12,21 'github.com/team-telnyx/telnyx-go/option':24 'given':1612 'go':4,7,10,16,71,482,599,722,770,1280,1412,1518,1581,1652,1735 'group':458,559 'guess':1830 'handl':46,66 'handler':217,774,1179 'handlewebhook':776 'hangup':942,1206 'header':764,1271 'http.error':792 'http.request':780 'http.responsewriter':778 'http.statusbadrequest':796 'http.statusok':811 'id':222,412,421,428,459,530,560,606,641,729,875,878,888,893,897,904,906,923,925,988,991,1001,1006,1010,1017,1019,1036,1038,1101,1104,1114,1119,1123,1224,1287,1328,1341,1392,1419,1465,1525,1564,1588,1631,1643,1759,1874,1888,1897,1907,1916,1925,1935,1966 'identifi':376,541,665,837,855,950,968,1063,1081,1235,1356,1487,1574 'iie4pqg':1424 'implic':635 'import':17,72,160,1180 'inbound':208,229,239,517,520 'includ':171,755 'incom':246 'index':1777 'info':1960 'initi':41,1055 'inlin':303,348,818,1164 'inspect':1687 'instal':8 'insuffici':141 'integ':433,673 'integr':826 'invalid':137,794 'invent':282 'io.readall':782 'iso':865,978,1091 'issu':210,881,994,1107 'item':194,1670,1675,1752,1757 'iter':187,188 'iter.current':195 'iter.next':193 'key':33,139 'leg':903,1016 'level':1321,1458,1954,1985 'limit':56,114,155 'list':1132,1146,1163,1607,1683 'listautopag':184 'live':274,624,1210 'log.fatal':500,611,736,1292,1428,1532,1592,1662,1744 'lower':1797 'lower-frequ':1796 'make':1554,1622,1883 'match':343 'may':266 'mdi91x4lwfes7igbbeot9m4aigoy08m0wwzfist1yw2axz':1423 'messag':1279 'method':1782,1835 'miss':1831 'modifi':1898 'must':164,241 'mutat':1696 'n':122,504,615,740,1296,1432,1536,1596,1666,1748 'name':1710 'need':299,370,1157,1197 'network':53,127 'new':1318,1455,1951,1982 'nil':90,499,610,735,791,1291,1427,1531,1591,1661,1743 'note':161 'number':163,405,436,676 'object':1268,1645,1720,1728 'occur':872,985,1098 'offer':1152 'ofstr':85,494 'oper':196,316,319,1182,1766,1774,1804,1833 'option':323,328,477,594,717,1407,1791,1809,1814,2003 'option.withapikey':29 'optional-paramet':322,327,1808,1813 'order':1716 'os':20 'os.getenv':30 'outbound':227,233,364 'overrid':585,708 'page':1644,1648,1653,1667,1727,1731,1736,1749 'page.data':1671,1753 'page.meta':1673,1755 'pagin':182,1672,1754 'param':191,478,595,718,1408,1785,1792,1840 'paramet':284,293,324,329,382,532,643,1226,1330,1467,1565,1633,1649,1701,1724,1732,1810,1815,2004 'parenthes':181 'pars':803 'part':822 'patch':1895 'path':631,827 'payload':226,353,358,805,815,1169,1174,1800,2011 'permiss':142 'phone':162 'post':380,526,628,637,1220,1324,1461,1847,1931,1962 'post-answ':627 'prefix':173 'present':413 'primari':366,506,519,617,742,825,1298,1434,1538,1598,1674,1756 'product':69,769 'provis':1851 'public':253 'r':779 'r.body':783 'r.header':788 'rate':55,113,154 'rather':1314,1451,1947,1978 'reachabl':254 'read':307,320,341,350,1166,1806 'real':260 'receiv':807 'recordtyp':1682 'recreat':1903 'refer':277,354,1170,1927 'references/api-details.md':308,309,326,336,355,480,481,597,598,720,721,1171,1410,1411,1787,1788,1812,1822,2013,2014 'reject':1438,1474,1481 'remov':1917 'request':754 'requir':106,258,384,534,645,1228,1332,1469,1567,1635,1703,1784,1839 'resourc':144,842,859,955,972,1068,1085,1322,1459,1689,1694,1854,1901,1924,1955,1986 'respons':74,286,296,333,338,483,507,600,618,723,743,1281,1299,1413,1435,1519,1539,1582,1599,1668,1750,1793,1819,1824,2006 'response-schema':332,337,1818,1823 'response.data':505,616,741,1297,1433,1537,1597 'response.data.callcontrolid':509,1601 'response.data.callduration':514,1602 'response.data.calllegid':510,1603 'response.data.callsessionid':511,1604 'response.data.clientstate':1605 'response.data.endtime':1606 'response.data.isalive':512 'response.data.recordingid':513,621 'response.data.result':620,745,1301,1437,1541 'result':1718 'retri':115,132,156 'retriev':1542,1866 'return':377,797 'room':1396 'rule':279 'run':251 'schema':334,339,1794,1820,1825,2007 'sdk':1781,1834 'second':438,678 'section':325,335,1811,1821 'see':2012 'sen':592,715 'send':1958 'separ':1136,1150 'session':922,932,1035,1045 'set':455,556 'setup':15 'shown':43,302 'sign':749 'signatur':758,767,795,798 'sip':393,654,1277,1926,1959 'sipaddress':1956 'skill':306 'skill-telnyx-voice-go' 'sort':1705,1715 'source-team-telnyx' 'space':178 'specifi':1713 'start':235 'state':276,471,572,695,1250,1371,1502,1549,1617,1878 'status':1545 'step':1205 'string':387,400,417,448,464,537,549,565,578,648,661,688,701,876,889,905,924,989,1002,1018,1037,1102,1115,1130,1144,1231,1243,1256,1335,1352,1364,1377,1388,1483,1495,1508,1570,1638 'style':1651,1726,1734 'subsequ':474,575,698,1253,1374,1505 'support':1181 'switch':98 'task':361,1188,1770,1858 'telnyx':2,5,31,283,440,590,680,713,748,757,762,895,1008,1121,1641 'telnyx-signature-ed25519':756 'telnyx-timestamp':761 'telnyx-voice-go':1 'telnyx.callactionanswerparams':607 'telnyx.callactionbridgeparams':1420 'telnyx.callactionhangupparams':1288 'telnyx.callactionrejectparams':1526 'telnyx.callactionrejectparamscauseuserbusy':1528 'telnyx.callactiontransferparams':730 'telnyx.callcontrolapplicationlistparams':1740 'telnyx.calldialparams':78,487 'telnyx.calldialparamstounion':84,493 'telnyx.connectionlistactivecallsparams':1658 'telnyx.error':93 'telnyx.newclient':28 'telnyx.string':86,495 'time':864,977,1090 'timeoutsec':432,672 'timestamp':763 'token':543,667,1237,1358,1489,1576 'top':1320,1457,1953,1984 'top-level':1319,1456,1952,1983 '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':622 'trigger':1304,1441,1937,1968 'type':383,533,644,831,834,839,844,848,857,944,947,952,957,961,970,1057,1060,1065,1070,1074,1083,1227,1331,1468,1566,1634,1702,1995 'u':1405 'uniqu':540,664,909,928,1022,1041,1234,1355,1486,1573 'updat':1551,1619,1880,1889 'updatedat':1761 'uri':394,655 'url':579,587,702,710 'use':183,218,278,314,408,451,466,552,567,581,690,704,879,898,916,936,992,1011,1029,1049,1105,1124,1183,1245,1259,1366,1380,1497,1511,1767,1786,1802,1837 'user':1475 'uuid':418,449,538,550,662,854,967,1080,1232,1257,1336,1353,1378,1389,1484,1509,1571,1639 'v':503,614,739,1295,1431,1535,1595,1665,1747 'v3':1422 'valid':58,103,148,799 'var':91 'variat':1200 'verif':747 'verifi':766 'via':883,996,1109 'video':1395 'videoroomid':1387 'voic':3,6,367 'w':777,793 'w.writeheader':810 'wait':442,682 'want':1346,1398 'webhook':209,216,247,255,289,344,352,357,475,576,634,699,746,750,773,804,812,814,919,939,1032,1052,1158,1168,1173,1215,1254,1375,1506,1799,1991,2010 'webhook-driven':1214 'webhook-payload-field':356,1172 'webhookeventurl':1865,1906 'webhookurl':577,700 'without':263,1902 'workflow':1313,1450,1946,1977 'wrapper':1669,1751 'write':311,1177 'yes':389,402,419,539,650,663,1233,1337,1354,1477,1485,1572,1640","prices":[{"id":"7cc6a57f-c6fa-4170-82f3-a43799b22474","listingId":"47aa7a53-7e95-4d57-bd45-7aaa3ec8c68a","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.857Z"}],"sources":[{"listingId":"47aa7a53-7e95-4d57-bd45-7aaa3ec8c68a","source":"github","sourceId":"team-telnyx/ai/telnyx-voice-go","sourceUrl":"https://github.com/team-telnyx/ai/tree/main/skills/telnyx-voice-go","isPrimary":false,"firstSeenAt":"2026-04-18T22:08:28.857Z","lastSeenAt":"2026-04-22T00:54:52.963Z"}],"details":{"listingId":"47aa7a53-7e95-4d57-bd45-7aaa3ec8c68a","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"team-telnyx","slug":"telnyx-voice-go","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":"50bd08732d5d9d0113395db69cc7d654a9b897d7","skill_md_path":"skills/telnyx-voice-go/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/team-telnyx/ai/tree/main/skills/telnyx-voice-go"},"layout":"multi","source":"github","category":"ai","frontmatter":{"name":"telnyx-voice-go","description":">-"},"skills_sh_url":"https://skills.sh/team-telnyx/ai/telnyx-voice-go"},"updatedAt":"2026-04-22T00:54:52.963Z"}}