Skip to content

错误处理

先判断 HTTP 状态,再判断响应体中的 code

场景处理建议
401 / 403,或 Token 相关消息停止当前访客请求,向业务服务端刷新访客 Token 后重新进入 /visitor
code: -1(客服端)客服登录态失效,跳转登录页。
code: 1 / 2参数缺失、业务校验失败或无权限,展示 msg 并不要盲目重试。
429 或“频率过快”退避后重试,避免并发重复发送。
5xx 或推送失败保留本地待发送状态,重新拉取消息历史确认是否已落库。

消息发送应使用 tmp_mid 做幂等展示:先显示本地待发送消息,收到相同 tmp_mid 的回执或实时事件后替换为服务端 mid

统一处理顺序

text
收到响应

HTTP 是否为 2xx?──否──→ 处理网络/鉴权/服务端错误
  ↓ 是
响应是否为 JSON 且 code 为 0?──否──→ 展示 msg,按业务码决定是否重试
  ↓ 是
更新本地状态,等待或合并实时事件

多数业务校验失败仍使用 HTTP 200,因此不能只判断 fetch 或 XHR 的成功回调。

常见响应形态

普通接口使用:

json
{
  "code": 1,
  "msg": "错误说明",
  "data": []
}

访客 Token 缺失、无效或过期时,服务端会返回对应 HTTP 状态和同样的 JSON 信封。客服接口在未登录时通常返回:

json
{ "code": -1, "msg": "请登录", "data": [] }

重试策略

场景是否自动重试正确处理
网络短暂断开、Socket 重连可以使用退避;恢复后重新订阅并补拉历史。
消息发送超时谨慎先以 tmp_mid、消息历史和实时事件确认是否已落库,再决定重试。
访客 Token 无效不直接重试原请求向业务服务端获取新 Token,重新进入访客页。
客服登录态失效不直接重试跳转登录,登录成功后重新初始化工作台。
参数/权限/业务校验失败展示 msg,修正输入或权限后由用户重新操作。
限流可以遵循提示延迟重试,避免立即并发重放。
服务端 5xx谨慎记录上下文;写操作先查询最终状态,避免重复创建。

日志脱敏

排查时可以记录请求路径、HTTP 状态、业务 codemiduid(按业务规范脱敏)和请求时间。不得记录完整访客 Token、客服 Session Cookie、密码、API Key、appsecret 或上传文件的私密访问地址。