需求场景
你是否遇到过这些情况:
- 早上打开电脑,先花 15 分钟翻各种群、邮件、新闻,了解昨天发生了什么
- 想让 AI 每天自动整理一份简报,但不知道该怎么实现
- 试过一些自动化工具,但配置复杂、维护成本高
本文介绍一种零门槛的方案:用 OpenClaw 内置的 cron 系统,让 AI 定时自动醒来,抓取多源信息,生成结构化简报,然后推送到位。全程不需要你发任何指令。
整体架构
整个 pipeline 的数据流如下:
┌─────────────────────────────────────────────────────┐
│ 定时触发层 │
│ cron 定时器,每天固定时间唤醒 │
└──────────────────────┬──────────────────────────────┘
↓
┌─────────────────────────────────────────────────────┐
│ 执行层 │
│ OpenClaw isolated agent(独立 session,不污染主会话) │
└──────────────────────┬──────────────────────────────┘
↓
┌─────────────────────────────────────────────────────┐
│ 采集层(并行) │
│ 天气查询 │ Discord 消息 │ QQ 消息 │ 新闻搜索 │
└──────────────────────┬──────────────────────────────┘
↓
┌─────────────────────────────────────────────────────┐
│ 生成层 │
│ LLM 汇总 + 格式化输出 │
└──────────────────────┬──────────────────────────────┘
↓
┌─────────────────────────────────────────────────────┐
│ 推送层 │
│ Discord / QQ / 微信 / 邮件 │
└─────────────────────────────────────────────────────┘
为什么用 isolated session?
因为普通 session 会累积对话历史。如果简报任务跑在主会话里,每次简报的内容都会进入主会话上下文,导致 token 越积越多,后续对话越来越慢甚至超限。isolated session 每次独立运行,用完即弃,主会话不受影响。
第一步:理解 cron 任务的组成
OpenClaw 的 cron 任务由以下几个核心部分构成:
{
"name": "任务名称",
"schedule": { "kind": "cron", "expr": "0 9 * * *", "tz": "Asia/Shanghai" },
"payload": { "kind": "agentTurn", "message": "AI 的指令内容" },
"sessionTarget": "isolated",
"delivery": { "mode": "announce", "channel": "discord" }
}
schedule 描述"什么时候跑",payload 描述"跑什么",delivery 描述"跑完后结果发到哪里"。
第二步:设计简报生成 prompt
prompt 是整个 pipeline 的核心。prompt 的质量直接决定简报的可读性和有用程度。
一个结构良好的简报 prompt 应该包含以下部分:
明确任务角色
让 AI 扮演一个专业的简报机器人,而不是泛泛的助手:
你是一个每日简报生成机器人。你的职责是:
1. 收集多方信息来源
2. 提取最重要的内容
3. 用统一格式输出,不废话,不重复
列出所有信息来源
明确告诉 AI 需要查哪些来源:
请依次执行以下步骤:
1. 调用 weather skill 查询北京当前天气和未来 24 小时预报
2. 读取 Discord 频道 1465212107313123491 最近 20 条消息,记录重要事件
3. 读取 QQ 频道最近 20 条消息
4. 使用 tavily_search 搜索今日 AI 行业热点(最多 3 条)
5. 检查 cron 任务状态(调用 cron list),确认有无报错
指定输出格式
格式统一便于阅读,也便于后续解析:
整合以上信息,按以下格式输出(不留空白项,无内容写"无"):
📅 今日概览
月 日 星期X | 天气:XX / XX°C
🌤️ 天气预报
白天 / 夜间,XX°C,XX 天气
📌 今日待办
• 待办项 1
• 待办项 2(如无则写"暂无")
📡 重要动态
• 事件描述(来源:Dicord/QQ/新闻)
⚠️ 需要关注
• 异常情况或需要人工处理的事项
• 任务执行状态(有报错时)
加入异常处理
prompt 末尾加一句容错指导:
如果某项信息获取失败,直接跳过该项继续执行后续步骤,不要报错,不要询问。
第三步:完整配置示例
基础版本(每天 9 点 Discord 推送)
{
"name": "daily-briefing",
"schedule": {
"kind": "cron",
"expr": "0 9 * * *",
"tz": "Asia/Shanghai"
},
"payload": {
"kind": "agentTurn",
"message": "【简报生成任务】\n\n你是一个每日简报生成机器人。请依次执行:\n\n1. 调用 weather skill 查询当前天气\n2. 读取 Discord 频道 1465212107313123491 最近 20 条消息\n3. 使用 tavily_search 搜索今日热点新闻(最多 3 条)\n4. 检查 cron 任务列表状态\n\n整合以上信息,按以下格式输出(不留空白,无内容写"无"):\n\n📅 今日概览\n🌤️ 天气预报\n📡 重要动态\n⚠️ 需要关注\n\n如果某项信息获取失败,直接跳过继续执行,不要报错。",
"timeoutSeconds": 300
},
"sessionTarget": "isolated",
"delivery": {
"mode": "announce",
"channel": "discord"
},
"enabled": true
}
进阶版本(多渠道 + 失败告警)
{
"name": "daily-briefing-pro",
"schedule": {
"kind": "cron",
"expr": "0 9 * * 1-5",
"tz": "Asia/Shanghai"
},
"payload": {
"kind": "agentTurn",
"message": "【工作日简报】\n\n请按以下步骤执行:\n1. weather skill\n2. Discord 频道消息\n3. tavily_search 今日热点(AI/科技)\n4. cron 任务状态检查\n\n格式输出:\n📅 今日概览\n🌤️ 天气\n📌 待办\n📡 动态\n⚠️ 告警(如有)",
"timeoutSeconds": 300,
"lightContext": true
},
"sessionTarget": "isolated",
"delivery": {
"mode": "announce",
"channel": "discord",
"to": "qqbot:c2c:C3F5C95D61D94E3F3764F08E3A23838B"
},
"failureAlert": {
"after": 2,
"mode": "announce",
"channel": "discord",
"cooldownMs": 3600000
},
"enabled": true
}
这个版本的变化:
- 工作日触发:
expr: "0 9 * * 1-5"表示周一到周五 9 点执行 - lightContext:轻量上下文,不带完整历史,减少 token 消耗
- 私聊同步:推送到 QQ 私聊,同时在 Discord 频道公告
- 失败告警:连续失败 2 次才触发告警,冷却 1 小时
第四步:手动触发测试
配置好之后,不要直接等第二天。先手动触发一次看效果:
cron run <jobId>
查看执行结果:
cron runs <jobId>
如果输出不符合预期,调整 prompt 中的描述或格式要求,重新 run 调试,直到满意为止。
进阶扩展
周末 vs 工作日不同模板
用两个 cron 任务,分别配置不同的 prompt:
// 工作日早报 - 09:00
{ "schedule": { "expr": "0 9 * * 1-5" }, "payload": { "message": "工作日版本 prompt..." } }
// 周末文摘 - 10:00
{ "schedule": { "expr": "0 10 * * 0,6" }, "payload": { "message": "周末版本 prompt..." } }
异常事件立即告警
除了每日定时简报,还可以配置一个"异常监控"任务,当检测到服务器错误、cron 任务失败等关键事件时,立即触发告警,而不等下一次定时简报:
{
"name": "server-alert",
"schedule": { "kind": "every", "everyMs": 300000 },
"payload": {
"kind": "agentTurn",
"message": "检查以下事项:1) cron 任务列表有无 error 状态 2) Minecraft 服务器是否在线 3) 磁盘空间是否低于 20%。如有异常立即输出。"
},
"sessionTarget": "isolated",
"delivery": { "mode": "announce", "channel": "discord" }
}
每 5 分钟检查一次,有问题立刻推送。
多语言支持
如果简报需要发给不同语言的成员,可以让 AI 生成双语版本:
输出分两部分:第一部分中文,第二部分 English version。
原理补充:cron 表达式详解
| 表达式 | 含义 |
|---|---|
0 9 * * * | 每天 9:00 |
0 9 * * 1-5 | 工作日 9:00 |
0 9 * * 0,6 | 周末 9:00 |
0 */2 * * * | 每 2 小时 |
0 9,18 * * * | 每天 9:00 和 18:00 |
30 8 * * 1 | 每周一 8:30 |
格式是:分 时 日 月 周
维护建议
- 每月检查一次 prompt:信息来源和格式需求可能变化,季度性地审视简报内容是否还符合需要
- 关注 Token 消耗:每次 agentTurn 消耗 Token,建议设置
timeoutSeconds防止卡死 - 失败告警要设冷却时间:避免同一个问题反复告警
- 测试时用 run 命令:不要改完配置就等第二天,调试阶段多手动触发几次
总结
定时简报 pipeline 的本质,是把"定时 + 采集 + 生成 + 推送"四个能力串联起来。OpenClaw 的 cron 系统提供了定时触发和结果推送,AI 自身提供了采集和生成能力,整个 pipeline 不需要任何外部服务,一行命令就能配置完成。