机器人教程
如何在Telegram中创建自己的机器人?详细步骤是什么?

引言:为什么你需要一个 Telegram 机器人
试想一下,你每天需要查询天气、监控服务器状态、处理客服消息——如果这些重复任务能交给一个自动化的“小助手”,你会多出多少时间?Telegram 机器人正是这样的工具:它们是运行在远程服务器上的程序,通过 Telegram Bot API 与用户交互,可以执行从天气查询、新闻推送到客服系统、支付网关在内的各类自动化任务,而用户无需安装额外应用。本文将从零开始,带您走完创建机器人的完整流程:使用 @BotFather 注册、获取 API Token、配置描述与命令,最后进行首次调通测试。无论您是为个人项目还是商业场景,这些步骤都是基础且可复用的。
功能定位与变更脉络
机器人在 Telegram 中被设计为“无头”账户——它不需要手机号,无法主动发起会话(除非用户先与它对话或将其加入群组),所有逻辑由开发者控制的服务器端实现。这种设计既保证了用户隐私,也让机器人可以大规模部署而不会打扰他人。自 2015 年 Bot API 发布以来,Telegram 陆续加入了内联查询、支付、游戏、自定义键盘、投票等能力,使机器人几乎可以替代大多数轻量级 Web 应用。截至当前的最新版本,Bot API 仍保持向后兼容,旧机器人在新版客户端下仍能正常运行。
关键变更包括:Webhook 支持自签名证书(后来改为要求可信 CA)、Inline 模式 允许机器人在任何聊天中被提及、Menus(底部按钮菜单)的引入,以及 Zero‑Rating 合作(部分地区运营商免流量)。理解这些演进有助于您判断构建哪类机器人最合适——例如,如果您需要机器人能在任意聊天中快速查询信息,内联模式就是必选项。
前置条件
- 一个有效的 Telegram 账号(任何客户端均可)。
- 一个可供机器人发送 HTTP 请求的 服务器或开发环境(Windows/Mac/Linux 均可,后续编程需要)。
- 基础的 HTTP 与 JSON 知识(用于解析 API 响应)。
如果对 HTTP 和 JSON 不太熟悉,也别担心——本教程的示例代码会为您处理好大部分细节,您只需理解基本概念即可起步。
第一步:通过 @BotFather 创建机器人
1.1 找到 BotFather
在 Telegram 的搜索栏中查找 @BotFather,这是一个由 Telegram 官方维护的“机器人工厂”。无论使用 Android、iOS 还是桌面客户端,搜索路径均为:点击搜索图标 → 输入 BotFather → 选择带有认证蓝勾的账号。如果您被引导至陌生机器人,请务必认准官方标志——仿冒的 BotFather 可能会窃取您的 Token。
1.2 发送 /newbot 命令
在对话窗口中输入 /newbot,BotFather 会立即要求您设置机器人的 显示名称(用户看到的名称)和 用户名(用于提及和链接的标识符)。
- 显示名称:长度不限,可包含空格与 emoji,例如“小助手bot”。
- 用户名:必须以
bot结尾(如MyAssistantBot),且在整个 Telegram 中唯一。
若用户名已被占用,BotFather 会提示错误,需重新选择。成功后,会返回一条包含 API Token 的消息。这个 Token 形如 123456789:ABCdefGHIjklMNOpqrsTUVwxYZ,是机器人身份的凭证,务必立即保存到安全位置。示例:假设您想创建一个天气机器人,显示名称可以叫“天气小助手”,用户名可设为 WeatherHelperBot——一旦注册成功,您将获得一个类似 987654321:AA...xyz 的 Token。
⚠️ 安全警告
Token 等同于密码,切勿提交到公开代码仓库、分享给任何人或写在客户端聊天中。一旦泄露,攻击者可完全控制您的机器人。
1.3 配置基本信息
创建完成后,继续与 BotFather 对话,通过以下命令完善机器人资料——这会让您的机器人看起来更专业,也能让用户更快理解其用途:
- /setdescription:设置机器人介绍(出现在开始对话时的 /start 回复上方)。建议用 1‑2 句话说明功能,例如“发送城市名获取实时天气”。
- /setabouttext:设置简介(出现在机器人个人资料页)。可包含更详细的用途说明,如“自动回复常见问题”。
- /setuserpic:上传头像图片(建议 512×512 像素,JPEG/PNG)。一个醒目的图标能提升用户信任感。
- /setcommands:定义命令列表。命令必须以斜杠开头(如 /help),后面跟短描述。BotFather 会依次提问,最后生成一个显示在输入框下方的 {/} 按钮菜单。示例:为天气机器人定义
/today(今日天气)、/week(一周预报)。
1.4 内联模式与群组权限
用 /setinline 可开启内联查询,允许用户在任何聊天中通过 @您的机器人用户名 + 关键词 调用机器人搜索结果。这在需要快速分享信息时非常方便,比如直接在内联结果中显示天气。关于群组权限,/setjoingroups 可禁止或允许机器人被手动添加到群组;/setprivacy 控制机器人是否能看到群组中所有消息(默认仅能看到 / 命令触发的消息)。根据经验性观察,如果机器人需要处理群内非命令内容(如自动翻译),请关闭隐私模式(/setprivacy → Disable)。
第二步:验证 API 连通性
在编写任何代码前,先验证 Token 是否有效——这是最简单、也是最容易被跳过的一步。Telegram Bot API 的基地址为 https://api.telegram.org/bot<token>/。最简单的方法是访问 getMe 方法:
将 URL 中的 Token 替换为您的实际 Token,在浏览器或 curl 中访问。若返回类似以下的 JSON 则说明机器人已正常工作:
如果返回 {"ok":false, "description":"Unauthorized"},请检查 Token 是否粘贴完整、末尾是否有空格。此步骤不涉及任何程序语言,是快速排查 Token 问题的标准方法——花 30 秒验证,可以避免之后调试数小时。
第三步:编写第一个“回应”程序(Python 示例)
以下用一个极简的 Python 脚本展示如何接收用户消息并作出回复。您需要一台安装了 Python 3.6+ 和 requests 库的设备。此示例通过 Long Polling(长时间轮询)获取更新,适合小型项目或学习阶段——它的工作原理是让脚本不断向 Telegram 服务器询问“有新消息吗?”,有则处理,没有则等待。
3.1 安装依赖
3.2 脚本代码
创建一个 bot.py 文件,内容如下(替换 YOUR_TOKEN 为你的真实 Token):
import time
TOKEN = "YOUR_TOKEN"
URL = f"https://api.telegram.org/bot{TOKEN}/"
def get_updates(offset=None):
url = URL + "getUpdates"
params = {"timeout": 100, "offset": offset}
response = requests.get(url, params=params)
return response.json()
def send_message(chat_id, text):
url = URL + "sendMessage"
params = {"chat_id": chat_id, "text": text}
requests.get(url, params=params)
def main():
last_update_id = 0
while True:
updates = get_updates(offset=last_update_id + 1)
if updates.get("result"):
for update in updates["result"]:
last_update_id = update["update_id"]
message = update.get("message")
if message:
chat_id = message["chat"]["id"]
text = f"你说了:{message['text']}"
send_message(chat_id, text)
time.sleep(1)
if __name__ == "__main__":
main()
运行 python bot.py,然后给您的机器人发送一条消息,它应该会原样回复。按下 Ctrl+C 停止脚本。这段代码的核心逻辑是:通过 offset 参数避免重复处理同一消息,每次循环只处理最新的更新。
第四步:选择 Polling 还是 Webhook?
Bot API 提供两种接收更新的模式,选择哪种取决于您的运营能力和实时性要求:
- Long Polling:机器人主动调用
getUpdates拉取消息。适合开发测试、低流量场景、或无法暴露公网端口的机器。缺点是持续请求服务器,功耗较高。 - Webhook:您提供一个 HTTPS 端点,Telegram 服务器在有新消息时主动 POST 数据到该端点。适合生产环境、高并发、需要低延迟的场景。必须使用正规 SSL 证书(Let's Encrypt 等免费 CA 也可)。
设置 Webhook 通过 setWebhook 方法完成,并可通过 deleteWebhook 清除。注意:一旦设置 Webhook,getUpdates 将不再返回数据,除非先删除 Webhook。经验性观察表明,当每秒消息量超过 10 条时,Webhook 配合异步框架(如 aiohttp)能明显降低服务器负载,因为 Telegram 服务器可以直接推送而无需轮询。
常见问题与故障排查
4.1 Token 泄露后如何处理?
立即找 BotFather 发送 /mybots → 选择您的机器人 → 点击 API Token → 点击 Revoke current token。这下旧 Token 立刻失效,系统会生成一个新的 Token。务必更新您所有代码中的 Token。
4.2 机器人不回复消息
- 确认脚本正在运行且未崩溃。查看终端输出是否有报错。
- 确认 Token 没有被回撤或替换。
- 如果使用 Webhook,检查 Webhook URL 是否可公网访问、SSL 证书是否有效。使用
getWebhookInfo可查看状态。 - 确认用户在群组中没有将机器人静音(机器人无法绕过用户层面的通知设置)。
4.3 命令不显示在菜单中
在 BotFather 中使用 /setcommands 重新设置,并确保您的客户端已经重启(强行杀掉并重新打开)。某些客户端(如桌面版)可能缓存命令列表,经验性观察显示重启即可刷新。
4.4 内联模式不工作
首先确认已通过 BotFather 的 /setinline 开启。然后在代码中实现 inline_query 处理函数并返回 InlineQueryResult 对象。如果一切正确但无响应,检查是否因为机器人隐私设置(/setprivacy)限制了仅处理命令。
适用场景与边界条件
✅ 适合用机器人处理的情况
- 信息查询与通知:天气、汇率、股票价格、服务器状态等定时推送。
- 自动化客服:接受用户问题,匹配预设答案或转接人工。
- 群组管理:自动删除垃圾消息、欢迎新成员、投票统计。
- 轻量交互工具:待办清单、笔记、倒数日。
- 收付款:借助 Telegram Payments API 实现付费内容或打赏。
❌ 不适合用机器人处理的情况
- 需要实时音视频通话:机器人不支持直接发起或接收语音/视频,该功能仅限普通用户账号。
- 高并发实时游戏:虽然 Telegram 有 Game 平台,但 Bot API 的延迟和轮询模式并不适合动作类游戏。
- 替代 Web 应用的全部功能:机器人界面受限于聊天窗口,无法呈现复杂表单、富文本排版、多列布局等。
- 存储大量敏感数据:机器人服务器由您自行维护,Telegram 不提供数据库或数据备份服务,安全责任完全在开发者。
需要特别注意的是,机器人无法主动发起会话——它只能响应消息。因此,如果您需要推送通知,必须确保用户至少与机器人互动过一次,以便获取其 chat_id。
最佳实践清单
- 永远不在代码中硬编码 Token:使用环境变量
BOT_TOKEN或配置文件(.gitignore)。 - 优先使用 Webhook(生产环境),并配置端点的 IP 白名单(Telegram 服务器 IP 列表有官方公开页面)。
- 实施速率限制:Bot API 默认对每个 chat 每分钟最多 20 条消息(经验值,实际可能浮动)。在循环中控制发送间隔,避免被暂时封禁。
- 为 /start 命令设计清晰的引导消息,包含所有可用命令的说明。
- 记录日志:记录请求失败、未知命令等事件,方便调试。
- 定期轮换 Token:如果不放心,可每隔几个月通过 BotFather 重新生成(注意需更新代码)。
- 使用异步框架(如 python-telegram-bot 的 async 模式或 Node.js 的 telegraf)处理高并发时更高效。
这些实践不仅能提升机器人的稳定性和安全性,也能让后续维护变得更加轻松。
FAQ
创建机器人需要编程知识吗?
一个 Telegram 账号可以创建多少个机器人?
机器人可以主动给用户发消息吗?
sendMessage 给已知的 chat_id 推送,但前提是用户曾与机器人互动过。Bot API 有请求频率限制吗?
如何删除一个机器人?
/mybots 选择机器人,然后点击 Delete Bot 并确认。删除后原用户名可被其他用户注册,Token 立即失效。后续行动建议
读到这里,您已经掌握了创建并配置 Telegram 机器人的完整路径。下一步:
- 如果您尚未决定具体的应用场景,建议先做一个简单的 /echo 机器人(如本文 Python 示例),然后扩展为天气查询或 RSS 订阅推送。
- 阅读 Telegram Bot API 官方文档,了解 KeyboardMarkup、InlineKeyboard、CallbackQuery 等交互元素,这将让您的机器人从“文本应答”升级为“可交互应用”。
- 如果计划部署到公网,请设置 Webhook 并使用 Docker 或 systemd 管理进程,确保服务稳定运行。
机器人的潜力远不止回复消息——它可以是您的自动化助理、支付通道、甚至是社群生态的入口。用最小的成本开始,让机器人替您跑腿吧。