本文引用的文件
本项目为基于 Cloudflare Workers 的 Telegram Bot,采用 grammY 框架与 @grammyjs/conversations 插件实现对话式交互,结合 Cloudflare KV 存储完成用户会话与凭证持久化。Bot 提供命令系统(/start、/login、/events、/history、/logout)以及事件浏览、预约、取消等完整业务流程;通过计划任务实现新活动推送通知。
测试与类型
类型声明位于 worker-configuration.d.ts(在 tsconfig 中引入)。
graph TB
A["src/index.ts<br/>Worker 入口"] --> B["src/command/index.ts<br/>命令与对话注册"]
B --> C["src/command/handlers/*.ts<br/>命令处理器"]
C --> D["src/client/cosmoe.ts<br/>Cosmoe API 客户端"]
A --> E["src/scheduler/index.ts<br/>计划任务"]
F["wrangler.jsonc<br/>Worker 配置"] --> A
G["package.json<br/>依赖与脚本"] --> A
H["tsconfig.json<br/>TypeScript 配置"] --> A
I["vitest.config.mts<br/>测试配置"] --> J["test/index.spec.ts<br/>单元/集成测试"]
图表来源
章节来源
章节来源
下图展示从 Telegram 请求到业务处理与外部 API 调用的整体流程。
sequenceDiagram
participant U as "用户"
participant T as "Telegram"
participant W as "Cloudflare Worker<br/>src/index.ts"
participant C as "命令系统<br/>src/command/index.ts"
participant H as "命令处理器<br/>handlers/*.ts"
participant K as "KV 存储<br/>COSMOE_CREDENTIALS/COSMOE_STORAGE"
participant API as "Cosmoe API<br/>src/client/cosmoe.ts"
U->>T : 发送命令/消息/回调
T->>W : HTTP 请求Webhook
W->>C : 转发至 grammY Bot
C->>H : 匹配命令/正则/回调
H->>K : 读写用户凭证/会话状态
H->>API : 调用认证/事件/预约/取消等接口
API-->>H : 返回业务数据
H-->>U : 发送消息/内联键盘/编辑消息
图表来源
章节来源
安装 conversations 插件并注册交互式登录对话“login”。
flowchart TD
Start(["进入对话"]) --> ReadKV["从 COSMOE_STORAGE 读取对话状态"]
ReadKV --> State{"是否存在状态?"}
State --> |否| Init["初始化状态"]
State --> |是| Resume["恢复状态"]
Init --> Run["执行对话步骤"]
Resume --> Run
Run --> Persist["写回 COSMOE_STORAGE"]
Persist --> End(["结束对话"])
图表来源
章节来源
章节来源
取消确认:内联键盘“确认/取消”,回调格式 confirmcancel{booking_id} 或 cancel_action。
sequenceDiagram
participant U as "用户"
participant H as "事件详情处理器"
participant KB as "内联键盘"
participant CB as "回调处理器"
U->>H : 发送 /event_{id}
H-->>U : 返回活动详情与可预约时间段
U->>KB : 点击“预约”
KB-->>CB : 回调 /book_{event_id}_{slot_index}
CB-->>U : 显示优惠券选择或直接预约
图表来源
章节来源
章节来源
章节来源
章节来源
使用 bot.api.sendMessage 推送 Markdown 格式消息。
flowchart TD
S["Cron 触发"] --> L["读取最新事件ID"]
L --> Q["拉取全部活动"]
Q --> N{"存在新活动?"}
N --> |否| E["结束"]
N --> |是| U["遍历已注册用户"]
U --> M["发送通知消息"]
M --> R["更新最新事件ID"]
R --> E
图表来源
章节来源
Cosmoe API:通过 CosmoeClient 统一访问认证、事件、预约、取消、历史等接口。
graph LR
P["package.json 依赖"] --> G["grammy"]
P --> C["@grammyjs/conversations"]
P --> S["@grammyjs/storage-cloudflare"]
G --> B["Bot 核心"]
C --> V["对话插件"]
S --> K["KV 适配器"]
B --> H["命令/回调处理"]
H --> X["CosmoeClient"]
X --> A["Cosmoe API"]
图表来源
章节来源
章节来源
本项目以 grammY 为核心,结合 @grammyjs/conversations 与 Cloudflare KV,构建了完整的 Telegram Bot 业务闭环:从命令交互、内联键盘、回调处理到外部 API 调用与计划任务推送。建议后续增强错误重试、超时控制与限流策略,以提升稳定性与用户体验。
章节来源