Loading...
Loading...
Compare original and translation side by side
npm install telnyxnpm install telnyximport Telnyx from 'telnyx';
const client = new Telnyx({
apiKey: process.env['TELNYX_API_KEY'], // This is the default and can be omitted
});clientimport Telnyx from 'telnyx';
const client = new Telnyx({
apiKey: process.env['TELNYX_API_KEY'], // This is the default and can be omitted
});clienttry {
const assistant = await client.ai.assistants.create({
instructions: 'You are a helpful assistant.',
model: 'openai/gpt-4o',
name: 'my-resource',
});
} catch (err) {
if (err instanceof Telnyx.APIConnectionError) {
console.error('Network error — check connectivity and retry');
} else if (err instanceof Telnyx.RateLimitError) {
const retryAfter = err.headers?.['retry-after'] || 1;
await new Promise(r => setTimeout(r, retryAfter * 1000));
} else if (err instanceof Telnyx.APIError) {
console.error(`API error ${err.status}: ${err.message}`);
if (err.status === 422) {
console.error('Validation error — check required fields and formats');
}
}
}401403404422429try {
const assistant = await client.ai.assistants.create({
instructions: 'You are a helpful assistant.',
model: 'openai/gpt-4o',
name: 'my-resource',
});
} catch (err) {
if (err instanceof Telnyx.APIConnectionError) {
console.error('Network error — check connectivity and retry');
} else if (err instanceof Telnyx.RateLimitError) {
const retryAfter = err.headers?.['retry-after'] || 1;
await new Promise(r => setTimeout(r, retryAfter * 1000));
} else if (err instanceof Telnyx.APIError) {
console.error(`API error ${err.status}: ${err.message}`);
if (err.status === 422) {
console.error('Validation error — check required fields and formats');
}
}
}401403404422429+13125550001+for await (const item of result) { ... }+13125550001+for await (const item of result) { ... }## Additional Operations## 额外操作client.ai.assistants.create()POST /ai/assistants| Parameter | Type | Required | Description |
|---|---|---|---|
| string | Yes | |
| string | Yes | ID of the model to use. |
| string | Yes | System instructions for the assistant. |
| array[object] | No | The tools that the assistant can use. |
| array[string] | No | |
| string | No | |
| ... | +12 optional params in references/api-details.md |
const assistant = await client.ai.assistants.create({
instructions: 'You are a helpful assistant.',
model: 'openai/gpt-4o',
name: 'my-resource',
});
console.log(assistant.id);assistant.idassistant.nameassistant.modelassistant.instructionsassistant.createdAtassistant.descriptionclient.ai.assistants.create()POST /ai/assistants| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
| string | 是 | |
| string | 是 | 要使用的模型ID。 |
| string | 是 | 助手的系统指令。 |
| array[object] | 否 | 助手可以使用的工具。 |
| array[string] | 否 | |
| string | 否 | |
| ... | 还有12个可选参数见references/api-details.md |
const assistant = await client.ai.assistants.create({
instructions: 'You are a helpful assistant.',
model: 'openai/gpt-4o',
name: 'my-resource',
});
console.log(assistant.id);assistant.idassistant.nameassistant.modelassistant.instructionsassistant.createdAtassistant.descriptionclient.ai.assistants.chat()POST /ai/assistants/{assistant_id}/chat| Parameter | Type | Required | Description |
|---|---|---|---|
| string | Yes | The message content sent by the client to the assistant |
| string (UUID) | Yes | A unique identifier for the conversation thread, used to mai... |
| string (UUID) | Yes | |
| string | No | The optional display name of the user sending the message |
const response = await client.ai.assistants.chat('assistant_id', {
content: 'Tell me a joke about cats',
conversation_id: '42b20469-1215-4a9a-8964-c36f66b406f4',
});
console.log(response.content);response.contentclient.ai.assistants.chat()POST /ai/assistants/{assistant_id}/chat| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
| string | 是 | 客户端发送给助手的消息内容 |
| string (UUID) | 是 | 会话线程的唯一标识符,用于维... |
| string (UUID) | 是 | |
| string | 否 | 发送消息的用户的可选显示名称 |
const response = await client.ai.assistants.chat('assistant_id', {
content: 'Tell me a joke about cats',
conversation_id: '42b20469-1215-4a9a-8964-c36f66b406f4',
});
console.log(response.content);response.contentclient.ai.assistants.tests.create()POST /ai/assistants/tests| Parameter | Type | Required | Description |
|---|---|---|---|
| string | Yes | A descriptive name for the assistant test. |
| string | Yes | The target destination for the test conversation. |
| string | Yes | Detailed instructions that define the test scenario and what... |
| array[object] | Yes | Evaluation criteria used to assess the assistant's performan... |
| string | No | Optional detailed description of what this test evaluates an... |
| object | No | The communication channel through which the test will be con... |
| integer | No | Maximum duration in seconds that the test conversation shoul... |
| ... | +1 optional params in references/api-details.md |
const assistantTest = await client.ai.assistants.tests.create({
destination: '+15551234567',
instructions:
'Act as a frustrated customer who received a damaged product. Ask for a refund and escalate if not satisfied with the initial response.',
name: 'Customer Support Bot Test',
rubric: [
{ criteria: 'Assistant responds within 30 seconds', name: 'Response Time' },
{ criteria: 'Provides correct product information', name: 'Accuracy' },
],
});
console.log(assistantTest.test_id);assistantTest.testIdassistantTest.nameassistantTest.destinationassistantTest.createdAtassistantTest.instructionsassistantTest.descriptionclient.ai.assistants.tests.create()POST /ai/assistants/tests| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
| string | 是 | 助手测试的描述性名称。 |
| string | 是 | 测试会话的目标接收方。 |
| string | 是 | 定义测试场景和规则的详细指令... |
| array[object] | 是 | 评估助手表现的评分标准... |
| string | 否 | 可选的详细描述,说明该测试评估的内容... |
| object | 否 | 执行测试的通信渠道... |
| integer | 否 | 测试会话允许的最长持续时间(秒)... |
| ... | 还有1个可选参数见references/api-details.md |
const assistantTest = await client.ai.assistants.tests.create({
destination: '+15551234567',
instructions:
'Act as a frustrated customer who received a damaged product. Ask for a refund and escalate if not satisfied with the initial response.',
name: 'Customer Support Bot Test',
rubric: [
{ criteria: 'Assistant responds within 30 seconds', name: 'Response Time' },
{ criteria: 'Provides correct product information', name: 'Accuracy' },
],
});
console.log(assistantTest.test_id);assistantTest.testIdassistantTest.nameassistantTest.destinationassistantTest.createdAtassistantTest.instructionsassistantTest.descriptionclient.ai.assistants.retrieve()GET /ai/assistants/{assistant_id}| Parameter | Type | Required | Description |
|---|---|---|---|
| string (UUID) | Yes | |
| string (UUID) | No | |
| boolean | No | |
| string (E.164) | No | |
| ... | +1 optional params in references/api-details.md |
const assistant = await client.ai.assistants.retrieve('550e8400-e29b-41d4-a716-446655440000');
console.log(assistant.id);assistant.idassistant.nameassistant.createdAtassistant.descriptionassistant.dynamicVariablesassistant.dynamicVariablesWebhookUrlclient.ai.assistants.retrieve()GET /ai/assistants/{assistant_id}| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
| string (UUID) | 是 | |
| string (UUID) | 否 | |
| boolean | 否 | |
| string (E.164) | 否 | |
| ... | 还有1个可选参数见references/api-details.md |
const assistant = await client.ai.assistants.retrieve('550e8400-e29b-41d4-a716-446655440000');
console.log(assistant.id);assistant.idassistant.nameassistant.createdAtassistant.descriptionassistant.dynamicVariablesassistant.dynamicVariablesWebhookUrlclient.ai.assistants.update()POST /ai/assistants/{assistant_id}| Parameter | Type | Required | Description |
|---|---|---|---|
| string (UUID) | Yes | |
| string | No | |
| string | No | ID of the model to use. |
| string | No | System instructions for the assistant. |
| ... | +16 optional params in references/api-details.md |
const assistant = await client.ai.assistants.update('550e8400-e29b-41d4-a716-446655440000');
console.log(assistant.id);assistant.idassistant.nameassistant.createdAtassistant.descriptionassistant.dynamicVariablesassistant.dynamicVariablesWebhookUrlclient.ai.assistants.update()POST /ai/assistants/{assistant_id}| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
| string (UUID) | 是 | |
| string | 否 | |
| string | 否 | 要使用的模型ID。 |
| string | 否 | 助手的系统指令。 |
| ... | 还有16个可选参数见references/api-details.md |
const assistant = await client.ai.assistants.update('550e8400-e29b-41d4-a716-446655440000');
console.log(assistant.id);assistant.idassistant.nameassistant.createdAtassistant.descriptionassistant.dynamicVariablesassistant.dynamicVariablesWebhookUrlclient.ai.assistants.list()GET /ai/assistantsconst assistantsList = await client.ai.assistants.list();
console.log(assistantsList.data);assistantsList.dataidnamecreatedAtdescriptiondynamicVariablesdynamicVariablesWebhookUrlclient.ai.assistants.list()GET /ai/assistantsconst assistantsList = await client.ai.assistants.list();
console.log(assistantsList.data);assistantsList.dataidnamecreatedAtdescriptiondynamicVariablesdynamicVariablesWebhookUrlclient.ai.assistants.imports()POST /ai/assistants/import| Parameter | Type | Required | Description |
|---|---|---|---|
| enum (elevenlabs, vapi, retell) | Yes | The external provider to import assistants from. |
| string | Yes | Integration secret pointer that refers to the API key for th... |
| array[string] | No | Optional list of assistant IDs to import from the external p... |
const assistantsList = await client.ai.assistants.imports({
api_key_ref: 'api_key_ref',
provider: 'elevenlabs',
});
console.log(assistantsList.data);assistantsList.dataidnamecreatedAtdescriptiondynamicVariablesdynamicVariablesWebhookUrlclient.ai.assistants.imports()POST /ai/assistants/import| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
| enum (elevenlabs, vapi, retell) | 是 | 要导入助手的外部服务商。 |
| string | 是 | 指向服务商API密钥的集成密钥指针... |
| array[string] | 否 | 可选的要从外部服务商导入的助手ID列表... |
const assistantsList = await client.ai.assistants.imports({
api_key_ref: 'api_key_ref',
provider: 'elevenlabs',
});
console.log(assistantsList.data);assistantsList.dataidnamecreatedAtdescriptiondynamicVariablesdynamicVariablesWebhookUrlclient.ai.assistants.tags.list()GET /ai/assistants/tagsconst tags = await client.ai.assistants.tags.list();
console.log(tags.tags);tags.tagsclient.ai.assistants.tags.list()GET /ai/assistants/tagsconst tags = await client.ai.assistants.tags.list();
console.log(tags.tags);tags.tagsclient.ai.assistants.tests.list()GET /ai/assistants/tests| Parameter | Type | Required | Description |
|---|---|---|---|
| string | No | Filter tests by test suite name |
| string | No | Filter tests by communication channel (e.g., 'web_chat', 'sm... |
| string | No | Filter tests by destination (phone number, webhook URL, etc.... |
| ... | +1 optional params in references/api-details.md |
// Automatically fetches more pages as needed.
for await (const assistantTest of client.ai.assistants.tests.list()) {
console.log(assistantTest.test_id);
}assistantTest.dataassistantTest.metanamecreatedAtdescriptiondestinationinstructionsmaxDurationSecondsclient.ai.assistants.tests.list()GET /ai/assistants/tests| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
| string | 否 | 按测试套件名称筛选测试 |
| string | 否 | 按通信渠道筛选测试(例如'web_chat'、'sm... |
| string | 否 | 按接收方筛选测试(电话号码、webhook URL等... |
| ... | 还有1个可选参数见references/api-details.md |
// Automatically fetches more pages as needed.
for await (const assistantTest of client.ai.assistants.tests.list()) {
console.log(assistantTest.test_id);
}assistantTest.dataassistantTest.metanamecreatedAtdescriptiondestinationinstructionsmaxDurationSecondsclient.ai.assistants.tests.testSuites.list()GET /ai/assistants/tests/test-suitesconst testSuites = await client.ai.assistants.tests.testSuites.list();
console.log(testSuites.data);testSuites.datadataclient.ai.assistants.tests.testSuites.list()GET /ai/assistants/tests/test-suitesconst testSuites = await client.ai.assistants.tests.testSuites.list();
console.log(testSuites.data);testSuites.datadataclient.ai.assistants.tests.testSuites.runs.list()GET /ai/assistants/tests/test-suites/{suite_name}/runs| Parameter | Type | Required | Description |
|---|---|---|---|
| string | Yes | |
| string (UUID) | No | Filter runs by specific suite execution batch ID |
| string | No | Filter runs by execution status (pending, running, completed... |
| object | No | Consolidated page parameter (deepObject style). |
// Automatically fetches more pages as needed.
for await (const testRunResponse of client.ai.assistants.tests.testSuites.runs.list('suite_name')) {
console.log(testRunResponse.run_id);
}testRunResponse.datatestRunResponse.metastatuscreatedAtupdatedAtcompletedAtconversationIdconversationInsightsIdclient.ai.assistants.tests.testSuites.runs.list()GET /ai/assistants/tests/test-suites/{suite_name}/runs| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
| string | 是 | |
| string (UUID) | 否 | 按特定套件执行批次ID筛选运行记录 |
| string | 否 | 按执行状态筛选运行记录(pending、running、completed... |
| object | 否 | 统一分页参数(deepObject格式)。 |
// Automatically fetches more pages as needed.
for await (const testRunResponse of client.ai.assistants.tests.testSuites.runs.list('suite_name')) {
console.log(testRunResponse.run_id);
}testRunResponse.datatestRunResponse.metastatuscreatedAtupdatedAtcompletedAtconversationIdconversationInsightsId| Operation | SDK method | Endpoint | Use when | Required params |
|---|---|---|---|---|
| Trigger test suite execution | | | Trigger a follow-up action in an existing workflow rather than creating a new top-level resource. | |
| Get assistant test by ID | | | Fetch the current state before updating, deleting, or making control-flow decisions. | |
| Update an assistant test | | | Modify an existing resource without recreating it. | |
| Delete an assistant test | | | Remove, detach, or clean up an existing resource. | |
| Get test run history for a specific test | | | Fetch the current state before updating, deleting, or making control-flow decisions. | |
| Trigger a manual test run | | | Trigger a follow-up action in an existing workflow rather than creating a new top-level resource. | |
| Get specific test run details | | | Fetch the current state before updating, deleting, or making control-flow decisions. | |
| Delete an assistant | | | Remove, detach, or clean up an existing resource. | |
| Get Canary Deploy | | | Fetch the current state before updating, deleting, or making control-flow decisions. | |
| Create Canary Deploy | | | Create or provision an additional resource when the core tasks do not cover this flow. | |
| Update Canary Deploy | | | Modify an existing resource without recreating it. | |
| Delete Canary Deploy | | | Remove, detach, or clean up an existing resource. | |
| Assistant Sms Chat | | | Run assistant chat over SMS instead of direct API chat. | |
| Clone Assistant | | | Trigger a follow-up action in an existing workflow rather than creating a new top-level resource. | |
| List scheduled events | | | Fetch the current state before updating, deleting, or making control-flow decisions. | |
| Create a scheduled event | | | Create or provision an additional resource when the core tasks do not cover this flow. | |
| Get a scheduled event | | | Fetch the current state before updating, deleting, or making control-flow decisions. | |
| Delete a scheduled event | | | Remove, detach, or clean up an existing resource. | |
| Add Assistant Tag | | | Create or provision an additional resource when the core tasks do not cover this flow. | |
| Remove Assistant Tag | | | Remove, detach, or clean up an existing resource. | |
| Get assistant texml | | | Fetch the current state before updating, deleting, or making control-flow decisions. | |
| Add Assistant Tool | | | Modify an existing resource without recreating it. | |
| Remove Assistant Tool | | | Remove, detach, or clean up an existing resource. | |
| Test Assistant Tool | | | Trigger a follow-up action in an existing workflow rather than creating a new top-level resource. | |
| Get all versions of an assistant | | | Fetch the current state before updating, deleting, or making control-flow decisions. | |
| Get a specific assistant version | | | Fetch the current state before updating, deleting, or making control-flow decisions. | |
| Update a specific assistant version | | | Create or provision an additional resource when the core tasks do not cover this flow. | |
| Delete a specific assistant version | | | Remove, detach, or clean up an existing resource. | |
| Promote an assistant version to main | | | Trigger a follow-up action in an existing workflow rather than creating a new top-level resource. | |
| List MCP Servers | | | Inspect available resources or choose an existing resource before mutating it. | None |
| Create MCP Server | | | Create or provision an additional resource when the core tasks do not cover this flow. | |
| Get MCP Server | | | Fetch the current state before updating, deleting, or making control-flow decisions. | |
| Update MCP Server | | | Modify an existing resource without recreating it. | |
| Delete MCP Server | | | Remove, detach, or clean up an existing resource. | |
| List Tools | | | Inspect available resources or choose an existing resource before mutating it. | None |
| Create Tool | | | Create or provision an additional resource when the core tasks do not cover this flow. | |
| Get Tool | | | Fetch the current state before updating, deleting, or making control-flow decisions. | |
| Update Tool | | | Modify an existing resource without recreating it. | |
| Delete Tool | | | Remove, detach, or clean up an existing resource. | |
| 操作 | SDK方法 | 端点 | 适用场景 | 必填参数 |
|---|---|---|---|---|
| 触发测试套件执行 | | | 在现有工作流中触发后续操作,而非创建新的顶层资源。 | |
| 根据ID获取助手测试 | | | 在更新、删除资源或做控制流决策前,先获取当前状态。 | |
| 更新助手测试 | | | 修改现有资源,无需重新创建。 | |
| 删除助手测试 | | | 移除、解绑或清理现有资源。 | |
| 获取特定测试的运行历史 | | | 在更新、删除资源或做控制流决策前,先获取当前状态。 | |
| 触发手动测试运行 | | | 在现有工作流中触发后续操作,而非创建新的顶层资源。 | |
| 获取特定测试运行详情 | | | 在更新、删除资源或做控制流决策前,先获取当前状态。 | |
| 删除助手 | | | 移除、解绑或清理现有资源。 | |
| 获取灰度发布配置 | | | 在更新、删除资源或做控制流决策前,先获取当前状态。 | |
| 创建灰度发布配置 | | | 当核心任务未覆盖该流程时,用于创建或配置额外资源。 | |
| 更新灰度发布配置 | | | 修改现有资源,无需重新创建。 | |
| 删除灰度发布配置 | | | 移除、解绑或清理现有资源。 | |
| 助手短信对话 | | | 通过SMS运行助手对话,而非直接调用API对话。 | |
| 克隆助手 | | | 在现有工作流中触发后续操作,而非创建新的顶层资源。 | |
| 列出定时事件 | | | 在更新、删除资源或做控制流决策前,先获取当前状态。 | |
| 创建定时事件 | | | 当核心任务未覆盖该流程时,用于创建或配置额外资源。 | |
| 获取定时事件 | | | 在更新、删除资源或做控制流决策前,先获取当前状态。 | |
| 删除定时事件 | | | 移除、解绑或清理现有资源。 | |
| 添加助手标签 | | | 当核心任务未覆盖该流程时,用于创建或配置额外资源。 | |
| 移除助手标签 | | | 移除、解绑或清理现有资源。 | |
| 获取助手Texml | | | 在更新、删除资源或做控制流决策前,先获取当前状态。 | |
| 添加助手工具 | | | 修改现有资源,无需重新创建。 | |
| 移除助手工具 | | | 移除、解绑或清理现有资源。 | |
| 测试助手工具 | | | 在现有工作流中触发后续操作,而非创建新的顶层资源。 | |
| 获取助手所有版本 | | | 在更新、删除资源或做控制流决策前,先获取当前状态。 | |
| 获取特定助手版本 | | | 在更新、删除资源或做控制流决策前,先获取当前状态。 | |
| 更新特定助手版本 | | | 当核心任务未覆盖该流程时,用于创建或配置额外资源。 | |
| 删除特定助手版本 | | | 移除、解绑或清理现有资源。 | |
| 将助手版本升级为正式版 | | | 在现有工作流中触发后续操作,而非创建新的顶层资源。 | |
| 列出MCP服务器 | | | 在修改资源前,查看可用资源或选择现有资源。 | 无 |
| 创建MCP服务器 | | | 当核心任务未覆盖该流程时,用于创建或配置额外资源。 | |
| 获取MCP服务器 | | | 在更新、删除资源或做控制流决策前,先获取当前状态。 | |
| 更新MCP服务器 | | | 修改现有资源,无需重新创建。 | |
| 删除MCP服务器 | | | 移除、解绑或清理现有资源。 | |
| 列出工具 | | | 在修改资源前,查看可用资源或选择现有资源。 | 无 |
| 创建工具 | | | 当核心任务未覆盖该流程时,用于创建或配置额外资源。 | |
| 获取工具 | | | 在更新、删除资源或做控制流决策前,先获取当前状态。 | |
| 更新工具 | | | 修改现有资源,无需重新创建。 | |
| 删除工具 | | | 移除、解绑或清理现有资源。 | |