乐于分享
好东西不私藏

openclaw龙虾实际应用之打工人早报生成器:每天早上省20分钟的秘密

openclaw龙虾实际应用之打工人早报生成器:每天早上省20分钟的秘密

每天早上8点,你的微信收到一条消息:今天3个会、2封待回邮件、下午要交的报告进度87%、外面下雨记得带伞。

这不是助理,这是 OpenClaw 龙虾在帮你打工。


为什么你需要这个

早上到公司,你是不是也这样:

  • 先打开邮箱,翻有没有漏看的紧急邮件
  • 再点开日历,确认今天有哪些会、会不会撞时间
  • 瞄一眼天气,纠结要不要带伞
  • 最后打开待办,看看昨天没做完的坑

20分钟过去了,你还没开始真正的工作。

更烦的是,有时候忙起来忘了看日历,开会迟到;或者没注意到老板凌晨发的邮件,一上午都在做无用功。

信息散落在各个App里,你的大脑成了人肉路由器。


早报生成器是什么

简单说,就是让 OpenClaw 龙虾每天早上自动帮你:

  1. 查邮件
     — 找出未读/需要回复的
  2. 看日历
     — 列出今天的会议和冲突
  3. 读天气
     — 告诉你今天穿什么、带不带伞
  4. 扫待办
     — 提醒即将到期的任务
  5. 生成简报
     — 把以上信息整理成一段人话,发到你的微信

你不用打开5个App,看一条消息就够了。


实际效果展示

这是我每天8点收到的早报:

📅 今日概览(3月19日 周四)  🎯 重点事项   • 14:00 产品评审会(会议室B)   • 17:00 周报截止,目前进度60%  📧 待处理邮件   • 老板 09:32 关于Q2预算的回复(需确认)   • 客户 昨天 合同修改意见(不急,下午处理)  🌤️ 今日天气   上海 12-18°C 多云转阴,下午有雨,记得带伞  ✅ 今日待办(共5项)   • 完成PRD文档(截止今天)⚠️   • 回复客户邮件 • 预约下周体检  💡 贴心提示   你的日历显示下午有2小时空档,适合处理深度工作。

看完这条消息,我大概知道今天该干嘛了。全程10秒。


完整部署教程

你需要准备什么

  • 一台能跑 OpenClaw 的电脑(Windows/Mac/Linux都行,我用的Windows)
  • 一个微信(用来接收早报)
  • 大概30分钟配置时间

第一步:安装 OpenClaw

如果你还没装:

# Windows 用 PowerShell npm install -g openclaw  # Mac/Linux sudo npm install -g openclaw

装完验证:

openclaw --version

第二步:配置消息通道

早报要发到微信,先配消息插件。推荐两个方案:

方案A:微信个人号(免费)

用 itchat 或 wechaty 插件:

plugins:     - name: wechat       type: wechaty       config:           # 扫码登录,第一次需手动授权

方案B:企业微信(更稳)

创建机器人,把早报发到群或私聊:

plugins:     - name: wechat-work       type: webhook       config:           webhook_url: "你的企业微信机器人地址"

配置完重启 OpenClaw,测试一下:

openclaw message send --target "你的微信昵称" --message "测试消息"

第三步:安装必要技能

# 邮件技能 openclaw skill install himalaya  # 日历技能(支持Google/Outlook/Apple) openclaw skill install calendar  # 天气技能 openclaw skill install weather  # 定时任务 openclaw skill install cron

第四步:编写早报脚本

在 OpenClaw 工作目录创建 skills/morning-brief/SKILL.md

# morning-brief  每天早上自动生成工作早报。  ## 配置  在 `config.yaml` 中添加:  ```yaml morning_brief:     enabled: true     send_time: "08:00"     recipient: "你的微信昵称"     timezone: "Asia/Shanghai"```

功能

  • 检查未读邮件
  • 读取今日日历
  • 获取当日天气
  • 汇总待办任务
  • 生成简报并发送
同目录创建 index.js:  
const { skill, email, calendar, weather, tasks, message } = require('openclaw');  async function generateBrief() {     const today = new Date();     const dateStr = today.toLocaleDateString('zh-CN', {         month'long',         day'numeric',         weekday'short'     });      // 1. 获取邮件     const unreadEmails = await email.list({ unreadtruelimit5 });     const importantEmails = unreadEmails.filter(e =>         e.from.includes('老板') || e.subject.includes('紧急')     );      // 2. 获取日历     const events = await calendar.list({         start: today,         endnew Date(today.getTime() + 24 * 60 * 60 * 1000)     });      // 3. 获取天气     const weatherInfo = await weather.get('上海'); // 改成你的城市      // 4. 获取待办     const pendingTasks = await tasks.list({         dueBeforenew Date(today.getTime() + 24 * 60 * 60 * 1000),         status'incomplete'     });      // 5. 生成简报     let brief = `📅 今日概览(${dateStr})\n\n`;      // 会议部分     if (events.length > 0) {         brief += `🎯 今日会议(${events.length}场)\n`;         events.slice(03).forEach(e => {             brief += `• ${e.time}${e.title}${e.location ? '(' + e.location + ')' : ''}\n`;         });         if (events.length > 3) {             brief += `• 还有 ${events.length - 3} 场...\n`;         }         brief += '\n';     }      // 邮件部分     if (importantEmails.length > 0) {         brief += `📧 重要邮件(${importantEmails.length}封)\n`;         importantEmails.forEach(e => {             brief += `• ${e.from.split('<')[0].trim()}${e.subject.substring(020)}...\n`;         });         brief += '\n';     }      // 天气部分     brief += `🌤️ 今日天气\n`;   b  rief += `${weatherInfo.city}${weatherInfo.temp}°C ${weatherInfo.desc}${weatherInfo.tip}\n\n`;      // 待办部分     if (pendingTasks.length > 0) {         const urgent = pendingTasks.filter(t => t.due === today);         brief += `✅ 今日待办(${urgent.length}项今天截止)\n`;         urgent.slice(03).forEach(t => {             brief += `• ${t.title.substring(015)}${t.title.length > 15 ? '...' : ''}\n`;         });         brief += '\n';     }      // 贴心提示     const freeSlots = findFreeSlots(events);     if (freeSlots.length > 0 && freeSlots[0].duration >= 90) {         brief += `💡 贴心提示\n`;         brief += `你今天下午有${freeSlots[0].duration}分钟空档,适合处理深度工作。\n`;     }      return brief; }  function findFreeSlots(events) {     // 简化版:假设工作时间9-18点     return [{ duration120 }]; }  async function main() {     const config = skill.config();     const brief = await generateBrief();      await message.send({         target: config.recipient,         message: brief     });      console.log('早报已发送:'new Date().toLocaleString()); }  module.exports = { main };

第五步:设置定时任务

openclaw cron add --name "morning-brief" --schedule "0 8 * * *" --command "morning-brief"

或在配置里添加:

cron:     jobs:         - name: morning-brief           schedule: "0 8 * * *"           command"morning-brief"           enabled: true

第六步:测试运行

openclaw run morning-brief

检查微信,应该能收到测试早报。内容不对就调整脚本里的过滤条件。

第七步:调优和个性化

参数
说明
建议
send_time
发送时间
通勤看设8:00,到公司看设9:00
email_filters
邮件过滤
加上老板、重要客户邮箱
weather_city
天气城市
工作地还是居住地?
task_source
待办来源
支持 Todoist、Notion、滴答清单

进阶玩法:

  • 周五特别版
     — 加本周总结和下周预览
  • 出差模式
     — 检测到异地日历事件,自动查当地天气
  • 智能提醒
     — 今天有会议但没准备材料,提前警告

常见问题

Q:我的邮件是Outlook/企业邮箱,能连吗?

能。himalaya 技能支持 IMAP/SMTP,有邮箱服务器地址和账号密码就行。企业邮箱可能要管理员开权限。

Q:日历用飞书/钉钉怎么办?

可以导出 ICS 格式,或找对应的 OpenClaw 插件。目前官方支持 Google Calendar 和 Outlook Calendar。

Q:会不会泄露隐私?

所有数据都在本地跑,不会上传到第三方。OpenClaw 是开源的,代码可以自己审计。

Q:能发到钉钉/飞书吗?

可以,配置对应的 webhook 就行。原理一样,只是换发送通道。


写在最后

这个早报生成器我跑了3个月,最大的感受是:焦虑感下降了。

以前每天早上被信息淹没,总觉得漏了什么。现在一条消息看完,心里有底了。

省下的20分钟,我用来慢慢喝杯咖啡,或者想想今天最重要的事是什么。

技术应该让人更从容,而不是更忙碌。

如果你也想要这样一个数字助理,花30分钟部署一下,明天早上就能收到第一条早报。

有问题欢迎在评论区交流,或者加入 OpenClaw 社区讨论。


本文使用 OpenClaw 龙虾自动发布