{"id":"d53b412b-358d-4ae5-a2e7-a3d12dc86d81","shortId":"HGULvT","kind":"skill","title":"telnyx-messaging-ruby","tagline":">-","description":"<!-- Auto-generated from Telnyx OpenAPI specs. Do not edit. -->\n\n# Telnyx Messaging - 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\nresponse = client.messages.send_(to: \"+18445550001\", from: \"+18005550101\", text: \"Hello from Telnyx!\")\nputs(response)\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 `.auto_paging_each` for automatic iteration: `page.auto_paging_each { |item| puts item.id }`.\n\n## Operational Caveats\n\n- The sending number must already be assigned to the correct messaging profile before you send traffic from it.\n- US A2P long-code traffic must complete 10DLC registration before production sending or carriers will block or heavily filter messages.\n- Delivery webhooks are asynchronous. Treat the send response as acceptance of the request, not final carrier delivery.\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### Send an SMS\n\nPrimary outbound messaging flow. Agents need exact request fields and delivery-related response fields.\n\n`client.messages.send_()` — `POST /messages`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `to` | string (E.164) | Yes | Receiving address (+E.164 formatted phone number or short co... |\n| `from` | string (E.164) | Yes | Sending address (+E.164 formatted phone number, alphanumeric... |\n| `text` | string | Yes | Message body (i.e., content) as a non-empty string. |\n| `messaging_profile_id` | string (UUID) | No | Unique identifier for a messaging profile. |\n| `media_urls` | array[string] | No | A list of media URLs. |\n| `webhook_url` | string (URL) | No | The URL where webhooks related to this message will be sent. |\n| ... | | | +7 optional params in [references/api-details.md](references/api-details.md) |\n\n```ruby\nresponse = client.messages.send_(to: \"+18445550001\", from: \"+18005550101\", text: \"Hello from Telnyx!\")\nputs(response)\n```\n\nPrimary response fields:\n- `response.data.id`\n- `response.data.to`\n- `response.data.from`\n- `response.data.text`\n- `response.data.sent_at`\n- `response.data.errors`\n\n### Send an SMS with an alphanumeric sender ID\n\nCommon sender variant that requires different request shape.\n\n`client.messages.send_with_alphanumeric_sender()` — `POST /messages/alphanumeric_sender_id`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `from` | string (E.164) | Yes | A valid alphanumeric sender ID on the user's account. |\n| `to` | string (E.164) | Yes | Receiving address (+E.164 formatted phone number or short co... |\n| `text` | string | Yes | The message body. |\n| `messaging_profile_id` | string (UUID) | Yes | The messaging profile ID to use. |\n| `webhook_url` | string (URL) | No | Callback URL for delivery status updates. |\n| `webhook_failover_url` | string (URL) | No | Failover callback URL for delivery status updates. |\n| `use_profile_webhooks` | boolean | No | If true, use the messaging profile's webhook settings. |\n\n```ruby\nresponse = client.messages.send_with_alphanumeric_sender(\n  from: \"MyCompany\",\n  messaging_profile_id: \"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e\",\n  text: \"Hello from Telnyx!\",\n  to: \"+13125550001\"\n)\n\nputs(response)\n```\n\nPrimary response fields:\n- `response.data.id`\n- `response.data.to`\n- `response.data.from`\n- `response.data.text`\n- `response.data.sent_at`\n- `response.data.errors`\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```ruby\n# In your webhook handler (e.g., Sinatra — use raw body):\npost \"/webhooks\" do\n  payload = request.body.read\n  headers = {\n    \"telnyx-signature-ed25519\" => request.env[\"HTTP_TELNYX_SIGNATURE_ED25519\"],\n    \"telnyx-timestamp\" => request.env[\"HTTP_TELNYX_TIMESTAMP\"],\n  }\n  begin\n    event = client.webhooks.unwrap(payload, headers)\n  rescue => e\n    halt 400, \"Invalid signature: #{e.message}\"\n  end\n  # Signature valid — event is the parsed webhook payload\n  puts \"Received event: #{event.data.event_type}\"\n  status 200\nend\n```\n\n## Webhooks\n\nThese webhook payload fields are inline because they are part of the primary integration path.\n\n### Delivery Update\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `data.event_type` | enum: message.sent, message.finalized | The type of event being delivered. |\n| `data.payload.id` | uuid | Identifies the type of resource. |\n| `data.payload.to` | array[object] |  |\n| `data.payload.text` | string | Message body (i.e., content) as a non-empty string. |\n| `data.payload.sent_at` | date-time | ISO 8601 formatted date indicating when the message was sent. |\n| `data.payload.completed_at` | date-time | ISO 8601 formatted date indicating when the message was finalized. |\n| `data.payload.cost` | object \\| null |  |\n| `data.payload.errors` | array[object] | These errors may point at addressees when referring to unsuccessful/unconfirm... |\n\n### Inbound Message\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `data.event_type` | enum: message.received | The type of event being delivered. |\n| `data.payload.id` | uuid | Identifies the type of resource. |\n| `data.payload.direction` | enum: inbound | The direction of the message. |\n| `data.payload.to` | array[object] |  |\n| `data.payload.text` | string | Message body (i.e., content) as a non-empty string. |\n| `data.payload.type` | enum: SMS, MMS | The type of message. |\n| `data.payload.media` | array[object] |  |\n| `data.record_type` | enum: event | Identifies the type of the resource. |\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### Send a group MMS message\n\nSend one MMS payload to multiple recipients.\n\n`client.messages.send_group_mms()` — `POST /messages/group_mms`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `from` | string (E.164) | Yes | Phone number, in +E.164 format, used to send the message. |\n| `to` | array[object] | Yes | A list of destinations. |\n| `media_urls` | array[string] | No | A list of media URLs. |\n| `webhook_url` | string (URL) | No | The URL where webhooks related to this message will be sent. |\n| `webhook_failover_url` | string (URL) | No | The failover URL where webhooks related to this message will... |\n| ... | | | +3 optional params in [references/api-details.md](references/api-details.md) |\n\n```ruby\nresponse = client.messages.send_group_mms(from: \"+13125551234\", to: [\"+18655551234\", \"+14155551234\"], text: \"Hello from Telnyx!\")\nputs(response)\n```\n\nPrimary response fields:\n- `response.data.id`\n- `response.data.to`\n- `response.data.from`\n- `response.data.type`\n- `response.data.direction`\n- `response.data.text`\n\n### Send a long code message\n\nForce a long-code sending path instead of the generic send endpoint.\n\n`client.messages.send_long_code()` — `POST /messages/long_code`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `from` | string (E.164) | Yes | Phone number, in +E.164 format, used to send the message. |\n| `to` | string (E.164) | Yes | Receiving address (+E.164 formatted phone number or short co... |\n| `media_urls` | array[string] | No | A list of media URLs. |\n| `webhook_url` | string (URL) | No | The URL where webhooks related to this message will be sent. |\n| `webhook_failover_url` | string (URL) | No | The failover URL where webhooks related to this message will... |\n| ... | | | +6 optional params in [references/api-details.md](references/api-details.md) |\n\n```ruby\nresponse = client.messages.send_long_code(from: \"+18445550001\", to: \"+13125550002\", text: \"Hello from Telnyx!\")\nputs(response)\n```\n\nPrimary response fields:\n- `response.data.id`\n- `response.data.to`\n- `response.data.from`\n- `response.data.type`\n- `response.data.direction`\n- `response.data.text`\n\n### Send a message using number pool\n\nLet a messaging profile or number pool choose the sender for you.\n\n`client.messages.send_number_pool()` — `POST /messages/number_pool`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `messaging_profile_id` | string (UUID) | Yes | Unique identifier for a messaging profile. |\n| `to` | string (E.164) | Yes | Receiving address (+E.164 formatted phone number or short co... |\n| `media_urls` | array[string] | No | A list of media URLs. |\n| `webhook_url` | string (URL) | No | The URL where webhooks related to this message will be sent. |\n| `webhook_failover_url` | string (URL) | No | The failover URL where webhooks related to this message will... |\n| ... | | | +6 optional params in [references/api-details.md](references/api-details.md) |\n\n```ruby\nresponse = client.messages.send_number_pool(\n  messaging_profile_id: \"abc85f64-5717-4562-b3fc-2c9600000000\",\n  to: \"+13125550002\"\n    text: \"Hello from Telnyx!\",\n)\n\nputs(response)\n```\n\nPrimary response fields:\n- `response.data.id`\n- `response.data.to`\n- `response.data.from`\n- `response.data.type`\n- `response.data.direction`\n- `response.data.text`\n\n### Send a short code message\n\nForce a short-code sending path when the sender must be a short code.\n\n`client.messages.send_short_code()` — `POST /messages/short_code`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `from` | string (E.164) | Yes | Phone number, in +E.164 format, used to send the message. |\n| `to` | string (E.164) | Yes | Receiving address (+E.164 formatted phone number or short co... |\n| `media_urls` | array[string] | No | A list of media URLs. |\n| `webhook_url` | string (URL) | No | The URL where webhooks related to this message will be sent. |\n| `webhook_failover_url` | string (URL) | No | The failover URL where webhooks related to this message will... |\n| ... | | | +6 optional params in [references/api-details.md](references/api-details.md) |\n\n```ruby\nresponse = client.messages.send_short_code(from: \"+18445550001\", to: \"+18445550001\", text: \"Hello from Telnyx!\")\nputs(response)\n```\n\nPrimary response fields:\n- `response.data.id`\n- `response.data.to`\n- `response.data.from`\n- `response.data.type`\n- `response.data.direction`\n- `response.data.text`\n\n### Schedule a message\n\nQueue a message for future delivery instead of sending immediately.\n\n`client.messages.schedule()` — `POST /messages/schedule`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `to` | string (E.164) | Yes | Receiving address (+E.164 formatted phone number or short co... |\n| `messaging_profile_id` | string (UUID) | No | Unique identifier for a messaging profile. |\n| `media_urls` | array[string] | No | A list of media URLs. |\n| `webhook_url` | string (URL) | No | The URL where webhooks related to this message will be sent. |\n| ... | | | +8 optional params in [references/api-details.md](references/api-details.md) |\n\n```ruby\nresponse = client.messages.schedule(to: \"+18445550001\", from: \"+18005550101\", text: \"Appointment reminder\", send_at: \"2025-07-01T15:00:00Z\")\nputs(response)\n```\n\nPrimary response fields:\n- `response.data.id`\n- `response.data.to`\n- `response.data.from`\n- `response.data.type`\n- `response.data.direction`\n- `response.data.text`\n\n### Send a WhatsApp message\n\nSend WhatsApp traffic instead of SMS/MMS.\n\n`client.messages.send_whatsapp()` — `POST /messages/whatsapp`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `from` | string (E.164) | Yes | Phone number in +E.164 format associated with Whatsapp accou... |\n| `to` | string (E.164) | Yes | Phone number in +E.164 format |\n| `whatsapp_message` | object | Yes |  |\n| `type` | enum (WHATSAPP) | No | Message type - must be set to \"WHATSAPP\" |\n| `webhook_url` | string (URL) | No | The URL where webhooks related to this message will be sent. |\n\n```ruby\nresponse = client.messages.send_whatsapp(from: \"+13125551234\", to: \"+13125551234\", whatsapp_message: {})\n\nputs(response)\n```\n\nPrimary response fields:\n- `response.data.id`\n- `response.data.to`\n- `response.data.from`\n- `response.data.type`\n- `response.data.direction`\n- `response.data.body`\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| Retrieve a message | `client.messages.retrieve()` | `GET /messages/{id}` | Fetch the current state before updating, deleting, or making control-flow decisions. | `id` |\n| Cancel a scheduled message | `client.messages.cancel_scheduled()` | `DELETE /messages/{id}` | Remove, detach, or clean up an existing resource. | `id` |\n| List alphanumeric sender IDs | `client.alphanumeric_sender_ids.list()` | `GET /alphanumeric_sender_ids` | Inspect available resources or choose an existing resource before mutating it. | None |\n| Create an alphanumeric sender ID | `client.alphanumeric_sender_ids.create()` | `POST /alphanumeric_sender_ids` | Create or provision an additional resource when the core tasks do not cover this flow. | `alphanumeric_sender_id`, `messaging_profile_id` |\n| Retrieve an alphanumeric sender ID | `client.alphanumeric_sender_ids.retrieve()` | `GET /alphanumeric_sender_ids/{id}` | Fetch the current state before updating, deleting, or making control-flow decisions. | `id` |\n| Delete an alphanumeric sender ID | `client.alphanumeric_sender_ids.delete()` | `DELETE /alphanumeric_sender_ids/{id}` | Remove, detach, or clean up an existing resource. | `id` |\n| Retrieve group MMS messages | `client.messages.retrieve_group_messages()` | `GET /messages/group/{message_id}` | Fetch the current state before updating, deleting, or making control-flow decisions. | `message_id` |\n| List messaging hosted numbers | `client.messaging_hosted_numbers.list()` | `GET /messaging_hosted_numbers` | Inspect available resources or choose an existing resource before mutating it. | None |\n| Retrieve a messaging hosted number | `client.messaging_hosted_numbers.retrieve()` | `GET /messaging_hosted_numbers/{id}` | Fetch the current state before updating, deleting, or making control-flow decisions. | `id` |\n| Update a messaging hosted number | `client.messaging_hosted_numbers.update()` | `PATCH /messaging_hosted_numbers/{id}` | Modify an existing resource without recreating it. | `id` |\n| List opt-outs | `client.messaging_optouts.list()` | `GET /messaging_optouts` | Inspect available resources or choose an existing resource before mutating it. | None |\n| List high-level messaging profile metrics | `client.messaging_profile_metrics.list()` | `GET /messaging_profile_metrics` | Inspect available resources or choose an existing resource before mutating it. | None |\n| Regenerate messaging profile secret | `client.messaging_profiles.actions.regenerate_secret()` | `POST /messaging_profiles/{id}/actions/regenerate_secret` | Trigger a follow-up action in an existing workflow rather than creating a new top-level resource. | `id` |\n| List alphanumeric sender IDs for a messaging profile | `client.messaging_profiles.list_alphanumeric_sender_ids()` | `GET /messaging_profiles/{id}/alphanumeric_sender_ids` | Fetch the current state before updating, deleting, or making control-flow decisions. | `id` |\n| Get detailed messaging profile metrics | `client.messaging_profiles.retrieve_metrics()` | `GET /messaging_profiles/{id}/metrics` | Fetch the current state before updating, deleting, or making control-flow decisions. | `id` |\n| List Auto-Response Settings | `client.messaging_profiles.autoresp_configs.list()` | `GET /messaging_profiles/{profile_id}/autoresp_configs` | Fetch the current state before updating, deleting, or making control-flow decisions. | `profile_id` |\n| Create auto-response setting | `client.messaging_profiles.autoresp_configs.create()` | `POST /messaging_profiles/{profile_id}/autoresp_configs` | Create or provision an additional resource when the core tasks do not cover this flow. | `op`, `keywords`, `country_code`, `profile_id` |\n| Get Auto-Response Setting | `client.messaging_profiles.autoresp_configs.retrieve()` | `GET /messaging_profiles/{profile_id}/autoresp_configs/{autoresp_cfg_id}` | Fetch the current state before updating, deleting, or making control-flow decisions. | `profile_id`, `autoresp_cfg_id` |\n| Update Auto-Response Setting | `client.messaging_profiles.autoresp_configs.update()` | `PUT /messaging_profiles/{profile_id}/autoresp_configs/{autoresp_cfg_id}` | Modify an existing resource without recreating it. | `op`, `keywords`, `country_code`, `profile_id`, +1 more |\n| Delete Auto-Response Setting | `client.messaging_profiles.autoresp_configs.delete()` | `DELETE /messaging_profiles/{profile_id}/autoresp_configs/{autoresp_cfg_id}` | Remove, detach, or clean up an existing resource. | `profile_id`, `autoresp_cfg_id` |\n\n### Other Webhook Events\n\n| Event | `data.event_type` | Description |\n|-------|-------------------|-------------|\n| `replacedLinkClick` | `message.link_click` | Replaced Link Click |\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","messaging","ruby","team-telnyx","agent-skills","ai-coding-agent","claude-code","cpaas","cursor","iot","llm","sdk"],"capabilities":["skill","source-team-telnyx","skill-telnyx-messaging-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-messaging-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 (19,154 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-22T06:54:40.095Z","embedding":null,"createdAt":"2026-04-18T22:06:51.456Z","updatedAt":"2026-04-22T06:54:40.095Z","lastSeenAt":"2026-04-22T06:54:40.095Z","tsv":"'+1':2096 '+13125550001':121,550 '+13125550002':1091,1222 '+13125551234':962,1548,1550 '+14155551234':965 '+18005550101':77,402,1449 '+18445550001':75,400,1089,1348,1350,1447 '+18655551234':964 '+3':950 '+6':1077,1201,1336 '+7':390 '+8':1437 '-01':1457 '-07':1456 '-4562':1217 '-5717':1216 '/actions/regenerate_secret':1903 '/alphanumeric_sender_ids':1685,1705,1734,1757,1939 '/autoresp_configs':1989,2015,2047,2079,2108 '/messages':310,1645,1668 '/messages/alphanumeric_sender_id':440 '/messages/group':1776 '/messages/group_mms':881 '/messages/long_code':1003 '/messages/number_pool':1129 '/messages/schedule':1381 '/messages/short_code':1262 '/messages/whatsapp':1485 '/messaging_hosted_numbers':1800,1820,1843 '/messaging_optouts':1859 '/messaging_profile_metrics':1881 '/messaging_profiles':1901,1937,1962,1986,2012,2044,2076,2105 '/metrics':1964 '/webhooks':598 '00':1459 '00z':1460 '10dlc':175 '182bd5e5':540 '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e':539 '200':646 '2025':1455 '2c9600000000':1220 '400':627 '401':64,87 '403':91 '404':94 '422':60,98 '429':57,104 '4fe4':542 '6e1a':541 '8601':708,723 'a2p':168 'a799':543 'aa6d9a6ab26e':544 'abc85f64':1215 'accept':197 'accou':1502 'account':458 'action':1909 'addit':246,1564,1710,2020 'address':320,333,464,1027,1151,1286,1391 'addresse':743 'agent':297 'alphanumer':338,424,437,451,532,1680,1700,1721,1729,1752,1925,1933 'alreadi':40,153 'alway':65,582 'api':20,24,48,89 'appoint':1451 'array':366,688,736,779,802,901,910,1037,1161,1296,1413 'assign':155 'associ':1499 'assum':37 'asynchron':191 'authent':62 'auto':135,1981,2007,2039,2071,2100 'auto-respons':1980,2006,2038,2070,2099 'automat':139 'autoresp':2048,2066,2080,2109,2122 'avail':1687,1802,1861,1883 'b3fc':1219 'b3fc-2c9600000000':1218 'backoff':110 'bash':9 'begin':619 'beyond':274 'block':183 'bodi':343,477,596,693,784 'boolean':517 'call':49 'callback':495,508 'cancel':1661 'carrier':181,203 'caveat':148 'cfg':2049,2067,2081,2110,2123 'check':101 'choos':1120,1690,1805,1864,1886 'clean':1673,1762,2115 'click':2134,2137 'client':17,38 'client.alphanumeric_sender_ids.create':1703 'client.alphanumeric_sender_ids.delete':1755 'client.alphanumeric_sender_ids.list':1683 'client.alphanumeric_sender_ids.retrieve':1732 'client.messages.cancel':1665 'client.messages.retrieve':1643,1772 'client.messages.schedule':1379,1445 'client.messages.send':73,308,398,435,530,877,958,999,1085,1125,1209,1258,1344,1482,1545 'client.messaging_hosted_numbers.list':1798 'client.messaging_hosted_numbers.retrieve':1818 'client.messaging_hosted_numbers.update':1841 'client.messaging_optouts.list':1857 'client.messaging_profile_metrics.list':1879 'client.messaging_profiles.actions.regenerate':1898 'client.messaging_profiles.autoresp_configs.create':2010 'client.messaging_profiles.autoresp_configs.delete':2103 'client.messaging_profiles.autoresp_configs.list':1984 'client.messaging_profiles.autoresp_configs.retrieve':2042 'client.messaging_profiles.autoresp_configs.update':2074 'client.messaging_profiles.list':1932 'client.messaging_profiles.retrieve':1959 'client.new':19 'client.webhooks.unwrap':621 'close':850 'co':327,471,1034,1158,1293,1398 'code':70,86,127,171,240,984,990,1001,1087,1241,1247,1257,1260,1346,2034,2093 'common':84,427,858 'complet':174,2146 'content':345,695,786 'control':1657,1746,1789,1832,1950,1975,2000,2061 'control-flow':1656,1745,1788,1831,1949,1974,1999,2060 'core':288,846,1568,1714,2024 'correct':158 'countri':126,2033,2092 'cover':1718,2028 'creat':1698,1706,1916,2005,2016 'current':1649,1738,1781,1824,1942,1967,1992,2053 'dash':130 'data.event':669,753,2129 'data.payload.completed':717 'data.payload.cost':732 'data.payload.direction':770 'data.payload.errors':735 'data.payload.id':680,763 'data.payload.media':801 'data.payload.sent':702 'data.payload.text':690,781 'data.payload.to':687,778 'data.payload.type':793 'data.record':804 'date':705,710,720,725 'date-tim':704,719 'decis':1659,1748,1791,1834,1952,1977,2002,2063 'default':29 'delet':1653,1667,1742,1750,1756,1785,1828,1946,1971,1996,2057,2098,2104 'deliv':679,762 'deliveri':188,204,304,498,511,664,1374 'delivery-rel':303 'descript':314,444,668,752,885,1007,1133,1266,1385,1489,2131 'destin':907 'detach':1671,1760,2113 'detail':1955 'differ':432 'direct':774 'e':625 'e.164':118,317,321,330,334,447,461,465,888,893,1010,1015,1024,1028,1148,1152,1269,1274,1283,1287,1388,1392,1492,1497,1505,1510 'e.g':120,592 'e.message':630 'ed25519':569,576,606,611 'empti':350,700,791 'end':631,647 'endpoint':998,1635 'enum':213,222,671,755,771,794,806,1517 'env':22 'error':45,54,59,63,67,85,100,739 'event':620,634,642,677,760,807,2127,2128 'event.data.event':643 'exact':299,1579 'exampl':35,277 'exhaust':2139 'exist':1676,1692,1765,1807,1847,1866,1888,1912,2085,2118 'exponenti':109 'fail':51 'failov':502,507,935,941,1062,1068,1186,1192,1321,1327 'fetch':1647,1736,1779,1822,1940,1965,1990,2051 'field':102,215,218,225,273,287,301,307,411,555,652,666,750,818,834,974,1100,1231,1359,1465,1557,1631 'filter':186 'final':202,731 'first':1571 'flow':296,853,1658,1720,1747,1790,1833,1951,1976,2001,2030,2062 'follow':862,1907 'follow-up':861,1906 'forc':986,1243 'format':103,119,322,335,466,709,724,894,1016,1029,1153,1275,1288,1393,1498,1511 'found':97 'frequenc':1597 'full':1589,2142 'futur':1373 'gem':10 'generic':996 'get':1644,1684,1733,1775,1799,1819,1858,1880,1936,1954,1961,1985,2037,2043 'group':867,878,959,1769,1773 'guess':1629 'halt':626 'handl':46,66 'handler':591,838 'header':581,602,623 'heavili':185 'hello':79,404,546,967,1093,1224,1352 'high':1874 'high-level':1873 'host':1796,1816,1839 'http':608,616 'i.e':344,694,785 'id':354,426,453,480,487,538,1136,1214,1401,1646,1660,1669,1678,1682,1702,1723,1726,1731,1735,1749,1754,1758,1767,1778,1793,1821,1835,1844,1852,1902,1923,1927,1935,1938,1953,1963,1978,1988,2004,2014,2036,2046,2050,2065,2068,2078,2082,2095,2107,2111,2121,2124 'identifi':359,682,765,808,1141,1406 'immedi':1378 'import':111,839 'inbound':748,772 'includ':122,572 'index':1576 'indic':711,726 'initi':41 'inlin':231,276,654,823 'inspect':1686,1801,1860,1882 'instal':8,11 'instead':993,1375,1479 'insuffici':92 'integr':662 'invalid':88,628 'invent':210 'iso':707,722 'item':144 'item.id':146 'iter':140 'key':21,25,90 'keyword':2032,2091 'let':1113 'level':1875,1921 'limit':56,106 'link':2136 'list':370,822,905,914,1041,1165,1300,1417,1679,1794,1853,1872,1924,1979 'long':170,983,989,1000,1086 'long-cod':169,988 'lower':1596 'lower-frequ':1595 'make':1655,1744,1787,1830,1948,1973,1998,2059 'match':271 'may':740 'media':364,372,908,916,1035,1043,1159,1167,1294,1302,1411,1419 'messag':3,6,159,187,295,342,352,362,386,476,478,485,523,536,692,714,729,749,777,783,800,869,899,930,948,985,1021,1057,1075,1109,1115,1134,1144,1181,1199,1212,1242,1280,1316,1334,1368,1371,1399,1409,1433,1475,1513,1520,1539,1552,1642,1664,1724,1771,1774,1777,1792,1795,1815,1838,1876,1895,1930,1956 'message.finalized':673 'message.link':2133 'message.received':756 'message.sent':672 'method':1581,1634 'metric':1878,1958,1960 'miss':1630 'mms':796,868,872,879,960,1770 'modifi':1845,2083 'multipl':875 'must':115,152,173,1253,1522 'mutat':1695,1810,1869,1891 'mycompani':535 'need':227,298,816,856 'network':53 'new':1918 'non':349,699,790 'non-empti':348,698,789 'none':1697,1812,1871,1893 'note':112 'null':734 'number':114,151,324,337,468,891,1013,1031,1111,1118,1126,1155,1210,1272,1290,1395,1495,1508,1797,1817,1840 'object':689,733,737,780,803,902,1514 'omit':33 'one':871 'op':2031,2090 'oper':147,244,247,841,1565,1573,1603,1632 'opt':1855 'opt-out':1854 'option':251,256,391,951,1078,1202,1337,1438,1590,1608,1613,2140 'optional-paramet':250,255,1607,1612 'out':1856 'outbound':294 'page':136,142 'page.auto':141 'pagin':133 'param':392,952,1079,1203,1338,1439,1584,1591,1639 'paramet':212,221,252,257,311,441,882,1004,1130,1263,1382,1486,1609,1614,2141 'parenthes':132 'pars':637 'part':658 'patch':1842 'path':663,992,1249 'payload':281,286,600,622,639,651,828,833,873,1599,2148 'permiss':93 'phone':113,323,336,467,890,1012,1030,1154,1271,1289,1394,1494,1507 'point':741 'pool':1112,1119,1127,1211 'post':309,439,597,880,1002,1128,1261,1380,1484,1704,1900,2011 'prefix':124 'primari':293,409,553,661,972,1098,1229,1357,1463,1555 'product':69,178,586 'profil':160,353,363,479,486,515,524,537,1116,1135,1145,1213,1400,1410,1725,1877,1896,1931,1957,1987,2003,2013,2035,2045,2064,2077,2094,2106,2120 'provis':1708,2018 'put':82,145,407,551,640,970,1096,1227,1355,1461,1553,2075 'queue':1369 'rate':55,105 'rather':1914 'raw':595 'read':235,248,269,278,825,1605 'receiv':319,463,641,1026,1150,1285,1390 'recipi':876 'recreat':1850,2088 'refer':205,282,745,829 'references/api-details.md':236,237,254,264,283,394,395,830,954,955,1081,1082,1205,1206,1340,1341,1441,1442,1586,1587,1611,1621,2150,2151 'regener':1894 'registr':176 'relat':305,383,927,945,1054,1072,1178,1196,1313,1331,1430,1536 'remind':1452 'remov':1670,1759,2112 'replac':2135 'replacedlinkclick':2132 'request':200,300,433,571 'request.body.read':601 'request.env':607,615 'requir':15,313,431,443,884,1006,1132,1265,1384,1488,1583,1638 'rescu':624 'resourc':95,686,769,813,1677,1688,1693,1711,1766,1803,1808,1848,1862,1867,1884,1889,1922,2021,2086,2119 'respons':72,83,195,214,224,261,266,306,397,408,410,529,552,554,957,971,973,1084,1097,1099,1208,1228,1230,1343,1356,1358,1444,1462,1464,1544,1554,1556,1592,1618,1623,1982,2008,2040,2072,2101,2143 'response-schema':260,265,1617,1622 'response.data.body':1563 'response.data.direction':979,1105,1236,1364,1470,1562 'response.data.errors':418,562 'response.data.from':414,558,977,1103,1234,1362,1468,1560 'response.data.id':412,556,975,1101,1232,1360,1466,1558 'response.data.sent':416,560 'response.data.text':415,559,980,1106,1237,1365,1471 'response.data.to':413,557,976,1102,1233,1361,1467,1559 'response.data.type':978,1104,1235,1363,1469,1561 'retri':107 'retriev':1640,1727,1768,1813 'rubi':4,7,14,71,396,528,587,956,1083,1207,1342,1443,1543 'rule':207 'schedul':1366,1663,1666 'schema':262,267,1593,1619,1624,2144 'sdk':1580,1633 'secret':1897,1899 'section':253,263,1610,1620 'see':2149 'send':150,163,179,194,290,332,419,865,870,897,981,991,997,1019,1107,1238,1248,1278,1377,1453,1472,1476 'sender':425,428,438,452,533,1122,1252,1681,1701,1722,1730,1753,1926,1934 'sent':389,716,933,1060,1184,1319,1436,1542 'set':527,1524,1983,2009,2041,2073,2102 'setup':13 'shape':434 'short':326,470,1033,1157,1240,1246,1256,1259,1292,1345,1397 'short-cod':1245 'shown':43,230 'sign':566 'signatur':575,584,605,610,629,632 'sinatra':593 'skill':234 'skill-telnyx-messaging-ruby' 'sms':292,421,795 'sms/mms':1481 'source-team-telnyx' 'space':129 'state':1650,1739,1782,1825,1943,1968,1993,2054 'status':499,512,645 'step':864 'string':316,329,340,351,355,367,376,446,460,473,481,492,504,691,701,782,792,887,911,920,937,1009,1023,1038,1047,1064,1137,1147,1162,1171,1188,1268,1282,1297,1306,1323,1387,1402,1414,1423,1491,1504,1529 'support':840 't15':1458 'task':289,847,1569,1715,2025 'telnyx':2,5,12,16,18,23,81,211,406,548,565,574,579,604,609,613,617,969,1095,1226,1354 'telnyx-messaging-rubi':1 'telnyx-signature-ed25519':573,603 'telnyx-timestamp':578,612 'text':78,339,403,472,545,966,1092,1223,1351,1450 'time':706,721 'timestamp':580,614,618 'top':1920 'top-level':1919 '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' 'traffic':164,172,1478 'treat':192 'trigger':1904 'true':520 'type':312,442,644,667,670,675,684,751,754,758,767,798,805,810,883,1005,1131,1264,1383,1487,1516,1521,2130 'uniqu':358,1140,1405 'unsuccessful/unconfirm':747 'updat':500,513,665,1652,1741,1784,1827,1836,1945,1970,1995,2056,2069 'url':365,373,375,377,380,491,493,496,503,505,509,909,917,919,921,924,936,938,942,1036,1044,1046,1048,1051,1063,1065,1069,1160,1168,1170,1172,1175,1187,1189,1193,1295,1303,1305,1307,1310,1322,1324,1328,1412,1420,1422,1424,1427,1528,1530,1533 'us':167 'use':134,206,242,489,514,521,594,842,895,1017,1110,1276,1566,1585,1601,1636 'user':456 'uuid':356,482,681,764,1138,1403 'valid':58,99,450,633 'variant':429 'variat':859 'verif':564 'verifi':583 'webhook':189,217,272,280,285,374,382,490,501,516,526,563,567,590,638,648,650,817,827,832,918,926,934,944,1045,1053,1061,1071,1169,1177,1185,1195,1304,1312,1320,1330,1421,1429,1527,1535,1598,2126,2147 'webhook-payload-field':284,831 'whatsapp':1474,1477,1483,1501,1512,1518,1526,1546,1551 'without':1849,2087 'workflow':1913 'write':239,836 'yes':318,331,341,448,462,474,483,889,903,1011,1025,1139,1149,1270,1284,1389,1493,1506,1515","prices":[{"id":"39676e1d-5700-474e-945e-cff2cedd9e3c","listingId":"d53b412b-358d-4ae5-a2e7-a3d12dc86d81","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:06:51.456Z"}],"sources":[{"listingId":"d53b412b-358d-4ae5-a2e7-a3d12dc86d81","source":"github","sourceId":"team-telnyx/ai/telnyx-messaging-ruby","sourceUrl":"https://github.com/team-telnyx/ai/tree/main/skills/telnyx-messaging-ruby","isPrimary":false,"firstSeenAt":"2026-04-18T22:06:51.456Z","lastSeenAt":"2026-04-22T06:54:40.095Z"}],"details":{"listingId":"d53b412b-358d-4ae5-a2e7-a3d12dc86d81","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"team-telnyx","slug":"telnyx-messaging-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":"1da0bc0c50d3ec903e96e178f6dda88232c81dfe","skill_md_path":"skills/telnyx-messaging-ruby/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/team-telnyx/ai/tree/main/skills/telnyx-messaging-ruby"},"layout":"multi","source":"github","category":"ai","frontmatter":{"name":"telnyx-messaging-ruby","description":">-"},"skills_sh_url":"https://skills.sh/team-telnyx/ai/telnyx-messaging-ruby"},"updatedAt":"2026-04-22T06:54:40.095Z"}}