本文中的 DocOnly、L0–L3 用于说明本指南的测试执行约束与操作风险,不代表接口是否受支持。接口支持状态应另查官方文档;修改消息、会话或投递配置前,请核对目标和恢复方式。
上线前逐项打勾。核对 token 管理、事件投递和重试,以及高风险方法的操作约束。
总览
按关注点分组的上线前清单,配合末尾的冒烟测试一起用。
Token 安全
token 仅存密钥管理 / 环境变量,绝不进仓库。
生产与测试 Bot 分离 token。
CI/CD 注入密钥;不打印到 build log。
制定 token 泄露轮换 SOP。
Webhook 安全
HTTPS 公网 URL。
配置
secret_token并校验X-MpChat-Bot-Api-Secret-Token头。Webhook endpoint 不暴露管理接口。
先在测试环境验证,再对生产执行
setWebhook。
限流与重试
客户端限流 ≤ 每 token 每秒 30 次。
遇到
429时退避。遇到500或请求超时时,先确认该操作能安全重试,再决定是否重发。遇到400/401/403时先排查错误。遇到409时检查是否启用了 Webhook。批量操作控制并发。
日志脱敏
日志不出现 token、完整
initData或用户敏感字段。错误上报配置脱敏规则。
访问日志不记录含 secret 的完整 webhook URL。
高危 API(DocOnly,需审批 + 回滚方案)
logOut、leaveChat、deleteMessage(s)、banChatMember、setWebhook、deleteWebhook。部署流水线不包含上述方法的自动调用。
运维手册记录审批人与回滚步骤。
冒烟测试
getMe——token 有效。getWebhookInfo——URL 正确。模拟用户消息——Webhook 收到 update。
sendMessage——回复成功。(如有)
initData验签通过。用测试 Bot 模拟 Webhook 投递失败,确认重投沿用原
update_id,并核对业务动作只执行一次。如使用回调按钮,确认首次应答成功、重复应答返回 HTTP 400。
在测试私聊中屏蔽 Bot,确认发送、转发、复制均返回 HTTP 403。解除屏蔽后,确认新消息发送成功。
为什么会重复投递?待投递数为 0 代表什么?
Webhook 重投沿用原
update_id。校验请求后,先按 Bot 和update_id组成的唯一键持久化更新,再返回 HTTP 2xx(如 200 或 204)。业务处理也要做到幂等,避免任务重跑时重复回复或重复修改状态。普通更新最多投递 24 小时。按钮回调更新最多投递 150 秒,
answerCallbackQuery另有 300 秒应答窗口。pending_update_count=0表示当前没有待投递更新。要确认哪些更新到达了服务,请查看getWebhookInfo的最近投递错误,并核对服务端的接收和处理记录。
