一、引言
Telegram Bot是Telegram生态中最具活力的部分,通过Python这一简洁高效的编程语言,你可以快速搭建功能强大的自动应答、消息转发、数据查询等机器人。本指南将带你从零开始,使用主流的python-telegram-bot框架,完成一个生产级Bot的创建、开发与部署。无论你是编程新手还是资深开发者,都能从中找到实用的参考。
本文将覆盖Bot申请、环境搭建、框架安装、核心代码编写、Webhook配置以及常见问题排解,确保你能顺利搭建属于自己的Telegram Bot。
二、准备工作:创建Telegram Bot并获取Token
在编写任何代码之前,你需要先在Telegram上创建一个Bot并获取API Token。步骤如下:
- 打开Telegram,搜索并关注
@BotFather(这是Telegram官方Bot管理机器人)。 - 向BotFather发送
/newbot命令,然后按提示输入你的Bot显示名称和用户名(必须以bot结尾,如my_awesome_bot)。 - 创建成功后,BotFather会返回一个HTTP API Token,格式类似
123456789:AAF...xxx。妥善保存,这是你的Bot身份凭证。
安全提示:Token相当于Bot的密码,请勿泄露或提交到公共代码仓库。建议使用环境变量或配置文件保存。
三、环境搭建与框架选择
Python的Telegram Bot框架有很多,其中最流行的是 python-telegram-bot 和 aiogram。本指南以 python-telegram-bot 为例,因为它的文档完善、社区活跃,且支持异步和同步两种模式,非常适合快速上手。
1. 安装Python环境
确保你的机器已安装Python 3.7或更高版本。可以执行 python --version 检查。若未安装,请前往 python.org 下载对应的安装包。
2. 创建虚拟环境(推荐)
mkdir my-bot
cd my-bot
python -m venv venv
source venv/bin/activate # Linux/macOS
venv\Scripts\activate # Windows3. 安装python-telegram-bot框架
pip install python-telegram-bot最新稳定版为20.x,支持异步。建议同时安装 python-dotenv 来管理环境变量:
pip install python-dotenv四、编写第一个Bot:轮询模式
最简单的运行方式是长轮询(Long Polling),适合开发测试。创建一个 bot.py 文件,输入以下代码:
import os
from dotenv import load_dotenv
from telegram import Update
from telegram.ext import Application, CommandHandler, ContextTypes
load_dotenv() # 加载.env文件
TOKEN = os.getenv("BOT_TOKEN") # 在.env中设置BOT_TOKEN
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text("你好!我是你的第一个Telegram Bot。")
def main():
app = Application.builder().token(TOKEN).build()
app.add_handler(CommandHandler("start", start))
print("Bot正在运行...")
app.run_polling(allowed_updates=Update.ALL_TYPES)
if __name__ == "__main__":
main()为方便管理,创建一个 .env 文件:
BOT_TOKEN=你的Token然后在终端运行 python bot.py,在Telegram中向你的Bot发送 /start,即可收到回复。
五、核心功能扩展:命令与消息处理
1. 响应其他命令
使用 CommandHandler 可以添加任意命令,例如 /help:
async def help_command(update: Update, context: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text("可用命令:/start, /help, /info")
# 在main()中添加
app.add_handler(CommandHandler("help", help_command))2. 处理普通文本消息
使用 MessageHandler 配合 filters 模块,可实现关键词回复、自动回复等。例如当用户发送“你好”时回复“嗨”:
from telegram.ext import MessageHandler, filters
async def echo(update: Update, context: ContextTypes.DEFAULT_TYPE):
text = update.message.text
if "你好" in text:
await update.message.reply_text("嗨!很高兴见到你。")
else:
await update.message.reply_text(f"你说了:")
app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo))3. 发送更多类型消息
除了纯文本,Bot还可以发送图片、视频、文件等。使用 Bot.send_photo 等API:
from telegram import InputFile
async def photo(update: Update, context: ContextTypes.DEFAULT_TYPE):
with open("images/demo.jpg", "rb") as f:
await update.message.reply_photo(InputFile(f), caption="这是示例图片")
app.add_handler(CommandHandler("photo", photo))4. 使用键盘按钮
引入 ReplyKeyboardMarkup 可以让用户快速选择,提升交互体验:
from telegram import ReplyKeyboardMarkup
async def menu(update: Update, context: ContextTypes.DEFAULT_TYPE):
buttons = [["开始", "帮助"], ["关于"]]
reply_markup = ReplyKeyboardMarkup(buttons, resize_keyboard=True)
await update.message.reply_text("请选择:", reply_markup=reply_markup)六、Webhook模式:生产环境推荐
轮询模式会占用资源,生产环境通常使用Webhook,让Telegram直接推送更新到你的服务器。以Flask为例:
- 安装Flask:
pip install Flask - 编写Webhook服务:
from flask import Flask, request
import logging
from telegram import Update
from telegram.ext import Application, CommandHandler, ContextTypes
app = Flask(__name__)
TOKEN = os.getenv("BOT_TOKEN")
application = Application.builder().token(TOKEN).build()
# 添加上面定义的处理函数
application.add_handler(CommandHandler("start", start))
@app.route("/webhook", methods=["POST"])
def webhook():
update = Update.de_json(request.get_json(force=True), application.bot)
application.update_queue.put(update)
return "OK"
@app.route("/set_webhook", methods=["GET"])
def set_webhook():
import requests
url = f"https://api.telegram.org/bot/setWebhook?url=https://yourdomain.com/webhook"
requests.get(url)
return "Webhook configured!"启动Flask后,先访问 /set_webhook 设置Webhook,然后就可以用HTTPS请求工作。注意Telegram要求Webhook必须使用HTTPS,推荐使用Nginx反向代理+Let's Encrypt证书。
七、将Bot部署到云服务器
开发完成后,你需要将Bot部署到如VPS、云函数或Docker容器中。这里以Ubuntu服务器为例:
- 上传代码到服务器,安装Python和依赖。
- 使用
systemd服务守护进程,确保崩溃后自动重启。 - 如果使用Webhook,配置Nginx进行SSL终止和反向代理。
[Unit]
Description=My Telegram Bot
After=network.target
[Service]
User=www-data
WorkingDirectory=/var/www/my-bot
ExecStart=/var/www/my-bot/venv/bin/python bot.py
Restart=always
[Install]
WantedBy=multi-user.target然后将此文件保存为 /etc/systemd/system/mybot.service,执行 systemctl enable mybot 和 systemctl start mybot 即可。
八、常见问题与调试技巧
1. 网络问题导致Bot无法连接
Telegram在某些地区可能无法直接访问,请确保服务器网络能正常访问 api.telegram.org,必要时设置代理。
2. 日志监控
使用 logging 模块记录运行日志,方便排错:
logging.basicConfig(format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", level=logging.INFO)3. 错误处理
在Handler中捕获 Exception,避免Bot崩溃:
async def echo(update, context):
try:
# ...
except Exception as e:
logging.error(e)4. 官方API文档参考
建议时刻查阅Telegram Bot API文档,了解最新的参数和限制。
九、总结与进一步学习
本文详细介绍了使用Python搭建Telegram Bot的完整流程,包括账号创建、框架选择、基础功能实现、Webhook配置和云部署。通过这个指南,你已拥有开发一个实用Bot的基本能力。接下来可以深入探索内联键盘、Bale Api、支付接口、数据库集成等高级功能。
为了帮助读者巩固技能,我们整理了一些常见问题解答,供你参考。