机器人教程
如何创建Telegram自定义机器人?

引言:Telegram 自定义机器人的定位与价值
Telegram 机器人(Bot)本质上是运行在 Telegram 平台上的自动化账户,通过 Bot API 与用户交互。创建自定义机器人的核心价值在于:你可以完全控制机器人的行为、外观和响应逻辑,从而轻松实现消息推送、群组管理、客服系统、自动化工具等场景。与官方预置的机器人(如 @weatherbot)不同,自定义机器人允许你定义专属命令、内联模式、键盘布局,并决定数据存储与处理方式——这是从“使用工具”到“构建工具”的质变。
到了 2026 年,Telegram Bot API 已稳定迭代多年,核心功能未发生颠覆性变化,但底层限制(如速率限制、消息长度)依然需要开发者留意。本文将从实际创建流程出发,覆盖从 BotFather 注册到部署运行的完整链路,并着重分析性能与成本边界,帮助你在不同场景下做出合理取舍。
第一步:通过 BotFather 创建机器人
所有 Telegram 机器人的生命周期都始于 @BotFather——Telegram 官方提供的机器人管理工具。最短路径如下:
- 在 Telegram 中搜索并打开 @BotFather,点击 Start 启动对话。
- 发送命令
/newbot,BotFather 会询问机器人的名称(如 “My Custom Bot”)。 - 接着询问用户名(如 “MyCustomBot”),必须以 bot 结尾(如
MyCustomBot_bot)。 - 成功后,BotFather 会返回一个 Token,形如
1234567890:ABCdefGHIJklmNOPqrStuVWXyz。这是机器人的唯一身份凭证,务必妥善保管。
如果你在 iOS 或 Android 上操作,步骤完全一致,因为 BotFather 是跨平台对话界面。桌面端同样适用,建议使用 Telegram Desktop 版以获得更流畅的输入体验。注意:一个 Telegram 账户可以创建多个机器人,但每个机器人需要独立的用户名和 Token,这意味着你可以为不同项目注册专属机器人,而互不干扰。
常见分支与回退
- 用户名被占用:BotFather 会提示“Sorry, this username is already taken.”,需要更换用户名。建议尝试添加下划线或数字,例如在末尾增加
_bot变体。 - 忘记 Token:在 BotFather 对话框中发送
/token,选择对应机器人即可重新获取 Token。无需重新创建机器人。 - 需要删除机器人:发送
/deletebot并选择目标机器人,确认后删除(不可恢复)。谨慎操作。
第二步:为机器人配置外观与命令
获得 Token 后,机器人还只是一个“空壳”。通过 BotFather 可以设置以下属性,提升用户体验:
- 名称(
/setname):显示在用户对话列表中的机器人名称。 - 描述(
/setdescription):出现在机器人简介页,用于说明功能。 - 关于(
/setabouttext):简短说明,用于机器人资料卡。 - 头像(
/setuserpic):上传一张图片作为机器人头像,建议 512×512 像素。 - 命令列表(
/setcommands):定义机器人可响应的命令列表。格式为每行一个命令,例如:start - 开始使用机器人
help - 获取帮助
设置命令时需注意:命令必须以小写字母开头,不能包含空格;单条命令描述不超过 256 字符。对于需要多语言支持的场景,BotFather 也支持为不同语言设置不同的命令列表,通过 /setcommands 后选择语言即可。示例:你可以为英文用户设置 start - Start the bot,为中文用户设置 start - 开始使用,让国际用户都能获得本地化体验。
第三步:编写机器人代码并部署
机器人需要一个后端程序来接收并处理来自 Telegram 的消息。Telegram Bot API 是 HTTP 接口,支持任何能发送 HTTPS 请求的编程语言。最常见的实现方案是使用 Python 搭配 python-telegram-bot 库,或 Node.js 搭配 node-telegram-bot-api。下面以 Python 为例,展示一个最小可用机器人:
import asyncio
from telegram import Bot, Update
from telegram.ext import Application, CommandHandler, ContextTypes
TOKEN = "YOUR_TOKEN_HERE"
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text("Hello! I am a custom bot.")
async def main():
app = Application.builder().token(TOKEN).build()
app.add_handler(CommandHandler("start", start))
await app.run_polling()
if __name__ == "__main__":
asyncio.run(main())
上述代码使用 python-telegram-bot 库(截至当前的最新版本为 21.x 系列)。通过 Application.builder() 创建实例,注册命令处理器,然后启动轮询(Polling)模式。轮询模式下,程序会每隔一小段时间(约 0.1 秒)向 Telegram 服务器请求新消息,适合低流量场景。如果你的服务器处于内网或没有固定公网 IP,轮询模式是唯一可行的选择。
Webhook 模式:性能与成本取舍
对于生产环境,推荐使用 Webhook 模式:Telegram 服务器在有新消息时主动向你的服务器发送 POST 请求,无需轮询,响应更快且节省资源。设置 Webhook 需要:
- 一个公网可访问的 HTTPS 服务器(必须使用有效的 SSL 证书,自签名证书不被接受)。
- 调用
https://api.telegram.org/bot<TOKEN>/setWebhook?url=<YOUR_URL>设置 Webhook 地址。 - 在服务器上运行一个 HTTP 服务(如 Flask、FastAPI),监听 POST 请求并处理更新。
成本方面:Webhook 模式需要一台 24 小时在线的服务器(可使用 VPS 或云函数,如 AWS Lambda、Cloudflare Workers 等)。轮询模式则可运行在低成本设备(如 Raspberry Pi)上,但需保证网络稳定。对于每天处理几百条消息的场景,两者成本差异不大;但对于每日数千条消息以上的场景,Webhook 模式能显著降低网络开销和延迟。经验性观察:在 Webhook 模式下,单次消息从用户发送到机器人回复的端到端延迟通常可控制在 200ms 以内,而轮询模式则多在 500ms~1s 之间。
性能与成本:阈值与测量方法
Telegram Bot API 存在多项内置限制,直接影响机器人性能与可用性。以下为基于官方文档和社区实践的经验性观察:
- 消息发送速率:每秒钟最多发送约 30 条消息(群组或频道)。超出后 API 会返回 429 Too Many Requests 错误,并指示冷却时间。建议在代码中实现指数退避重试逻辑,避免瞬时请求堆积。
- 消息长度:单条消息最多 4096 字符(纯文本)。若超出需要截断或分片发送。一个常见的做法是将长文本拆分为多个片段,逐个发送。
- 文件大小:上传文件最大 50 MB。发送文件时需注意网络带宽和服务器磁盘 I/O,大文件建议使用压缩或流式传输。
- Webhook 回调超时:Telegram 服务器等待你的服务器响应的时间为 30 秒。若处理耗时超过 30 秒,需考虑异步处理或提前返回 200 OK,后续通过其他方式(如另一条消息)告知用户处理结果。
如何测量机器人响应时间
- 端到端延迟:在机器人代码中记录消息接收时间戳(
update.message.date)与回复发送时间戳的差值。注意需考虑网络传输时间,可以多次采样取平均值。 - API 调用耗时:使用
time.time()包裹send_message()等 API 调用,记录平均耗时。经验性观察:在正常网络下,单次 API 调用耗时通常在 100~500ms 之间,若持续超过 1s 需排查网络或服务器性能。 - 使用 Bot API 的
getUpdates轮询间隔:轮询模式下,可通过调整polling的timeout参数(如设为 30 秒)减少请求次数,但会降低消息接收的实时性。建议根据业务容忍度选择:对实时性要求高则设为 5~10 秒,要求不高则可设为 30 秒以节省资源。
高级自定义:内联模式与键盘
除了基本对话,Telegram 机器人支持两种高级交互方式,大大扩展了使用场景:
- 内联模式(Inline Mode):用户在任何聊天中输入
@机器人用户名 查询即可触发内联查询,机器人返回结果供用户选择发送。需在 BotFather 中通过/setinline开启,并编写相应inline_query处理器。示例:一个翻译机器人可以在用户输入@translate_bot hello时直接返回中文翻译,用户点击即可发送。 - 自定义键盘(Custom Keyboard):通过
ReplyKeyboardMarkup或InlineKeyboardMarkup向用户展示按钮。例如,为客服机器人提供“常见问题”、“联系人工”等按钮,减少用户输入成本。按钮可以关联命令、URL 或回调查询,实现更丰富的交互。
内联模式适合需要快速分享信息的场景,如搜索、翻译、表情包等。但需注意:内联查询的响应时间要求更严格(体验上建议在 2 秒内返回结果),且查询结果列表最多 50 条。对于自定义键盘,建议保持按钮数量适中(不超过 3×3 布局),避免用户认知负担过重。
验证与回退:如何确认机器人正常工作
部署后,应进行以下验证,确保每一层都正确运行:
- 直接对话测试:在与机器人的私聊中发送
/start,确认能收到欢迎消息。 - 命令列表检查:输入
/查看自动补全的命令列表,是否与设置一致。如果缺少命令,回 BotFather 重新设置。 - 群组添加测试:将机器人添加到一个测试群组,确认它能响应群组消息(需在 BotFather 中通过
/setprivacy设置为Disable才能看到所有消息)。 - 错误日志监控:检查服务器日志,观察是否有 429 或 500 错误。若出现高频错误,可能是 API 速率限制或代码 bug,需针对性排查。
如果机器人无响应,常见原因包括:Token 错误、服务器无法访问 Telegram API(网络问题)、Webhook 地址未设置或证书无效。回退步骤:先尝试轮询模式(deleteWebhook 后使用 getUpdates),排除 Webhook 配置问题。若轮询模式正常,则说明问题出在 Webhook 环节,可检查证书、域名解析及防火墙规则。
适用与不适用场景清单
适合使用自定义机器人的场景
- 需要自动化消息推送(如新闻订阅、告警通知)。
- 构建群组辅助工具(如自动删除特定消息、投票统计)。
- 开发内部工具(如员工查询数据库、提交工单)。
- 实现电商或内容平台的交互界面(如积分查询、订单跟踪)。
不适合或需要谨慎使用的场景
- 高并发实时通信:Bot API 的速率限制使得单机器人无法支撑万人同时在线聊天,建议使用 Telegram 的 MTProto 协议开发原生客户端。
- 传输敏感数据:Bot 消息默认在 Telegram 端加密,但端到端加密仅限 Secret Chat。如果机器人处理密码、密钥等,建议不要记录或存储,并明确告知用户风险。
- 需要持久化状态:机器人默认无状态,每次请求独立。若需要状态记忆,需额外配置数据库(如 Redis、SQLite),增加运维复杂度。
- 用户量极大(百万级):单机器人发送消息到大量用户时,需要设计消息队列和分批发送逻辑,否则可能触发 API 封禁。更稳妥的做法是使用多个机器人或结合第三方推送服务。
常见问题(FAQ)
创建机器人需要什么编程知识?
至少需要掌握一门编程语言(如 Python、Node.js)的基础语法,以及 HTTP 请求和 JSON 处理。如果完全不会编程,也可以使用现成的机器人框架(如 Manybot)通过图形化界面创建,但自定义程度有限。
机器人 Token 泄露了怎么办?
立即在 BotFather 中使用 /revoke 命令撤销当前 Token,然后通过 /token 重新生成新 Token。同时检查是否有非授权操作,如有人使用你的 Token 发送垃圾消息。
机器人可以发送消息给任意用户吗?
不能。机器人只能向 主动与机器人对话过的用户 发送消息,或者当用户在群组中 @你时。这是 Telegram 为防止垃圾消息设置的隐私机制。如果用户从未与机器人交互,机器人无法主动发起聊天。
如何让机器人支持多语言?
通过 BotFather 的 /setcommands 可以为不同语言设置命令描述。代码层面,建议使用 update.message.from_user.language_code 获取用户语言,配合 gettext 等国际化库实现界面文本翻译。
机器人能否在频道中自动回复?
可以,但需要将机器人设置为频道管理员,并赋予“发送消息”权限。机器人可以监听频道中的新消息(通过 channel_post 更新),然后做出回应。注意:频道中用户无法直接 @机器人,通常是机器人监听关键词后自动回复。
总结与下一步行动
创建 Telegram 自定义机器人是一个从注册 Token 到代码部署的完整链路,核心决策在于:选择轮询还是 Webhook,使用何种编程语言,以及如何应对 API 限制。对于大多数中小型项目,使用 Python 的 python-telegram-bot 库配合轮询模式即可快速上线;当用户量增长或需要更低延迟时,迁移到 Webhook 模式并优化代码逻辑。随着 Telegram 生态的持续演进,未来版本可能会提供更灵活的速率限制或新的交互能力,但当前这些基础措施已足以支撑绝大多数应用场景。
下一步建议:按照本文步骤创建第一个测试机器人,编写一个简单的 /echo 命令,验证从用户输入到服务器响应的全链路。然后尝试添加内联模式或自定义键盘,逐步扩展功能。记住,始终在 BotFather 中管理机器人的安全设置,定期检查 Token 是否泄露,并监控 API 错误日志。一旦你熟练掌握这些技能,还可以进一步探索 Telegram 的支付 API、游戏平台等更高级的集成方式。
📺 相关视频教程
在Telegram上为你自己创建一个机器人 | 如何创建一个属于自己的bot是至关重要的,不管你想让bot做什么 | 基于 @BotFather 可以创建一个机器人,它可以管理你创建的每个机器人
最后更新:2026/7/5