手把手教你搭建一个自己的电报机器人(无需服务器,使用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。

  1. 登录 Telegram,在顶部的搜索栏中输入 BotFather(注意寻找有蓝色认证勾号的官方账号)。
  2. 进入与 BotFather 的聊天窗口,输入 /newbot 并发送。
  3. 设置机器人名字: BotFather 会提示你给机器人起一个名字(这个名字可以随便起,会显示在聊天顶部)。
    • 例如:法克法克鱿
  4. 设置机器人用户名: 接着,BotFather 会要求你设置一个用户名。
    • 重要提示: 用户名必须是唯一的,并且必须以 _bot 结尾。
    • 例如:FakeFakeYou_bot
  5. 获取 API Token: 创建成功后,BotFather 会发送一条包含你的机器人 API Token 的消息。
    • 这是一长串黄色的字符(例如 123456:ABC-DEF1234...)。
    • 单击它即可复制。请妥善保管这个 Token,不要泄露给任何人。
  6. 点击消息中蓝色的机器人链接(例如 t.me/FakeFakeYou_bot),进入与你的机器人的聊天窗口,发送 /start

第二步:创建 Cloudflare Worker

接下来,我们去 Cloudflare 创建一个 Worker,它将作为我们机器人的 “服务器” 来运行代码。

  1. 打开 Cloudflare 官网 并登录。
  2. 在左侧侧边栏的栏目中,选择 计算和 AI (Compute & AI) 分类下的 Workers 和 Pages (Workers & Pages)。
  3. 点击右上角的 创建应用程序 (Create application)。
  4. 在 “创建应用程序” 页面,保持默认的 Workers 选项卡,选择 从 “Hello World” 开始 (Start from “Hello World”)。
  5. 点击右下角的 部署 (Deploy)。

第三步:部署机器人代码

部署成功后,我们需要将 “Hello World” 的默认代码替换为我们机器人的功能代码。

  1. 在 Worker 的管理界面,点击 编辑代码 (Edit code)。

  2. 在代码编辑窗口中,全选所有默认代码并删除它们。

    • (Mac 用户使用 Command + A,Windows 用户使用 Control + A)
  3. 复制下面的所有代码,并将其粘贴到 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));
    });

  4. 粘贴代码后,复制 Worker 界面上显示的 URL(例如 your-worker-name.your-subdomain.workers.dev),我们稍后会用到。

  5. 点击 部署 (Deploy)。

第四步:设置环境变量

代码部署后,我们还需要告诉 Worker 我们的机器人 API Token 是什么。

  1. 返回 Worker 的管理界面(如果还在代码编辑界面,点击左上角返回)。
  2. 点击 设置 (Settings) 选项卡。
  3. 在设置页面中,选择 变量 (Variables)。
  4. 环境变量 (机密) (Environment Variables (Secrets)) 下,点击 添加变量 (Add variable)。
  5. 变量名称 (Variable name): 必须 填写 TELEGRAM_BOT_TOKEN (这对应了我们代码中的 bot${TELEGRAM_BOT_TOKEN})。
  6. 值 (Value): 粘贴你在第一步中从 BotFather 获取的 API Token
  7. 点击 保存 (Save)。

第五步:设置 Webhook

最后一步是告诉 Telegram,当有人给你的机器人发消息时,应该把消息转发到哪里(即转发到我们的 Worker URL)。

  1. 打开一个新的浏览器标签页。
  2. 复制下面的 URL 模板:
    1
    [https://api.telegram.org/bot](https://api.telegram.org/bot)<YOUR_NEW_BOT_TOKEN>/setWebhook?url=<YOUR_WORKER_URL>
  3. 替换模板中的两个部分(并去掉 <> 符号):
    • <YOUR_NEW_BOT_TOKEN>: 替换为你的机器人 API Token (来自 BotFather)。
    • <YOUR_WORKER_URL>: 替换为你的 Worker URL (在第三步第 4 点复制的那个)。
  4. 确保你的 Worker URL 是以 https:// 开头的。
  5. 将替换好的完整 URL 粘贴到浏览器地址栏中,并访问它(按回车键)。
  6. 如果你看到类似下面的 JSON 响应,就代表设置成功了:
    1
    2
    3
    4
    5
    {
    "ok": true,
    "result": true,
    "description": "Webhook was set"
    }

第六步:测试机器人

大功告成!

  1. 返回你与机器人的 Telegram 聊天窗口。
  2. 发送 /start,看是否收到欢迎消息。
  3. 尝试发送一个地点,例如 北京London
  4. 机器人现在应该会回复你该地点的实时天气了!

📱 站长力荐

👉 流量告急?立即办理大流量卡,随时随地畅享高速网络,体验无忧上网的快感!






直接搜-夸克网盘资源搜索-电影|电视剧|资料免费下载 比价吧-域名价格比价-实时查询-域名注册|续费|转入最低价 VPS实验室 - 海外VPS|国外VPS|国外云服务器|国外独立服务器 山外边 - 精选苹果iOS游戏iPA下载,无需越狱,海量汉化资源 Sublink Worker - 订阅链接转换工具