本文引用的文件
本文件系统化阐述 Telegram 机器人中“回调查询(Callback Query)”的处理机制,重点覆盖以下方面:
该机器人采用模块化的命令注册与处理器组织方式,回调查询在命令入口集中注册,并通过正则表达式分发到具体处理器。关键文件如下:
第三方 API 客户端:src/client/cosmoe.ts
graph TB
A["src/index.ts<br/>创建 Bot 并设置命令菜单"] --> B["src/command/index.ts<br/>注册命令与回调查询"]
B --> C["src/command/handlers/cancel.ts<br/>取消命令与确认回调"]
B --> D["src/command/handlers/bookEvent.ts<br/>预约与优惠券选择回调"]
D --> E["src/client/cosmoe.ts<br/>Cosmoe API 客户端"]
C --> E
图表来源
章节来源
章节来源
回调查询处理的整体流程如下:
对于需要更新消息的场景,使用 editMessageText 更新确认提示或选择结果
sequenceDiagram
participant U as "用户"
participant B as "Bot(grammy)"
participant R as "回调路由"
participant H1 as "取消确认处理器"
participant H2 as "优惠券选择处理器"
participant API as "CosmoeClient"
U->>B : 点击内联键盘按钮
B->>R : 分发回调查询
alt 匹配 confirm_cancel_\\d+ 或 cancel_action
R->>H1 : 调用取消确认处理器
H1->>API : 取消预约
API-->>H1 : 返回结果
H1-->>U : 编辑消息反馈
else 匹配 select_coupon_\\d+_\\d+_\\w+
R->>H2 : 调用优惠券选择处理器
H2->>API : 获取活动详情/执行预约
API-->>H2 : 返回结果
H2-->>U : 编辑消息反馈
end
R->>B : 调用 answerCallbackQuery
图表来源
章节来源
处理要点:
使用 answerCallbackQuery 清除加载态
flowchart TD
Start(["收到回调查询"]) --> Parse["解析 action 字符串"]
Parse --> Type{"类型判断"}
Type --> |confirm_cancel_*| Validate["校验用户凭证"]
Validate --> CancelAPI["调用取消接口"]
CancelAPI --> Result{"返回码为 200?"}
Result --> |是| EditSuccess["编辑消息:成功"]
Result --> |否| EditFail["编辑消息:失败"]
Type --> |cancel_action| EditCancel["编辑消息:已取消"]
EditSuccess --> Done(["结束"])
EditFail --> Done
EditCancel --> Done
图表来源
章节来源
处理要点:
使用 answerCallbackQuery 清除加载态
flowchart TD
Start(["收到回调查询"]) --> Parse["解析 action 字符串"]
Parse --> Extract["提取 event_id/slot_index/coupon_code"]
Extract --> Validate["校验用户凭证与活动详情"]
Validate --> FetchSlots["获取并排序时间槽"]
FetchSlots --> CheckIdx{"slot_index 有效?"}
CheckIdx --> |否| EditErr["编辑消息:无效时间段"]
CheckIdx --> |是| ShowSel["编辑消息:显示所选优惠券"]
ShowSel --> Book["执行预约可带 coupon_code"]
Book --> Result{"返回码为 200?"}
Result --> |是| EditOk["编辑消息:成功并显示最终价格/编号"]
Result --> |否| EditErr2["编辑消息:失败"]
EditErr --> Done(["结束"])
EditErr2 --> Done
EditOk --> Done
图表来源
章节来源
存储与恢复:对话状态通过 KVAdapter 读写,确保跨请求的状态一致性
graph LR
Cfg["对话配置<br/>KVAdapter + conversations"] --> KV["COSMOE_STORAGE KV"]
LoginConv["登录对话"] --> KV
CancelHandler["取消处理器"] --> KV
CouponHandler["优惠券处理器"] --> KV
图表来源
章节来源
章节来源
关键依赖链
对话状态 -> KV 存储 -> KV 命名空间
graph TB
Q["回调查询"] --> M["回调路由"]
M --> H1["取消处理器"]
M --> H2["优惠券处理器"]
H1 --> K["KV 凭证/COSMOE_CREDENTIALS"]
H2 --> K
H1 --> A["CosmoeClient"]
H2 --> A
A --> S["第三方服务"]
图表来源
章节来源
章节来源
本项目的回调查询处理通过明确的正则路由与清晰的处理器职责,实现了“确认取消”和“优惠券选择”的完整闭环。结合对话插件与 KV 存储,既保证了用户体验,也确保了状态管理的一致性。建议在生产环境中强化日志与监控,完善错误处理与重试策略,持续优化第三方服务调用的稳定性与性能。