错误处理与运维

错误处理与运维

自动重连机制

SDK 内置自动重连,无需开发者处理:

特性行为
连接断开自动重连,延迟 3 秒
重连次数无限重试(直到 release() 被调用)
心跳每 10 秒发送 Ping
Token刷新每次重连自动生成新 JWT(1小时有效期)
连接恢复后机器人会重新发送 online 事件

认证回调

java
agentSdk.registerAuth((appId, code, msg) -> {
    switch (code) {
        case 0    -> log.info("认证成功");
        case 1001 -> log.error("Token过期(不应出现,SDK自动刷新)");
        case 1004 -> log.error("签名验证失败,检查appKey/appSecret是否正确");
        case 1005 -> log.error("WebSocket握手失败");
        case 1006 -> log.error("未知异常: " + msg);
        default   -> log.error("认证错误: code={}, msg={}", code, msg);
    }
});

通过 Response 返回业务错误

当 SDK 端处理失败时,通过 response.onError() 通知机器人:

java
@Override
public void onRequest(String agentId, String eventId, int flag,
                      byte[] buf, AgentParam param, Audio2LlmResponse response) {
    try {
        // 业务处理...
    } catch (Exception e) {
        response.onError(eventId, 5001, "ASR服务超时");
    }
}

错误码约定

范围含义示例
0成功认证成功、请求确认成功
1000-1999认证/连接错误1001=Token过期, 1004=签名错误
2000-2999协议错误消息格式错误
3000-3999网关错误路由失败
4000-4999机器人端错误机器人不在线
5000-5999SDK端业务错误开发者自定义错误

资源释放

java
// 释放SDK实例(断开连接、清理所有注册的回调和缓存)
agentSdk.release();

release() 会执行:

  1. 设置 released 标志,停止自动重连
  2. 关闭 WebSocket 连接
  3. 清理 callbackType 注册
  4. 清理所有内部状态映射

注意release() 后同一 appId 可以重新 create() 获取新实例。

日志配置

SDK 使用 SLF4J + Logback,建议配置:

xml
<!-- 正常运行 -->
<logger name="com.agibot.aiem.sdk" level="INFO"/>

<!-- 调试消息收发 -->
<logger name="com.agibot.aiem.sdk.client" level="DEBUG"/>

<!-- 调试线程池 -->
<logger name="com.agibot.aiem.sdk.mgr" level="DEBUG"/>

常见问题排查

现象可能原因排查方式
认证失败 code=1004appKey / appSecret 错误,或签名串构造不一致检查 appKey / appSecret 值;服务端期望签名串 "GET\n{path}\n{timestamp}\n{nonce}"
连接成功但收不到消息回调注册在 initialize() 之后确保先注册回调再初始化
onRequest 不被调用机器人未上线或 callbackType 不匹配检查 onRobotOnline 是否触发
Response 方法调用无效Response 已超时清理(120秒)确保处理时间不超过120秒
内存持续增长未调用 release() 或大量 agentId 未 offline检查机器人生命周期管理