在企业微信 API 开发中,部分业务需要较长时间才能完成,比如订单同步、批量数据处理、文件生成等。
客户发送请求后,后台可能需要几分钟才能返回结果。如果只在收到消息时回复一次,后续任务完成后没有通知,客户就需要反复询问处理进度。
使用星云API对接企业微信消息时,可以通过异步任务和主动消息推送,将最终业务结果发送到对应客户。
相关接口参考顶部星云官网卡片里的接口文档 。
一、收到请求时保存客户信息
长耗时业务不能只记录任务内容,还需要保存消息来源。
建议记录以下字段:
| 字段 | 作用 |
|---|---|
| taskId | 任务唯一标识 |
| customerId | 客户标识 |
| roomId | 群聊标识 |
| chatType | 单聊或群聊 |
| status | 任务执行状态 |
| notifyStatus | 结果通知状态 |
其中,客户ID和群聊ID需要分别保存,避免同一个客户在多个群聊发起请求时出现消息错发。
二、消息回复与业务执行分开
收到客户请求后,可以先创建后台任务,再立即返回受理消息。
例如:
任务编号:TASK1001
您的请求已收到,正在处理中。
处理完成后将通知您。
后台继续执行实际业务,不需要一直保持消息回调连接。
三、任务完成后主动推送结果
整体处理流程可以设计为:
客户发送企业微信消息
↓
解析消息并保存会话信息
↓
生成taskId并创建任务
↓
回复客户:正在处理中
↓
后台异步执行业务
↓
更新任务最终状态
↓
根据taskId查询原始会话
↓
调用企业微信消息发送接口
↓
记录通知发送结果
例如订单同步完成后,可以返回:
任务编号:TASK1001
处理状态:已完成
同步订单:100条
成功:98条
失败:2条
如果任务失败,则根据实际错误原因返回相应提示,不建议直接将内部服务器错误信息发送给客户。
四、如何保证推送准确
1. 通过任务ID定位客户
任务创建时就绑定客户ID、原始群聊ID和业务参数。任务完成后直接读取关联记录,不要根据昵称重新查找客户。
2. 区分单聊和群聊
单聊结果发送给对应客户,群聊结果发送到原始群。涉及指定成员提醒时,还需要确认接口支持的成员标识和提醒方式。
3. 防止重复推送
可以为每条任务结果建立独立通知记录,保存通知ID和发送状态,避免任务重复回调导致多次通知。
4. 处理消息发送失败
消息发送接口返回异常时,记录失败原因并根据错误类型决定是否重试。对于超时且结果未知的发送请求,应先核实状态,尽量避免重复通知。
5. 业务状态和通知状态分开
业务执行成功,不代表消息已经成功发送。
例如:
{
"taskId": "TASK1001",
"taskStatus": "SUCCESS",
"notifyStatus": "PENDING"
}
这样即使通知失败,也不需要重新执行已经完成的业务,只需要处理消息补发。
五、总结
企业微信 API 处理长耗时业务时,关键是将消息接收、后台任务和结果通知分开管理。
通过任务ID绑定会话、异步执行、主动消息推送和通知状态记录,可以确保业务完成后能够准确找到对应客户,并减少消息错发、漏发和重复推送。
本文介绍如何在企业微信API中处理长耗时业务(如订单同步、批量处理),通过异步任务机制分离消息接收与业务执行,在任务完成后基于客户ID和群聊ID精准主动推送结果。重点涵盖客户信息保存、任务ID绑定、单/群聊区分、防重复推送、消息失败重试及业务与通知状态解耦等关键技术点,确保消息准确、可靠、不漏发。
147

被折叠的 条评论
为什么被折叠?



