Telegram天气查询机器人开发全流程:零基础搭建你的第一个Bot助手

本文手把手教你从零开发一个Telegram天气查询机器人,覆盖BotFather申请Token、调用天气API、编写Python代码、部署到云服务器等完整步骤,零基础也能轻松上手。

阅读提示建议先浏览小标题,再根据需要深入阅读具体段落。

Telegram Bot(机器人)是平台最强大的功能之一,它能帮你自动完成查询、提醒、通知等任务。本文将以一个简单的天气查询机器人为例,带你走完从想法到上线的完整开发流程。无需深厚的编程基础,只需跟着步骤操作,你也能拥有一个随时播报天气的专属助手。

一、准备工作:了解天气查询机器人的工作原理

一个天气查询机器人由三个核心部分组成:

  • Telegram Bot API:负责接收用户消息并发送回复,它是机器人的“耳朵”和“嘴巴”。
  • 天气数据API:如OpenWeatherMap、和风天气等,提供实时天气信息,这是机器人的“大脑”数据源。
  • 服务器脚本:运行在服务器上的程序,负责逻辑处理,将天气API的数据转换成用户友好的回复。

用户发送城市名给机器人,机器人收到消息后解析城市名,调用天气API获取数据,再返回给用户。整个过程简单且高效。

二、获取Telegram Bot Token

  1. 在Telegram中搜索@BotFather并打开。
  2. 发送 /newbot 命令,按提示为机器人命名(如“Weather Bot”)和设置用户名(必须以 bot 结尾,如 weather_123_bot)。
  3. 创建成功后,BotFather会返回一个API Token,形如 123456789:AAF...xxx。请妥善保存,这是你控制机器人的唯一凭证。

Token泄露后他人可操控你的机器人,建议存储在环境变量中,并定期更换。

三、注册天气API服务并获取密钥

以OpenWeatherMap为例(免费版够用,支持城市名查询):

  1. 访问 openweathermap.org 注册账号。
  2. 进入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小时运行,因此要部署到服务器。

  1. 购买一台云服务器(可在阿里云、腾讯云或DigitalOcean),安装Python 3.9+和pip。
  2. 上传代码到服务器,创建虚拟环境并安装依赖。
  3. 使用nohupsystemd守护进程运行。推荐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-botsystemctl enable weather-bot,机器人就永久运行了。

七、进阶优化建议

  • 增加地理位置支持:接收用户发送的定位,自动解析经纬度查天气。
  • 增加查询指令:如 /weather 北京,避免误触发。
  • 增加缓存:将查询结果缓存5分钟,减少API调用。
  • 添加错误处理:对未识别城市、网络超时等给出更友好的提示。

总结

通过本文,你已经学会了开发一个简单的Telegram天气查询机器人,掌握了Bot Token申请、API调用、Python编码和服务器部署的完整流程。这是Telegram机器人开发的最佳入门项目,后续你可以在此基础上扩展更多功能,如实时汇率、新闻推送、待办提醒等。祝你在自动化道路上越走越远!

FAQ

安装与配置指南

常见问题