在本篇文章中,我将分享一个基于 Cloudflare Workers + Telegram Bot + D1 数据库 的完全无服务器(Serverless)聊天系统。该机器人支持用户匿名与管理员双向通信,具备首访验证、自动诈骗检测、屏蔽管理、消息映射等功能,是一个非常适合作为客服、匿名反馈、小型 IM 系统的解决方案。
⭐ 系统亮点
- 🚀 100% Serverless 无需服务器
- 🔐 首访用户自动加减法验证(防骚扰)
- 🔁 双向匿名对话(用户看不到管理员 ID)
- 🛡 管理员可屏蔽 / 解封任何用户
- 🧠 自动诈骗账号检测(基于 D1 fraud 表)
- 💾 D1 数据库存储用户状态与消息映射
- 📌 管理员收到用户消息时自动生成“用户资料卡”
- 🔔 可控频率的通知提醒机制
🧩 系统架构
[Telegram User]
↓ 发送消息
[Cloudflare Workers /endpoint]
↓
[验证系统(加减法 1~10)]
↓ 通过后
[反诈检测(fraud)]
↓
[自动转发消息 → 管理员]
管理员 ←→ 用户 (双向聊天)
📦 使用技术
| 技术 | 用途 |
|---|---|
| Cloudflare Workers | 核心逻辑执行环境 |
| Telegram Bot API | 双向聊天接口 |
| Cloudflare D1 | 用户资料、屏蔽状态、验证码、消息映射存储 |
| Webhooks | 实时接收 Telegram 更新事件 |
🗄 数据库结构(D1)
为保证机器人功能完整,需要创建以下表:
CREATE TABLE blocks (
user_id TEXT PRIMARY KEY,
is_blocked INTEGER
);
CREATE TABLE msg_map (
admin_msg_id TEXT PRIMARY KEY,
user_id TEXT
);
CREATE TABLE lastmsg (
user_id TEXT PRIMARY KEY,
ts INTEGER
);
CREATE TABLE fraud (
user_id TEXT PRIMARY KEY
);
CREATE TABLE verify (
user_id TEXT PRIMARY KEY,
question TEXT,
answer INTEGER,
passed INTEGER
);
CREATE TABLE user_first (
user_id TEXT PRIMARY KEY
);
🔢 首次验证系统(加减法 1~10)
为了防止广告机器人、骚扰用户,系统会对第一次聊天的用户进行简单的数学验证:
✨ 验证示例
为了防止骚扰,请先完成验证:
7 + 3 = ?
请直接回复数字答案。
答对后自动进入聊天流程;答错则重新生成题目。
🎯 核心功能说明
1️⃣ 匿名聊天(Forward/Copy)
用户发送消息 → 机器人自动转发给管理员
管理员「回复这条转发消息」→ 机器人将回复复制给用户
整个过程:
- 用户不会看到管理员的 UID
- 管理员同样看不到用户昵称(除资料卡)
实现完整“匿名双向通信”。
2️⃣ 用户资料卡(首次出现)
管理员第一次收到用户消息时,自动生成用户信息卡:

管理员点按钮后 → 自动屏蔽
3️⃣ 屏蔽 / 解除屏蔽
管理员可直接通过命令控制:
| 指令 | 说明 |
|---|---|
/block | 屏蔽此用户 |
/unblock | 解除屏蔽 |
/checkblock | 查看用户是否被屏蔽 |
4️⃣ 诈骗检测(D1 fraud 表)
只需点击按钮

或者

回复的是输入/block 也可以拉黑用户
5️⃣ 可控间隔的通知提醒系统
为了避免管理员被刷屏,可设置提醒间隔(默认 1 小时):
作用:
- 用户第一次联系 → 提醒
- 用户长时间没聊天,再次联系 → 再提醒一次
- 保证管理员不会被Spam
🛠 Worker 代码结构说明
代码整体分为:
- Webhook 接收器
- Telegram API 封装
- 核心消息处理
- 加减法验证模块
- 管理员控制命令
- D1 数据访问模块
- 首次资料卡发送模块(可扩展)
该架构清晰、可维护性高、支持未来扩展。
📚 使用教程
1. 创建 Telegram Bot
在 @BotFather 创建一个机器人,并获得:
- Bot Token

2. 部署到 Cloudflare Workers



然后把上面的代码全部复制到里面去.
3. 绑定 D1 数据库


D1的key为:TG_BOT_DB
4. 设置环境变量
| 变量 | 说明 |
|---|---|
ENV_BOT_TOKEN | Telegram Bot Token |
ENV_ADMIN_UID | 管理员 UID |
ENV_BOT_SECRET | Webhook secret(可随意生成) |

- 从@BotFather获取token,并且可以发送
/setjoingroups来禁止此Bot被添加到群组 - 从uuidgenerator获取一个随机uuid作为secret
- 从@username_to_id_bot获取你的用户id
- 配置worker的变量
- 增加一个
ENV_BOT_TOKEN变量,数值为从步骤1中获得的token - 增加一个
ENV_BOT_SECRET变量,数值为从步骤2中获得的secret - 增加一个
ENV_ADMIN_UID变量,数值为从步骤3中获得的用户id
- 增加一个
5. 注册 Webhook
访问:
https://你的worker域名/registerWebhook
6. 测试
测试Bot: @guaguawa_bot

学一下