前四天,我们搭建了OpenClaw,给它写了身份文件,接入了Notion。但它还是"被动"的——你问它才答,你让它做才做。
今天,我们要让它"主动"起来。每天早上自动给你发工作简报,不用你催,不用你问。这才是真正的AI助手。
为什么从"每日简报"开始?
自动化工作流有很多种:定时任务、事件触发、条件监控、工作流编排...为什么我们选择从"每日简报"这个最简单的场景开始?
三个重要原因
1. 快速见效,建立信心
定时任务是最容易理解、最快能看到效果的自动化方式。今天学完,明天早上就能收到AI发的简报。这种即时反馈能极大增强学习动力。
2. 打好基础,循序渐进
定时任务是所有自动化的基础。掌握了它,后面学事件触发、工作流编排才不会懵。就像学编程要先学变量和循环,不能上来就学设计模式。
3. 实用性强,每天都用
每日简报不是玩具,是真正能提升效率的工具。每天早上自动汇总今日任务、本周进度,比你手动打开Notion查看要快得多。
💡 学习策略:基础课程的目标是"能用",不是"精通"。我们先把最常用的80%学会,剩下20%的高级技巧(事件驱动、状态管理、复杂编排)留到高级课程。这样你能快速上手,也为后续学习留下空间。
每日简报能做什么?
场景:内容创作者的早晨
每天早上9点,你还在刷牙,OpenClaw已经把今天的工作安排发到飞书了:
📋 今日工作简报(2026-03-07)
今日待办(3项)
- • 完成Day5教程编写(截止18:00)
- • 审核设计稿
- • 社群答疑
本周选题进度
- • 已完成:2篇
- • 进行中:1篇(OpenClaw系列)
- • 待开始:3篇
昨日完成
- • Day4教程 ✅
- • PPT模板优化 ✅
看到了吗?你还没开始工作,就已经知道今天要做什么、本周进度如何、昨天完成了什么。这就是自动化的价值。
定时任务的原理
在讲具体实现之前,我们先理解定时任务是怎么工作的。
两种实现方式
| 方式 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| 系统Cron | 操作系统的定时任务服务 | 稳定、可靠、系统级 | 配置稍复杂 |
| OpenClaw Hooks | OpenClaw内置的钩子系统 | 简单、集成度高 | 依赖OpenClaw运行 |
我们选择系统Cron,因为:
- • 更稳定,不依赖OpenClaw是否在线
- • 更灵活,可以执行任何脚本
- • 更通用,学会了可以用在其他场景
Cron表达式速成
Cron用5个字段表示时间:
分钟 小时 日期 月份 星期
* * * * *
| | | | |
| | | | +---- 星期几 (0-7, 0和7都是周日)
| | | +-------- 月份 (1-12)
| | +------------ 日期 (1-31)
| +---------------- 小时 (0-23)
+-------------------- 分钟 (0-59)常用示例
0 9 * * *每天早上9点0 9 * * 1每周一早上9点0 9,18 * * *每天9点和18点*/30 * * * *每30分钟0 0 1 * *每月1号零点💡 记忆技巧:从小到大记:分、时、日、月、周。想象一个时钟,从最小的刻度(分钟)到最大的周期(星期)。
实战:打造每日工作简报
接下来我们用45分钟,从零实现一个完整的每日简报系统。
步骤1:编写简报脚本(25分钟)
在OpenClaw工作区创建 scripts/daily_report.py:
#!/usr/bin/env python3
"""
每日工作简报生成器
每天早上自动汇总今日任务、本周进度、昨日完成情况
"""
import sys
import os
sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'tools'))
from notion import query_database
from feishu import send
from datetime import datetime, timedelta
import json
def get_today_tasks():
"""获取今日待办任务"""
result = query_database(
"任务看板",
filter_type="date",
filter_value="今天"
)
return result.get("results", [])
def get_week_topics():
"""获取本周选题进度"""
result = query_database(
"选题库",
filter_type="date",
filter_value="本周"
)
topics = result.get("results", [])
# 统计各状态数量
completed = len([t for t in topics if "已完成" in t.get("tags", [])])
in_progress = len([t for t in topics if "进行中" in t.get("tags", [])])
todo = len([t for t in topics if "待开始" in t.get("tags", [])])
return {
"completed": completed,
"in_progress": in_progress,
"todo": todo,
"total": len(topics)
}
def get_yesterday_done():
"""获取昨日完成的任务"""
result = query_database(
"任务看板",
filter_type="date",
filter_value="昨天"
)
return [t for t in result.get("results", []) if "已完成" in t.get("tags", [])]
def format_report(tasks, topics, done):
"""格式化简报内容"""
today = datetime.now().strftime("%Y-%m-%d")
report = f"""📋 今日工作简报({today})
【今日待办】共 {len(tasks)} 项
"""
for i, task in enumerate(tasks[:5], 1): # 最多显示5项
report += f"{i}. {task['title']}
"
if len(tasks) > 5:
report += f"...还有 {len(tasks) - 5} 项
"
report += f"""
【本周选题进度】
• 已完成:{topics['completed']} 篇
• 进行中:{topics['in_progress']} 篇
• 待开始:{topics['todo']} 篇
"""
if done:
report += "
【昨日完成】
"
for task in done[:3]: # 最多显示3项
report += f"• {task['title']} ✅
"
return report
def main():
"""主函数"""
print("开始生成每日简报...")
# 获取数据
tasks = get_today_tasks()
topics = get_week_topics()
done = get_yesterday_done()
# 格式化简报
report = format_report(tasks, topics, done)
# 发送到飞书
target_id = os.getenv("MY_FEISHU_ID") # 你的飞书open_id
result = send(target_id, report)
if result.get("code") == 0:
print("简报发送成功!")
else:
print(f"发送失败:{result}")
if __name__ == "__main__":
main()💡 代码解读
- • 模块化设计:每个功能独立成函数,方便测试和维护
- • 数据聚合:从多个Notion数据库获取数据,统一处理
- • 格式化输出:将数据转换成易读的文本格式
- • 错误处理:检查发送结果,记录日志
步骤2:配置环境变量(3分钟)
编辑 ~/.zshrc,添加你的飞书ID:
export MY_FEISHU_ID="ou_xxxxxxxxxxxxx"如何获取你的飞书open_id?在飞书中给OpenClaw发消息,查看日志即可看到。
步骤3:手动测试(5分钟)
先手动运行一次,确保脚本正常工作:
cd ~/openclaw-workspace
python3 scripts/daily_report.py如果一切正常,你会在飞书收到简报消息。
步骤4:配置定时任务(10分钟)
编辑crontab配置:
# 打开crontab编辑器
crontab -e
# 添加以下内容(每天早上9点执行)
0 9 * * * cd ~/openclaw-workspace && /usr/local/bin/python3 scripts/daily_report.py >> logs/daily_report.log 2>&1⚠️ 注意事项
- • 使用绝对路径:cron环境变量和终端不同,必须用绝对路径
- • 重定向日志:
>> logs/daily_report.log 2>&1保存输出,方便调试 - • 环境变量:确保cron能访问到NOTION_TOKEN等环境变量
步骤5:验证和调试(2分钟)
查看crontab是否生效:
# 查看当前的定时任务
crontab -l
# 查看cron日志(Mac)
tail -f /var/log/system.log | grep cron
# 查看脚本输出日志
tail -f ~/openclaw-workspace/logs/daily_report.log优化和扩展
技巧1:智能时间选择
不同人的工作习惯不同,可以根据自己的作息调整时间:
早起型(7:00)
0 7 * * *适合早上6点起床的人,7点收到简报正好开始工作
标准型(9:00)
0 9 * * *适合大多数人,9点上班前收到简报
夜猫子型(22:00)
0 22 * * *晚上10点收到明日简报,提前规划
技巧2:周末跳过
周末不想收到工作简报?修改cron表达式:
# 只在工作日(周一到周五)执行
0 9 * * 1-5 cd ~/openclaw-workspace && python3 scripts/daily_report.py技巧3:多时段简报
可以设置多个时间点,比如早上发今日计划,晚上发完成总结:
# 早上9点:今日计划
0 9 * * * cd ~/openclaw-workspace && python3 scripts/morning_report.py
# 晚上18点:今日总结
0 18 * * * cd ~/openclaw-workspace && python3 scripts/evening_summary.py技巧4:添加数据可视化
可以用简单的字符画增强可读性:
def format_progress_bar(completed, total):
"""生成进度条"""
if total == 0:
return "━━━━━━━━━━ 0%"
percentage = int((completed / total) * 100)
filled = int(percentage / 10)
bar = "█" * filled + "░" * (10 - filled)
return f"{bar} {percentage}%"
# 使用示例
progress = format_progress_bar(3, 10)
# 输出:███░░░░░░░ 30%更多自动化场景
掌握了定时任务,你可以实现更多自动化场景:
每周数据汇总
每周五下午自动生成本周工作报告
0 17 * * 5定时备份
每天凌晨2点备份Notion数据
0 2 * * *截止日期提醒
每天检查即将到期的任务
0 10,15 * * *月度复盘
每月最后一天生成月度报告
0 20 28-31 * *🚀 进阶方向(高级课程预告)
今天我们学的是"定时触发",这只是自动化的第一步。在高级课程中,你会学到:
- • 事件驱动:Notion状态变化时自动触发(不用定时检查)
- • 条件编排:根据不同条件执行不同的工作流
- • 状态管理:记住处理过的数据,避免重复执行
- • 错误重试:失败时自动重试,保证任务完成
- • 并行执行:同时执行多个任务,提升效率
本章一句话Q&A
定时任务没有执行怎么办?
排查步骤:
- 1. 检查crontab是否正确配置(
crontab -l) - 2. 查看日志文件,看是否有错误信息
- 3. 确认脚本路径是绝对路径
- 4. 检查环境变量是否在cron环境中可用
Mac睡眠后定时任务会执行吗?
不会。Mac睡眠时cron不会执行。解决方案:
- • 使用
caffeinate命令保持Mac不睡眠 - • 或者在系统偏好设置中关闭自动睡眠
- • 或者使用云服务器运行定时任务
可以用Python的schedule库代替cron吗?
可以,但不推荐。schedule需要一个常驻进程,而cron是系统级服务,更稳定。如果你的脚本需要复杂的调度逻辑,可以考虑schedule。
如何测试cron表达式是否正确?
使用在线工具:https://crontab.guru,输入表达式就能看到执行时间。
💡 本章要点回顾
- • 从简单场景开始,快速见效建立信心
- • 定时任务是所有自动化的基础
- • Cron表达式:分、时、日、月、周
- • 使用绝对路径和日志重定向
- • 先手动测试,再配置定时任务
📅 下一章预告
Day 6:记忆系统
让OpenClaw记住你的习惯、偏好、常用数据。AI会越用越懂你,真正成为你的专属助手。