Telegram 多步骤机器人怎么设计:状态、取消与超时
把报名、报修和资料收集机器人拆成可恢复的步骤,明确会话状态、输入校验、取消、超时、并发与发布后的兼容规则。
很多报名、报修、预约和资料收集机器人都不可能在一条消息里完成。机器人先问姓名,再问日期,最后要求确认;用户可能答错、离开几小时、在群里同时发别的消息,甚至重新输入 /start。如果需求只写“依次提问”,上线后最容易出现的不是界面问题,而是答案串错、流程卡死和旧状态污染新流程。
多步骤机器人需要明确的状态机。状态机不是某个框架的专属功能,而是一种把“当前进行到哪一步、什么输入有效、下一步去哪”写清楚的方法。aiogram 的 FSM 文档把状态变化定义为由输入触发的转换;grammY 的 Conversations 文档则展示了等待指定输入、超时退出、持久化键和同一聊天中的并发会话等工程问题。
先把流程画成有限步骤
以活动报名为例,不要只列机器人要问的文案,而要为每一步写出输入、保存内容和离开条件。
| 状态 | 接受的输入 | 保存内容 | 下一步 | | --- | --- | --- | --- | | idle | /signup | 新建草稿 | ask_name | | ask_name | 非空文字 | 姓名 | ask_date | | ask_date | 合法日期或返回按钮 | 日期 | confirm | | confirm | 确认、修改或取消 | 提交或继续编辑 | done / 前一步 / cancelled |
每一步还应写明不接受什么。例如,在日期步骤收到照片时,是提示格式错误并保持当前步骤,还是把照片交给其他功能?没有这个规则,机器人可能把下一条无关消息误当成答案。
状态必须按正确的范围隔离
私聊中的简单流程通常可以按用户隔离;群组流程至少要同时考虑聊天和用户,否则两名成员并行报名时可能覆盖彼此的数据。若一个人允许同时发起多个工单,还需要额外的流程或工单标识。
需求中可以明确:
- 私聊状态键使用“用户 + 流程”;
- 群组状态键使用“群组 + 用户 + 流程”;
- 草稿与正式业务记录分开保存;
- 只有完成确认后才创建正式记录;
- 同一个范围内再次启动时,先询问继续、重新开始还是取消旧流程。
不要把“机器人最后问到了所有问题”当成状态隔离已经正确。应至少用两个账号交叉发送答案,确认姓名、日期和确认结果不会串到另一名用户。
每一步都要有返回、取消和超时
用户会改变主意,也会中断对话。一个可恢复的流程至少需要三条出口:
- 返回:回到上一步,并说明旧值是否保留。
- 取消:结束当前流程,清理未提交草稿,同时保留已经完成的正式记录。
- 超时:超过约定时间后使草稿失效;用户再次回复时,明确提示流程已过期,而不是静默把答案写入新流程。
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 无隶属关系。
参考资料
- aiogram,Finite State Machine,版本 3.31.0,访问于 2026-10-13。
- grammY,Conversations,访问于 2026-10-13。
- BitBear Studio,使用 AI 开发,访问于 2026-10-13。