编写 Telegram 机器人的核心步骤是:通过 @BotFather 获取 Token,选择合适的编程语言和 SDK 库,编写处理用户消息和命令的逻辑代码,然后运行你的程序(使用轮询或配置 Webhook)。从简单的文本回复开始,逐步添加按钮、文件处理、数据库集成等功能,你就能创建出功能强大的 Telegram 机器人。

Telegram 机器人是运行在 Telegram 平台上的自动化程序,它们可以帮助你完成各种任务,例如自动回复消息、管理群组、发送通知、提供信息查询、玩游戏等等。得益于 Telegram 提供的强大 Bot API,编写一个 Telegram 机器人变得相对简单。本文将带你一步步完成你的第一个 Telegram 机器人的创建和基本功能实现。

在开始之前,了解几个关键概念:
1. BotFather:Telegram 官方的“机器人制造机”。你需要通过它来创建新的机器人、获取 API Token 以及管理你的机器人设置。
2. API Token:一串类似于 123456789:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi 的密钥。这是你的机器人访问 Telegram Bot API 的唯一凭证,务必保密!任何拥有此 Token 的人都可以控制你的机器人。
3. Bot API: Telegram 提供的一套 HTTP 接口。你的程序(机器人后端)通过向这些接口发送 HTTP 请求(通常使用 HTTPS 协议)来接收用户发送给机器人的消息、命令,并发送回复消息、图片等内容。
4. Webhook vs. Polling: 这是机器人接收更新的两种主要方式。
Webhook: Telegram 服务器在有新消息或事件(如用户加入群组、发送命令)时,会主动将这些“更新”推送到你指定的服务器 URL。这种方式更高效实时,但需要你的服务器有一个公网可访问的 URL。
Polling: 你的程序定期(例如每秒)主动向 Telegram 服务器发送请求,询问“有没有新消息?”。这种方式实现简单,适用于开发测试或没有公网 IP 的情况,但不够实时且可能增加服务器负担。
5. 机器人后端: 这是运行你编写的机器人逻辑代码的程序。它可以使用几乎任何你熟悉的编程语言(Python, JavaScript/Node.js, Java, Go, PHP 等)来实现。
1. 在 Telegram 应用中搜索 @BotFather 并开始对话。
2. 发送 /newbot 命令给 BotFather。
3. BotFather 会提示你为你的机器人设置一个名字(显示给用户的名称,可以随时更改)。
4. 接着,BotFather 会要求你设置一个唯一的 username(必须以 bot 结尾,例如 my_first_test_bot)。这个名字是用户用来找到你的机器人的唯一标识。
5. 创建成功后,BotFather 会发送一条消息,其中包含你新机器人的 API Token。请妥善保存好这个 Token!
为了简化与 Telegram Bot API 的交互,避免手动处理 HTTP 请求和 JSON 数据,强烈建议使用针对你选择的编程语言的 Telegram Bot SDK(软件开发工具包)。一些流行的选择包括:
1. Python: python-telegram-bot (PTB) 是最流行、功能最全的库之一。aiogram 是另一个强大的异步库。
2. JavaScript/Node.js: node-telegram-bot-api 是一个非常流行的库。telegraf 是另一个功能丰富的框架。
3. Java: TelegramBots 库。
4. Go: go-telegram-bot-api。
5. PHP: TelegramBot PHP SDK。
选择一个你熟悉的语言和库能大大提高开发效率。本文后续示例将使用 Python和python-telegram-bot(PTB) 库进行说明。
对于 Python + PTB:
```bash
pip install python-telegram-bot
# 如果使用的是 PTB v20.x,它是纯异步的,可能需要:
pip install python-telegram-bot[callback]
# 或者根据你的需求安装其他 extras
```
创建一个 Python 文件(例如 my_telegram_bot.py),并开始编写代码。
示例 1:最简单的 Echo Bot (回显机器人)
```python
from telegram import Update
from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes, MessageHandler, filters
# 替换成你的实际 API Token
TOKEN = "YOUR_API_TOKEN_HERE"
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
"""处理 /start 命令。"""
await update.message.reply_text('你好!我是你的第一个 Telegram 机器人!发送 /help 查看可用命令。')
async def help_command(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
"""处理 /help 命令。"""
help_text = """
可用命令:
/start - 开始使用机器人
/help - 显示此帮助信息
/echo - 回复你发送的文本
发送任何其他文本,我会尝试回复你。
"""
await update.message.reply_text(help_text)
async def echo(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
"""回显用户发送的文本消息。"""
# 获取用户发送的文本
user_text = update.message.text
# 回复相同的文本
await update.message.reply_text(f"你说了: {user_text}")
def main() -> None:
"""启动机器人。"""
# 创建 Application 实例
application = ApplicationBuilder().token(TOKEN).build()
# 注册命令处理器
application.add_handler(CommandHandler("start", start))
application.add_handler(CommandHandler("help", help_command))
application.add_handler(CommandHandler("echo", echo))
# 注册一个消息处理器,处理所有非命令的文本消息 (回显)
application.add_handler(MessageHandler(filters.TEXT & (~filters.COMMAND), echo))
# 开始使用轮询 (Polling) 方式获取更新
print("机器人已启动,正在轮询...")
application.run_polling()
if __name__ == '__main__':
main()
```
代码解释:
1. 导入库:导入 PTB 库的必要模块。
2. 定义 Token:将 TOKEN 替换为 BotFather 给你的真实 Token。
3. 处理函数 (start, help_command, echo):这些是异步函数,用于处理用户发送的特定命令或消息。
1. update 对象包含了消息和用户的信息。
2. context 对象用于访问更广泛的功能(如存储数据)。
3. update.message.reply_text() 是最常用的回复消息的方法。
4. main 函数:
1. ApplicationBuilder().token(TOKEN).build() 创建核心的机器人应用实例。
2. application.add_handler(...) 将处理函数与特定类型的用户输入关联起来。
3. CommandHandler("command_name", handler_function)` 处理以 / 开头的命令(如 /start)。
4. MessageHandler(filters, handler_function) 处理符合特定过滤条件的普通消息。这里 filters.TEXT & (~filters.COMMAND) 表示处理所有文本消息,但排除掉那些是命令的消息(由 CommandHandler 处理)。
5. application.run_polling() 启动机器人,使用轮询方式不断向 Telegram 服务器请求新消息。这是最简单的方式,适合开发和测试。

1. 在命令行中,导航到你保存 my_telegram_bot.py 文件的目录。
2. 运行命令:
```bash
python my_telegram_bot.py
```
3. 如果一切正常,你会看到类似 "机器人已启动,正在轮询..."的输出。
4. 在 Telegram 中找到你的机器人(通过 BotFather 给你的 @username),发送 /start 命令测试一下!
当你准备将机器人部署到生产服务器时,Webhook 是更优的选择。
1. 准备公网可访问的 URL:你需要一个可以通过 HTTPS 访问的服务器和 URL 路径。这通常涉及购买域名、配置服务器(如 Nginx/Apache)和设置 SSL 证书(可以使用 Let's Encrypt 免费获取)。
2. 修改代码使用 Webhook:
```python
def main() -> None:
application = ApplicationBuilder().token(TOKEN).build()
# ... 注册你的处理函数 ...
# 假设你的公网 URL 是 'https://yourdomain.com/webhook'
PUBLIC_URL = "https://yourdomain.com/webhook"
PORT = 8443 # 常用端口,也可以是 443, 80, 或其他可用端口
# 设置 Webhook
application.run_webhook(
listen="0.0.0.0", # 监听所有网络接口
port=PORT,
url_path=TOKEN, # 有时建议用 Token 作为路径的一部分提高安全性,但这不是必须的
webhook_url=PUBLIC_URL,
# 如果你的服务器在反向代理(如 Nginx)后面处理 SSL,通常不需要证书文件
# certificate=open('/path/to/your/cert.pem', 'rb') # 如果直接暴露 Python 服务可能需要
)
```
注意:run_webhook 的参数配置取决于你的具体服务器环境。如果使用反向代理处理 SSL 和端口转发(常见做法),通常只需要配置 listen, port, url_path, webhook_url。url_path 通常是你的 Webhook 端点路径(如 /webhook 或 /webhook/<your_token>)。
3. 配置服务器:确保你的服务器(如 Nginx)配置正确,将到达 https://yourdomain.com/webhook 的 HTTPS 请求转发到你的 Python 应用正在监听的端口(例如 localhost:8443)。
4. 启动应用:使用类似 Gunicorn 或 uWSGI 的 WSGI 服务器(对于异步应用可能需要 Uvicorn + ASGI)来运行你的 Python 应用会更稳定可靠。一个简单的 Gunicorn 命令示例(适用于同步或兼容同步的 PTB 版本):
```bash
gunicorn -w 4 -b 0.0.0.0:8443 my_telegram_bot:application
```
对于 PTB v20.x 等纯异步应用,需要使用 ASGI 服务器:
```bash
uvicorn my_telegram_bot:app --host 0.0.0.0 --port 8443 --workers 1 # ASGI 通常单进程多协程
```
(注意:my_telegram_bot:application 或 my_telegram_bot:app 需要根据你的代码结构调整,确保指向正确的 Application 实例)。

1. 日志:PTB 有内置的日志模块。配置日志级别 (logging.basicConfig(level=logging.INFO)) 可以帮助你查看机器人的运行状态和错误信息。
2. 错误处理: 使用 Application.add_error_handler 来捕获和处理代码中未处理的异常,避免机器人崩溃。
3. 持久化数据: 如果需要记住用户状态或数据,你需要使用数据库(如 SQLite, PostgreSQL, Redis)或文件存储。context.user_data 和 context.chat_data 是 PTB 提供的用于临时存储对话相关数据的字典。
4. 探索 API: Telegram Bot API 功能非常丰富。你可以发送图片、文件、音频、视频、位置、贴纸,创建更复杂的键盘(如 ReplyKeyboardMarkup),处理群组事件等。查阅 python-telegram-bot 的官方文档 ([https://docs.python-telegram-bot.org/](https://docs.python-telegram-bot.org/)) 和 Telegram Bot API 官方文档 ([https://core.telegram.org/bots/api](https://core.telegram.org/bots/api)) 以获取更多功能和细节。
Telegram的“秘密聊天”功能以其强大的端到端加密和注重隐私而闻名。它确保了只有你和聊天对象(在特定的设备上)能够读取聊天内容,即使是Telegram服务器也无法访问。但这也带来一个常见问题:我自 […]
在Telegram中,当你收到或查看媒体文件(如照片、视频、GIF)时,它们通常不会自动下载到你的设备本地存储中。Telegram会先显示一个预览(缩略图或低分辨率版本),并将完整文件存储在云端(Te […]
Telegram以其强大的加密和隐私功能著称。如果你希望在Telegram上保持低调,不想让某些联系人(或者所有人)知道你此刻是否在线、你上次在线的时间,或者你是否已读他们的消息,那么Telegram […]
Telegram以其丰富多样的贴纸包深受用户喜爱。当你转用WhatsApp时,可能会想念那些有趣的Telegram贴纸。遗憾的是,WhatsApp和Telegram之间没有官方支持的、直接复制粘贴贴纸 […]