Telegram机器人能帮你自动回复消息、管理群组、订阅信息,甚至是执行定时任务。然而,传统的机器人部署方式通常需要一台持续运行的服务器,成本不低。今天,我们为你带来一种全新的免费方案——利用Cloudflare Workers搭建Telegram机器人,让它在云端免费运行,无需担心服务器费用和维护成本。
为什么选择Cloudflare Workers?
Cloudflare Workers是一个边缘计算平台,允许你在全球数百个节点运行JavaScript代码。它提供了免费套餐,每天有10万次请求额度,足以满足大多数个人机器人的需求。相比VPS或Docker容器,Cloudflare Workers有三大优势:
- 零成本:免费套餐足够个人使用,无需绑定信用卡。
- 无需维护:不需要更新系统、重启服务,一切由Cloudflare托管。
- 极快响应:由于在全球部署,用户交互延迟极低。
准备工作
在开始之前,你需要准备以下账号和工具:
- 一个Telegram账号(用于创建机器人)。
- 一个Cloudflare账号(前往 dash.cloudflare.com 注册)。
- 一个代码编辑器(推荐使用VS Code)。
- 基本的JavaScript知识(即使不懂,按步骤也能完成)。
步骤一:创建Telegram机器人获取Token
打开Telegram,在搜索栏输入 @BotFather,这是Telegram官方的机器人管理账户。启动对话后,执行以下操作:
- 发送
/newbot命令,创建新机器人。 - 按照提示为机器人设置显示名称(例如 Cloudflare Bot)。
- 设置机器人用户名(必须以
bot结尾,如cf_sample_bot)。 - 创建成功后,BotFather会返回一个HTTP API Token,形如
123456789:ABCdef...,请务必保存好,稍后要用。
步骤二:编写Worker代码
打开Cloudflare Dashboard,进入Workers & Pages 页面,点击“创建Worker”,进入编辑器。我们将编写一个最简单的回显机器人:它接收Telegram发来的消息,原样返回。
完整代码如下:
// 你的Bot Token
const BOT_TOKEN = '123456789:ABCdef...';
async function handleRequest(request) {
const url = new URL(request.url);
// 只处理POST请求(Telegram发送更新时用POST)
if (request.method === 'POST') {
const update = await request.json();
const message = update.message;
if (message && message.text) {
const chatId = message.chat.id;
const text = message.text;
// 调用Telegram API发送回显消息
await sendMessage(chatId, text);
}
return new Response('OK');
}
// 如果访问根路径,返回提示
return new Response('Telegram Bot is running!');
}
async function sendMessage(chatId, text) {
const apiUrl = `https://api.telegram.org/bot$/sendMessage`;
const response = await fetch(apiUrl, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ chat_id: chatId, text }),
});
return response;
}
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request));
});
请将 BOT_TOKEN 替换为你从BotFather获得的真实Token。这段代码逻辑很简单:收到更新后,提取聊天ID和文本,然后调用 sendMessage 把文本原样发送回去。
步骤三:部署到Cloudflare Workers
有两种方式部署 Worker:
方法A:在浏览器编辑器直接部署
- 在Cloudflare Workers编辑页面粘贴上述代码。
- 点击“保存并部署”按钮,等待片刻。
- 你会得到一个你的Worker访问地址(例如
https://你的子域名.workers.dev)。 - 复制这个URL,它就是你的Webhook端点。
方法B:使用Wrangler CLI部署(适合进阶)
- 在你的电脑上安装Node.js和npm。
- 全局安装Wrangler:
npm install -g wrangler - 进入项目目录,运行
wrangler init初始化。 - 将代码写入
index.js,在wrangler.toml中配置 name 和 workers_dev 为 true。 - 运行
wrangler deploy,按照提示登录Cloudflare账号,即可部署。
推荐新手使用方法A,更直观。
步骤四:设置Webhook
Telegram有两种获取更新的方式:长轮询和Webhook。这里我们使用Webhook,它能在消息到达时立刻将更新推送到你的Worker。
在你的浏览器或命令行中打开以下URL,将 BOT_TOKEN 和 WORKER_URL 替换为你的实际值:
https://api.telegram.org/bot<BOT_TOKEN>/setWebhook?url=<WORKER_URL>
例如:
https://api.telegram.org/bot123456789:ABCdef.../setWebhook?url=https://cf-sample.workers.dev
如果返回 JSON 包含 "ok":true,说明设置成功。至此,你的免费机器人已经上线。
测试机器人
用你的Telegram账号私信机器人,发送任意文字,比如“你好”,如果机器人立刻回复同样的内容,恭喜你!你的Cloudflare Workers机器人已经正常运行了。
你也可以尝试使用Telegram Web客户端或手机App进行测试,效果一致。
进阶实用建议
上面的代码只是最基础的示例。你完全可以基于它扩展更多功能,这里提供几个思路:
- 关键词自动回复:根据收到的文本判断关键词,返回预设的内容。
- 定时提醒:使用Cron触发器(需要在Workers里配置Schedule),定时发送提醒到指定群或用户。
- 订阅订阅源:利用Cloudflare Workers的Fetch功能,抓取RSS或网页内容,新内容自动推送到Telegram。
- 生成图片或二维码:结合第三方API,实现生成二维码、表情包等。
需要注意的是,Cloudflare Workers免费套餐每日有请求次数限制,如果机器人使用频繁,可升级到付费计划,但大多数场景免费足够。
常见问题
1. 为什么我的机器人不回复?
首先检查Webhook是否设置成功。可以通过访问 https://api.telegram.org/bot<BOT_TOKEN>/getWebhookInfo 查看Webhook状态。如果显示 last_error_message,说明你的Worker代码有错误,需要调试。也可以按F12打开控制台看请求是否到达Worker。
2. Cloudflare Workers的免费额度真的够吗?
免费套餐每天有10万次请求,如果你的机器人每秒收到一个消息,一天大约8万次,勉强够用;对于个人用途,通常只有几百到几千次请求,完全不用担心。
3. 能否部署使用Python或其他语言的机器人?
Cloudflare Workers原生支持JavaScript和Wasm。如果你偏爱Python,可以考虑使用Pyodide或PyScript方案,但比较复杂。推荐直接用JavaScript,毕竟这个教程已经非常简易了。
4. 如何将已有机器人迁移到Cloudflare Workers?
如果你的机器人使用长轮询,需要先调用 deleteWebhook,再在Worker中实现相同逻辑,并重新设置Webhook。注意你的代码可能需要重构,因为Workers是无状态的,不能保存本地文件或使用数据库。
总结
利用Cloudflare Workers搭建Telegram机器人是一个极其实用的技巧,它省去了服务器租赁和运维的烦恼,让你专注于功能开发。本文从创建机器人、编写代码、部署到Webhook配置,一步步带你完成了整个流程。现在,你可以自由扩展功能,打造一个属于自己的全能机器人了。记住,掌握这一方案,你的Telegram自动化之旅才刚刚开始。