手把手教你搭建一个自己的电报机器人(无需服务器,使用Cloudflare)

手把手教你搭建一个自己的电报机器人(无需服务器,使用Cloudflare)
法克鱿大家早上好,中午好,晚上好,我是法克鱿。
这个视频(文章)将手把手教你搭建一个自己的电报机器人,无需服务器,完全使用 Cloudflare 的免费服务。我们将创建一个可以查询实时天气的天气机器人。
准备工作:用到的链接
- Cloudflare 官网: https://www.cloudflare.com/zh-cn/
- 机器人代码: (见下文)
- Webhook 设置链接 (模板):
https://api.telegram.org/bot<YOUR_NEW_BOT_TOKEN>/setWebhook?url=<YOUR_WORKER_URL>
第一步:创建 Telegram 机器人
首先,我们需要从 Telegram 官方的 “BotFather” (机器人之父) 那里申请一个新机器人并获取 API Token。
- 登录 Telegram,在顶部的搜索栏中输入
BotFather(注意寻找有蓝色认证勾号的官方账号)。 - 进入与 BotFather 的聊天窗口,输入
/newbot并发送。 - 设置机器人名字: BotFather 会提示你给机器人起一个名字(这个名字可以随便起,会显示在聊天顶部)。
- 例如:
法克法克鱿
- 例如:
- 设置机器人用户名: 接着,BotFather 会要求你设置一个用户名。
- 重要提示: 用户名必须是唯一的,并且必须以
_bot结尾。 - 例如:
FakeFakeYou_bot
- 重要提示: 用户名必须是唯一的,并且必须以
- 获取 API Token: 创建成功后,BotFather 会发送一条包含你的机器人 API Token 的消息。
- 这是一长串黄色的字符(例如
123456:ABC-DEF1234...)。 - 单击它即可复制。请妥善保管这个 Token,不要泄露给任何人。
- 这是一长串黄色的字符(例如
- 点击消息中蓝色的机器人链接(例如
t.me/FakeFakeYou_bot),进入与你的机器人的聊天窗口,发送/start。
第二步:创建 Cloudflare Worker
接下来,我们去 Cloudflare 创建一个 Worker,它将作为我们机器人的 “服务器” 来运行代码。
- 打开 Cloudflare 官网 并登录。
- 在左侧侧边栏的栏目中,选择 计算和 AI (Compute & AI) 分类下的 Workers 和 Pages (Workers & Pages)。
- 点击右上角的 创建应用程序 (Create application)。
- 在 “创建应用程序” 页面,保持默认的 Workers 选项卡,选择 从 “Hello World” 开始 (Start from “Hello World”)。
- 点击右下角的 部署 (Deploy)。
第三步:部署机器人代码
部署成功后,我们需要将 “Hello World” 的默认代码替换为我们机器人的功能代码。
在 Worker 的管理界面,点击 编辑代码 (Edit code)。
在代码编辑窗口中,全选所有默认代码并删除它们。
- (Mac 用户使用
Command + A,Windows 用户使用Control + A)
- (Mac 用户使用
复制下面的所有代码,并将其粘贴到 Cloudflare 的代码窗口中:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102// =================================================
// Cloudflare Worker 上的 Telegram 天气机器人代码
// =================================================
async function handleRequest(request) {
if (request.method !== 'POST') {
return new Response('请使用 POST 方法', { status: 405 });
}
const data = await request.json();
if (data && data.message) {
const message = data.message;
const chatId = message.chat.id;
const text = (message.text || '').trim();
if (!text) {
return new Response('ok');
}
// 处理 /start 命令
if (text === '/start') {
const welcomeMessage = "你好!👋\n\n直接向我发送任何城市或地区的名称,我将为你查询实时天气。\n\n例如,试试发送:\n`北京`\n`London`\n`东京`";
await sendMessage(chatId, welcomeMessage, 'Markdown');
return new Response('ok');
}
// 忽略其他命令
if (text.startsWith('/')) {
return new Response('ok');
}
// 将收到的文本作为地点进行天气查询
const location = text;
try {
// 使用 wttr.in 的 JSON API
const weatherResponse = await fetch(`https://wttr.in/${encodeURIComponent(location)}?format=j1`);
if (!weatherResponse.ok) {
throw new Error('天气服务暂时不可用。');
}
const weatherData = await weatherResponse.json();
if (!weatherData.current_condition || weatherData.current_condition.length === 0) {
await sendMessage(chatId, `很抱歉,找不到 "${location}" 的天气信息。\n\n请检查您的输入是否正确,或尝试一个更具体的地址。`);
return new Response('ok');
}
const currentCondition = weatherData.current_condition[0];
const nearestArea = weatherData.nearest_area[0];
const weatherDesc = currentCondition.weatherDesc[0].value;
// 格式化回复消息
const replyText = `
📍 ${nearestArea.areaName[0].value}, ${nearestArea.country[0].value} 的天气
天气状况: ${weatherDesc}
温 度: ${currentCondition.temp_C}°C (体感 ${currentCondition.FeelsLikeC}°C)
风 速: ${currentCondition.windspeedKmph} km/h
湿 度: ${currentCondition.humidity}%
能见度: ${currentCondition.visibility} km
紫外线指数: ${currentCondition.uvIndex}
`;
// 发送 Markdown 格式的消息
await sendMessage(chatId, replyText, 'Markdown');
} catch (error) {
await sendMessage(chatId, `获取天气时出现问题,请稍后再试。`);
}
}
return new Response('ok');
}
/**
* 向 Telegram API 发送消息
* @param {string} chatId 聊天 ID
* @param {string} text 要发送的文本
* @param {string} parseMode 消息格式 (可选, e.g., 'Markdown')
*/
async function sendMessage(chatId, text, parseMode = '') {
// TELEGRAM_BOT_TOKEN 将从 Cloudflare 的环境变量中读取
const url = `https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage`;
const payload = {
chat_id: chatId,
text: text,
parse_mode: parseMode
};
await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(payload),
});
}
// 监听 fetch 事件
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request));
});粘贴代码后,复制 Worker 界面上显示的 URL(例如
your-worker-name.your-subdomain.workers.dev),我们稍后会用到。点击 部署 (Deploy)。
第四步:设置环境变量
代码部署后,我们还需要告诉 Worker 我们的机器人 API Token 是什么。
- 返回 Worker 的管理界面(如果还在代码编辑界面,点击左上角返回)。
- 点击 设置 (Settings) 选项卡。
- 在设置页面中,选择 变量 (Variables)。
- 在 环境变量 (机密) (Environment Variables (Secrets)) 下,点击 添加变量 (Add variable)。
- 变量名称 (Variable name): 必须 填写
TELEGRAM_BOT_TOKEN(这对应了我们代码中的bot${TELEGRAM_BOT_TOKEN})。 - 值 (Value): 粘贴你在第一步中从 BotFather 获取的 API Token。
- 点击 保存 (Save)。
第五步:设置 Webhook
最后一步是告诉 Telegram,当有人给你的机器人发消息时,应该把消息转发到哪里(即转发到我们的 Worker URL)。
- 打开一个新的浏览器标签页。
- 复制下面的 URL 模板:
1
[https://api.telegram.org/bot](https://api.telegram.org/bot)<YOUR_NEW_BOT_TOKEN>/setWebhook?url=<YOUR_WORKER_URL>
- 替换模板中的两个部分(并去掉
<和>符号):<YOUR_NEW_BOT_TOKEN>: 替换为你的机器人 API Token (来自 BotFather)。<YOUR_WORKER_URL>: 替换为你的 Worker URL (在第三步第 4 点复制的那个)。
- 确保你的 Worker URL 是以
https://开头的。 - 将替换好的完整 URL 粘贴到浏览器地址栏中,并访问它(按回车键)。
- 如果你看到类似下面的 JSON 响应,就代表设置成功了:
1
2
3
4
5{
"ok": true,
"result": true,
"description": "Webhook was set"
}
第六步:测试机器人
大功告成!
- 返回你与机器人的 Telegram 聊天窗口。
- 发送
/start,看是否收到欢迎消息。 - 尝试发送一个地点,例如
北京或London。 - 机器人现在应该会回复你该地点的实时天气了!
📱 站长力荐
👉 流量告急?立即办理大流量卡,随时随地畅享高速网络,体验无忧上网的快感!
直接搜-夸克网盘资源搜索-电影|电视剧|资料免费下载 比价吧-域名价格比价-实时查询-域名注册|续费|转入最低价 VPS实验室 - 海外VPS|国外VPS|国外云服务器|国外独立服务器 山外边 - 精选苹果iOS游戏iPA下载,无需越狱,海量汉化资源 Sublink Worker - 订阅链接转换工具





