企业微信机器人返回 45009 错误表示接口调用频率超限,最推荐的处理方向是降低发送频率或合并消息内容,适用场景为自定义机器人 webhook 推送,风险边界在于修改发送逻辑可能影响消息实时性。
先说结论:错误 45009 代表触发了企业微信自定义机器人的频率限制,需立即调整发送策略而非重试。
- 先确认:检查日志确认报错代码确为 45009 且来自 webhook 接口。
- 先处理:在代码层增加发送间隔或合并多条通知为一条消息。
- 再验证:观察后续请求是否不再返回 45009 且消息送达正常。
快速处理思路
由于这是接口逻辑限制,无法通过命令行修复,需调整业务代码逻辑。
- 临时止血:暂停非关键报警推送,保留核心故障通知。
- 中期优化:引入消息队列,控制消费速率至每分钟 20 条以内。
- 长期方案:若业务需要高频推送,改用企业微信“应用消息”接口。
为什么会这样
企业微信对自定义机器人设置了严格的频率限制以防止滥用。
根据企业微信官方文档,每个自定义机器人每分钟最多发送 20 条消息。当业务系统并发报警或循环重试时,极易超过该阈值,触发 45009 频率限制错误。这不是网络问题,而是配额耗尽。
分步处理
步骤 1:定位触发源
检查应用日志,筛选 http 状态码 200 但返回 json 中 errcode 为 45009 的记录。确认是哪个机器人 Key 触发了限制。
步骤 2:实施限流
在发送函数前增加令牌桶或计数器。确保单一机器人 Key 在一分钟内发送请求不超过 20 次。若超过,将消息暂存至队列延迟发送。
步骤 3:消息合并
修改消息模板,将同一分钟内的多条报警合并为一条列表消息。例如将 10 条“服务器 CPU 高”合并为 1 条“共有 10 台服务器 CPU 异常”。
步骤 4:切换接口(如需)
若每分钟 20 条无法满足需求,创建企业微信自建应用,使用“应用消息”接口。该接口配额更高,但配置复杂度增加。
怎么验证是否生效
观察日志中 45009 错误消失,且接收端消息内容完整。可通过脚本模拟高频发送,确认限流逻辑是否拦截了超额请求。
常见坑
- 盲目重试:遇到 45009 立即重试会加剧限制,必须等待或降级。
- 多实例累加:多个服务实例使用同一个机器人 Key,频率会累加,需分布式限流。
- 忽略配额:未统计每分钟发送量,仅靠经验估算导致偶发超限。
常见问题
45009 错误是 IP 被封禁了吗?
不是,45009 仅代表接口调用频率超限,IP 封禁通常返回其他错误码。
能否通过申请提高自定义机器人配额?
不能,自定义机器人配额固定,高频需求需切换至自建应用消息接口。
消息合并会影响报警及时性吗?
会引入少量延迟,但能确保消息送达,建议在非核心报警场景使用。
参考来源
- 企业微信官方文档 - 自定义机器人:https://developer.work.weixin.qq.com/document/path/91770
- 企业微信官方文档 - 全局错误码说明:https://developer.work.weixin.qq.com/document/path/90485