返回博客

Telegram 多步骤机器人怎么设计:状态、取消与超时

把报名、报修和资料收集机器人拆成可恢复的步骤,明确会话状态、输入校验、取消、超时、并发与发布后的兼容规则。

发布于 2026年10月13日

很多报名、报修、预约和资料收集机器人都不可能在一条消息里完成。机器人先问姓名,再问日期,最后要求确认;用户可能答错、离开几小时、在群里同时发别的消息,甚至重新输入 /start。如果需求只写“依次提问”,上线后最容易出现的不是界面问题,而是答案串错、流程卡死和旧状态污染新流程。

多步骤机器人需要明确的状态机。状态机不是某个框架的专属功能,而是一种把“当前进行到哪一步、什么输入有效、下一步去哪”写清楚的方法。aiogram 的 FSM 文档把状态变化定义为由输入触发的转换;grammY 的 Conversations 文档则展示了等待指定输入、超时退出、持久化键和同一聊天中的并发会话等工程问题。

先把流程画成有限步骤

以活动报名为例,不要只列机器人要问的文案,而要为每一步写出输入、保存内容和离开条件。

| 状态 | 接受的输入 | 保存内容 | 下一步 | | --- | --- | --- | --- | | idle | /signup | 新建草稿 | ask_name | | ask_name | 非空文字 | 姓名 | ask_date | | ask_date | 合法日期或返回按钮 | 日期 | confirm | | confirm | 确认、修改或取消 | 提交或继续编辑 | done / 前一步 / cancelled |

每一步还应写明不接受什么。例如,在日期步骤收到照片时,是提示格式错误并保持当前步骤,还是把照片交给其他功能?没有这个规则,机器人可能把下一条无关消息误当成答案。

状态必须按正确的范围隔离

私聊中的简单流程通常可以按用户隔离;群组流程至少要同时考虑聊天和用户,否则两名成员并行报名时可能覆盖彼此的数据。若一个人允许同时发起多个工单,还需要额外的流程或工单标识。

需求中可以明确:

  • 私聊状态键使用“用户 + 流程”;
  • 群组状态键使用“群组 + 用户 + 流程”;
  • 草稿与正式业务记录分开保存;
  • 只有完成确认后才创建正式记录;
  • 同一个范围内再次启动时,先询问继续、重新开始还是取消旧流程。

不要把“机器人最后问到了所有问题”当成状态隔离已经正确。应至少用两个账号交叉发送答案,确认姓名、日期和确认结果不会串到另一名用户。

每一步都要有返回、取消和超时

用户会改变主意,也会中断对话。一个可恢复的流程至少需要三条出口:

  1. 返回:回到上一步,并说明旧值是否保留。
  2. 取消:结束当前流程,清理未提交草稿,同时保留已经完成的正式记录。
  3. 超时:超过约定时间后使草稿失效;用户再次回复时,明确提示流程已过期,而不是静默把答案写入新流程。

grammY 的 Conversations 文档允许为等待设置最长时间,并在超时或主动停止时退出会话。具体实现不必使用 grammY,但需求里应有同样的行为边界。

重启和发布后怎样继续

只存在内存里的“当前步骤”会随实例重启消失。Serverless 环境尤其不能假设下一条消息一定由同一个常驻进程处理。若流程必须跨多条消息持续,应把必要状态放到平台实际支持的持久化存储中,并控制数据量和保留时间。

发布新版本时还要考虑旧草稿:

  • 新代码能否识别旧状态名称和字段;
  • 删除某一步后,停留在该步骤的用户如何迁移;
  • 无法兼容时,是安全取消并提示重来,还是保留只读信息;
  • 回滚代码后,当前业务数据是否仍符合旧代码预期。

这与“代码发布成功”是两回事。真实验收应在流程中途发布一次新版本,再继续回复并检查结果。

可直接使用的需求模板

创建一个活动报名机器人。用户发送 /signup 后依次填写姓名和日期,再看到汇总确认。每个用户的草稿相互隔离;群组中按群组和用户隔离。任一步都支持返回和 /cancel。文字或日期格式错误时保留当前步骤并给出示例。30 分钟无操作后草稿过期,再回复时提示重新开始。只有点击确认才创建正式记录;重复确认不得创建第二条记录。机器人重启和发布兼容版本后可以继续未过期草稿。

把超时时长、字段和并发规则换成你的业务要求,不要只描述“做一个报名机器人”。

上线前的验收清单

  • 两名用户交叉回答,数据不串。
  • 同一用户在两个群组中启动流程,状态不串。
  • 每一步测试空值、错误类型、返回和取消。
  • 超时前后各回复一次,行为符合说明。
  • 连续发送两条答案,不会跳过步骤或重复提交。
  • 在确认按钮上连点两次,只产生一次正式记录。
  • 流程中途重启,再回复时能恢复或明确失败。
  • 发布新版本后,旧草稿按兼容规则处理。
  • 日志能定位流程和状态,但不记录不必要的敏感正文。

与 BotFatherV2 的关系

BotFatherV2 可以通过 AI 对话创建和修改 Telegram Serverless 机器人。把状态范围、超时、取消和验收场景写进需求,比只描述界面更容易得到可验证的版本。

这不表示 BotFatherV2 自动提供任意会话框架、队列或外部数据库。公开的 AI 开发文档说明,生成代码使用固定 SDK 范围,不支持任意 npm 模块或 Node/Bun 运行时 API;首版也不新增依赖付费 AI 的机器人运行能力。本文引用 aiogram 和 grammY 是为了说明通用设计模式,不代表生成的机器人会安装这些框架。BotFatherV2 是独立产品,与 Telegram 官方 BotFather 无隶属关系。

参考资料

相关文章

继续阅读具有相同产品标签的内容。

Telegram 机器人群发怎么设计:订阅、限流与失败重试

把通知群发写成可暂停、可恢复且不重复的任务,处理用户授权、429 限流、重试、退订、失败分类与进度统计。

Telegram 机器人按钮怎么避免重复执行:回调、权限与过期状态

为确认、审批和状态切换按钮定义快速响应、服务端校验、幂等、过期处理与失败反馈,避免重复扣减或越权操作。

Telegram 机器人深链怎么设计:启动参数、群组安装与来源识别

说明 Telegram 机器人 start 与 startgroup 深链的设计方式、64 字符限制、来源归因、安全边界和可验收的首次使用流程。

Telegram 长任务机器人怎么设计:流式回复、停止与私聊主题

把流式草稿、停止操作和私聊主题写成可验收的 Telegram 机器人需求,让搜索、报告和 AI 任务既有进度反馈,也不会混淆上下文。

Telegram Serverless 机器人如何防止重复处理:Webhook 与幂等检查清单

根据 Telegram Webhook 的重试与 update_id 规则,把防重复写入、重复发券、乱序更新和安全校验写成可验收的 Serverless 机器人需求。

Telegram 机器人交互怎么选:命令、按钮还是自然语言

按任务类型选择 Telegram 机器人的命令、回复键盘、内联按钮和自然语言输入,并把交互方式写成可验收需求。