news 2026/9/2 16:16:17

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
微信机器人遇到复杂任务怎么办?个人微信二次开发中的状态管理思路

简单任务是"收一条→回一条"一问一答,复杂任务是"多轮对话 + 多步执行 + 中间状态"。用户对 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

任务状态

任务执行到哪个环节

Redis+MySQL

每个环节完成

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 开发文档,落地时先把三类状态的存储边界画清楚,再写状态机逻辑,比一上来就堆代码要稳。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 16:15:38

兰博基尼Temerario对比911 Turbo S:马力之外的门道

把新兰博基尼 Temerario 和保时捷 911 Turbo S 放到同一个对比里,大多数人最先看到的数字差是马力:Temerario 综合输出接近 920 马力,911 Turbo S 是 650 马力。只看这个差距,好像没什么可聊的。但只要你真的研究过两台车的定位、…

作者头像 李华
网站建设 2026/9/2 16:15:13

开题报告写不出来?书霸AI的万能方法救你,官网www.shubaai.com

有没有一种可能:不管你的开题报告卡在哪一步,都有一套通用的方法能帮你走下去?答案是有的。开题报告虽然内容各异,但写作的逻辑是相通的。今天就用书霸AI官网www.shubaai.com,给你一套“万能方法”,无论你卡…

作者头像 李华
网站建设 2026/9/2 16:09:09

传感器数据上云怎么做端到端加密:从设备身份到安全通道

传感器数据上云的安全问题,可以拆成两个独立又衔接的环节:先确认“谁在发数据”,再保护“数据怎么传”。前者是设备身份认证,后者是安全通道建立。第一步:设备身份是地基没有可靠身份认证的加密通道是危险的——通道可…

作者头像 李华
网站建设 2026/9/2 16:06:58

LeetCode hot100——K 个一组翻转链表

题目 给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。 k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 你不能只是单纯的改变节点内…

作者头像 李华
网站建设 2026/9/2 16:06:37

RK3588 WebRTC 实时流卡顿优化:从视频桥接到 H.264 PTS 回退

总结:这次卡顿不是单纯的网络丢包或编码帧率不足,而是先由跨 pipeline 视频桥接和缩放增加了处理负担,后又暴露出 H.264 B 帧导致的非单调 PTS;最终通过 appsink/appsrc 直连、限制 videorate 补帧,并让不满足 PTS 条件…

作者头像 李华
网站建设 2026/9/2 16:05:44

AI漫剧制作教程:人机协作的半自动流程,从剧本到成片

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华