本文档引用的文件
这是一个基于 Telegram 的预约管理系统,专门为摄影活动提供预约服务。系统集成了 Cloudflare Workers 和 KV 存储,通过与 Cosmoe API 交互实现完整的预约生命周期管理。
该系统的核心功能包括:
系统采用模块化设计,主要分为以下几个层次:
graph TB
subgraph "入口层"
A[src/index.ts] --> B[命令设置]
end
subgraph "命令处理器层"
B --> C[事件命令]
B --> D[预约命令]
B --> E[历史命令]
B --> F[取消命令]
B --> G[登录命令]
B --> H[登出命令]
end
subgraph "客户端层"
I[CosmoeClient] --> J[API 调用]
J --> K[认证]
J --> L[预约]
J --> M[历史]
J --> N[取消]
end
subgraph "存储层"
O[KV 存储]
P[会话存储]
end
subgraph "调度层"
Q[scheduler/index.ts] --> R[定时任务]
end
C --> I
D --> I
E --> I
F --> I
G --> I
H --> I
I --> O
I --> P
R --> A
图表来源
章节来源
章节来源
系统采用分层架构设计,确保职责分离和可维护性:
graph TB
subgraph "用户界面层"
A[Telegram Bot]
B[Inline Keyboard]
C[消息格式化]
end
subgraph "应用逻辑层"
D[命令处理器]
E[会话管理]
F[业务逻辑]
end
subgraph "数据访问层"
G[CosmoeClient]
H[API 适配器]
I[数据模型]
end
subgraph "存储层"
J[KV 存储]
K[会话状态]
L[用户凭证]
end
subgraph "外部服务"
M[Cosmoe API]
N[Cloudflare Workers]
O[Telegram API]
end
A --> D
D --> E
E --> F
F --> G
G --> H
H --> J
J --> M
N --> O
O --> A
图表来源
sequenceDiagram
participant U as 用户
participant B as Bot
participant C as 命令处理器
participant A as CosmoeClient
participant S as KV存储
participant API as Cosmoe API
U->>B : 发送命令
B->>C : 路由到相应处理器
C->>S : 读取用户凭证
C->>A : 执行业务操作
A->>API : 调用API接口
API-->>A : 返回数据
A-->>C : 处理结果
C->>S : 更新状态
C-->>U : 返回响应
图表来源
flowchart TD
A[用户输入 /book_eventId_slotIndex] --> B[解析参数]
B --> C[验证用户登录状态]
C --> D[获取活动详情]
D --> E[验证时间槽有效性]
E --> F{是否有优惠券?}
F --> |是| G[显示优惠券选择]
F --> |否| H[直接预约]
G --> I[用户选择优惠券]
I --> J[执行预约]
H --> J
J --> K{预约成功?}
K --> |是| L[返回成功信息]
K --> |否| M[返回错误信息]
L --> N[结束]
M --> N
图表来源
系统支持以下预约状态:
classDiagram
class TimeSlot {
+string range
+string price
+number capacity
+number remaining
+validateAvailability() boolean
+updateRemaining(change) void
}
class EventDetail {
+number id
+string name
+TimeSlot[] slots
+validateTimeSlot(range) boolean
+getAvailableSlots() TimeSlot[]
}
class Booking {
+number id
+string status
+string time_slot
+string final_price
+string payment_order_id
+validateConflict(other) boolean
}
EventDetail --> TimeSlot : "包含多个"
Booking --> TimeSlot : "关联"
图表来源
章节来源
sequenceDiagram
participant U as 用户
participant B as Bot
participant H as 历史处理器
participant C as CosmoeClient
participant API as Cosmoe API
U->>B : /history
B->>H : 处理历史命令
H->>C : 获取用户凭证
H->>C : 调用 getMyBookings()
C->>API : 请求历史数据
API-->>C : 返回历史记录
C-->>H : 处理后的数据
H->>H : 格式化显示
H-->>U : 发送历史消息
图表来源
系统实现了智能的历史记录分页:
章节来源
flowchart TD
A[用户输入 /cancel_bookingId] --> B[验证用户登录]
B --> C[获取用户历史]
C --> D[查找目标预约]
D --> E[显示确认对话框]
E --> F{用户确认?}
F --> |是| G[调用取消API]
F --> |否| H[取消操作]
G --> I{取消成功?}
I --> |是| J[返回成功信息]
I --> |否| K[返回错误信息]
J --> L[结束]
K --> L
H --> L
图表来源
取消预约的业务规则:
章节来源
sequenceDiagram
participant U as 用户
participant B as Bot
participant L as 登录处理器
participant C as CosmoeClient
participant API as Cosmoe API
participant S as KV存储
U->>B : /login
B->>L : 进入登录会话
L->>U : 请求用户名
U->>L : 输入用户名
L->>U : 请求密码
U->>L : 输入密码
L->>C : 调用getToken()
C->>API : 验证凭据
API-->>C : 返回token
C-->>L : 认证结果
L->>S : 存储凭证
L-->>U : 登录成功
图表来源
章节来源
flowchart TD
A[用户选择时间槽] --> B[检查可用优惠券]
B --> C{有多张优惠券?}
C --> |是| D[显示优惠券选择键盘]
C --> |否| E{有单张优惠券?}
D --> F[用户选择优惠券]
E --> |是| F
E --> |否| G[直接预约]
F --> H[执行预约带优惠券]
G --> H
H --> I[计算最终价格]
I --> J[返回预约结果]
图表来源
系统支持两种优惠券类型:
章节来源
graph LR
subgraph "核心框架"
A[grammy]
B[@grammyjs/conversations]
C[@grammyjs/storage-cloudflare]
end
subgraph "运行时环境"
D[Cloudflare Workers]
E[KV 存储]
F[Webhook]
end
subgraph "外部服务"
G[Telegram API]
H[Cosmoe API]
end
A --> D
B --> D
C --> E
D --> F
D --> G
A --> H
图表来源
graph TD
A[src/index.ts] --> B[src/command/index.ts]
B --> C[src/command/handlers/*.ts]
C --> D[src/client/cosmoe.ts]
A --> E[src/scheduler/index.ts]
D --> F[KV 存储]
C --> F
图表来源
章节来源
症状: 用户无法登录系统 可能原因:
解决步骤:
症状: 预约请求返回错误 可能原因:
解决步骤:
症状: /history 命令返回空结果 可能原因:
解决步骤:
章节来源
这个预约管理系统展现了现代聊天机器人开发的最佳实践:
bookEvent(): 创建新的预约getMyBookings(): 获取用户预约历史cancelBooking(): 取消现有预约updatePaymentOrder(): 更新支付订单getToken(): 获取认证令牌getProfile(): 获取用户资料getAvailableCoupons(): 获取可用优惠券getEvents(): 获取活动列表getEventDetail(): 获取活动详情