Telegram 机器人教程:从零创建 Telegram 机器人并发送第一条消息
创建 Telegram 机器人只需要几分钟:在 Telegram(电报)中打开官方账号 @BotFather,发送 /newbot,依次填写名称和用户名,就能拿到机器人的 Token。这篇 Telegram 机器人教程从零开始,带你完成创建机器人、验证 Token、获取聊天 ID(chat_id),并用 curl 和 Python 发出第一条消息。
准备工作
- 一个 Telegram 账号,手机端或桌面端客户端都可以。
- 官方的机器人管理账号 @BotFather。搜索时请认准用户名
@BotFather,不要使用名字相似的仿冒账号。 - (可选)一台装有 curl 或 Python 3 的电脑,用来调用 Bot API。不想敲命令的话,也可以直接在浏览器里用 Bot API Tester 发送请求。
需要先理解一点:机器人账号只是 Telegram 上的一个“身份”,真正决定它如何回复的是你自己编写并运行的程序。程序通过 HTTPS 调用 Bot API,与 Telegram 服务器通信。
第 1 步:用 BotFather 的 /newbot 创建 Telegram 机器人
- 打开 @BotFather,点击 Start(开始),它会列出所有可用命令。
- 发送
/newbot。 - 输入机器人的名称(name)。名称显示在聊天列表和资料页中,可以使用中文,之后可以用
/setname修改。 - 输入机器人的用户名(username):长度 5–32 个字符,只能包含拉丁字母、数字和下划线,并且必须以
bot结尾(不区分大小写),例如tetris_bot、TetrisBot。如果用户名已被占用,换一个再试。 - 创建成功后,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 中完善资料,让用户一眼看懂它能做什么:
/setdescription:设置描述(最多 512 个字符),用户第一次打开空白聊天时会看到。/setabouttext:设置简介(最多 120 个字符),显示在机器人资料页,分享机器人时也会随链接一起发送。/setuserpic:设置头像。/setcommands:设置命令列表,用户输入/时会看到提示。
命令列表也可以通过 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": "查看帮助"}
]}'
创建和调试时的常见问题
- getUpdates 一直返回空的
result:确认已经在私聊中点过 Start 或发过消息;更新最多只保存 24 小时,太早发的消息可能已经过期。 - 返回
409 Conflict:机器人设置了 Webhook,此时不能再用getUpdates,先调用deleteWebhook。另一种 409 是同一个 Token 同时运行了两个轮询程序,只保留一个即可。 - 发送消息返回
400 Bad Request: chat not found:chat_id 填错了,或者对方从未与机器人对话过。 - 群里发消息机器人没反应:这是隐私模式在起作用,命令请写成
/start@你的机器人用户名,或者按上面的说明关闭隐私模式。
Telegram 机器人教程进阶:轮询、Webhook 与常用库
到这里,你已经拥有一个最小可用的机器人。接下来通常要做三个决定:
- 用轮询还是 Webhook 接收消息。
getUpdates长轮询由你的程序主动拉取更新,在本地电脑上就能运行,适合开发和小型项目;Webhook 由 Telegram 把更新推送到你的 HTTPS 地址,适合正式部署。两者不能同时使用,设置方法见 Telegram Bot Webhook 设置教程。 - 选择开发库。 Python 常用 python-telegram-bot、aiogram、pyTelegramBotAPI;Node.js 常用 grammY、Telegraf;Go 可以用 telebot 或 go-telegram-bot-api。
- 是否需要 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 示例。