在个人微信 API 开发中,消息发送可能受到网络波动、请求超时或服务端异常影响。
如果发送失败后直接丢弃任务,可能造成业务通知遗漏;如果不加判断地无限重试,又可能重复发送消息。
比较合理的方式是:区分错误类型,限制重试次数,并记录每次执行结果。
一、设计重试策略
① 网络超时等暂时性错误,可以考虑有限次数的重试。
② 参数错误、权限不足等问题,应先修复配置,而不是反复请求。
③ 对于发送结果不确定的超时情况,不要直接假设消息一定没有发出。
④ 每次任务应保留任务编号、重试次数和最终状态。
二、Python 示例
下面演示一个简单的有限次数重试框架。实际发送函数需要根据所用 API 实现。
import time def send_with_retry(send_func, max_attempts=3): for attempt in range(1, max_attempts + 1): try: result = send_func() # 这里应按实际接口响应判断业务是否成功 if result.get("success") is True: return result raise RuntimeError("接口返回业务失败") except Exception: if attempt == max_attempts: raise delay = 2 ** (attempt - 1) time.sleep(delay)这个示例使用指数退避:首次失败等待 1 秒,第二次失败等待 2 秒。生产环境还应区分可重试错误与不可重试错误,并设置最大等待时间。
三、如何避免重复发送?
重试机制并不能自动保证消息只发送一次。建议:
为业务消息生成唯一任务编号。
保存发送前后的任务状态。
若接口支持幂等键,应按接口规范使用。
请求超时且发送结果不明确时,先查询状态或进入人工核查流程。
记录最终失败任务,提供人工补发入口。
四、参考个人微信 API 文档
接入 GeWe API 时,需要先确认接口响应中的业务成功标识,以及接口是否支持查询发送结果或其他幂等机制,再设计重试逻辑。
文档:GeWe API - GeWe API|微信 API 开发文档
总结
微信自动化中的重试机制,重点不是“失败就再发一次”,而是明确哪些错误可以重试、最多重试多少次,以及如何处理结果不确定的情况。
CSDN标签:Python、微信自动化、个人微信API、微信机器人、异常处理
摘要:使用有限次数重试和指数退避处理消息发送异常,并通过任务状态降低重复发送风险。