核心概念

错误码参考

Nexus AI 所有业务错误码完整参考

所有 API 错误遵循 Connect RPC 错误规范。业务错误在响应中包含结构化的 ErrorDetail

{
  "code": "unauthenticated",
  "message": "INVALID_TOKEN",
  "detail": {
    "@type": "type.googleapis.com/shared.v1.ErrorDetail",
    "errorCode": 1001,
    "errorName": "INVALID_TOKEN",
    "metadata": {}
  }
}

客户端应使用 errorCode 做程序化处理,errorName 用于日志记录。

错误格式

interface ErrorDetail {
  errorCode: number    // 数值型业务错误码
  errorName: string    // 可读标识符(如 "INVALID_TOKEN")
  metadata: Record<string, string>  // 可选上下文信息
}

常见 metadata 键:

说明
retry_after重试前等待的秒数(限流错误)
attempts_remaining锁定前剩余尝试次数

错误码分段

范围领域
1000–1999认证与登录
2000–2999用户与资料
3000–3999联系人
4000–4999群组
5000–5999会话
6000–6999消息
7000–7999Agent
8000–8999媒体与文件
9000–9999推送通知

认证与登录 (1000–1999)

Token 与会话 (1001–1099)

错误码名称HTTP 状态说明
1001INVALID_TOKEN401Token 格式错误、已撤销或无法识别
1002TOKEN_EXPIRED401Access Token 已过期,使用 RefreshToken 刷新
1003REFRESH_TOKEN_INVALID401Refresh Token 无效或已撤销
1004REFRESH_TOKEN_REUSED401Refresh Token 已被使用(可能被盗用,所有 Token 已撤销)
1005DEVICE_LIMIT_EXCEEDED429同时在线设备数过多
1006REFRESH_RATE_LIMITED429Token 刷新请求过于频繁,metadata.retry_after

网关连接 (1007–1099)

错误码名称HTTP 状态说明
1007INVALID_FRAME400WebSocket 帧格式错误
1008CONNECTION_REPLACED499同一用户在另一设备建立连接,当前连接被关闭

验证码 (1101–1199)

错误码名称HTTP 状态说明
1101VERIFY_CODE_RATE_LIMITED429短时间内请求验证码过于频繁,metadata.retry_after
1102VERIFY_CODE_DAILY_LIMIT429当日发送次数已达上限
1103VERIFY_CODE_SEND_FAILED500短信/邮件发送失败
1104VERIFY_TOKEN_EXPIRED404verify_token 已过期,需重新请求验证码
1105VERIFY_CODE_INVALID400验证码不正确
1106VERIFY_CODE_TOO_MANY_ATTEMPTS429错误尝试次数过多,metadata.attempts_remaining

密码 (1201–1299)

错误码名称HTTP 状态说明
1201INVALID_PASSWORD401密码错误
1202ACCOUNT_LOCKED429登录失败次数过多,账户被锁定
1203PASSWORD_TOO_WEAK400密码强度不足
1204RESET_TOKEN_INVALID404密码重置 Token 已过期或无效
1205PASSWORD_NOT_SET412账户未设置密码(使用 SetupPassword
1206SAME_PASSWORD400新密码与旧密码相同
1207PASSWORD_ALREADY_SET412账户已设置密码

身份验证 (1301–1399)

错误码名称HTTP 状态说明
1301INVALID_EMAIL400邮箱地址格式错误
1302INVALID_PHONE400手机号码格式错误

登录方式 (1401–1499)

错误码名称HTTP 状态说明
1401LOGIN_METHOD_NOT_ALLOWED400请求的登录方式(邮箱/手机)被服务端配置禁用

用户与资料 (2000–2999)

错误码名称HTTP 状态说明
2001USER_NOT_FOUND404目标用户不存在
2002USERNAME_TAKEN409用户名已被占用
2003USERNAME_ALREADY_CHANGED412用户名只能设置一次
2004INVALID_USERNAME_FORMAT400格式要求:5–32 字符,^[a-z][a-z0-9_]*$
2005PHONE_ALREADY_BOUND409手机号已绑定其他账户
2006EMAIL_ALREADY_BOUND409邮箱已绑定其他账户
2007NICKNAME_TOO_LONG400昵称超过 64 字符
2008SIGNATURE_TOO_LONG400签名超过 200 字符
2009DEVICE_NOT_FOUND404设备会话不存在
2010CANNOT_REMOVE_CURRENT_DEVICE400不能移除当前发起请求的设备
2011USERNAME_RESERVED400用户名为系统保留名称

联系人 (3000–3999)

错误码名称HTTP 状态说明
3001ALREADY_CONTACTS409已经是联系人
3002FRIEND_REQUEST_EXISTS409已有待处理的好友请求
3003FRIEND_REQUEST_NOT_FOUND404好友请求不存在
3004FRIEND_REQUEST_HANDLED412好友请求已被接受或拒绝
3005CANNOT_ADD_SELF400不能添加自己为联系人
3006USER_BLOCKED403操作被阻止——你或对方已屏蔽对方
3007NOT_CONTACTS412需要先成为联系人才能执行此操作
3008ALREADY_BLOCKED409已屏蔽该用户
3009NOT_BLOCKED412该用户不在你的黑名单中
3010AGENT_PRIVATE403Agent 为私有可见性,无法直接添加
3011USE_SEND_FRIEND_REQUEST412目标是普通用户——请使用 SendFriendRequest
3012USE_ADD_CONTACT412目标是 Agent——请使用 AddContact

群组 (4000–4999)

错误码名称HTTP 状态说明
4001GROUP_NOT_FOUND404群组不存在
4002GROUP_DISSOLVED412群组已被解散
4003NOT_GROUP_MEMBER403你不是该群组成员
4004NOT_GROUP_OWNER403仅群主可执行此操作
4005ALREADY_GROUP_MEMBER409用户已是群组成员
4006GROUP_MEMBER_LIMIT429群组成员数已达上限
4007GROUP_AGENT_LIMIT429群组 Agent 数已达上限
4008CANNOT_KICK_OWNER400不能移除群主
4009GROUP_NAME_INVALID400群名称为空或过长(1–64 字符)
4010USER_GROUP_LIMIT429用户已加入过多群组
4011INVITE_BLOCKED_USER403被邀请的用户已屏蔽你
4012OWNER_CANNOT_LEAVE403群主不能离开群组,只能解散
4013GROUP_TOO_FEW_MEMBERS412群组至少需要 2 名成员

会话 (5000–5999)

错误码名称HTTP 状态说明
5001CONVERSATION_NOT_FOUND404会话不存在
5002NOT_CONVERSATION_MEMBER403你不是该会话的参与者
5003CONVERSATION_READONLY412无法向此会话发送消息(如已删除、已静音)

消息 (6000–6999)

错误码名称HTTP 状态说明
6001MESSAGE_NOT_FOUND404该会话中不存在此消息
6002NOT_MESSAGE_SENDER403不是消息发送者(不能编辑/撤回他人消息)
6003RECALL_TIMEOUT412已超过 24 小时撤回时限
6004MESSAGE_ALREADY_RECALLED412消息已被撤回
6005INVALID_MESSAGE_TYPE400不支持或无法识别的消息类型
6006MESSAGE_TOO_LONG400消息内容超出大小限制
6007SEND_BLOCKED403你已被接收方屏蔽
6008DUPLICATE_MESSAGE409相同 client_message_id 的消息已存在
6009STREAM_NOT_FOUND404流式消息不存在或不在流式阶段
6010STREAM_SEQ_INVALID400流式增量序号乱序
6011CARD_ACTION_EXPIRED404卡片操作回调已过期(5 分钟 TTL)
6012STREAM_ALREADY_ENDED412流式消息已结束或出错
6013MESSAGE_TYPE_MISMATCH400编辑的消息类型与原始类型不匹配
6014NOT_CARD_MESSAGE412消息不是 CARD 类型(无法提交卡片操作)

Agent (7000–7999)

错误码名称HTTP 状态说明
7001AGENT_NOT_FOUND404Agent 不存在
7003AGENT_DELETED412Agent 已被删除
7004AGENT_USERNAME_TAKEN409Agent 用户名已被占用
7005NOT_AGENT_CREATOR403你不是该 Agent 的创建者
7006WEBHOOK_VERIFICATION_FAILED412Webhook URL 不可达或返回非 2xx
7007WEBHOOK_NOT_CONFIGURED412Agent 未配置 Webhook URL
7008IP_NOT_ALLOWED403请求 IP 不在 Agent 的 IP 白名单中
7009COMMANDS_LIMIT_EXCEEDED429注册的斜杠命令数量过多
7010AGENTROOT_ALREADY_EXISTS409AgentRoot 系统 Agent 已初始化
7011INVALID_DELIVERY_CONFIG400投递模式无效或缺少必填字段
7012DELIVERY_MODE_MISMATCH412事件投递模式与请求不匹配
7013MINI_APP_NOT_ENABLED412Agent 未启用 Mini App
7014INVALID_MINI_APP_URL400Mini App URL 无效
7015MINI_APP_ACCESS_DENIED403来源不在 Mini App 允许的 Origin 列表中

媒体与文件 (8000–8999)

错误码名称HTTP 状态说明
8001FILE_TOO_LARGE429文件超出大小限制(UploadFile 为 5 MB,分片上传为 100 MB)
8002UNSUPPORTED_FILE_TYPE400不允许的文件类型
8003UPLOAD_SESSION_EXPIRED404分片上传会话已超时
8004UPLOAD_SESSION_NOT_FOUND404上传会话 ID 不存在
8005CHUNK_OFFSET_INVALID400分片偏移量与期望位置不匹配
8006FILE_INCOMPLETE412尚未收到所有分片,无法完成上传
8007INVALID_PURPOSE400无效或无法识别的媒体用途
8008FILE_NOT_FOUND404请求的文件不存在
8009CHUNK_TOO_SMALL400单个分片低于最小大小要求

推送通知 (9000–9999)

错误码名称HTTP 状态说明
9001INVALID_PUSH_TOKEN400推送 Token 格式错误或为空
9002UNSUPPORTED_PUSH_PLATFORM400推送平台不是 APNs 或 FCM
9003PUSH_TOKEN_NOT_FOUND404该设备的推送 Token 未注册

客户端处理指南

Token 生命周期

1001 INVALID_TOKEN   → 重新认证(用户:登录,Agent:检查 Token)
1002 TOKEN_EXPIRED   → 调用 RefreshToken 刷新
1003 REFRESH_TOKEN_INVALID → 需要完整重新登录
1004 REFRESH_TOKEN_REUSED  → 需要完整重新登录(安全事件)

限流处理

收到 429 错误时,检查 metadata.retry_after

{"errorCode": 1101, "errorName": "VERIFY_CODE_RATE_LIMITED", "metadata": {"retry_after": "60"}}

等待指定秒数后重试。

幂等发送

DUPLICATE_MESSAGE(6008)不是失败——它表示消息已被接受。使用原始的 client_message_id 查找结果。

WebSocket 错误

网关错误通过 SERVER_FRAME_TYPE_ERROR 帧推送。致命错误(fatal: true)需要重新连接:

1007 INVALID_FRAME → 修正帧格式后重连
1008 CONNECTION_REPLACED → 另一会话接管,停止重连