{"id":"d68ba967-8cf6-4ca2-9b43-f8125e816090","shortId":"aHyFan","kind":"skill","title":"telnyx-ai-assistants-ruby","tagline":">-","description":"<!-- Auto-generated from Telnyx OpenAPI specs. Do not edit. -->\n\n# Telnyx AI Assistants - 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\nassistant = client.ai.assistants.create(instructions: \"You are a helpful assistant.\", model: \"openai/gpt-4o\", name: \"my-resource\")\nputs(assistant)\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## 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\n## Core Tasks\n\n### Create an assistant\n\nAssistant creation is the entrypoint for any AI assistant integration. Agents need the exact creation method and the top-level fields returned by the SDK.\n\n`client.ai.assistants.create()` — `POST /ai/assistants`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `name` | string | Yes |  |\n| `model` | string | Yes | ID of the model to use. |\n| `instructions` | string | Yes | System instructions for the assistant. |\n| `tools` | array[object] | No | The tools that the assistant can use. |\n| `tool_ids` | array[string] | No |  |\n| `description` | string | No |  |\n| ... | | | +12 optional params in [references/api-details.md](references/api-details.md) |\n\n```ruby\nassistant = client.ai.assistants.create(instructions: \"You are a helpful assistant.\", model: \"openai/gpt-4o\", name: \"my-resource\")\n\nputs(assistant)\n```\n\nPrimary response fields:\n- `assistant.id`\n- `assistant.name`\n- `assistant.model`\n- `assistant.instructions`\n- `assistant.created_at`\n- `assistant.description`\n\n### Chat with an assistant\n\nChat is the primary runtime path. Agents need the exact assistant method and the response content field.\n\n`client.ai.assistants.chat()` — `POST /ai/assistants/{assistant_id}/chat`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `content` | string | Yes | The message content sent by the client to the assistant |\n| `conversation_id` | string (UUID) | Yes | A unique identifier for the conversation thread, used to mai... |\n| `assistant_id` | string (UUID) | Yes |  |\n| `name` | string | No | The optional display name of the user sending the message |\n\n```ruby\nresponse = client.ai.assistants.chat(\n  \"assistant_id\",\n  content: \"Tell me a joke about cats\",\n  conversation_id: \"42b20469-1215-4a9a-8964-c36f66b406f4\"\n)\n\nputs(response)\n```\n\nPrimary response fields:\n- `response.content`\n\n### Create an assistant test\n\nTest creation is the main validation path for production assistant behavior before deployment.\n\n`client.ai.assistants.tests.create()` — `POST /ai/assistants/tests`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `name` | string | Yes | A descriptive name for the assistant test. |\n| `destination` | string | Yes | The target destination for the test conversation. |\n| `instructions` | string | Yes | Detailed instructions that define the test scenario and what... |\n| `rubric` | array[object] | Yes | Evaluation criteria used to assess the assistant's performan... |\n| `description` | string | No | Optional detailed description of what this test evaluates an... |\n| `telnyx_conversation_channel` | object | No | The communication channel through which the test will be con... |\n| `max_duration_seconds` | integer | No | Maximum duration in seconds that the test conversation shoul... |\n| ... | | | +1 optional params in [references/api-details.md](references/api-details.md) |\n\n```ruby\nassistant_test = client.ai.assistants.tests.create(\n  destination: \"+15551234567\",\n  instructions: \"Act as a frustrated customer who received a damaged product. Ask for a refund and escalate if not satisfied with the initial response.\",\n  name: \"Customer Support Bot Test\",\n  rubric: [\n    {criteria: \"Assistant responds within 30 seconds\", name: \"Response Time\"},\n    {criteria: \"Provides correct product information\", name: \"Accuracy\"}\n  ]\n)\n\nputs(assistant_test)\n```\n\nPrimary response fields:\n- `assistant_test.test_id`\n- `assistant_test.name`\n- `assistant_test.destination`\n- `assistant_test.created_at`\n- `assistant_test.instructions`\n- `assistant_test.description`\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### Get an assistant\n\nFetch the current state before updating, deleting, or making control-flow decisions.\n\n`client.ai.assistants.retrieve()` — `GET /ai/assistants/{assistant_id}`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `assistant_id` | string (UUID) | Yes |  |\n| `call_control_id` | string (UUID) | No |  |\n| `fetch_dynamic_variables_from_webhook` | boolean | No |  |\n| `from` | string (E.164) | No |  |\n| ... | | | +1 optional params in [references/api-details.md](references/api-details.md) |\n\n```ruby\nassistant = client.ai.assistants.retrieve(\"550e8400-e29b-41d4-a716-446655440000\")\n\nputs(assistant)\n```\n\nPrimary response fields:\n- `assistant.id`\n- `assistant.name`\n- `assistant.created_at`\n- `assistant.description`\n- `assistant.dynamic_variables`\n- `assistant.dynamic_variables_webhook_url`\n\n### Update an assistant\n\nCreate or provision an additional resource when the core tasks do not cover this flow.\n\n`client.ai.assistants.update()` — `POST /ai/assistants/{assistant_id}`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `assistant_id` | string (UUID) | Yes |  |\n| `name` | string | No |  |\n| `model` | string | No | ID of the model to use. |\n| `instructions` | string | No | System instructions for the assistant. |\n| ... | | | +16 optional params in [references/api-details.md](references/api-details.md) |\n\n```ruby\nassistant = client.ai.assistants.update(\"550e8400-e29b-41d4-a716-446655440000\")\n\nputs(assistant)\n```\n\nPrimary response fields:\n- `assistant.id`\n- `assistant.name`\n- `assistant.created_at`\n- `assistant.description`\n- `assistant.dynamic_variables`\n- `assistant.dynamic_variables_webhook_url`\n\n### List assistants\n\nInspect available resources or choose an existing resource before mutating it.\n\n`client.ai.assistants.list()` — `GET /ai/assistants`\n\n```ruby\nassistants_list = client.ai.assistants.list\n\nputs(assistants_list)\n```\n\nResponse wrapper:\n- items: `assistants_list.data`\n\nPrimary item fields:\n- `id`\n- `name`\n- `created_at`\n- `description`\n- `dynamic_variables`\n- `dynamic_variables_webhook_url`\n\n### Import assistants from external provider\n\nImport existing assistants from an external provider instead of creating from scratch.\n\n`client.ai.assistants.imports()` — `POST /ai/assistants/import`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `provider` | enum (elevenlabs, vapi, retell) | Yes | The external provider to import assistants from. |\n| `api_key_ref` | string | Yes | Integration secret pointer that refers to the API key for th... |\n| `import_ids` | array[string] | No | Optional list of assistant IDs to import from the external p... |\n\n```ruby\nassistants_list = client.ai.assistants.imports(api_key_ref: \"my-openai-key\", provider: :elevenlabs)\n\nputs(assistants_list)\n```\n\nResponse wrapper:\n- items: `assistants_list.data`\n\nPrimary item fields:\n- `id`\n- `name`\n- `created_at`\n- `description`\n- `dynamic_variables`\n- `dynamic_variables_webhook_url`\n\n### Get All Tags\n\nInspect available resources or choose an existing resource before mutating it.\n\n`client.ai.assistants.tags.list()` — `GET /ai/assistants/tags`\n\n```ruby\ntags = client.ai.assistants.tags.list\n\nputs(tags)\n```\n\nPrimary response fields:\n- `tags.tags`\n\n### List assistant tests with pagination\n\nInspect available resources or choose an existing resource before mutating it.\n\n`client.ai.assistants.tests.list()` — `GET /ai/assistants/tests`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `test_suite` | string | No | Filter tests by test suite name |\n| `telnyx_conversation_channel` | string | No | Filter tests by communication channel (e.g., 'web_chat', 'sm... |\n| `destination` | string | No | Filter tests by destination (phone number, webhook URL, etc.... |\n| ... | | | +1 optional params in [references/api-details.md](references/api-details.md) |\n\n```ruby\npage = client.ai.assistants.tests.list\n\nputs(page)\n```\n\nResponse wrapper:\n- items: `page.data`\n- pagination: `page.meta`\n\nPrimary item fields:\n- `name`\n- `created_at`\n- `description`\n- `destination`\n- `instructions`\n- `max_duration_seconds`\n\n### Get all test suite names\n\nInspect available resources or choose an existing resource before mutating it.\n\n`client.ai.assistants.tests.test_suites.list()` — `GET /ai/assistants/tests/test-suites`\n\n```ruby\ntest_suites = client.ai.assistants.tests.test_suites.list\n\nputs(test_suites)\n```\n\nResponse wrapper:\n- items: `test_suites.data`\n\nPrimary item fields:\n- `data`\n\n### Get test suite run history\n\nFetch the current state before updating, deleting, or making control-flow decisions.\n\n`client.ai.assistants.tests.test_suites.runs.list()` — `GET /ai/assistants/tests/test-suites/{suite_name}/runs`\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `suite_name` | string | Yes |  |\n| `test_suite_run_id` | string (UUID) | No | Filter runs by specific suite execution batch ID |\n| `status` | string | No | Filter runs by execution status (pending, running, completed... |\n| `page` | object | No | Consolidated page parameter (deepObject style). |\n\n```ruby\npage = client.ai.assistants.tests.test_suites.runs.list(\"suite_name\")\n\nputs(page)\n```\n\nResponse wrapper:\n- items: `page.data`\n- pagination: `page.meta`\n\nPrimary item fields:\n- `status`\n- `created_at`\n- `updated_at`\n- `completed_at`\n- `conversation_id`\n- `conversation_insights_id`\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| Trigger test suite execution | `client.ai.assistants.tests.test_suites.runs.trigger()` | `POST /ai/assistants/tests/test-suites/{suite_name}/runs` | Trigger a follow-up action in an existing workflow rather than creating a new top-level resource. | `suite_name` |\n| Get assistant test by ID | `client.ai.assistants.tests.retrieve()` | `GET /ai/assistants/tests/{test_id}` | Fetch the current state before updating, deleting, or making control-flow decisions. | `test_id` |\n| Update an assistant test | `client.ai.assistants.tests.update()` | `PUT /ai/assistants/tests/{test_id}` | Modify an existing resource without recreating it. | `test_id` |\n| Delete an assistant test | `client.ai.assistants.tests.delete()` | `DELETE /ai/assistants/tests/{test_id}` | Remove, detach, or clean up an existing resource. | `test_id` |\n| Get test run history for a specific test | `client.ai.assistants.tests.runs.list()` | `GET /ai/assistants/tests/{test_id}/runs` | Fetch the current state before updating, deleting, or making control-flow decisions. | `test_id` |\n| Trigger a manual test run | `client.ai.assistants.tests.runs.trigger()` | `POST /ai/assistants/tests/{test_id}/runs` | Trigger a follow-up action in an existing workflow rather than creating a new top-level resource. | `test_id` |\n| Get specific test run details | `client.ai.assistants.tests.runs.retrieve()` | `GET /ai/assistants/tests/{test_id}/runs/{run_id}` | Fetch the current state before updating, deleting, or making control-flow decisions. | `test_id`, `run_id` |\n| Delete an assistant | `client.ai.assistants.delete()` | `DELETE /ai/assistants/{assistant_id}` | Remove, detach, or clean up an existing resource. | `assistant_id` |\n| Get Canary Deploy | `client.ai.assistants.canary_deploys.retrieve()` | `GET /ai/assistants/{assistant_id}/canary-deploys` | Fetch the current state before updating, deleting, or making control-flow decisions. | `assistant_id` |\n| Create Canary Deploy | `client.ai.assistants.canary_deploys.create()` | `POST /ai/assistants/{assistant_id}/canary-deploys` | Create or provision an additional resource when the core tasks do not cover this flow. | `versions`, `assistant_id` |\n| Update Canary Deploy | `client.ai.assistants.canary_deploys.update()` | `PUT /ai/assistants/{assistant_id}/canary-deploys` | Modify an existing resource without recreating it. | `versions`, `assistant_id` |\n| Delete Canary Deploy | `client.ai.assistants.canary_deploys.delete()` | `DELETE /ai/assistants/{assistant_id}/canary-deploys` | Remove, detach, or clean up an existing resource. | `assistant_id` |\n| Assistant Sms Chat | `client.ai.assistants.send_sms()` | `POST /ai/assistants/{assistant_id}/chat/sms` | Run assistant chat over SMS instead of direct API chat. | `from`, `to`, `assistant_id` |\n| Clone Assistant | `client.ai.assistants.clone_()` | `POST /ai/assistants/{assistant_id}/clone` | Trigger a follow-up action in an existing workflow rather than creating a new top-level resource. | `assistant_id` |\n| List scheduled events | `client.ai.assistants.scheduled_events.list()` | `GET /ai/assistants/{assistant_id}/scheduled_events` | Fetch the current state before updating, deleting, or making control-flow decisions. | `assistant_id` |\n| Create a scheduled event | `client.ai.assistants.scheduled_events.create()` | `POST /ai/assistants/{assistant_id}/scheduled_events` | Create or provision an additional resource when the core tasks do not cover this flow. | `telnyx_conversation_channel`, `telnyx_end_user_target`, `telnyx_agent_target`, `scheduled_at_fixed_datetime`, +1 more |\n| Get a scheduled event | `client.ai.assistants.scheduled_events.retrieve()` | `GET /ai/assistants/{assistant_id}/scheduled_events/{event_id}` | Fetch the current state before updating, deleting, or making control-flow decisions. | `assistant_id`, `event_id` |\n| Delete a scheduled event | `client.ai.assistants.scheduled_events.delete()` | `DELETE /ai/assistants/{assistant_id}/scheduled_events/{event_id}` | Remove, detach, or clean up an existing resource. | `assistant_id`, `event_id` |\n| Add Assistant Tag | `client.ai.assistants.tags.add()` | `POST /ai/assistants/{assistant_id}/tags` | Create or provision an additional resource when the core tasks do not cover this flow. | `tag`, `assistant_id` |\n| Remove Assistant Tag | `client.ai.assistants.tags.remove()` | `DELETE /ai/assistants/{assistant_id}/tags/{tag}` | Remove, detach, or clean up an existing resource. | `assistant_id`, `tag` |\n| Get assistant texml | `client.ai.assistants.get_texml()` | `GET /ai/assistants/{assistant_id}/texml` | Fetch the current state before updating, deleting, or making control-flow decisions. | `assistant_id` |\n| Add Assistant Tool | `client.ai.assistants.tools.add()` | `PUT /ai/assistants/{assistant_id}/tools/{tool_id}` | Modify an existing resource without recreating it. | `assistant_id`, `tool_id` |\n| Remove Assistant Tool | `client.ai.assistants.tools.remove()` | `DELETE /ai/assistants/{assistant_id}/tools/{tool_id}` | Remove, detach, or clean up an existing resource. | `assistant_id`, `tool_id` |\n| Test Assistant Tool | `client.ai.assistants.tools.test_()` | `POST /ai/assistants/{assistant_id}/tools/{tool_id}/test` | Trigger a follow-up action in an existing workflow rather than creating a new top-level resource. | `assistant_id`, `tool_id` |\n| Get all versions of an assistant | `client.ai.assistants.versions.list()` | `GET /ai/assistants/{assistant_id}/versions` | Fetch the current state before updating, deleting, or making control-flow decisions. | `assistant_id` |\n| Get a specific assistant version | `client.ai.assistants.versions.retrieve()` | `GET /ai/assistants/{assistant_id}/versions/{version_id}` | Fetch the current state before updating, deleting, or making control-flow decisions. | `assistant_id`, `version_id` |\n| Update a specific assistant version | `client.ai.assistants.versions.update()` | `POST /ai/assistants/{assistant_id}/versions/{version_id}` | Create or provision an additional resource when the core tasks do not cover this flow. | `assistant_id`, `version_id` |\n| Delete a specific assistant version | `client.ai.assistants.versions.delete()` | `DELETE /ai/assistants/{assistant_id}/versions/{version_id}` | Remove, detach, or clean up an existing resource. | `assistant_id`, `version_id` |\n| Promote an assistant version to main | `client.ai.assistants.versions.promote()` | `POST /ai/assistants/{assistant_id}/versions/{version_id}/promote` | Trigger a follow-up action in an existing workflow rather than creating a new top-level resource. | `assistant_id`, `version_id` |\n| List MCP Servers | `client.ai.mcp_servers.list()` | `GET /ai/mcp_servers` | Inspect available resources or choose an existing resource before mutating it. | None |\n| Create MCP Server | `client.ai.mcp_servers.create()` | `POST /ai/mcp_servers` | Create or provision an additional resource when the core tasks do not cover this flow. | `name`, `type`, `url` |\n| Get MCP Server | `client.ai.mcp_servers.retrieve()` | `GET /ai/mcp_servers/{mcp_server_id}` | Fetch the current state before updating, deleting, or making control-flow decisions. | `mcp_server_id` |\n| Update MCP Server | `client.ai.mcp_servers.update()` | `PUT /ai/mcp_servers/{mcp_server_id}` | Modify an existing resource without recreating it. | `mcp_server_id` |\n| Delete MCP Server | `client.ai.mcp_servers.delete()` | `DELETE /ai/mcp_servers/{mcp_server_id}` | Remove, detach, or clean up an existing resource. | `mcp_server_id` |\n| List Tools | `client.ai.tools.list()` | `GET /ai/tools` | Inspect available resources or choose an existing resource before mutating it. | None |\n| Create Tool | `client.ai.tools.create()` | `POST /ai/tools` | Create or provision an additional resource when the core tasks do not cover this flow. | `type`, `display_name` |\n| Get Tool | `client.ai.tools.retrieve()` | `GET /ai/tools/{tool_id}` | Fetch the current state before updating, deleting, or making control-flow decisions. | `tool_id` |\n| Update Tool | `client.ai.tools.update()` | `PATCH /ai/tools/{tool_id}` | Modify an existing resource without recreating it. | `tool_id` |\n| Delete Tool | `client.ai.tools.delete()` | `DELETE /ai/tools/{tool_id}` | Remove, detach, or clean up an existing resource. | `tool_id` |\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","assistants","ruby","team-telnyx","agent-skills","ai-coding-agent","claude-code","cpaas","cursor","iot","llm","sdk"],"capabilities":["skill","source-team-telnyx","skill-telnyx-ai-assistants-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-ai-assistants-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 (20,073 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-22T12:54:43.783Z","embedding":null,"createdAt":"2026-04-18T22:06:16.962Z","updatedAt":"2026-04-22T12:54:43.783Z","lastSeenAt":"2026-04-22T12:54:43.783Z","tsv":"'+1':539,684,1027,1667 '+12':293 '+13125550001':127 '+15551234567':550 '+16':767 '-1215':418 '-4':419 '-8964':421 '/ai/assistants':249,349,655,735,813,1449,1467,1491,1518,1537,1557,1579,1609,1634,1675,1704,1727,1754,1776,1800,1822,1845,1883,1909,1939,1971,1997 '/ai/assistants/import':858 '/ai/assistants/tags':958 '/ai/assistants/tests':448,986,1298,1322,1340,1363,1389,1421 '/ai/assistants/tests/test-suites':1074,1110,1266 '/ai/mcp_servers':2032,2050,2074,2099,2118 '/ai/tools':2137,2154,2177,2199,2215 '/canary-deploys':1470,1494,1521,1540 '/chat':352 '/chat/sms':1560 '/clone':1582 '/promote':2003 '/runs':1113,1269,1366,1392,1424 '/scheduled_events':1612,1637,1678,1707 '/tags':1730,1757 '/test':1851 '/texml':1779 '/tools':1803,1825,1848 '/versions':1886,1912,1942,1974,2000 '30':585 '401':66,93 '403':97 '404':100 '41d4':696,779 '422':62,104 '429':59,110 '42b20469':417 '446655440000':698,781 '550e8400':693,776 'a716':697,780 'a9a':420 'accuraci':596 'act':552 'action':1275,1398,1588,1857,2009 'add':1722,1795 'addit':194,722,1184,1499,1642,1735,1949,2055,2159 'agent':231,336,1661 'ai':3,7,228 'alreadi':42 'alway':67 'api':22,26,50,95,876,888,912,1569 'array':275,287,486,894 'ask':562 'assess':493 'assist':4,8,74,81,89,220,221,229,273,282,300,307,315,329,340,350,369,385,406,431,442,461,495,546,582,598,639,656,662,691,700,717,736,742,766,774,783,799,815,819,840,846,874,900,909,922,969,1292,1318,1336,1446,1450,1460,1468,1484,1492,1511,1519,1530,1538,1549,1551,1558,1562,1573,1576,1580,1602,1610,1626,1635,1676,1694,1705,1718,1723,1728,1747,1750,1755,1767,1771,1777,1793,1796,1801,1813,1818,1823,1836,1841,1846,1871,1880,1884,1900,1905,1910,1928,1935,1940,1960,1967,1972,1985,1991,1998,2023 'assistant.created':323,706,789 'assistant.description':325,708,791 'assistant.dynamic':709,711,792,794 'assistant.id':319,704,787 'assistant.instructions':322 'assistant.model':321 'assistant.name':320,705,788 'assistant_test.created':607 'assistant_test.description':610 'assistant_test.destination':606 'assistant_test.instructions':609 'assistant_test.name':605 'assistant_test.test':603 'assistants_list.data':824,927 'assum':39 'authent':64 'auto':141 'automat':145 'avail':801,946,974,1062,2034,2139 'backoff':116 'bash':11 'batch':1135 'behavior':443 'boolean':678 'bot':578 'c36f66b406f4':422 'call':51,667 'canari':1463,1487,1514,1533 'cat':414 'channel':512,517,1003,1010,1655 'chat':326,330,1013,1553,1563,1570 'check':107 'choos':804,949,977,1065,2037,2142 'clean':1346,1455,1544,1713,1762,1831,1980,2125,2221 'client':19,40,366 'client.ai.assistants.canary_deploys.create':1489 'client.ai.assistants.canary_deploys.delete':1535 'client.ai.assistants.canary_deploys.retrieve':1465 'client.ai.assistants.canary_deploys.update':1516 'client.ai.assistants.chat':347,405 'client.ai.assistants.clone':1577 'client.ai.assistants.create':75,247,301 'client.ai.assistants.delete':1447 'client.ai.assistants.get':1773 'client.ai.assistants.imports':856,911 'client.ai.assistants.list':811,817 'client.ai.assistants.retrieve':653,692 'client.ai.assistants.scheduled_events.create':1632 'client.ai.assistants.scheduled_events.delete':1702 'client.ai.assistants.scheduled_events.list':1607 'client.ai.assistants.scheduled_events.retrieve':1673 'client.ai.assistants.send':1554 'client.ai.assistants.tags.add':1725 'client.ai.assistants.tags.list':956,961 'client.ai.assistants.tags.remove':1752 'client.ai.assistants.tests.create':446,548 'client.ai.assistants.tests.delete':1338 'client.ai.assistants.tests.list':984,1035 'client.ai.assistants.tests.retrieve':1296 'client.ai.assistants.tests.runs.list':1361 'client.ai.assistants.tests.runs.retrieve':1419 'client.ai.assistants.tests.runs.trigger':1387 'client.ai.assistants.tests.test_suites.list':1072,1078 'client.ai.assistants.tests.test_suites.runs.list':1108,1158 'client.ai.assistants.tests.test_suites.runs.trigger':1264 'client.ai.assistants.tests.update':1320 'client.ai.assistants.tools.add':1798 'client.ai.assistants.tools.remove':1820 'client.ai.assistants.tools.test':1843 'client.ai.assistants.update':733,775 'client.ai.assistants.versions.delete':1969 'client.ai.assistants.versions.list':1881 'client.ai.assistants.versions.promote':1995 'client.ai.assistants.versions.retrieve':1907 'client.ai.assistants.versions.update':1937 'client.ai.mcp_servers.create':2048 'client.ai.mcp_servers.delete':2116 'client.ai.mcp_servers.list':2030 'client.ai.mcp_servers.retrieve':2072 'client.ai.mcp_servers.update':2097 'client.ai.tools.create':2152 'client.ai.tools.delete':2213 'client.ai.tools.list':2135 'client.ai.tools.retrieve':2175 'client.ai.tools.update':2197 'client.new':21 'clone':1575 'close':622 'code':72,92,133,188 'common':90,630 'communic':516,1009 'complet':1147,1177,2236 'con':524 'consolid':1151 'content':345,357,362,408 'control':650,668,1105,1311,1377,1437,1481,1623,1691,1790,1897,1925,2088,2190 'control-flow':649,1104,1310,1376,1436,1480,1622,1690,1789,1896,1924,2087,2189 'convers':370,380,415,472,511,537,1002,1179,1181,1654 'core':216,618,726,1188,1503,1646,1739,1953,2059,2163 'correct':592 'countri':132 'cover':730,1507,1650,1743,1957,2063,2167 'creat':218,429,718,830,853,933,1048,1173,1282,1405,1486,1495,1595,1628,1638,1731,1864,1945,2016,2045,2051,2150,2155 'creation':222,235,434 'criteria':490,581,590 'current':642,1097,1303,1369,1429,1473,1615,1683,1782,1889,1917,2080,2182 'custom':556,576 'damag':560 'dash':136 'data':1089 'datetim':1666 'decis':652,1107,1313,1379,1439,1483,1625,1693,1792,1899,1927,2090,2192 'deepobject':1154 'default':31 'defin':479 'delet':646,1101,1307,1334,1339,1373,1433,1444,1448,1477,1532,1536,1619,1687,1698,1703,1753,1786,1821,1893,1921,1964,1970,2084,2113,2117,2186,2211,2214 'deploy':445,1464,1488,1515,1534 'descript':253,290,356,452,457,498,503,661,741,832,862,935,990,1050,1117 'destin':463,468,549,1015,1021,1051 'detach':1344,1453,1542,1711,1760,1829,1978,2123,2219 'detail':476,502,1418 'direct':1568 'display':395,2171 'durat':526,531,1054 'dynam':674,833,835,936,938 'e.164':124,682 'e.g':126,1011 'e29b':695,778 'e29b-41d4-a716':694,777 'elevenlab':865,920 'end':1657 'endpoint':1255 'entrypoint':225 'enum':161,170,864 'env':24 'error':47,56,61,65,69,91,106 'escal':567 'etc':1026 'evalu':489,508 'event':1606,1631,1672,1679,1696,1701,1708,1720 'exact':234,339,1199 'exampl':37 'execut':1134,1143,1263 'exhaust':2229 'exist':806,845,951,979,1067,1278,1327,1349,1401,1458,1524,1547,1591,1716,1765,1808,1834,1860,1983,2012,2039,2105,2128,2144,2204,2224 'exponenti':115 'extern':842,849,870,906 'fail':53 'fetch':640,673,1095,1301,1367,1427,1471,1613,1681,1780,1887,1915,2078,2180 'field':108,163,166,173,242,318,346,427,602,703,786,827,930,966,1046,1088,1171,1251 'filter':995,1006,1018,1129,1140 'first':1191 'fix':1665 'flow':625,651,732,1106,1312,1378,1438,1482,1509,1624,1652,1692,1745,1791,1898,1926,1959,2065,2089,2169,2191 'follow':634,1273,1396,1586,1855,2007 'follow-up':633,1272,1395,1585,1854,2006 'format':109,125 'found':103 'frequenc':1217 'frustrat':555 'full':1209,2232 'gem':12 'get':637,654,812,942,957,985,1056,1073,1090,1109,1291,1297,1353,1362,1414,1420,1462,1466,1608,1669,1674,1770,1775,1875,1882,1902,1908,2031,2069,2073,2136,2173,2176 'guess':1249 'handl':48,68 'help':80,306 'histori':1094,1356 'id':260,286,351,371,386,407,416,604,657,663,669,737,743,753,828,893,901,931,1125,1136,1180,1183,1295,1300,1315,1324,1333,1342,1352,1365,1381,1391,1413,1423,1426,1441,1443,1451,1461,1469,1485,1493,1512,1520,1531,1539,1550,1559,1574,1581,1603,1611,1627,1636,1677,1680,1695,1697,1706,1709,1719,1721,1729,1748,1756,1768,1778,1794,1802,1805,1814,1816,1824,1827,1837,1839,1847,1850,1872,1874,1885,1901,1911,1914,1929,1931,1941,1944,1961,1963,1973,1976,1986,1988,1999,2002,2024,2026,2077,2093,2102,2112,2121,2132,2179,2194,2201,2210,2217,2227 'identifi':377 'import':117,611,839,844,873,892,903 'includ':128 'index':1196 'inform':594 'initi':43,573 'inlin':179 'insight':1182 'inspect':800,945,973,1061,2033,2138 'instal':10,13 'instead':851,1566 'instruct':76,266,270,302,473,477,551,759,763,1052 'insuffici':98 'integ':528 'integr':230,881 'invalid':94 'invent':158 'item':150,823,826,926,929,1040,1045,1084,1087,1165,1170 'item.id':152 'iter':146 'joke':412 'key':23,27,96,877,889,913,918 'level':241,1287,1410,1600,1869,2021 'limit':58,112 'list':798,816,820,898,910,923,968,1604,2027,2133 'lower':1216 'lower-frequ':1215 'mai':384 'main':437,1994 'make':648,1103,1309,1375,1435,1479,1621,1689,1788,1895,1923,2086,2188 'manual':1384 'max':525,1053 'maximum':530 'mcp':2028,2046,2070,2075,2091,2095,2100,2110,2114,2119,2130 'messag':361,402 'method':236,341,1201,1254 'miss':1250 'model':82,257,263,308,750,756 'modifi':1325,1522,1806,2103,2202 'must':121 'mutat':809,954,982,1070,2042,2147 'my-openai-key':915 'my-resourc':85,311 'name':84,254,310,390,396,453,458,575,587,595,747,829,932,1000,1047,1060,1112,1119,1160,1268,1290,2066,2172 'need':175,232,337,628 'network':55 'new':1284,1407,1597,1866,2018 'none':2044,2149 'note':118 'number':120,1023 'object':276,487,513,1149 'omit':35 'openai':917 'openai/gpt-4o':83,309 'oper':192,195,613,1185,1193,1223,1252 'option':199,204,294,394,501,540,685,768,897,1028,1210,1228,1233,2230 'optional-paramet':198,203,1227,1232 'p':907 'page':142,148,1034,1037,1148,1152,1157,1162 'page.auto':147 'page.data':1041,1166 'page.meta':1043,1168 'pagin':139,972,1042,1167 'param':295,541,686,769,1029,1204,1211,1259 'paramet':160,169,200,205,250,353,449,658,738,859,987,1114,1153,1229,1234,2231 'parenthes':138 'patch':2198 'path':335,439 'payload':1219,2238 'pend':1145 'performan':497 'permiss':99 'phone':119,1022 'pointer':883 'post':248,348,447,734,857,1265,1388,1490,1556,1578,1633,1726,1844,1938,1996,2049,2153 'prefix':130 'primari':316,333,425,600,701,784,825,928,964,1044,1086,1169 'product':71,441,561,593 'promot':1989 'provid':591,843,850,863,871,919 'provis':720,1497,1640,1733,1947,2053,2157 'put':88,151,314,423,597,699,782,818,921,962,1036,1079,1161,1321,1517,1799,2098 'rate':57,111 'rather':1280,1403,1593,1862,2014 'read':183,196,1225 'receiv':558 'recreat':1330,1527,1811,2108,2207 'ref':878,914 'refer':153,885 'references/api-details.md':184,185,202,212,297,298,543,544,688,689,771,772,1031,1032,1206,1207,1231,1241,2240,2241 'refund':565 'remov':1343,1452,1541,1710,1749,1759,1817,1828,1977,2122,2218 'requir':17,252,355,451,660,740,861,989,1116,1203,1258 'resourc':87,101,313,723,802,807,947,952,975,980,1063,1068,1288,1328,1350,1411,1459,1500,1525,1548,1601,1643,1717,1736,1766,1809,1835,1870,1950,1984,2022,2035,2040,2056,2106,2129,2140,2145,2160,2205,2225 'respond':583 'respons':162,172,209,214,317,344,404,424,426,574,588,601,702,785,821,924,965,1038,1082,1163,1212,1238,1243,2233 'response-schema':208,213,1237,1242 'response.content':428 'retel':867 'retri':113 'return':243 'rubi':5,9,16,73,299,403,545,690,773,814,908,959,1033,1075,1156 'rubric':485,580 'rule':155 'run':1093,1124,1130,1141,1146,1355,1386,1417,1425,1442,1561 'runtim':334 'satisfi':570 'scenario':482 'schedul':1605,1630,1663,1671,1700 'schema':210,215,1213,1239,1244,2234 'scratch':855 'sdk':246,1200,1253 'second':527,533,586,1055 'secret':882 'section':201,211,1230,1240 'see':2239 'send':400 'sent':363 'server':2029,2047,2071,2076,2092,2096,2101,2111,2115,2120,2131 'setup':15 'shoul':538 'shown':45,178 'skill':182 'skill-telnyx-ai-assistants-ruby' 'sm':1014 'sms':1552,1555,1565 'source-team-telnyx' 'space':135 'specif':1132,1359,1415,1904,1934,1966 'state':643,1098,1304,1370,1430,1474,1616,1684,1783,1890,1918,2081,2183 'status':1137,1144,1172 'step':636 'string':255,258,267,288,291,358,372,387,391,454,464,474,499,664,670,681,744,748,751,760,879,895,993,1004,1016,1120,1126,1138 'style':1155 'suit':992,999,1059,1077,1081,1092,1111,1118,1123,1133,1159,1262,1267,1289 'support':577,612 'system':269,762 'tag':944,960,963,1724,1746,1751,1758,1769 'tags.tags':967 'target':467,1659,1662 'task':217,619,727,1189,1504,1647,1740,1954,2060,2164 'tell':409 'telnyx':2,6,14,18,20,25,159,510,1001,1653,1656,1660 'telnyx-ai-assistants-rubi':1 'test':432,433,462,471,481,507,521,536,547,579,599,970,991,996,998,1007,1019,1058,1076,1080,1091,1122,1261,1293,1299,1314,1319,1323,1332,1337,1341,1351,1354,1360,1364,1380,1385,1390,1412,1416,1422,1440,1840 'test_suites.data':1085 'texml':1772,1774 'th':891 'thread':381 'time':589 'tool':274,279,285,1797,1804,1815,1819,1826,1838,1842,1849,1873,2134,2151,2174,2178,2193,2196,2200,2209,2212,2216,2226 'top':240,1286,1409,1599,1868,2020 'top-level':239,1285,1408,1598,1867,2019 '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' 'trigger':1260,1270,1382,1393,1583,1852,2004 'type':251,354,450,659,739,860,988,1115,2067,2170 'uniqu':376 'updat':645,715,1100,1175,1306,1316,1372,1432,1476,1513,1618,1686,1785,1892,1920,1932,2083,2094,2185,2195 'url':714,797,838,941,1025,2068 'use':140,154,190,265,284,382,491,614,758,1186,1205,1221,1256 'user':399,1658 'uuid':373,388,665,671,745,1127 'valid':60,105,438 'vapi':866 'variabl':675,710,712,793,795,834,836,937,939 'variat':631 'version':1510,1529,1877,1906,1913,1930,1936,1943,1962,1968,1975,1987,1992,2001,2025 'web':1012 'webhook':165,677,713,796,837,940,1024,1218,2237 'within':584 'without':1329,1526,1810,2107,2206 'workflow':1279,1402,1592,1861,2013 'wrapper':822,925,1039,1083,1164 'write':187 'yes':256,259,268,359,374,389,455,465,475,488,666,746,868,880,1121","prices":[{"id":"1353011c-59ba-43fe-b99f-adc3952c3682","listingId":"d68ba967-8cf6-4ca2-9b43-f8125e816090","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:16.962Z"}],"sources":[{"listingId":"d68ba967-8cf6-4ca2-9b43-f8125e816090","source":"github","sourceId":"team-telnyx/ai/telnyx-ai-assistants-ruby","sourceUrl":"https://github.com/team-telnyx/ai/tree/main/skills/telnyx-ai-assistants-ruby","isPrimary":false,"firstSeenAt":"2026-04-18T22:06:16.962Z","lastSeenAt":"2026-04-22T12:54:43.783Z"}],"details":{"listingId":"d68ba967-8cf6-4ca2-9b43-f8125e816090","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"team-telnyx","slug":"telnyx-ai-assistants-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":"5b037132785d2be210b6ebd18642d36b10365c8e","skill_md_path":"skills/telnyx-ai-assistants-ruby/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/team-telnyx/ai/tree/main/skills/telnyx-ai-assistants-ruby"},"layout":"multi","source":"github","category":"ai","frontmatter":{"name":"telnyx-ai-assistants-ruby","description":">-"},"skills_sh_url":"https://skills.sh/team-telnyx/ai/telnyx-ai-assistants-ruby"},"updatedAt":"2026-04-22T12:54:43.783Z"}}