在群组运营中,定时推送每日通知、日报、活动提醒等是常见需求。手动发送低效且易遗漏,利用Telegram Bot配合系统定时任务,即可实现完全自动化的每日推送。本文将手把手教你从零编写一个稳定可用的定时推送Bot,并给出完整的代码与部署方案。
一、前置准备
开始之前,请确保你满足以下条件:
- 一个Telegram账号(用于创建Bot和获取群信息)。
- Python 3.6+环境,并安装
requests库(可通过pip install requests安装)。 - 一个目标群组(将Bot加入该群)。
- 基础的命令行操作能力(用于配置Cron)。
二、创建Bot并获取Token
- 在Telegram中搜索@BotFather官方机器人。
- 发送
/newbot命令,按照提示设置Bot的显示名称和用户名(必须以bot结尾)。 - 创建成功后,BotFather会返回一个HTTP API Token,格式类似
1234567890:ABCdefGHI...-xyz,请妥善保存。
注意:Token是Bot的控制凭证,不要泄露给任何人。建议在代码中通过环境变量读取,而不是硬编码。
三、获取群聊Chat ID
要将消息推送到群组,必须知道群组的Chat ID。获取方法如下:
- 将你的Bot添加到目标群组(设为管理员是可选的,但建议设为管理员以确保消息发送稳定)。
- 在群组中发送任意一条消息(例如“test”)。
- 访问API接口:
https://api.telegram.org/bot<你的Token>/getUpdates - 在返回的JSON中,找到
chat对象,其中的id字段即为群组的Chat ID(通常为负整数)。
如果返回为空,说明Bot没有收到任何消息。请确保Bot已在群组中,并且群组允许Bot读取消息。
四、编写每日定时推送脚本
我们使用Python和requests库实现一个简单可靠的推送脚本。脚本支持发送纯文本或HTML格式消息,并带有日志输出。
import requests
import datetime
import os
# 从环境变量读取配置,避免硬编码泄露Token
BOT_TOKEN = os.environ.get("BOT_TOKEN")
CHAT_ID = os.environ.get("CHAT_ID")
MESSAGE_TEMPLATE = """📅 今日通知
日期:
请各位及时完成今日任务!"""
def send_message(text):
"""发送消息到群聊"""
url = f"https://api.telegram.org/bot/sendMessage"
payload = {
"chat_id": CHAT_ID,
"text": text,
"parse_mode": "HTML" # 如需纯文本,去掉此行
}
try:
response = requests.post(url, data=payload, timeout=10)
response.raise_for_status()
print(f"[{datetime.datetime.now()}] 发送成功")
except Exception as e:
print(f"[{datetime.datetime.now()}] 发送失败: ")
def main():
today = datetime.date.today().strftime("%Y年%m月%d日")
message = MESSAGE_TEMPLATE.format(date=today)
send_message(message)
if __name__ == "__main__":
main()
将以上代码保存为daily_notify.py。使用前,请在终端中设置环境变量:
export BOT_TOKEN="你的Token"
export CHAT_ID="你的群Chat ID"
五、配置定时任务
为了让脚本每天自动运行,我们需要使用系统的定时调度工具。
Linux/macOS(使用Cron)
- 编辑当前用户的crontab:
crontab -e - 添加一行(例如每天上午9点执行):
0 9 * * * /usr/bin/python3 /path/to/daily_notify.py - 保存并退出,Cron会自动接管。
如果你想查看日志,可以添加输出重定向:0 9 * * * /usr/bin/python3 /path/to/daily_notify.py >> /path/to/notify.log 2>&1
Windows(任务计划程序)
- 打开“任务计划程序”,创建基本任务。
- 触发器选择“每天”,设置具体时间。
- 操作选择“启动程序”,程序填
python.exe路径,参数填脚本完整路径。 - 完成。
六、高级技巧与常见问题
安全建议
- 使用环境变量或配置文件存储Token,避免上传到Git仓库。
- 为Bot设置
privacy模式为Enabled,仅响应命令和提及。 - 定期轮换Token,特别是在Token泄露时。
多群推送
若需向多个群推送,可将CHAT_ID改为列表,循环调用send_message。注意Telegram API有频率限制(约30条/秒),普通场景无需担心。
发送动态内容
在脚本中接入数据源(如数据库、RSS、天气API),动态生成消息内容,即可实现更丰富的每日推送。
错误处理
建议在send_message中增加重试机制(如失败后等待10秒重试2次),保证通知可靠性。
常见问题
- Bot无法发送消息? 确认Bot已加入群组,且群组未设置禁止机器人发言。
- Chat ID获取到的是个人ID? 如果是在私聊中获取的,那确实是个人ID,只有从群组消息中获取的才是群Chat ID(负整数)。
- 定时任务不执行? 检查Cron中的Python路径是否为绝对路径,以及脚本是否有执行权限。
结语
通过以上步骤,你已成功搭建了一个每日定时推送群通知的Telegram Bot。该方案完全基于官方API,免费且稳定。你可以在此基础上扩展任何业务场景,如每日报表、课程提醒、运营播报等。如果在开发中遇到问题,欢迎在开发者社区交流。