Telegram图标Telegram下载站

机器人教程

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

Telegram技术团队·
如何创建Telegram机器人, Telegram机器人创建步骤, BotFather使用方法, Telegram机器人API设置, Telegram机器人权限配置, Telegram机器人测试方法, Telegram机器人创建教程, Telegram机器人常见问题

引言:为什么你需要一个 Telegram 机器人

试想一下,你每天需要查询天气、监控服务器状态、处理客服消息——如果这些重复任务能交给一个自动化的“小助手”,你会多出多少时间?Telegram 机器人正是这样的工具:它们是运行在远程服务器上的程序,通过 Telegram Bot API 与用户交互,可以执行从天气查询、新闻推送到客服系统、支付网关在内的各类自动化任务,而用户无需安装额外应用。本文将从零开始,带您走完创建机器人的完整流程:使用 @BotFather 注册、获取 API Token、配置描述与命令,最后进行首次调通测试。无论您是为个人项目还是商业场景,这些步骤都是基础且可复用的。

引言:为什么你需要一个 Telegram 机器人
引言:为什么你需要一个 Telegram 机器人

功能定位与变更脉络

机器人在 Telegram 中被设计为“无头”账户——它不需要手机号,无法主动发起会话(除非用户先与它对话或将其加入群组),所有逻辑由开发者控制的服务器端实现。这种设计既保证了用户隐私,也让机器人可以大规模部署而不会打扰他人。自 2015 年 Bot API 发布以来,Telegram 陆续加入了内联查询、支付、游戏、自定义键盘、投票等能力,使机器人几乎可以替代大多数轻量级 Web 应用。截至当前的最新版本,Bot API 仍保持向后兼容,旧机器人在新版客户端下仍能正常运行。

关键变更包括:Webhook 支持自签名证书(后来改为要求可信 CA)、Inline 模式 允许机器人在任何聊天中被提及、Menus(底部按钮菜单)的引入,以及 Zero‑Rating 合作(部分地区运营商免流量)。理解这些演进有助于您判断构建哪类机器人最合适——例如,如果您需要机器人能在任意聊天中快速查询信息,内联模式就是必选项。

前置条件

  1. 一个有效的 Telegram 账号(任何客户端均可)。
  2. 一个可供机器人发送 HTTP 请求的 服务器或开发环境(Windows/Mac/Linux 均可,后续编程需要)。
  3. 基础的 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 方法:

https://api.telegram.org/bot123456789:ABCdef.../getMe

将 URL 中的 Token 替换为您的实际 Token,在浏览器或 curl 中访问。若返回类似以下的 JSON 则说明机器人已正常工作:

{"ok": true, "result": {"id": 123456789, "is_bot": true, "first_name": "小助手bot", "username": "MyAssistantBot"}}

如果返回 {"ok":false, "description":"Unauthorized"},请检查 Token 是否粘贴完整、末尾是否有空格。此步骤不涉及任何程序语言,是快速排查 Token 问题的标准方法——花 30 秒验证,可以避免之后调试数小时。

第三步:编写第一个“回应”程序(Python 示例)

以下用一个极简的 Python 脚本展示如何接收用户消息并作出回复。您需要一台安装了 Python 3.6+ 和 requests 库的设备。此示例通过 Long Polling(长时间轮询)获取更新,适合小型项目或学习阶段——它的工作原理是让脚本不断向 Telegram 服务器询问“有新消息吗?”,有则处理,没有则等待。

3.1 安装依赖

pip install requests

3.2 脚本代码

创建一个 bot.py 文件,内容如下(替换 YOUR_TOKEN 为你的真实 Token):

import requests
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.1 Token 泄露后如何处理?
4.1 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。

最佳实践清单

  1. 永远不在代码中硬编码 Token:使用环境变量 BOT_TOKEN 或配置文件(.gitignore)。
  2. 优先使用 Webhook(生产环境),并配置端点的 IP 白名单(Telegram 服务器 IP 列表有官方公开页面)。
  3. 实施速率限制:Bot API 默认对每个 chat 每分钟最多 20 条消息(经验值,实际可能浮动)。在循环中控制发送间隔,避免被暂时封禁。
  4. 为 /start 命令设计清晰的引导消息,包含所有可用命令的说明。
  5. 记录日志:记录请求失败、未知命令等事件,方便调试。
  6. 定期轮换 Token:如果不放心,可每隔几个月通过 BotFather 重新生成(注意需更新代码)。
  7. 使用异步框架(如 python-telegram-bot 的 async 模式或 Node.js 的 telegraf)处理高并发时更高效。

这些实践不仅能提升机器人的稳定性和安全性,也能让后续维护变得更加轻松。

FAQ

创建机器人需要编程知识吗?

注册和配置(步骤1)完全不需要编程。但要让机器人真正响应消息,至少需要编写少量代码或使用现成的框架。您可以从简单的 curl 命令开始测试 API,逐步学习。

一个 Telegram 账号可以创建多少个机器人?

官方未明确限制上限。经验性观察表明即使是创建数百个也没有触发封锁,但每个机器人必须使用唯一的用户名。

机器人可以主动给用户发消息吗?

不能主动发起对话,必须等用户先发送消息或加入群组后,机器人才能在后续聊天中回复。但如果是通知类机器人,可通过定时任务调用 sendMessage 给已知的 chat_id 推送,但前提是用户曾与机器人互动过。

Bot API 有请求频率限制吗?

有。官方文档指出针对“每个聊天”有约 30 条/秒的软限制,针对整个 bot 有全局限制。如果超出,API 会返回 429 错误。建议实现重试逻辑并控制发送速度。

如何删除一个机器人?

在 BotFather 中使用 /mybots 选择机器人,然后点击 Delete Bot 并确认。删除后原用户名可被其他用户注册,Token 立即失效。

后续行动建议

读到这里,您已经掌握了创建并配置 Telegram 机器人的完整路径。下一步:

  • 如果您尚未决定具体的应用场景,建议先做一个简单的 /echo 机器人(如本文 Python 示例),然后扩展为天气查询或 RSS 订阅推送。
  • 阅读 Telegram Bot API 官方文档,了解 KeyboardMarkup、InlineKeyboard、CallbackQuery 等交互元素,这将让您的机器人从“文本应答”升级为“可交互应用”。
  • 如果计划部署到公网,请设置 Webhook 并使用 Docker 或 systemd 管理进程,确保服务稳定运行。

机器人的潜力远不止回复消息——它可以是您的自动化助理、支付通道、甚至是社群生态的入口。用最小的成本开始,让机器人替您跑腿吧。