Telegram Bot(机器人)是平台最强大的功能之一,它能帮你自动完成查询、提醒、通知等任务。本文将以一个简单的天气查询机器人为例,带你走完从想法到上线的完整开发流程。无需深厚的编程基础,只需跟着步骤操作,你也能拥有一个随时播报天气的专属助手。
一、准备工作:了解天气查询机器人的工作原理
一个天气查询机器人由三个核心部分组成:
- Telegram Bot API:负责接收用户消息并发送回复,它是机器人的“耳朵”和“嘴巴”。
- 天气数据API:如OpenWeatherMap、和风天气等,提供实时天气信息,这是机器人的“大脑”数据源。
- 服务器脚本:运行在服务器上的程序,负责逻辑处理,将天气API的数据转换成用户友好的回复。
用户发送城市名给机器人,机器人收到消息后解析城市名,调用天气API获取数据,再返回给用户。整个过程简单且高效。
二、获取Telegram Bot Token
- 在Telegram中搜索@BotFather并打开。
- 发送
/newbot命令,按提示为机器人命名(如“Weather Bot”)和设置用户名(必须以bot结尾,如weather_123_bot)。 - 创建成功后,BotFather会返回一个API Token,形如
123456789:AAF...xxx。请妥善保存,这是你控制机器人的唯一凭证。
Token泄露后他人可操控你的机器人,建议存储在环境变量中,并定期更换。
三、注册天气API服务并获取密钥
以OpenWeatherMap为例(免费版够用,支持城市名查询):
- 访问
openweathermap.org注册账号。 - 进入Dashboard,在“API Keys”中生成一个专属密钥,复制保存。
如果想免注册快速测试,也可以使用无需密钥的公开API(如 wttr.in),但生产环境建议使用稳定可靠的付费或免费额度服务。
四、编写Python机器人代码
我们使用 python-telegram-bot 库(版本20.x)开发,它封装了Bot API,让代码更简洁。先安装依赖:
pip install python-telegram-bot requests创建 weather_bot.py,代码框架如下:
import os
import requests
from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters, ContextTypes
# 从环境变量读取Token和API密钥
TOKEN = os.getenv("TELEGRAM_BOT_TOKEN")
WEATHER_API_KEY = os.getenv("OPENWEATHER_API_KEY")
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text("你好!发送城市名(如:北京)即可查询天气。")
async def weather(update: Update, context: ContextTypes.DEFAULT_TYPE):
city = update.message.text.strip()
if not city:
await update.message.reply_text("请输入城市名")
return
url = f"http://api.openweathermap.org/data/2.5/weather?q=&appid=&lang=zh_cn&units=metric"
try:
resp = requests.get(url, timeout=5)
data = resp.json()
if data.get("cod") != 200:
await update.message.reply_text("未找到该城市,请检查名称。")
return
temp = data["main"]["temp"]
desc = data["weather"][0]["description"]
humidity = data["main"]["humidity"]
wind = data["wind"]["speed"]
reply = f"📍 \n🌡️温度:°C\n☁️天气:\n💧湿度:%\n💨风速: m/s"
await update.message.reply_text(reply)
except Exception as e:
await update.message.reply_text("查询失败,请稍后重试。")
print(e)
async def main():
app = Application.builder().token(TOKEN).build()
app.add_handler(CommandHandler("start", start))
app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, weather))
await app.run_polling()
if __name__ == "__main__":
import asyncio
asyncio.run(main())代码要点:start命令触发欢迎语;任何文本消息(排除命令)都会触发天气查询;使用同步requests调用API,注意在异步函数中可能会阻塞,但简单场景足够。生产环境建议用httpx.AsyncClient。
五、本地运行与测试
在终端设置环境变量并运行脚本:
export TELEGRAM_BOT_TOKEN="你的Bot Token"
export OPENWEATHER_API_KEY="你的API密钥"
python weather_bot.py然后在Telegram中搜索你的机器人用户名,点击“开始”,发送“北京”等城市名,即可收到实时天气信息。如果收不到,检查Token、网络和API密钥。
六、部署到云服务器(以Ubuntu为例)
本地测试无误后,你需要将机器人24小时运行,因此要部署到服务器。
- 购买一台云服务器(可在阿里云、腾讯云或DigitalOcean),安装Python 3.9+和pip。
- 上传代码到服务器,创建虚拟环境并安装依赖。
- 使用
nohup或systemd守护进程运行。推荐systemd:
# /etc/systemd/system/weather-bot.service
[Unit]
Description=Telegram Weather Bot
After=network.target
[Service]
Environment="TELEGRAM_BOT_TOKEN=xxx"
Environment="OPENWEATHER_API_KEY=xxx"
ExecStart=/home/ubuntu/weather_bot_env/bin/python /home/ubuntu/weather_bot.py
Restart=always
[Install]
WantedBy=multi-user.target然后执行 systemctl start weather-bot 和 systemctl enable weather-bot,机器人就永久运行了。
七、进阶优化建议
- 增加地理位置支持:接收用户发送的定位,自动解析经纬度查天气。
- 增加查询指令:如
/weather 北京,避免误触发。 - 增加缓存:将查询结果缓存5分钟,减少API调用。
- 添加错误处理:对未识别城市、网络超时等给出更友好的提示。
总结
通过本文,你已经学会了开发一个简单的Telegram天气查询机器人,掌握了Bot Token申请、API调用、Python编码和服务器部署的完整流程。这是Telegram机器人开发的最佳入门项目,后续你可以在此基础上扩展更多功能,如实时汇率、新闻推送、待办提醒等。祝你在自动化道路上越走越远!