用 OpenClaw 搭建全自动晨间简报系统

每天早上8:00,我的微信准时收到一条消息:

📊 晨间简报 | 3月31日 周一

🌤 成都:15-22°C,多云转晴
📧 新邮件:3封(2封工作,1封订阅)
📅 今日日程:10:00 产品评审,14:30 客户会议
📰 科技热点:OpenAI 发布 GPT-4.5,马斯克起诉…

祝你今天高效!🚀

而我什么都没做。它在全自动运行。


为什么需要这个?

我有三个痛点:

  1. 早上信息分散:要打开天气、邮件、日历、新闻四个应用才能知道今天该干嘛
  2. 容易遗漏:有时候忘了看日历,错过会议;忘了看邮件,漏掉重要信息
  3. 启动慢:早上需要10分钟才能进入工作状态

我想要一个"一键开机"的感觉——睁眼就知道今天会发生什么。


方案设计

用 OpenClaw 的 heartbeat + cron + skills 组合:

cron (每天8:00) 
  ↓
OpenClaw Agent 触发
  ↓
并行调用 skills:
  ├── weather (成都)
  ├── email (未读邮件)
  ├── calendar (今日日程)
  └── news (科技热点)
  ↓
聚合生成简报 → 发送到微信

关键技术点:

  1. 并行执行:4个信息源同时拉取,总耗时 < 3秒
  2. 失败容错:某个接口挂了,简报继续生成,只是那一栏显示"获取失败"
  3. 自然语言生成:不用模板,让 LLM 把原始数据写成"人话"

核心代码

1. Skill 配置

~/.openclaw/skills/morning-brief/SKILL.md

# Morning Brief Skill

调用外部 API 聚合晨间信息:

## 输出格式
- 天气:城市、温度、天气状况
- 邮件:未读数量 + 分类统计
- 日程:今日事件列表(时间+标题)
- 新闻:3-5条科技热点摘要

## 失败处理
任一信息源失败,标记为 null,简报继续生成

2. 简报生成 Prompt

system_prompt = """你是一个高效的晨间助手。根据以下信息生成一段简洁的晨间简报:

[天气数据]
[邮件数据]
[日程数据]
[新闻数据]

要求:
- 语气积极、专业但不刻板
- 用emoji增加可读性
- 控制长度在150字以内
- 如果某项数据为null,跳过该项"""

user_prompt = f"""今日信息:
天气:{weather or '获取失败'}
未读邮件:{email_stats or '获取失败'}
今日日程:{events or '无'}
科技热点:{news or '获取失败'}"""

3. Cron 配置

HEARTBEAT.md

# 晨间简报定时任务
- 时间:每天 08:00 (Asia/Shanghai)
- 动作:执行 morning-brief skill
- 输出:发送到微信(openclaw-weixin)

效果与收益

运行 30 天后的数据:

指标 之前 之后
早晨信息获取时间 8-10 分钟 0 分钟(自动推送)
遗漏会议/邮件次数 平均每周 1 次 0 次
早晨启动工作状态时间 15 分钟 5 分钟
心情评分(1-10) 6 8

意外的收获:

  1. 倒逼信息整理:为了简报好看,我开始主动清理邮件、整理日历
  2. 社交货币:朋友看到我的简报说"卧槽这个帅",成了炫耀资本(笑)
  3. 可复用架构:这个框架后来被我用来做了"晚间断线提醒"、“周报复盘"等

踩过的坑

1. 时间区问题

最初用 UTC 时间,结果简报早上 8 点发出来的时候内容是"昨日日程”。改成 Asia/Shanghai 解决。

2. API 限额

新闻接口有调用限制🚫,我调试时疯狂触发,结果真早上没新闻了。加了本地缓存,同样查询 5 分钟内不走接口。

3. 消息太长

最初简报写了 300 多字,微信一条发不完被截断。后来强制限制 150 字。


下一步计划

  1. 个性化学习:让 Agent 学习我的阅读习惯,把最可能感兴趣的新闻排在前面
  2. 语音简报:周末用语音版,躺在床上听
  3. 智能延时:如果检测到我在休假,自动暂停简报

想复刻?

核心代码和 Skill 配置都在上面,可以直接复制使用。


飞哥的晨间简报,第 31 天。 🚀