本文档中引用的文件
Cosmoe Bot 是一个基于 Cloudflare Workers 的无服务器 Telegram 机器人,专门为摄影活动预约管理而设计。该系统采用现代化的无服务器架构,利用 grammY 框架构建,实现了完整的用户交互、事件管理和预约处理功能。
本架构文档详细阐述了系统的整体设计思路、核心组件交互关系、数据流设计以及性能优化策略,为开发者提供了全面的技术参考。
Cosmoe Bot 采用模块化的项目组织结构,按照功能域进行清晰的分离:
graph TB
subgraph "核心入口层"
Index[src/index.ts<br/>主入口模块]
end
subgraph "业务逻辑层"
Command[command/index.ts<br/>命令处理器系统]
Handlers[handlers/<br/>业务处理器]
end
subgraph "调度服务层"
Scheduler[scheduler/index.ts<br/>定时任务调度器]
end
subgraph "外部集成层"
Client[client/cosmoe.ts<br/>Cosmoe API 客户端]
KV[KV 存储<br/>COSMOE_CREDENTIALS/COSMOE_STORAGE]
end
subgraph "配置层"
Package[package.json<br/>依赖配置]
Wrangler[wrangler.jsonc<br/>部署配置]
end
Index --> Command
Index --> Scheduler
Command --> Handlers
Command --> Client
Scheduler --> Client
Command --> KV
Scheduler --> KV
Client --> KV
图表来源
章节来源
主入口模块是整个系统的协调中心,负责初始化 grammY Bot 实例、设置命令菜单和处理 Webhook 请求。
核心职责:
技术特点:
命令处理器系统是业务逻辑的核心,基于 grammY 框架构建,实现了完整的对话式交互和命令路由。
核心特性:
章节来源
调度器专门处理定时任务,实现了新活动通知推送功能。
主要功能:
章节来源
Cosmoe Bot 采用三层架构设计,确保了良好的可维护性和扩展性:
graph TB
subgraph "表示层"
Telegram[Telegram 应用程序]
Webhook[Webhook 回调]
end
subgraph "应用层"
Main[主入口模块<br/>src/index.ts]
Commands[命令处理器<br/>command/index.ts]
Scheduler[调度器<br/>scheduler/index.ts]
end
subgraph "服务层"
Grammy[grammY 框架]
Conversations[对话插件]
Storage[存储适配器]
end
subgraph "数据层"
KV1[COSMOE_CREDENTIALS<br/>用户凭证存储]
KV2[COSMOE_STORAGE<br/>系统状态存储]
API[Cosmoe API<br/>外部服务]
end
Telegram --> Webhook
Webhook --> Main
Main --> Commands
Main --> Scheduler
Commands --> Grammy
Commands --> Conversations
Commands --> Storage
Scheduler --> Grammy
Storage --> KV1
Storage --> KV2
Commands --> API
Scheduler --> API
图表来源
主入口模块采用了工厂模式和依赖注入的设计模式:
classDiagram
class MainEntry {
+Env env
+ExecutionContext ctx
+fetch(request, env, ctx) Promise~Response~
+scheduled(controller, env, ctx) Promise~void~
}
class BotConfig {
+string BOT_TOKEN
+JSON BOT_INFO
+KVNamespace COSMOE_CREDENTIALS
+KVNamespace COSMOE_STORAGE
}
class WebhookHandler {
+webhookCallback(bot, adapter) Function
+handleRequest(request) Promise~Response~
}
MainEntry --> BotConfig : "使用"
MainEntry --> WebhookHandler : "委托"
图表来源
命令处理器系统实现了插件化的架构设计,支持动态加载和卸载:
classDiagram
class CommandSystem {
+setupCommands(bot, env) void
+installConversations() void
+registerHandlers() void
}
class ConversationPlugin {
+VersionedStateStorage storage
+createConversation(handler, name) Conversation
+enter(conversationName) Promise~void~
}
class CommandHandlers {
+handleStartCommand(ctx) Promise~void~
+handleLoginCommand(ctx) Promise~void~
+handleEventsCommand(ctx) Promise~void~
+handleHistoryCommand(ctx, env) Promise~void~
+handleCancelCommand(ctx, env) Promise~void~
}
CommandSystem --> ConversationPlugin : "使用"
CommandSystem --> CommandHandlers : "注册"
图表来源
系统采用事件驱动的数据流架构,实现了清晰的职责分离:
sequenceDiagram
participant User as 用户
participant Telegram as Telegram
participant Main as 主入口
participant Command as 命令处理器
participant Client as Cosmoe 客户端
participant KV as KV 存储
participant API as 外部 API
User->>Telegram : 发送消息
Telegram->>Main : Webhook 请求
Main->>Command : 路由到处理器
Command->>Client : 执行业务逻辑
Client->>KV : 读取/写入状态
Client->>API : 调用外部服务
API-->>Client : 返回数据
Client-->>Command : 处理结果
Command-->>Main : 组装响应
Main-->>Telegram : 发送回复
Telegram-->>User : 显示结果
图表来源
系统采用双 KV 命名空间的设计,实现了数据的逻辑分离:
graph LR
subgraph "用户数据层"
Credentials[COSMOE_CREDENTIALS<br/>用户凭证<br/>用户ID -> 凭证信息]
end
subgraph "系统数据层"
Storage[COSMOE_STORAGE<br/>系统状态<br/>latestEventId -> 最新活动ID]
end
subgraph "业务逻辑"
Login[登录处理]
Schedule[定时任务]
Events[活动查询]
end
Login --> Credentials
Schedule --> Storage
Events --> Storage
图表来源
章节来源
系统依赖于多个 Cloudflare 生态系统的组件:
graph TB
subgraph "grammY 生态系统"
grammY[grammy 核心框架]
conversations[@grammyjs/conversations]
storage[@grammyjs/storage-cloudflare]
end
subgraph "Cloudflare 运行时"
workers[Cloudflare Workers]
kv[KV 存储]
cron[Cron 触发器]
end
subgraph "配置管理"
wrangler[Wrangler CLI]
typescript[TypeScript]
vitest[Vitest 测试]
end
grammY --> workers
conversations --> workers
storage --> kv
wrangler --> workers
typescript --> grammY
vitest --> grammY
图表来源
graph TD
Main[src/index.ts] --> Command[src/command/index.ts]
Main --> Scheduler[src/scheduler/index.ts]
Command --> Handlers[handlers/]
Command --> Client[src/client/cosmoe.ts]
Scheduler --> Client
Handlers --> Client
Client --> KV[KV 存储接口]
图表来源
章节来源
Webhook 配置问题
KV 存储访问问题
API 调用失败
章节来源
Cosmoe Bot 展示了现代无服务器架构的最佳实践,通过精心设计的模块化结构和清晰的职责分离,实现了高可维护性和良好的扩展性。grammY 框架的选择为聊天机器人的开发提供了强大的基础,而 Cloudflare Workers 的无服务器特性则确保了系统的成本效益和性能表现。
该架构设计充分考虑了实际业务需求,通过对话式交互、定时任务和外部 API 集成,为用户提供了一站式的摄影活动预约解决方案。同时,完善的错误处理机制和监控体系确保了系统的稳定运行。
未来可以考虑的功能增强包括: