永远先判断 ok。之后再读 result(成功)或 description + error_code(失败)。
总览
所有方法返回同一信封,你只需写一个解析器并到处复用。
// 成功
{ "ok": true, "result": { ... } }
// 失败
{ "ok": false, "description": "可读的错误信息", "error_code": 401 }
错误码
码 | 含义 | 常见原因与处理 |
400 | 请求无效 | 缺字段或消息不存在——修正参数。 |
401 | 未授权 | token 无效或已 revoke——检查 token。 |
403 | 禁止 | 权限不足或消息归属不符。 |
409 | 冲突 | Webhook 启用时调用了 getUpdates。 |
429 | 限流 | 超过 30 req/s——退避后重试。 |
500 | 服务端错误 | 按下方重试策略处理。 |
50001 | MP 业务错误 | 被业务层拒绝——查阅 |
501 | 未实现 | 当前不支持该方法(见方法矩阵)。 |
鉴权有效时,未知 API 方法返回 JSON 404,已知接口使用不支持的 HTTP 请求方式返回 JSON 405。鉴权和限流可能先返回 401 或 429。
处理 409
调用 getWebhookInfo 确认 Webhook 配置。请勿自行执行 deleteWebhook——它是高危受控操作。请联系维护者处理冲突。
错误处理示例
async function readBotResponse(res) {
const data = await res.json().catch(() => null);
if (!res.ok || data?.ok !== true) {
const error = new Error("MPChat Bot API request failed");
error.httpStatus = res.status;
error.apiCode = data?.error_code;
throw error;
}
return data.result;
}
重试策略
遇到
429时先降低请求速率,再按有上限的指数退避重试。若响应给出等待时间,按该时间等待。请求超时、连接断开或返回
5xx后,发送操作可能已经成功。重放写请求前先用自己的操作记录核对结果。重复调用sendMessage可能发出两条消息。遇到
400、401、403,先修正参数、凭证或权限。遇到
409,按下方的轮询与 Webhook 指南检查当前投递模式。
相关文章
错误上报中绝不记录完整 token 或敏感字段。脱敏规则见生产检查清单。
