本文引用的文件
本文件面向“预约命令”的实现与使用,围绕以下命令展开:
文档将深入解释命令解析、用户认证、活动与时间槽选择、优惠券应用、取消确认流程、状态管理与并发控制策略,并提供错误处理与数据一致性保障方案,以及扩展开发指导。
该机器人采用模块化命令分发与客户端封装:
客户端封装:统一的 CosmoeClient 封装 API 请求、认证状态与数据模型。
graph TB
subgraph "命令层"
CMD_INDEX["命令入口<br/>src/command/index.ts"]
H_BOOK["预约处理器<br/>src/command/handlers/bookEvent.ts"]
H_CANCEL["取消处理器<br/>src/command/handlers/cancel.ts"]
H_EVENTS["活动列表处理器<br/>src/command/handlers/events.ts"]
H_EVENTD["活动详情处理器<br/>src/command/handlers/eventDetails.ts"]
H_HISTORY["历史处理器<br/>src/command/handlers/history.ts"]
H_LOGIN["登录处理器<br/>src/command/handlers/login.ts"]
H_LOGOUT["登出处理器<br/>src/command/handlers/logout.ts"]
H_START["开始处理器<br/>src/command/handlers/start.ts"]
end
subgraph "客户端层"
C_CLIENT["CosmoeClient<br/>src/client/cosmoe.ts"]
end
CMD_INDEX --> H_BOOK
CMD_INDEX --> H_CANCEL
CMD_INDEX --> H_EVENTS
CMD_INDEX --> H_EVENTD
CMD_INDEX --> H_HISTORY
CMD_INDEX --> H_LOGIN
CMD_INDEX --> H_LOGOUT
CMD_INDEX --> H_START
H_BOOK --> C_CLIENT
H_CANCEL --> C_CLIENT
H_EVENTS --> C_CLIENT
H_EVENTD --> C_CLIENT
H_HISTORY --> C_CLIENT
H_LOGIN --> C_CLIENT
H_LOGOUT --> C_CLIENT
H_START --> C_CLIENT
图表来源
章节来源
章节来源
命令到 API 的整体调用链如下:
sequenceDiagram
participant U as "用户"
participant B as "命令入口<br/>src/command/index.ts"
participant HB as "预约处理器<br/>src/command/handlers/bookEvent.ts"
participant HC as "取消处理器<br/>src/command/handlers/cancel.ts"
participant CC as "CosmoeClient<br/>src/client/cosmoe.ts"
participant KV as "KV 存储"
U->>B : 发送命令 /book_{event_id}_{slot_id}
B->>HB : 路由到预约处理器
HB->>KV : 读取用户凭证
KV-->>HB : 返回凭证
HB->>CC : 获取活动详情与时间槽
CC-->>HB : 返回活动数据
HB->>U : 展示优惠券选择键盘如适用
U->>B : 回调选择优惠券
B->>HB : 调用优惠券选择处理器
HB->>CC : 下单含可选优惠券
CC-->>HB : 返回下单结果
HB-->>U : 成功/失败消息
U->>B : 发送命令 /cancel_{booking_id}
B->>HC : 路由到取消处理器
HC->>CC : 查询我的预约
CC-->>HC : 返回预约列表
HC->>U : 展示取消确认键盘
U->>B : 回调确认取消
B->>HC : 调用取消确认处理器
HC->>CC : 执行取消
CC-->>HC : 返回取消结果
HC-->>U : 成功/失败消息
图表来源
下单流程:构造下单请求(event_id、time_slot、可选 coupon_code),调用客户端下单接口,返回最终价格、预约编号等信息并反馈给用户。
flowchart TD
Start(["进入 /book_{event_id}_{slot_id}"]) --> Parse["解析命令参数<br/>提取 event_id, slot_index"]
Parse --> CheckAuth["从 KV 读取用户凭证"]
CheckAuth --> HasAuth{"有凭证?"}
HasAuth --> |否| PromptLogin["提示先登录"] --> End
HasAuth --> |是| FetchEvent["获取活动详情与时间槽"]
FetchEvent --> ValidateIndex{"索引有效且有余量?"}
ValidateIndex --> |否| ShowError["提示错误并结束"] --> End
ValidateIndex --> |是| CheckCoupons{"是否有可用优惠券?"}
CheckCoupons --> |多张| ShowKeyboard["展示优惠券选择键盘"] --> End
CheckCoupons --> |一张| AutoApply["自动应用唯一优惠券"]
CheckCoupons --> |无| NoCoupon["不使用优惠券"]
AutoApply --> PlaceOrder["调用下单接口"]
NoCoupon --> PlaceOrder
PlaceOrder --> OrderOK{"下单成功?"}
OrderOK --> |是| ReplySuccess["回复成功消息含最终价格/编号/优惠码"] --> End
OrderOK --> |否| ReplyFail["回复失败消息"] --> End
图表来源
章节来源
取消执行:用户确认后调用取消接口,返回结果并更新消息。
sequenceDiagram
participant U as "用户"
participant B as "命令入口"
participant HC as "取消处理器"
participant CC as "CosmoeClient"
participant KV as "KV 存储"
U->>B : 发送 /cancel_{booking_id}
B->>HC : 路由到取消处理器
HC->>KV : 读取用户凭证
KV-->>HC : 返回凭证
HC->>CC : 获取我的预约
CC-->>HC : 返回预约列表
HC->>U : 展示确认键盘
U->>B : 回调 confirm_cancel 或 cancel_action
alt 确认取消
B->>HC : 调用取消确认处理器
HC->>CC : 执行取消
CC-->>HC : 返回取消结果
HC-->>U : 更新为成功/失败消息
else 取消
HC-->>U : 更新为已取消
end
图表来源
章节来源
章节来源
章节来源
客户端封装统一的 API 行为,包括认证状态检查与错误处理。
graph LR
CMD_INDEX["src/command/index.ts"] --> H_BOOK["src/command/handlers/bookEvent.ts"]
CMD_INDEX --> H_CANCEL["src/command/handlers/cancel.ts"]
CMD_INDEX --> H_EVENTS["src/command/handlers/events.ts"]
CMD_INDEX --> H_EVENTD["src/command/handlers/eventDetails.ts"]
CMD_INDEX --> H_HISTORY["src/command/handlers/history.ts"]
CMD_INDEX --> H_LOGIN["src/command/handlers/login.ts"]
CMD_INDEX --> H_LOGOUT["src/command/handlers/logout.ts"]
CMD_INDEX --> H_START["src/command/handlers/start.ts"]
H_BOOK --> C_CLIENT["src/client/cosmoe.ts"]
H_CANCEL --> C_CLIENT
H_EVENTS --> C_CLIENT
H_EVENTD --> C_CLIENT
H_HISTORY --> C_CLIENT
H_LOGIN --> C_CLIENT
H_LOGOUT --> C_CLIENT
H_START --> C_CLIENT
图表来源
章节来源
章节来源
章节来源
该预约系统通过清晰的命令分发与处理器职责划分,结合 KV 存储与客户端封装,实现了从活动浏览、时间槽选择、优惠券应用到预约与取消的完整闭环。系统具备良好的可扩展性与错误处理能力,适合在此基础上进一步增强并发控制、状态机与审计日志。
章节来源
章节来源
章节来源
章节来源