如何创建一个每天定时向 Telegram 群组发送消息的独立机器人

2026-06-03 32259 日常编程

telegram 机器人本身不具备“自动唤醒”或“离线执行”能力,必须持续运行在一台 24/7 在线的服务器上;本地电脑关机即停止发送,需借助云平台(如 pythonanywhere、heroku 或 vps)实现真正的每日定时推送。

telegram 机器人本身不具备“自动唤醒”或“离线执行”能力,必须持续运行在一台 24/7 在线的服务器上;本地电脑关机即停止发送,需借助云平台(如 pythonanywhere、heroku 或 vps)实现真正的每日定时推送。

要让 Telegram 机器人真正实现「每天 00:01 自动向群组发送消息」,关键不在于代码逻辑是否正确,而在于运行环境是否始终在线。你当前的 requests.get(url) 方式虽能成功发消息,但 schedule 库仅在 Python 进程活跃时生效——一旦本地电脑关机、休眠或网络中断,任务立即失效,且不会补发。

✅ 正确架构应为:常驻进程 + 可靠调度 + 持久化托管

✅ 推荐方案:使用轻量级 Web 服务 + APScheduler(更健壮替代 schedule)

schedule 库适合开发调试,但生产环境建议改用 APScheduler(Advanced Python Scheduler),它支持持久化作业存储、多任务协程及错误恢复机制。以下是一个可直接部署的最小可行示例:

# bot_runner.py
from apscheduler.schedulers.blocking import BlockingScheduler
import requests
import logging

# 配置日志(便于排查线上问题)
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

TOKEN = "YOUR_ACTUAL_BOT_TOKEN"  # ⚠️ 务必替换为真实 Token,勿硬编码于公开仓库
GROUP_CHAT_ID = "-1001234567890"  # ⚠️ 注意:群组 ID 必须是负数(超群 ID 格式),且需确保 Bot 已被添加为管理员
POST_TEXT = "? 每日提醒:今天也要元气满满!"

def send_message():
    url = f"https://api.telegram.org/bot{TOKEN}/sendMessage"
    payload = {
        "chat_id": GROUP_CHAT_ID,
        "text": POST_TEXT,
        "parse_mode": "Markdown"  # 可选:支持格式化
    }
    try:
        resp = requests.post(url, data=payload, timeout=10)
        resp.raise_for_status()
        logger.info("✅ 消息已成功发送到群组")
    except Exception as e:
        logger.error(f"❌ 发送失败:{e}")

if __name__ == "__main__":
    scheduler = BlockingScheduler()
    # 设置每日 00:01 执行(注意:服务器时区决定实际触发时间)
    scheduler.add_job(send_message, 'cron', hour=0, minute=1)

    logger.info("? 机器人定时任务已启动,等待 00:01...")
    try:
        scheduler.start()
    except (KeyboardInterrupt, SystemExit):
        logger.info("? 任务已手动停止")

? 托管选择指南(按推荐度排序)

平台 是否免费 是否 24/7 运行 备注
Railway.app ✅ 免费层可用 ✅ 是 支持 GitHub 直连部署,自动构建+重启,推荐新手首选
Render.com ✅ 免费 Web Service ✅ 是(Web 服务需保持 HTTP 响应) 可配合 Flask + APScheduler,或使用其 Cron Jobs 功能替代定时器
PythonAnywhere ✅ 免费账户 ❌ 否(每日休眠,需手动唤醒) 仅适合学习验证,不可用于生产级每日推送
Heroku ❌ 免费层已下线 ✅ 是(付费后稳定) 需配置 Procfile 和时区(TZ=Asia/Shanghai)

? 关键提示:所有托管平台均以服务器本地时间为准。务必确认部署环境的系统时区(如 TZ=Asia/Shanghai),否则可能在 UTC 时间 00:01(即北京时间 08:01)触发。

⚠️ 安全与运维注意事项

  • Token 保密:切勿将 TOKEN 硬编码在代码中。使用环境变量:

    # 部署时设置(如 Railway 的 Environment Variables)
    TELEGRAM_TOKEN=your_real_token_here

    代码中读取:os.getenv("TELEGRAM_TOKEN")

  • 群组 ID 格式:普通群组 ID 为负数(如 -1001234567890),可通过 @RawDataBot 获取;确保 Bot 已被添加至目标群组并拥有发送权限。

  • 错误重试机制:生产环境建议为 send_message() 添加指数退避重试(如 tenacity 库),避免因网络抖动导致当日漏发。

  • 监控与告警:在 send_message() 结尾加入日志上报(如 Telegram Bot 自己发状态通知),或接入 UptimeRobot 检测进程存活。

只要将上述脚本部署至任意 24/7 在线平台,并正确配置环境与时区,你的 Telegram 机器人就能真正实现「无人值守、每日准点、稳定可靠」的消息推送——它不再是“你电脑上的一个脚本”,而是一个独立运行的微型服务。

Python怎么实现毫秒级定时任务_基于Apscheduler与Redis后端

APScheduler默认不支持毫秒级调度,因其IntervalTrigger最小单位为秒,传入小于1秒的seconds值会报ValueError;底层依赖time.sleep()和系统轮询,受CPythonGIL及操作系统调度延迟影响,实际抖动达10–50ms以上。 为什么APScheduler默认不支持毫秒级调度 APScheduler的IntervalTrigger最小单位是秒,传入seco...

如何在Python中实现异步定时任务_使用asyncio.sleep构建高精度循环调度

asyncio.sleep比time.sleep更适合异步定时循环,因为前者是协程,只挂起当前任务并让出控制权,后者是同步阻塞函数,会卡死整个事件循环;实操中必须用awaitasyncio.sleep(n),且需用绝对时间锚点避免调度漂移。 asyncio.sleep为什么比time.sleep更适合异步定时循环 因为time.sleep是同步阻塞的,会直接卡住整个事件循环;而asyncio.sl...

如何在PHP在线执行中实现定时任务?配置Cron任务的完整教程解析

最核心做法是使用Cron作业调度器,通过配置时间表达式实现PHP脚本的定时执行,需确保脚本兼容CLI环境、使用绝对路径、处理错误日志,并设置正确的PHP解释器与脚本路径,同时利用文件锁防止并发问题。 在PHP在线执行环境中实现定时任务,最核心且普遍的做法是利用服务器的Cron作业调度器。它允许你设定PHP脚本在预设的时间点自动运行,无需用户访问页面或保持浏览器连接,这对于数据清理、报告生成、邮件发...

用PHP和Bard做个天气机器人 每天微信推送提醒

答案:使用PHP调用天气API获取数据,通过GoogleAIGemini生成个性化文案,再经微信公众号或企业微信推送,结合定时任务实现每日自动推送。 用PHP和Bard来搭建一个每天微信推送的天气机器人,这听起来是完全可行的,而且能玩出不少花样。核心思路就是:PHP负责数据获取、逻辑处理和消息推送,而Bard则可以为你的天气信息增添一份个性化和智能化的解读。 解决方案 要实现这个天气机器人,我们需...

网页结构是什么?如何创建一个简单的HTML页面?

要创建一个简单的html页面,只需使用文本编辑器编写包含doctype、html、head和body结构的代码,保存为.html文件后用浏览器打开即可;这段代码中,doctype声明html5文档类型,html标签为根元素,head内设置字符编码、视口和标题等元数据,body中使用h1、p、a等标签组织标题、段落和链接内容,语义化标签如header、nav、main、section、article...

表单中的CAPTCHA怎么集成?如何防止机器人提交?

集成CAPTCHA可有效区分人类与机器人,核心是验证人类认知能力,常用方案包括reCAPTCHA、hCaptcha、滑动验证码等,需结合前端引入JS库、后端调用API验证token,并可配合蜜罐、时间戳、IP限频等策略提升安全性,选择时应权衡安全、体验与成本,定期监控失败率与破解情况以优化防护效果。 表单中的CAPTCHA集成是为了区分人类用户和恶意机器人,防止自动提交垃圾信息或进行恶意攻击。集成...

如何用Golang实现定时任务 结合time包与cron表达式

Golang实现定时任务主要依赖time包和robfig/cron库。1.使用time.Sleep可实现简单延迟任务,但会阻塞主线程,适用于非周期性场景。2.time.Ticker支持周期性任务,通过通道接收定时信号,在Goroutine中运行,避免阻塞,适合固定间隔执行。3.robfig/cron库支持cron表达式,能灵活定义复杂调度规则,如“每分钟”或“每天凌晨1点”执行。4.错误处理应包含...

如何配置C++的机器人感知环境 ROS2点云处理库集成

答案:集成PCL到ROS2需解决版本兼容、CMake配置和数据转换问题,最佳实践包括使用rosdep管理依赖、合理配置PCL组件、确保点类型一致,并通过VoxelGrid下采样、OpenMP并行、QoS调优及内存复用提升性能,同时利用tf2统一坐标系;深度图与激光雷达点云虽在数据密度和生成方式上不同,但最终均转化为PointCloud2进行统一处理。 配置C++的机器人感知环境,特别是ROS2中的...