Telegram Bot API
🌐 中文

Telegram 机器人教程:从零创建 Telegram 机器人并发送第一条消息

· 8 分钟阅读

创建 Telegram 机器人只需要几分钟:在 Telegram(电报)中打开官方账号 @BotFather,发送 /newbot,依次填写名称和用户名,就能拿到机器人的 Token。这篇 Telegram 机器人教程从零开始,带你完成创建机器人、验证 Token、获取聊天 ID(chat_id),并用 curl 和 Python 发出第一条消息。

准备工作

需要先理解一点:机器人账号只是 Telegram 上的一个“身份”,真正决定它如何回复的是你自己编写并运行的程序。程序通过 HTTPS 调用 Bot API,与 Telegram 服务器通信。

第 1 步:用 BotFather 的 /newbot 创建 Telegram 机器人

  1. 打开 @BotFather,点击 Start(开始),它会列出所有可用命令。
  2. 发送 /newbot。
  3. 输入机器人的名称(name)。名称显示在聊天列表和资料页中,可以使用中文,之后可以用 /setname 修改。
  4. 输入机器人的用户名(username):长度 5–32 个字符,只能包含拉丁字母、数字和下划线,并且必须以 bot 结尾(不区分大小写),例如 tetris_bot、TetrisBot。如果用户名已被占用,换一个再试。
  5. 创建成功后,BotFather 会回复一条消息,其中包含机器人的链接 t.me/你的用户名 和一串 Token。
用户名是机器人在搜索、@提及和 t.me 链接中使用的唯一标识,创建后无法修改,请想好再填。名称则可以随时更改。

以上操作也可以在 @BotFather 的 Mini App 图形界面中完成,功能与命令方式相同。

第 2 步:复制并保管好 Token

Token 的格式类似 123456789:AAEexampleTokenReplaceWithYours:冒号前面的数字是机器人的 ID,冒号后面是密钥部分。调用任何 Bot API 方法都要带上它,地址格式为:

https://api.telegram.org/bot<token>/METHOD_NAME

注意 bot 和 Token 之间没有斜杠。拿到 Token 的人就能完全控制你的机器人,所以不要把它发到群里、提交到公开仓库或写进前端代码。如果以后找不到 Token,可以在 @BotFather 中通过 /mybots → 选择机器人 → API Token 重新查看;万一泄露,用 /revoke 撤销即可。完整说明见 Telegram Bot Token 获取与管理教程。

第 3 步:用 getMe 验证 Token

getMe 是最简单的方法,不需要任何参数,专门用来测试 Token。把示例 Token 换成你自己的:

curl "https://api.telegram.org/bot123456789:AAEexampleTokenReplaceWithYours/getMe"

Token 正确时,会返回机器人自己的 User 对象(示例中的数字均为占位符):

{
  "ok": true,
  "result": {
    "id": 123456789,
    "is_bot": true,
    "first_name": "我的测试机器人",
    "username": "my_test_bot",
    "can_join_groups": true,
    "can_read_all_group_messages": false,
    "supports_inline_queries": false
  }
}

其中 can_read_all_group_messages 为 false,表示隐私模式处于默认的开启状态。如果返回 401 Unauthorized,说明 Token 写错了或已被撤销;如果返回 404 Not Found,通常是地址中漏写了 bot 前缀或方法名拼错了。

不想用命令行的话,可以打开 Bot API Tester 中的 getMe,粘贴 Token 后点击执行(工具界面为英文)。Token 只保存在你浏览器的 localStorage 中,请求直接发往 api.telegram.org。

第 4 步:获取 chat_id 并发送第一条消息

机器人不能主动给陌生人发消息,必须由用户先发起对话。所以先在 Telegram 中搜索你的机器人用户名(或打开 t.me/你的用户名),点击 Start,再随便发一句话。然后调用 getUpdates 查看机器人收到的更新:

curl "https://api.telegram.org/bot123456789:AAEexampleTokenReplaceWithYours/getUpdates"
{
  "ok": true,
  "result": [
    {
      "update_id": 870000001,
      "message": {
        "message_id": 1,
        "from": {"id": 123456789, "is_bot": false, "first_name": "Alex"},
        "chat": {"id": 123456789, "first_name": "Alex", "type": "private"},
        "date": 1793266200,
        "text": "/start"
      }
    }
  ]
}

message.chat.id 就是要找的 chat_id。如果 result 是空数组,先确认已经给机器人发过消息。群组、频道的 ID 获取方法和更多排查技巧见 Telegram chat id 获取教程。

拿到 chat_id 后,用 sendMessage 发送第一条消息:

curl -X POST "https://api.telegram.org/bot123456789:AAEexampleTokenReplaceWithYours/sendMessage" \
  -H "Content-Type: application/json" \
  -d '{"chat_id": 123456789, "text": "你好!这是我的第一个 Telegram 机器人。"}'

用 Python 的 requests 库实现同样的功能(先执行 pip install requests):

import requests

TOKEN = "123456789:AAEexampleTokenReplaceWithYours"
API = f"https://api.telegram.org/bot{TOKEN}"

resp = requests.post(f"{API}/sendMessage", json={
    "chat_id": 123456789,
    "text": "你好!这条消息来自 Python。",
}, timeout=10)
print(resp.json())

进一步:用 Python 写一个自动回复机器人

下面的程序通过长轮询不断调用 getUpdates,收到文字消息就回复一句。把 offset 设为最后一个 update_id 加 1,表示确认已处理的更新,避免重复收到:

import time
import requests

TOKEN = "123456789:AAEexampleTokenReplaceWithYours"
API = f"https://api.telegram.org/bot{TOKEN}"

offset = None
while True:
    data = requests.get(f"{API}/getUpdates",
                        params={"offset": offset, "timeout": 30},
                        timeout=40).json()
    if not data["ok"]:
        print("出错:", data["error_code"], data["description"])
        time.sleep(5)
        continue
    for update in data["result"]:
        offset = update["update_id"] + 1  # 确认这条更新
        msg = update.get("message")
        if msg and "text" in msg:
            requests.post(f"{API}/sendMessage", json={
                "chat_id": msg["chat"]["id"],
                "text": "你说的是:" + msg["text"],
            }, timeout=10)

运行后给机器人发消息,就能看到它的回复,按 Ctrl+C 停止程序。正式项目建议换用成熟的开发库(见下文),它们已经处理好了重试、并发和各种更新类型。

可选:设置描述、头像和命令菜单

机器人能正常工作后,可以在 @BotFather 中完善资料,让用户一眼看懂它能做什么:

命令列表也可以通过 Bot API 的 setMyCommands 方法设置,方便在部署脚本中统一管理。命令名为 1–32 个字符,只能包含小写英文字母、数字和下划线;描述为 1–256 个字符:

curl -X POST "https://api.telegram.org/bot123456789:AAEexampleTokenReplaceWithYours/setMyCommands" \
  -H "Content-Type: application/json" \
  -d '{"commands": [
        {"command": "start", "description": "开始使用"},
        {"command": "help", "description": "查看帮助"}
      ]}'

创建和调试时的常见问题

Telegram 机器人教程进阶:轮询、Webhook 与常用库

到这里,你已经拥有一个最小可用的机器人。接下来通常要做三个决定:

  1. 用轮询还是 Webhook 接收消息。 getUpdates 长轮询由你的程序主动拉取更新,在本地电脑上就能运行,适合开发和小型项目;Webhook 由 Telegram 把更新推送到你的 HTTPS 地址,适合正式部署。两者不能同时使用,设置方法见 Telegram Bot Webhook 设置教程。
  2. 选择开发库。 Python 常用 python-telegram-bot、aiogram、pyTelegramBotAPI;Node.js 常用 grammY、Telegraf;Go 可以用 telebot 或 go-telegram-bot-api。
  3. 是否需要 Mini App。 如果按钮和命令不够用,可以做一个在 Telegram 内打开的网页应用(Mini App),通过 @BotFather 的 /newapp 或菜单按钮接入。开发时可以先用 Mini App Tester 在浏览器中调试 Telegram.WebApp 接口。

想尝试消息格式和按钮,可以在 Bot API Tester 的 sendMessage 中直接试验,或在 Swagger 文档中浏览全部 185 个方法。

常见问题

创建 Telegram 机器人要花钱吗?

不需要。在 @BotFather 中创建机器人、调用 Bot API 收发消息都是免费的,只需要一个 Telegram 账号。通常唯一的成本是你用来运行机器人程序的服务器。

Telegram 机器人的用户名有什么规则?

长度 5–32 个字符,只能使用拉丁字母、数字和下划线,并且必须以 bot 结尾(不区分大小写),例如 tetris_bot 或 TetrisBot。用户名创建后无法修改,显示名称则可以随时用 /setname 修改。

不会编程能做 Telegram 机器人吗?

在 @BotFather 中注册机器人不需要写代码,但要让机器人自动回复,就必须有程序调用 Bot API。本文的 curl 命令和几十行 Python 代码就是最简单的起点。

为什么机器人收不到群里的普通消息?

机器人默认开启隐私模式,在群组中只能收到明确发给它的命令(如 /start@your_bot)、对它消息的回复和服务消息等。可以在 @BotFather 中用 /setprivacy 关闭隐私模式(之后要把机器人移出群组再重新加入),或者把机器人设为管理员。

用 Python 开发 Telegram 机器人推荐哪个库?

常用的有 python-telegram-bot、aiogram 和 pyTelegramBotAPI;Node.js 可以选 grammY 或 Telegraf。如果只是发送通知,直接用 requests 调用 HTTP 接口就够了。

Telegram Bot API 发送消息教程:sendMessage 参数、格式、按钮与错误处理

Telegram Bot API 发送消息中文教程:sendMessage 参数说明,curl、Python、JavaScript 示例,HTML 与 MarkdownV2 格式、内联按钮、群组和频道发送,以及 400、403、429 错误处理。

Telegram Bot Token 怎么获取:获取、查看、验证和撤销机器人 Token

Telegram Bot Token 怎么获取?用 @BotFather 的 /newbot 获取新 Token,在 /mybots 中查看已有 Token,用 getMe 检查是否有效,泄露后及时撤销,并配合 chat_id 接入 n8n 等工具。

Telegram Bot Webhook 设置教程:用 setWebhook 配置 Webhook URL 和 secret_token

Telegram Bot API setWebhook 中文教程:Webhook URL 的 HTTPS 与端口要求、secret_token 请求头校验、用 getWebhookInfo 排错、用 deleteWebhook 切回轮询,以及 409 等常见错误的解决方法。

Telegram chat id 获取教程:查看用户、群组、频道和话题的聊天 ID

Telegram chat id 获取教程:用 getUpdates 查看私聊、群组、超级群组、频道和论坛话题的聊天 ID,讲清负数和 -100 前缀的含义,并排查 result 为空、409 Conflict 等常见问题,附 Python 示例。