微信机器人遇到复杂任务怎么办?个人微信二次开发中的状态管理思路

发布时间:2026/9/2 16:16:23
微信机器人遇到复杂任务怎么办?个人微信二次开发中的状态管理思路 简单任务是收一条→回一条一问一答复杂任务是多轮对话 多步执行 中间状态。用户对 Eyun 接入的机器人说帮我订明天去北京的票机器人得追问几点的高铁还是飞机每步都有状态要记。状态管不好机器人第二天就忘了用户昨天说到哪。复杂任务的状态管理不是一锅炖按状态类型分三类来说。一、会话状态当前对话进行到哪一步用户说订票→进入订票流程→状态记录 {stage: 询问时间, intent: 订票, params: {目的地: 北京}}→用户回下午 3 点→状态更新 {stage: 询问交通方式, params: {目的地: 北京, 时间: 下午3点}}→用户回高铁→状态更新 {stage: 执行查询, params: {...方式: 高铁}}→查到结果→sendText 回复。Eyun Webhook 回调感知用户每步回复并更新状态。按 Eyun 开发文档 的回调规范Webhook 回调 JSON 含 content 和 fromUser 字段机器人据此推进会话状态机。大白话会话状态是走到第几步了的记录——像导航软件显示您在 RouteStep 2/5。二、任务状态当前任务执行到哪个环节订票任务有 5 个环节查询车次 → 选座 → 下单 → 支付 → 出票每个环节有状态pending / running / success / failed。某环节 failed 触发补偿——重试或通知人工介入。任务状态持久化到数据库Redis 存进行中的、MySQL 存最终结果。Eyun 的 sendText 在任务关键环节发进度通知用户能实时看到已下单已出票。核心是环节可恢复——进程崩了重启后能从上次环节继续。大白话任务状态是快递到哪了——下单了没、查了没、成了没、寄了没每步有进度。三、流程状态多任务之间的编排状态用户一次说订票 订酒店 安排接机→3 个任务并行执行。流程状态记录 3 个任务各自的进度 依赖关系订票成功才订酒店酒店成功才安排接机。某任务失败影响后续——票没订成就不订酒店了。流程状态机管理等票 → 等酒店 → 等接机的推进。在 Eyun 平台 管理的 wId 的 sendText 发每个任务的进度通知用户在一个会话里能看到整条流程链。大白话流程状态是项目管理看板——3 个任务各有进度有依赖的要等上游完成才能开始下游。三类状态对比状态类型管什么存储方式更新时机Eyun 接口大白话会话状态对话走到哪步Redis每条用户回复Webhook 回调导航 2/5任务状态任务执行到哪个环节RedisMySQL每个环节完成sendText 通知快递到哪了流程状态多任务编排MySQL依赖满足时sendText 通知项目看板统一管理器代码骨架class SessionState: # 会话状态机 def __init__(self, user): self.user, self.stage, self.params user, start, {} def advance(self, content): if self.stage ask_time: self.params[time] content; self.stage ask_mode elif self.stage ask_mode: self.params[mode] content; self.stage run_query return self.stage class TaskState: # 任务状态追踪 def __init__(self, task_id): self.id, self.step, self.status task_id, 0, pending def next_step(self): self.step 1; self.status running if self.step 5: self.status success return self.status class FlowState: # 流程状态编排 def __init__(self, tasks): self.tasks, self.deps tasks, {} def on_task_done(self, task, status): if status ! success: return [(d, cancelled) for d in self.deps.get(task, [])] return [(d, ready) for d in self.deps.get(task, [])]落地建议三类状态让复杂任务从无状态的单次回复升级到有状态的多步执行——会话状态管对话走到哪、任务状态管任务执行到哪个环节、流程状态管多任务怎么编排推进。没有状态管理机器人只能一问一答——用户说帮我订票机器人回好的然后什么也做不了。状态管理的核心是持久化——状态存 Redis快但可能丢 定期落 MySQL慢但不丢重启后可恢复。Webhook 回调和 sendText 参数细节见 Eyun 开发文档落地时先把三类状态的存储边界画清楚再写状态机逻辑比一上来就堆代码要稳。