错误处理
1. 错误模型概览
SDK 中的错误分为两大类:
- SDK 本地错误(throw / Promise reject)
- 常见原因:参数缺失、依赖未注入、WebSocket 未连接、请求超时、软电话不可用、浏览器能力不支持等。
- 表现形式:
throw AgentSdkError/Promise.reject(AgentSdkError)
- 服务端业务失败(请求已返回,但
code非 0)
- 常见原因:权限不足、状态不合法、号码限制 / 风控拦截等。
- 表现形式:操作 Promise 会 resolve,但
code !== 0,同时返回message和可选的errorCode
强烈建议:同时处理“异常(try/catch)”和“已返回但
code !== 0”这两种情况。
2. SDK 本地错误:AgentSdkError(必须处理)
AgentSdkError(必须处理)2.1 错误对象结构
name:恒为AgentSdkErrorcode:错误码(字符串)message:可读错误信息details?:可选的额外上下文(任意类型)
2.2 内置错误码(ErrorCodes)
| code | 含义 | 常见触发场景 | 推荐处理方式 |
|---|---|---|---|
| NOT_INITIALIZED | SDK 未初始化 | 在调用 setup() 之前就执行 login/previewObCall/... | 应用启动时先调用 setup() |
| INVALID_PARAMS | 参数非法/缺失 | login 缺字段、号码为空、类型错误等 | 按文档校验参数 |
| MISSING_DEP | 缺少依赖 | 必需依赖未注入/未加载(WS/SIP 等) | 确认依赖已正确提供 |
| WS_NOT_CONNECTED | WebSocket 未连接 | 未登录或断线状态下调用依赖 WS 的操作 | 先登录;断线后重新登录 |
| REQUEST_TIMEOUT | 请求超时 | WS 建连超时、响应超时 | 提示重试;记录网络质量 |
| SIP_NOT_AVAILABLE | SIP/软电话不可用 | 软电话未就绪 / UA 未准备好 | 检查 webrtc 配置与软电话状态 |
| MEDIA_NOT_SUPPORTED | 媒体能力不支持 | 浏览器不支持 / 无权限 / 无设备 | 更换浏览器;检查权限和设备 |
3. 推荐写法(async/await)
try {
const res = await AgentSDK.previewObCall({ customerNumber: '13800138000' });
// 服务端业务失败:Promise resolve,但 code 非 0
if (res.code !== 0) {
console.error('[服务端失败]', res.errorCode, res.message);
return;
}
// 成功
} catch (err) {
// SDK 本地错误(或运行时/网络错误)
if (err && err.name === 'AgentSdkError') {
console.error('[SDK 错误]', err.code, err.message, err.details);
} else {
console.error('[未知错误]', err);
}
}4. 服务端业务错误:errorCode(领域相关)
errorCode(领域相关)4.1 标准响应字段
code:0 表示成功;非 0 表示失败(本文档中常用-1表示失败)message:可读失败原因errorCode?:可选业务错误码(数字或字符串)
4.2 示例:预览外呼 errorCode
errorCode预览外呼的业务错误码通常与业务域/租户配置相关。集成阶段建议对 errorCode 做好日志记录与上报,便于排障和售后支持。