用 Cloudflare Workers 和 Durable Objects 构建 Telegram 喝水提醒机器人
摘要
作者因朋友指出自己日均饮水量仅1升,决定开发一个提醒喝水的工具。为避免传统 Web 应用的登录繁琐和 Android 应用的开发成本,选择了 Telegram Bot 作为载体。技术栈采用 Cloudflare Workers 部署、Durable Objects 作为数据库以规避 D1 冷启动问题,并使用 grammY 作为 Telegram API 交互库。
内容框架与概述
文章从一个生活痛点切入:作者发现自己饮水量严重不足,希望用技术手段解决追踪和提醒问题。经过权衡,他放弃了 Web 应用和原生移动应用方案,选择了低摩擦、易分享的 Telegram Bot 形式。
技术选型上,作者希望尝试新技术栈。他选用 Cloudflare Workers 作为运行环境,用 Durable Objects 替代 D1 数据库以获得更低延迟,采用 grammY 框架与 Telegram API 交互。此外还引入了 oxc、Vitest、Drizzle 等现代工具链。
开发过程中作者遇到了几个典型问题:Webhook URL 的正确设置方式、无服务器环境下需要手动调用 handleUpdate 传递消息、以及通过 API 而非 BotFather 设置机器人命令。在时区识别功能上,作者最初想用 LLM 处理,最终改用更简洁的 tz-lookup 库直接根据经纬度获取时区。
核心概念及解读
Durable Objects:Cloudflare 提供的边缘存储方案,每个用户拥有独立数据库实例,避免外部数据库调用带来的延迟。
grammY:活跃维护的 TypeScript Telegram Bot 框架,文档完善,适合构建现代 Telegram 机器人。
Webhook 机制:通过设置 Webhook URL 让 Telegram 将用户消息转发到指定服务器,是 Bot 接收消息的核心方式。
handleUpdate:在无服务器环境中必须手动调用的方法,用于将接收到的更新传递给 Bot 实例处理。
tz-lookup:根据经纬度直接查询时区的轻量库,比调用 LLM 更高效实用,体现了不必事事依赖 AI 的务实思维。
原文信息
| 字段 | 内容 |
|---|---|
| 原文 | Building a Telegram Bot with Cloudflare Workers, Durable Objects and grammY |
| 作者 | Neeraj Lagwankar |
| 发表日期 | 2026-02-02 |
此摘要卡片由 AI 自动生成