在日常运营中,团队或个人经常需要定期接收日报、周报。Telegram机器人可以自动完成这项工作。本文将提供可运行的代码示例,帮助开发者快速实现定时推送功能,无需依赖第三方付费服务。
方案概览与适用场景
实现定时推送通常需要两个核心部分:定时调度器和Telegram Bot发送逻辑。调度器负责在指定时间触发任务,而Bot负责将准备好的报告发送到目标聊天(个人、群组或频道)。我们使用最流行的Python和Node.js环境来演示,你也可以轻松迁移到其他语言。
环境准备
你需要准备:
- 一个Telegram Bot Token(通过@BotFather获取)
- 目标聊天ID(可以是用户ID、群组ID或频道ID)
- 一个能长期运行的服务器或本机(如使用Cron或Systemd)
Python实现(基于python-telegram-bot和APScheduler)
首先安装依赖:
pip install python-telegram-bot apscheduler
完整示例代码:
import logging
from datetime import datetime
from telegram import Bot
from apscheduler.schedulers.blocking import BlockingScheduler
# 配置
BOT_TOKEN = 'YOUR_BOT_TOKEN'
CHAT_ID = 'YOUR_CHAT_ID'
bot = Bot(token=BOT_TOKEN)
scheduler = BlockingScheduler()
logging.basicConfig(level=logging.INFO)
def generate_report():
# 这里替换为你实际的日报/周报内容生成逻辑
today = datetime.now().strftime('%Y-%m-%d')
report = f"📊 日报 \n\n" \
f"- 项目进展:...\n" \
f"- 待办事项:...\n" \
f"- 风险提示:..."
return report
def send_report():
report = generate_report()
try:
bot.send_message(chat_id=CHAT_ID, text=report)
logging.info('报告已发送')
except Exception as e:
logging.error(f'发送失败: ')
# 每天早上9点发送日报
scheduler.add_job(send_report, 'cron', hour=9, minute=0)
# 每周一早上10点发送周报(可选注释)
# scheduler.add_job(send_report, 'cron', day_of_week='mon', hour=10, minute=0)
if __name__ == '__main__':
scheduler.start()
Node.js实现(基于node-cron和node-telegram-bot-api)
安装依赖:
npm install node-telegram-bot-api node-cron
完整示例代码:
const TelegramBot = require('node-telegram-bot-api');
const cron = require('node-cron');
const token = 'YOUR_BOT_TOKEN';
const chatId = 'YOUR_CHAT_ID';
const bot = new TelegramBot(token, { polling: true });
function generateReport() {
const now = new Date();
const dateStr = now.toISOString().slice(0, 10);
return `📊 周报 $\n\n- 完成事项:...\n- 进行中:...\n- 下周计划:...`;
}
function sendReport() {
const report = generateReport();
bot.sendMessage(chatId, report)
.then(() => console.log('报告已发送'))
.catch(err => console.error('发送失败', err));
}
// 每天早上9点发送日报
cron.schedule('0 9 * * *', () => {
sendReport();
});
// 每周一和周四早上10点发送周报(示例)
// cron.schedule('0 10 * * 1,4', () => {
// sendReport();
// });
定时策略与时间配置
上面的示例使用了Cron表达式。对于不同频率,可以参考:
- 每天:在Python中
hour=9, minute=0;在Node.js中0 9 * * * - 每周一:Python中
day_of_week='mon', hour=9;Node.js中0 9 * * 1 - 每月1号:Python中
day=1, hour=9;Node.js中0 9 1 * *
实战建议:让报告更智能
- 动态数据:从数据库、API或文件中读取数据生成报告,而不是写死内容。
- Markdown格式化:使用Telegram支持的Markdown或HTML增强可读性。
- 失败重试:在
try-catch中加入重试机制,避免因网络抖动丢失推送。 - 时区设置:确保服务器时区与目标用户时区一致,或使用UTC时间+偏移量。
- 记录日志:记录每次推送的日志,便于排查问题。
部署与运维
推荐在云服务器上运行python main.py或node bot.js。也可以使用Docker容器化,配合Systemd或Kubernetes保证持久运行。如果使用临时代码,可以使用GitHub Actions的schedule功能,但需要注意长时间token安全。
总结
通过本文的代码示例,你已经能快速实现Telegram机器人定时推送日报/周报。核心逻辑是结合调度任务与Bot API,你可以根据自己的需求扩展、美化报告内容。记得保护你的Bot Token,并定期测试定时任务是否正常触发。