永远先判断 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 | 未实现 | 当前不支持该方法(见方法矩阵)。 |
处理 409
调用 getWebhookInfo 确认 Webhook 配置。请勿自行执行 deleteWebhook——它是高危受控操作。请联系维护者处理冲突。
错误处理示例
const data = await res.json();
if (!data.ok) {
console.error({ error_code: data.error_code, description: data.description });
throw new Error(`Bot API ${data.error_code}: ${data.description}`);
}
return data.result;
重试策略
429、500:带上限的指数退避重试。
400、401、403:不重试——修正输入或权限。
409:先理清轮询与 Webhook 的互斥。
相关文章
错误上报中绝不记录完整 token 或敏感字段。脱敏规则见生产检查清单。
