← 返回列表

电报中文频道排行 基于云原生 Serverless 架构的超轻量 Telegram 消息处理器搭建教程

分类:telegram教程发布于:2026-08-24

telegram搜

Telegram 机器人通常需要持续运行的服务器来接收消息,但对于轻量级通知、关键词识别、自动回复和消息转发等场景,长期租用一台云服务器往往会增加运维成本。基于云原生 Serverless 架构搭建消息处理器,可以让代码按请求执行,并根据实际调用量弹性计费。

本文以Cloudflare Workers + Telegram Bot API + Webhook为例,完整介绍从创建机器人、编写处理逻辑,到配置安全校验和部署上线的过程。即使没有复杂的后端基础,也可以按照步骤搭建一个稳定、低成本且易于扩展的 Telegram 消息处理器。

🚀 一、先理解 Serverless 消息处理流程

传统 Telegram 机器人一般采用 Long Polling 模式,由程序主动向 Telegram 请求新消息,这种方式需要进程长期在线。Serverless 更适合采用Webhook 模式,由 Telegram 在收到新消息后,主动向指定的 HTTPS 地址发起 POST 请求。

电报中文频道排行 Cloudflare Workers 接收到请求后,会解析 Telegram 的 Update 数据,执行关键词判断、权限检查或 API 调用,然后在较短时间内返回响应。整个过程不需要维护操作系统、进程守护、负载均衡和证书续期。

Telegram 用户
    ↓
Telegram Bot API
    ↓ HTTPS POST Webhook
Cloudflare Worker
    ↓
业务判断 / 调用 Bot API
    ↓
Telegram 用户收到回复

电报中文频道排行 适合的应用场景

该架构特别适合关键词自动回复、订单状态通知、群组消息审计、RSS 转发、客服分流和简单的数据采集。如果任务需要持续运行超过请求时限,或者涉及大量媒体转码,则应考虑专用容器或队列服务。

🔑 二、创建 Telegram Bot 并准备密钥

在 Telegram 中搜索官方的 BotFather,使用/newbot命令创建机器人。完成后,BotFather 会返回一串 Bot Token,这个 Token 等同于密码,不能直接写入公开代码仓库,也不要发布到群组或截图中。

建议同时记录机器人的用户名,并提前确定处理器的公开访问域名。Webhook 地址必须使用有效的 HTTPS URL,否则 Telegram 无法正常推送消息。

BOT_TOKEN=从 BotFather 获取的 Token
WORKER_URL=https://你的-worker-域名.workers.dev
WEBHOOK_SECRET=一段随机且难以猜测的字符串

生成安全随机字符串

Webhook Secret 用于防止其他人伪造 Telegram 请求。可以在本地终端执行下面的命令生成随机值,并将它保存到 Cloudflare Workers 的 Secret 环境变量中。

openssl rand -hex 24

⚙️ 三、编写 Cloudflare Worker 核心代码

下面的示例使用原生 JavaScript 编写,不依赖第三方框架。处理器会先检查请求方法和密钥,再读取消息文本,并根据关键词向当前聊天发送回复。

代码中的sendMessage函数负责调用 Telegram Bot API,handleUpdate负责处理具体业务。将业务逻辑拆分后,后续增加菜单、权限或数据库功能会更加容易。

const TELEGRAM_API = "https://api.telegram.org";

export default {
  async fetch(request, env) {
    if (request.method !== "POST") {
      return new Response("Method Not Allowed", { status: 405 });
    }

    const secret = request.headers.get("X-Telegram-Bot-Api-Secret-Token");
    if (secret !== env.WEBHOOK_SECRET) {
      return new Response("Unauthorized", { status: 401 });
    }

    let update;
    try {
      update = await request.json();
    } catch {
      return new Response("Bad Request", { status: 400 });
    }

    await handleUpdate(update, env);
    return new Response("OK");
  }
};

async function handleUpdate(update, env) {
  const message = update.message;
  if (!message || !message.chat) return;

  const chatId = message.chat.id;
  const text = (message.text || "").trim();

  let reply = "已收到消息。发送 /help 查看可用命令。";

  if (text === "/start") {
    reply = "你好,我是一个运行在 Serverless 上的轻量机器人。";
  } else if (text === "/help") {
    reply = "可用命令:/start、/help,也可以发送包含“状态”的消息。";
  } else if (text.includes("状态")) {
    reply = "处理器运行正常,当前请求已成功完成。";
  }

  await sendMessage(chatId, reply, env.BOT_TOKEN);
}

async function sendMessage(chatId, text, token) {
  await fetch(`${TELEGRAM_API}/bot${token}/sendMessage`, {
    method: "POST",
    headers: { "content-type": "application/json" },
    body: JSON.stringify({
      chat_id: chatId,
      text
    })
  });
}

生产环境中不要把错误堆栈直接返回给用户,也不要记录完整的 Token 或敏感消息。对于不可信输入,应限制文本长度,并对外部 API 调用设置合理的超时与失败处理。

☁️ 四、部署 Worker 并配置 Webhook

电报中文频道排行 创建 Cloudflare Workers 项目后,将代码保存为src/index.js,再通过 Wrangler 设置环境变量。Secret 应使用加密配置方式保存,避免出现在项目配置文件和 Git 历史记录中。

npm create cloudflare@latest telegram-worker
cd telegram-worker
npm install
npx wrangler secret put BOT_TOKEN
npx wrangler secret put WEBHOOK_SECRET
npx wrangler deploy

部署完成后,需要调用 Telegram 的 setWebhook 接口完成绑定。这里的 URL 必须替换为真实 Worker 地址,secret_token 则应与 Worker 中保存的密钥完全一致。

curl -X POST "https://api.telegram.org/bot你的BOT_TOKEN/setWebhook" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://你的-worker-域名.workers.dev",
    "secret_token": "你的WEBHOOK_SECRET",
    "allowed_updates": ["message"]
  }'

可以使用 getWebhookInfo 检查绑定结果。如果 last_error_message 出现证书、超时或响应码错误,应优先检查 Worker 是否成功部署、Webhook 地址是否正确,以及处理器是否在规定时间内返回了 200 响应。

curl "https://api.telegram.org/bot你的BOT_TOKEN/getWebhookInfo"

电报精准找群黑科技提示:

由于 Telegram 官方搜索对中文支持极差,很多优质的推广、技术和资源群组隐藏极深。如果你正在寻找相关的活跃社群,强烈推荐使用本站首页的 【TTSO - Telegram 智能搜索 Bot】。作为目前最好用的电报综合搜索导航,只需输入关键词,即可秒级触达数十万个精选 TG 中文群组、资源频道。一键直达,帮你节省 90% 的找群时间!

🛡️ 五、上线前的安全与稳定性检查

首先要确认 Webhook Secret 已启用,并在机器人代码中拒绝没有正确请求头的访问。其次要限制机器人权限,只授予业务真正需要的群组权限,避免机器人读取或处理不必要的数据。

如果消息可能重复到达,应根据 update_id 或业务订单编号设计幂等处理。对于重要任务,可以将消息写入 KV、Durable Objects 或外部队列,再由后续任务异步处理,避免单次请求失败导致数据丢失。

电报中文频道排行 还应测试空文本、贴纸、图片、频道消息和超长内容等情况。Telegram 的 Update 并不保证每次都包含 message.text,直接访问嵌套字段可能导致运行时异常。

成本与边界

Serverless 的优势是按请求弹性运行,但平台通常存在请求时长、CPU 时间、出站请求和存储容量限制。普通自动回复几乎不需要额外资源,而大文件下载、批量群发和高频任务则必须结合队列、缓存和速率限制设计。

❓ 常见问题解答(FAQ)

Telegram Webhook 没有收到消息怎么办?

先调用 getWebhookInfo 查看 Telegram 返回的错误信息,再检查 Worker 的访问日志。最常见原因是 URL 拼写错误、密钥不一致、Worker 返回非 200 状态码,或代码在解析请求时发生异常。

可以使用免费方案运行吗?

对于低频通知和简单指令,通常可以使用平台提供的免费额度。实际可用性取决于账户地区、平台政策和请求规模,上线前应查看当前服务条款与额度说明。

如何保存用户状态?

短期状态可以使用 KV,复杂并发场景可选择 Durable Objects,业务数据则建议使用具备备份能力的数据库。不要把状态只保存在 Worker 的内存中,因为 Serverless 实例并不保证长期复用。

机器人能处理群组中的所有消息吗?

这取决于机器人的隐私模式和群组权限设置。若需要读取普通群消息,应在 BotFather 中调整隐私模式,并确保使用场景符合群组管理规则及 Telegram 平台政策。

通过 Webhook 将 Telegram 与 Serverless 连接后,一个简单、可靠且成本可控的消息处理器就搭建完成了。后续可以继续加入命令路由、身份认证、数据库持久化、队列重试和监控告警,让系统逐步具备生产环境所需的可维护性。

telegram搜
Telegram搜索入口客服ID@TTSO联系