用 Python 做企微外部群主动发送,第一版经常是:脚本里直接调一次发送,打印成功就下班。
线上跑几天开始出事——超时不知道有没有发出去、失败重试变双发、群 ID 过期还在盲打。
更稳的做法是先实现最小任务闭环:业务下单 → 入队 → 发送 → 记结果。QiWe API 提供 RPA 侧能力,字段以文档为准,这里不编造参数。
闭环长什么样
业务事件(如项目上线) → 校验:群ID、主责设备、内容 → 创建发送任务(排队中) → Worker 领取(发送中) → 调用发送能力 → 成功:记凭证 / 失败:记原因 / 超时:标未知 → 未知:有限重试(先确认没成功过) → 超限:待人工告警别把「调通一个发送例子」当成闭环。没有状态和占坑,上线后一样会炸。
Python 侧两个角色
业务服务(Flask/FastAPI 均可)
接收业务系统请求,校验后写入任务表或 Redis 队列,立刻返回「已受理」。
Worker
按设备取队列,发送,回写状态。可用 RQ、Celery,或数据库轮询。一台开发机两个进程就能联调。
三条硬规矩(建议写进代码注释)
同一业务动作只能成功一次
例如钥匙:
项目ID + 上线通知。重试还用这把钥匙。超时先查再试
本地已是成功就停;不要
except Timeout: 再发一遍。设备必须仍在该外部群
不在就失败并告警,不要换默认号乱发。
建议联调顺序
对测试外部群发「探针-时间戳」,人眼确认可见
接一条真实业务通知,核对任务状态流转
人为制造超时,验证不会双发
再接批量与定时
日志最少记这些
业务单号、设备、目标群、状态、耗时、失败原因、第几次尝试。
客户说没收到时,靠日志两分钟定性,比扯「网络不好」有用。
小结
Python 做企微外部群发送,语法简单,难在任务账本清楚。
账本清楚了,自动化才敢放开;账本糊涂糊,功能越多事故越大。
实现细节见 QiWe API 文档