如何托管 Telegram 机器人
本页内容
Telegram 机器人只有在代码运行时才会回复。如果在笔记本上搭建,电脑一休眠它就不再响应——所以每个机器人迟早都需要一个始终开机的地方。
本指南涵盖完整流程:用 BotFather 创建机器人、在 polling 和 webhook 之间做选择、Python 和 JavaScript 的可运行示例、Telegram 设定的限制和规则,以及如何让机器人 24/7 在线。
第 1 步:用 BotFather 创建机器人
- 在 Telegram 中打开 @BotFather,发送
/newbot。 - 先为机器人设置显示名称,再设置用户名:5 到 32 个字符,仅限拉丁字母、数字和下划线,并以
bot结尾——例如my_shop_helper_bot。 - BotFather 会回复令牌(token),形如
123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11。任何拿到它的人都能控制你的机器人,所以不要把它写进代码,也绝不要分享。如果泄露了,向 BotFather 发送/token获取新的令牌。
还有两个值得了解的 BotFather 命令:/setcommands 用于添加用户输入 / 时看到的命令列表,/setprivacy 控制机器人在群组中能看到什么。隐私模式默认开启,因此在群组里机器人只会收到发给它的命令以及对它自己消息的回复——除非你把它设为管理员。
Polling 还是 webhook?
机器人从 Telegram 获取消息有两种方式——两者不能同时使用:
| Long polling | Webhook | |
|---|---|---|
| 工作方式 | 机器人通过一个保持打开的连接不断向 Telegram 询问新消息 | Telegram 将每条更新发送到你的 HTTPS 地址 |
| 需要 | 只需出站网络访问 | 域名、有效证书,以及 443、80、88 或 8443 端口 |
| 适用于 | 几乎所有机器人,也最容易托管 | 非常繁忙的机器人或 serverless 平台 |
从 polling 开始。它不需要域名、证书或开放端口,所有库都支持。如果这个令牌曾经设置过 webhook,请先调用 deleteWebhook——webhook 处于启用状态时 polling 无法工作。
使用 polling 的机器人可直接运行在 HytHost 机器人托管上,无需配置域名或开放端口——Python 或 Node.js,€0.89/月起。
查看机器人托管套餐第 2a 步:用 Python 编写机器人(python-telegram-bot)
python-telegram-bot 22 需要 Python 3.10 或更高版本。用 pip install python-telegram-bot 安装,然后创建 bot.py:
import os
from telegram import Update
from telegram.ext import Application, CommandHandler, ContextTypes, MessageHandler, filters
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
await update.message.reply_text("Hi! Send me a message and I will echo it.")
async def echo(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
await update.message.reply_text(update.message.text)
def main() -> None:
application = Application.builder().token(os.environ["TELEGRAM_TOKEN"]).build()
application.add_handler(CommandHandler("start", start))
application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo))
application.run_polling(allowed_updates=Update.ALL_TYPES)
if __name__ == "__main__":
main()
aiogram 3 是 Python 中另一个热门选择,同样需要 Python 3.10 或更高版本。
第 2b 步:用 JavaScript 编写机器人(grammY)
grammY 是 Node.js 上仍在积极维护的 Telegram 框架。运行 npm install grammy,然后创建 bot.js:
const { Bot } = require("grammy");
const bot = new Bot(process.env.TELEGRAM_TOKEN);
bot.command("start", (ctx) => ctx.reply("Welcome! Up and running."));
bot.on("message:text", (ctx) => ctx.reply(ctx.message.text));
process.once("SIGINT", () => bot.stop());
process.once("SIGTERM", () => bot.stop());
bot.start();
较早的教程使用 Telegraf,但它自 2024 年 2 月以来没有发布过新版本;新建机器人时,grammY 是更稳妥的选择。
Telegram 对机器人的限制与规则
来自 Telegram 机器人 FAQ 的限制:
- 单个聊天中约每秒 1 条消息,群组中每分钟 20 条消息,总体约每秒 30 条消息。
- 文件:机器人最多可发送 50 MB、下载 20 MB。
- 同一时间只能有一个机器人实例进行 polling。第二个实例会收到 Conflict: terminated by other getUpdates request——测试时请使用单独的令牌。
规则:Telegram 的机器人开发者条款禁止垃圾信息、未经请求的消息以及规避速率限制。机器人需要隐私政策(如果你不自己撰写,则适用 Telegram 的标准政策),并且在用户要求时必须删除其数据。用自动化个人账号代替机器人——即所谓的 userbot——完全是另一回事,Telegram 会封禁用于刷屏或发送垃圾信息的账号。
在 HytHost 托管 Telegram 机器人
我们的机器人托管套餐既能运行 Discord 机器人,也能运行 Telegram 机器人:
- 选择套餐和运行环境——python-telegram-bot 或 aiogram 选 Python,grammY 选 Node.js。在 Startup 标签页中选择 Python 3.10 或更高版本,或当前的 Node.js 版本。
- 上传代码,通过文件管理器或 SFTP,连同
requirements.txt或package.json一起上传。 - 把令牌放在
.env文件中或环境变量里,不要写进代码。 - 启动它。使用 polling 时机器人不需要域名或开放端口;如果崩溃,面板会自动重启它。
我们的规则允许:基于官方 Bot API、使用 BotFather 令牌的机器人。不允许:自动化个人账号的 userbot、未经请求的群发消息、抓取用户或群组信息,以及在没有相应权利的情况下下载并转发媒体的机器人。违反这些规则的机器人将被暂停。
套餐包含 MySQL 数据库和备份。还想做一个 Discord 机器人?请看如何制作 Discord 机器人。
无需开着电脑,让你的 Telegram 机器人 24/7 在线:Python 或 Node.js 机器人托管,€0.89/月起,含自动重启。
查看机器人托管套餐常见问题解答
你可以在自己的电脑上免费运行,但每当电脑休眠或重启时它就会离线。免费云套餐通常会暂停闲置的应用或限制其用量。要让机器人持续在线,小型付费托管是可靠的选择。
几乎所有机器人都用 polling:它不需要域名、证书或开放端口。Webhook 适合非常繁忙的机器人或 serverless 平台,并且需要在 443、80、88 或 8443 端口上使用 HTTPS。一个令牌不能同时使用两者。
向 @BotFather 发送 /token 并选择该机器人以获取新令牌,然后在机器人运行的所有地方更新它。把令牌保存在环境变量或 .env 文件中,绝不要放在你分享的代码里。
有两个机器人实例在用同一个令牌进行 polling,例如一个在你的电脑上,一个在服务器上。停掉其中一个,并在测试时使用单独的机器人和令牌。
很少。一个响应命令的典型 Python 或 Node.js 机器人通常在 512 MB 上就能顺畅运行;处理图片或在内存中保存大量数据的机器人需要更多。
这篇指南对你有帮助吗?