{"id":"71a60a30-b492-4241-9cea-7e85dc32f1c7","shortId":"mZJfPH","kind":"skill","title":"telnyx-webrtc-ruby","tagline":">-","description":"<!-- Auto-generated from Telnyx OpenAPI specs. Do not edit. -->\n\n# Telnyx Webrtc - Ruby\n\n## Installation\n\n```bash\ngem install telnyx\n```\n\n## Setup\n\n```ruby\nrequire \"telnyx\"\n\nclient = Telnyx::Client.new(\n  api_key: ENV[\"TELNYX_API_KEY\"], # This is the default and can be omitted\n)\n```\n\nAll examples below assume `client` is already initialized as shown above.\n\n## Error Handling\n\nAll API calls can fail with network errors, rate limits (429), validation errors (422),\nor authentication errors (401). Always handle errors in production code:\n\n```ruby\nbegin\n  result = client.messages.send_(to: \"+13125550001\", from: \"+13125550002\", text: \"Hello\")\nrescue Telnyx::Errors::APIConnectionError\n  puts \"Network error — check connectivity and retry\"\nrescue Telnyx::Errors::RateLimitError\n  # 429: rate limited — wait and retry with exponential backoff\n  sleep(1) # Check Retry-After header for actual delay\nrescue Telnyx::Errors::APIStatusError => e\n  puts \"API error #{e.status}: #{e.message}\"\n  if e.status == 422\n    puts \"Validation error — check required fields and formats\"\n  end\nend\n```\n\nCommon error codes: `401` invalid API key, `403` insufficient permissions,\n`404` resource not found, `422` validation error (check field formats),\n`429` rate limited (retry with exponential backoff).\n\n## Important Notes\n\n- **Pagination:** Use `.auto_paging_each` for automatic iteration: `page.auto_paging_each { |item| puts item.id }`.\n\n## List mobile push credentials\n\n`GET /mobile_push_credentials`\n\n```ruby\npage = client.mobile_push_credentials.list\n\nputs(page)\n```\n\nReturns: `alias` (string), `certificate` (string), `created_at` (date-time), `id` (string), `private_key` (string), `project_account_json_file` (object), `record_type` (string), `type` (string), `updated_at` (date-time)\n\n## Creates a new mobile push credential\n\n`POST /mobile_push_credentials` — Required: `type`, `certificate`, `private_key`, `alias`\n\n```ruby\npush_credential_response = client.mobile_push_credentials.create(\n  create_mobile_push_credential_request: {\n    alias: \"LucyIosCredential\",\n    certificate: \"-----BEGIN CERTIFICATE----- MIIGVDCCBTKCAQEAsNlRJVZn9ZvXcECQm65czs... -----END CERTIFICATE-----\",\n    private_key: \"-----BEGIN RSA PRIVATE KEY----- MIIEpQIBAAKCAQEAsNlRJVZn9ZvXcECQm65czs... -----END RSA PRIVATE KEY-----\",\n    type: :ios\n  }\n)\n\nputs(push_credential_response)\n```\n\nReturns: `alias` (string), `certificate` (string), `created_at` (date-time), `id` (string), `private_key` (string), `project_account_json_file` (object), `record_type` (string), `type` (string), `updated_at` (date-time)\n\n## Retrieves a mobile push credential\n\nRetrieves mobile push credential based on the given `push_credential_id`\n\n`GET /mobile_push_credentials/{push_credential_id}`\n\n```ruby\npush_credential_response = client.mobile_push_credentials.retrieve(\"0ccc7b76-4df3-4bca-a05a-3da1ecc389f0\")\n\nputs(push_credential_response)\n```\n\nReturns: `alias` (string), `certificate` (string), `created_at` (date-time), `id` (string), `private_key` (string), `project_account_json_file` (object), `record_type` (string), `type` (string), `updated_at` (date-time)\n\n## Deletes a mobile push credential\n\nDeletes a mobile push credential based on the given `push_credential_id`\n\n`DELETE /mobile_push_credentials/{push_credential_id}`\n\n```ruby\nresult = client.mobile_push_credentials.delete(\"0ccc7b76-4df3-4bca-a05a-3da1ecc389f0\")\n\nputs(result)\n```\n\n## List all credentials\n\nList all On-demand Credentials.\n\n`GET /telephony_credentials`\n\n```ruby\npage = client.telephony_credentials.list\n\nputs(page)\n```\n\nReturns: `created_at` (string), `expired` (boolean), `expires_at` (string), `id` (string), `name` (string), `record_type` (string), `resource_id` (string), `sip_password` (string), `sip_username` (string), `updated_at` (string), `user_id` (string)\n\n## Create a credential\n\nCreate a credential.\n\n`POST /telephony_credentials` — Required: `connection_id`\n\nOptional: `expires_at` (string), `name` (string), `tag` (string)\n\n```ruby\ntelephony_credential = client.telephony_credentials.create(connection_id: \"1234567890\")\n\nputs(telephony_credential)\n```\n\nReturns: `created_at` (string), `expired` (boolean), `expires_at` (string), `id` (string), `name` (string), `record_type` (string), `resource_id` (string), `sip_password` (string), `sip_username` (string), `updated_at` (string), `user_id` (string)\n\n## Get a credential\n\nGet the details of an existing On-demand Credential.\n\n`GET /telephony_credentials/{id}`\n\n```ruby\ntelephony_credential = client.telephony_credentials.retrieve(\"550e8400-e29b-41d4-a716-446655440000\")\n\nputs(telephony_credential)\n```\n\nReturns: `created_at` (string), `expired` (boolean), `expires_at` (string), `id` (string), `name` (string), `record_type` (string), `resource_id` (string), `sip_password` (string), `sip_username` (string), `updated_at` (string), `user_id` (string)\n\n## Update a credential\n\nUpdate an existing credential.\n\n`PATCH /telephony_credentials/{id}`\n\nOptional: `connection_id` (string), `expires_at` (string), `name` (string), `tag` (string)\n\n```ruby\ntelephony_credential = client.telephony_credentials.update(\"550e8400-e29b-41d4-a716-446655440000\")\n\nputs(telephony_credential)\n```\n\nReturns: `created_at` (string), `expired` (boolean), `expires_at` (string), `id` (string), `name` (string), `record_type` (string), `resource_id` (string), `sip_password` (string), `sip_username` (string), `updated_at` (string), `user_id` (string)\n\n## Delete a credential\n\nDelete an existing credential.\n\n`DELETE /telephony_credentials/{id}`\n\n```ruby\ntelephony_credential = client.telephony_credentials.delete(\"550e8400-e29b-41d4-a716-446655440000\")\n\nputs(telephony_credential)\n```\n\nReturns: `created_at` (string), `expired` (boolean), `expires_at` (string), `id` (string), `name` (string), `record_type` (string), `resource_id` (string), `sip_password` (string), `sip_username` (string), `updated_at` (string), `user_id` (string)","tags":["telnyx","webrtc","ruby","team-telnyx","agent-skills","ai-coding-agent","claude-code","cpaas","cursor","iot","llm","sdk"],"capabilities":["skill","source-team-telnyx","skill-telnyx-webrtc-ruby","topic-agent-skills","topic-ai-coding-agent","topic-claude-code","topic-cpaas","topic-cursor","topic-iot","topic-llm","topic-sdk","topic-sip","topic-sms","topic-speech-to-text","topic-telephony"],"categories":["ai"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/team-telnyx/ai/telnyx-webrtc-ruby","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add team-telnyx/ai","source_repo":"https://github.com/team-telnyx/ai","install_from":"skills.sh"}},"qualityScore":"0.533","qualityRationale":"deterministic score 0.53 from registry signals: · indexed on github topic:agent-skills · 167 github stars · SKILL.md body (5,906 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:56.333Z","embedding":null,"createdAt":"2026-04-18T22:08:50.243Z","updatedAt":"2026-04-22T00:54:56.333Z","lastSeenAt":"2026-04-22T00:54:56.333Z","tsv":"'+13125550001':76 '+13125550002':78 '/mobile_push_credentials':186,229,318,385 '/telephony_credentials':410,454,521,575,640 '0ccc7b76':328,393 '0ccc7b76-4df3-4bca-a05a-3da1ecc389f0':327,392 '1':106 '1234567890':472 '3da1ecc389f0':332,397 '401':64,141 '403':145 '404':148 '41d4':530,595,649 '422':60,127,152 '429':57,96,158 '446655440000':532,597,651 '4bca':330,395 '4df3':329,394 '550e8400':527,592,646 'a05a':331,396 'a716':531,596,650 'account':208,287,353 'actual':113 'alia':193,235,246,272,338 'alreadi':40 'alway':65 'api':20,24,48,121,143 'apiconnectionerror':84 'apistatuserror':118 'assum':37 'authent':62 'auto':169 'automat':173 'backoff':104,164 'base':310,377 'bash':9 'begin':72,249,256 'boolean':421,481,541,606,660 'call':49 'certif':195,232,248,250,253,274,340 'check':88,107,131,155 'client':17,38 'client.messages.send':74 'client.mobile_push_credentials.create':240 'client.mobile_push_credentials.delete':391 'client.mobile_push_credentials.list':189 'client.mobile_push_credentials.retrieve':326 'client.new':19 'client.telephony_credentials.create':469 'client.telephony_credentials.delete':645 'client.telephony_credentials.list':413 'client.telephony_credentials.retrieve':526 'client.telephony_credentials.update':591 'code':70,140 'common':138 'connect':89,456,470,578 'creat':197,222,241,276,342,417,447,450,477,537,602,656 'credenti':184,227,238,244,269,305,309,315,320,324,335,371,376,382,387,402,408,449,452,468,475,509,519,525,535,569,573,590,600,634,638,644,654 'date':200,220,279,299,345,365 'date-tim':199,219,278,298,344,364 'default':29 'delay':114 'delet':367,372,384,632,635,639 'demand':407,518 'detail':512 'e':119 'e.message':124 'e.status':123,126 'e29b':529,594,648 'e29b-41d4-a716':528,593,647 'end':136,137,252,261 'env':22 'error':45,54,59,63,67,83,87,94,117,122,130,139,154 'exampl':35 'exist':515,572,637 'expir':420,422,459,480,482,540,542,581,605,607,659,661 'exponenti':103,163 'fail':51 'field':133,156 'file':210,289,355 'format':135,157 'found':151 'gem':10 'get':185,317,409,507,510,520 'given':313,380 'handl':46,66 'header':111 'hello':80 'id':202,281,316,321,347,383,388,425,433,445,457,471,485,493,505,522,545,553,565,576,579,610,618,630,641,664,672,684 'import':165 'initi':41 'instal':8,11 'insuffici':146 'invalid':142 'io':266 'item':178 'item.id':180 'iter':174 'json':209,288,354 'key':21,25,144,205,234,255,259,264,284,350 'limit':56,98,160 'list':181,400,403 'lucyioscredenti':247 'miiepqibaakcaqeasnlrjvzn9zvxcecqm65czs':260 'miigvdccbtkcaqeasnlrjvzn9zvxcecqm65czs':251 'mobil':182,225,242,303,307,369,374 'name':427,462,487,547,584,612,666 'network':53,86 'new':224 'note':166 'object':211,290,356 'omit':33 'on-demand':405,516 'option':458,577 'page':170,176,188,191,412,415 'page.auto':175 'pagin':167 'password':436,496,556,621,675 'patch':574 'permiss':147 'post':228,453 'privat':204,233,254,258,263,283,349 'product':69 'project':207,286,352 'push':183,226,237,243,268,304,308,314,319,323,334,370,375,381,386 'put':85,120,128,179,190,267,333,398,414,473,533,598,652 'rate':55,97,159 'ratelimiterror':95 'record':212,291,357,429,489,549,614,668 'request':245 'requir':15,132,230,455 'rescu':81,92,115 'resourc':149,432,492,552,617,671 'respons':239,270,325,336 'result':73,390,399 'retri':91,101,109,161 'retriev':301,306 'retry-aft':108 'return':192,271,337,416,476,536,601,655 'rsa':257,262 'rubi':4,7,14,71,187,236,322,389,411,466,523,588,642 'setup':13 'shown':43 'sip':435,438,495,498,555,558,620,623,674,677 'skill' 'skill-telnyx-webrtc-ruby' 'sleep':105 'source-team-telnyx' 'string':194,196,203,206,214,216,273,275,282,285,293,295,339,341,348,351,359,361,419,424,426,428,431,434,437,440,443,446,461,463,465,479,484,486,488,491,494,497,500,503,506,539,544,546,548,551,554,557,560,563,566,580,583,585,587,604,609,611,613,616,619,622,625,628,631,658,663,665,667,670,673,676,679,682,685 'tag':464,586 'telephoni':467,474,524,534,589,599,643,653 'telnyx':2,5,12,16,18,23,82,93,116 'telnyx-webrtc-rubi':1 'text':79 'time':201,221,280,300,346,366 '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' 'type':213,215,231,265,292,294,358,360,430,490,550,615,669 'updat':217,296,362,441,501,561,567,570,626,680 'use':168 'user':444,504,564,629,683 'usernam':439,499,559,624,678 'valid':58,129,153 'wait':99 'webrtc':3,6","prices":[{"id":"29cbdcf7-a4a6-4d3c-82e6-23d341ba1b43","listingId":"71a60a30-b492-4241-9cea-7e85dc32f1c7","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:50.243Z"}],"sources":[{"listingId":"71a60a30-b492-4241-9cea-7e85dc32f1c7","source":"github","sourceId":"team-telnyx/ai/telnyx-webrtc-ruby","sourceUrl":"https://github.com/team-telnyx/ai/tree/main/skills/telnyx-webrtc-ruby","isPrimary":false,"firstSeenAt":"2026-04-18T22:08:50.243Z","lastSeenAt":"2026-04-22T00:54:56.333Z"}],"details":{"listingId":"71a60a30-b492-4241-9cea-7e85dc32f1c7","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"team-telnyx","slug":"telnyx-webrtc-ruby","github":{"repo":"team-telnyx/ai","stars":167,"topics":["agent-skills","ai","ai-coding-agent","claude-code","cpaas","cursor","iot","llm","sdk","sip","sms","speech-to-text","telephony","telnyx","tts","twilio-migration","voice-agents","voice-ai","webrtc","windsurf"],"license":"mit","html_url":"https://github.com/team-telnyx/ai","pushed_at":"2026-04-21T22:09:49Z","description":"Official one-stop shop for AI Agents and developers building with Telnyx.","skill_md_sha":"6d600a56b663136dd4cdfe2a6812d98974a32793","skill_md_path":"skills/telnyx-webrtc-ruby/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/team-telnyx/ai/tree/main/skills/telnyx-webrtc-ruby"},"layout":"multi","source":"github","category":"ai","frontmatter":{"name":"telnyx-webrtc-ruby","description":">-"},"skills_sh_url":"https://skills.sh/team-telnyx/ai/telnyx-webrtc-ruby"},"updatedAt":"2026-04-22T00:54:56.333Z"}}