Telegram 机器人必须一直运行才能回复消息。在笔记本上运行意味着合上盖子它就会下线。一台每月几美元的小型 VPS 就能解决这个问题。本指南将 Python 机器人作为 systemd 服务运行,使其开机自启并在崩溃后重启。
选多大的 VPS?
大多数机器人都很轻量。1 至 2 个 vCPU 和 2 GB 内存的套餐绰绰有余。推荐套餐请参阅 Telegram 机器人托管。
步骤 1:获取机器人令牌
在 Telegram 上与 @BotFather 对话,发送 /newbot,选择名称和以 bot 结尾的用户名,然后复制令牌。请像对待密码一样对待它,因为任何拥有它的人都能控制该机器人。
步骤 2:准备服务器
sudo apt update && sudo apt install -y python3 python3-venv
sudo adduser --disabled-password --gecos "" botuser
sudo -iu botuser
mkdir ~/mybot && cd ~/mybot
python3 -m venv .venv
. .venv/bin/activate
pip install python-telegram-bot
步骤 3:编写一个小型机器人
# bot.py
import os
from telegram import Update
from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes
async def start(update: Update, ctx: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text("Hello! I am running on a VPS.")
app = ApplicationBuilder().token(os.environ["BOT_TOKEN"]).build()
app.add_handler(CommandHandler("start", start))
app.run_polling()
轮询不需要开放端口,因此你不必设置域名或 webhook。
步骤 4:安全保存令牌
echo "BOT_TOKEN=123456:ABC..." > ~/mybot/.env
chmod 600 ~/mybot/.env
步骤 5:作为服务运行
回到管理员用户,创建 /etc/systemd/system/mybot.service:
[Unit]
Description=Telegram bot
After=network-online.target
[Service]
User=botuser
WorkingDirectory=/home/botuser/mybot
EnvironmentFile=/home/botuser/mybot/.env
ExecStart=/home/botuser/mybot/.venv/bin/python bot.py
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now mybot
sudo journalctl -u mybot -f
更新与监控
- 更新代码,然后执行
sudo systemctl restart mybot。 - 用
journalctl -u mybot -n 100查看日志。 - 如果机器人存储数据,请使用备份。
轮询还是 webhook?
轮询最简单,对大多数机器人来说足够了。如果你需要在高流量下即时送达,请使用 webhook,这需要域名和 HTTPS。请参阅用 Nginx 和 HTTPS 托管。