Telegram Bot每日定时推送群通知代码:从零到自动化部署实战

本文提供一套完整的Telegram Bot每日定时向群聊推送通知的Python实现方案,涵盖Bot创建、Chat ID获取、编码实现、Cron配置及常见问题,帮助开发者快速搭建自动化通知系统。

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

在群组运营中,定时推送每日通知、日报、活动提醒等是常见需求。手动发送低效且易遗漏,利用Telegram Bot配合系统定时任务,即可实现完全自动化的每日推送。本文将手把手教你从零编写一个稳定可用的定时推送Bot,并给出完整的代码与部署方案。

一、前置准备

开始之前,请确保你满足以下条件:

  • 一个Telegram账号(用于创建Bot和获取群信息)。
  • Python 3.6+环境,并安装requests库(可通过pip install requests安装)。
  • 一个目标群组(将Bot加入该群)。
  • 基础的命令行操作能力(用于配置Cron)。

二、创建Bot并获取Token

  1. 在Telegram中搜索@BotFather官方机器人。
  2. 发送/newbot命令,按照提示设置Bot的显示名称和用户名(必须以bot结尾)。
  3. 创建成功后,BotFather会返回一个HTTP API Token,格式类似1234567890:ABCdefGHI...-xyz,请妥善保存。

注意:Token是Bot的控制凭证,不要泄露给任何人。建议在代码中通过环境变量读取,而不是硬编码。

三、获取群聊Chat ID

要将消息推送到群组,必须知道群组的Chat ID。获取方法如下:

  1. 将你的Bot添加到目标群组(设为管理员是可选的,但建议设为管理员以确保消息发送稳定)。
  2. 在群组中发送任意一条消息(例如“test”)。
  3. 访问API接口:https://api.telegram.org/bot<你的Token>/getUpdates
  4. 在返回的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)

  1. 编辑当前用户的crontab:crontab -e
  2. 添加一行(例如每天上午9点执行):0 9 * * * /usr/bin/python3 /path/to/daily_notify.py
  3. 保存并退出,Cron会自动接管。

如果你想查看日志,可以添加输出重定向:0 9 * * * /usr/bin/python3 /path/to/daily_notify.py >> /path/to/notify.log 2>&1

Windows(任务计划程序)

  1. 打开“任务计划程序”,创建基本任务。
  2. 触发器选择“每天”,设置具体时间。
  3. 操作选择“启动程序”,程序填python.exe路径,参数填脚本完整路径。
  4. 完成。

六、高级技巧与常见问题

安全建议

  • 使用环境变量或配置文件存储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,免费且稳定。你可以在此基础上扩展任何业务场景,如每日报表、课程提醒、运营播报等。如果在开发中遇到问题,欢迎在开发者社区交流。

FAQ

多平台客户端选择

常见问题

如何获取Telegram群组的Chat ID?

将Bot添加到目标群组后,在群中发送任意消息,然后浏览器访问 https://api.telegram.org/bot<你的Token>/getUpdates ,在返回的JSON中找到chat对象的id字段,该值即为群聊的Chat ID(通常为负整数)。

定时推送脚本支持发送富文本或Markdown格式吗?

支持。在sendMessage请求中设置parse_mode参数为HTML或MarkdownV2即可。注意HTML格式需要正确转义字符,如 < 用 &lt; 代替。

Bot Token泄露了怎么办?

立即联系@BotFather,使用/revoke命令撤销旧Token,然后获取新的Token。同时检查代码中是否还有硬编码,并修改环境变量。

如果推送时间不固定怎么办?

你可以将定时任务改为到点触发,或者在脚本中设置多个时间点。也可以结合外部调度工具(如APScheduler)实现更复杂的调度逻辑。