OpenClaw 定时任务与自动化工作流
✦ 免费专栏|全套教程: OpenClaw 从入门到精通 ✦ 开篇总览|最新目录: 最新 OpenClaw 教程|从入门到精通|AI 智能助手 / 自动化 / Skills 实战(原 Clawdbot/Moltbot)
本文档详细介绍 OpenClaw 的定时任务和自动化功能,包括 Cron 配置、Heartbeat 心跳机制以及自动化工作流的设计与实践。
目录
1. 概述
OpenClaw 提供了强大的定时任务和自动化能力,让 AI 助手能够主动执行任务,而不仅仅是响应用户请求。这种能力使 OpenClaw 从"被动响应"转变为"主动协作"的智能助手。
1.1 核心能力
┌─────────────────────────────────────────────────────────────────┐
│ OpenClaw 自动化能力架构 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Cron 任务 │ │ Heartbeat │ │ 事件驱动 │ │
│ │ (精确定时) │ │ (周期检查) │ │ (触发响应) │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │ │
│ └──────────────────┼──────────────────┘ │
│ ▼ │
│ ┌─────────────────────────┐ │
│ │ 自动化工作流引擎 │ │
│ └─────────────────────────┘ │
│ │ │
│ ┌──────────────────┼──────────────────┐ │
│ ▼ ▼ ▼ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 邮件处理 │ │ 日程提醒 │ │ 数据同步 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
1.2 两种机制对比
| 触发方式 | 时间驱动 | 周期轮询 |
| 精确度 | 精确到秒级 | 可漂移,约 30 分钟 |
| 执行环境 | 独立子代理会话 | 主会话上下文 |
| 适用场景 | 固定时间任务 | 批量检查任务 |
| 模型配置 | 可指定不同模型 | 继承主会话模型 |
| 输出方式 | 直接发送到通道 | 经过主会话处理 |
2. Cron 定时任务配置
2.1 Cron 基础概念
Cron 是一种时间基础的作业调度器,使用特定的表达式来定义任务执行的时间规则。
Cron 表达式格式
┌───────────── 分钟 (0 – 59)
│ ┌───────────── 小时 (0 – 23)
│ │ ┌───────────── 日期 (1 – 31)
│ │ │ ┌───────────── 月份 (1 – 12)
│ │ │ │ ┌───────────── 星期几 (0 – 6,0 = 周日)
│ │ │ │ │
* * * * *
常用表达式示例
| 0 9 * * * | 每天上午 9:00 |
| 0 9 * * 1 | 每周一上午 9:00 |
| 0 9,18 * * * | 每天上午 9:00 和下午 6:00 |
| */30 * * * * | 每 30 分钟 |
| 0 0 1 * * | 每月 1 号午夜 |
2.2 OpenClaw 中的 Cron 配置
2.2.1 通过 CLI 配置
# 查看当前所有定时任务
openclaw cron list
# 添加新的定时任务
openclaw cron add –schedule "0 9 * * *" –message "早安!今天有什么安排?"
# 添加指定通道的任务
openclaw cron add \\
–schedule "0 18 * * 1-5" \\
–message "下班时间到了,今天的工作完成了吗?" \\
–channel "discord"
# 使用不同模型
openclaw cron add \\
–schedule "0 8 * * *" \\
–message "总结昨天的邮件" \\
–model "claude-3-opus"
# 删除定时任务
openclaw cron remove <cron-id>
# 启用/禁用任务
openclaw cron enable <cron-id>
openclaw cron disable <cron-id>
2.2.2 配置文件方式
在 ~/.openclaw/config.json 中配置定时任务:
{
"cron": {
"jobs": [
{
"id": "morning-briefing",
"schedule": "0 8 * * *",
"message": "早安!检查今日日程和未读邮件",
"channel": "feishu",
"model": "claude-3-sonnet",
"enabled": true
},
{
"id": "weekly-report",
"schedule": "0 17 * * 5",
"message": "生成本周工作总结报告",
"channel": "discord",
"enabled": true
},
{
"id": "weather-alert",
"schedule": "0 7 * * *",
"message": "检查今日天气,如有异常提前提醒",
"enabled": true
}
]
}
}
2.3 Cron 任务执行流程
┌─────────────────────────────────────────────────────────────────┐
│ Cron 任务执行流程 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 时间到达 │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ Cron 触发器 │ │
│ └──────┬──────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ 检查任务状态 │──否──▶│ 跳过执行 │ │
│ └──────┬──────┘ └─────────────┘ │
│ │ 是 │
│ ▼ │
│ ┌─────────────┐ │
│ │ 创建子代理 │ │
│ │ (独立会话) │ │
│ └──────┬──────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ 执行任务指令 │ │
│ └──────┬──────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ 发送结果到 │ │
│ │ 指定通道 │ │
│ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
2.4 Cron 任务高级配置
2.4.1 时区设置
{
"cron": {
"timezone": "Asia/Shanghai",
"jobs": [
{
"id": "daily-standup",
"schedule": "0 10 * * 1-5",
"message": "每日站会提醒",
"timezone": "Asia/Shanghai"
}
]
}
}
2.4.2 任务重试机制
{
"cron": {
"jobs": [
{
"id": "data-backup",
"schedule": "0 2 * * *",
"message": "执行数据备份任务",
"retry": {
"maxAttempts": 3,
"delayMinutes": 5,
"notifyOnFailure": true
}
}
]
}
}
2.4.3 条件执行
{
"cron": {
"jobs": [
{
"id": "smart-reminder",
"schedule": "0 9 * * *",
"message": "如果今天有会议,提前提醒准备",
"conditions": {
"checkCalendar": true,
"minMeetingCount": 1
}
}
]
}
}
3. Heartbeat 心跳机制
3.1 Heartbeat 概述
Heartbeat(心跳)是 OpenClaw 的主动检查机制,允许 AI 助手周期性地检查状态并主动提供服务,而不是等待用户触发。
核心特点
- 主动性:AI 主动发起,而非被动响应
- 灵活性:可根据上下文智能决策
- 批量处理:一次心跳可执行多个检查任务
- 上下文感知:在主会话中执行,可访问历史上下文
3.2 Heartbeat 配置
3.2.1 默认心跳提示词
OpenClaw 默认使用以下心跳提示词:
Read HEARTBEAT.md if it exists (workspace context).
Follow it strictly. Do not infer or repeat old tasks from prior chats.
If nothing needs attention, reply HEARTBEAT_OK.
3.2.2 自定义 HEARTBEAT.md
在工作区根目录创建 HEARTBEAT.md 文件,定义心跳检查任务:
# Heartbeat 检查清单
## 每次检查
– [ ] 检查是否在安静时间(23:00-08:00),如果是则返回 HEARTBEAT_OK
## 轮换检查(每天 2-4 次)
### 邮件检查
– 检查是否有紧急未读邮件
– 如果有重要邮件,简要汇报
### 日程检查
– 检查未来 24 小时内的日程
– 如果有即将到来的事件(< 2 小时),提醒用户
### 社交媒体
– 检查是否有重要通知或提及
– 汇报需要关注的内容
### 天气检查
– 如果用户可能外出,检查天气情况
– 如有异常天气,提前提醒
## 输出规则
– 如果所有检查都无需关注,回复 HEARTBEAT_OK
– 只在有需要通知的内容时才输出信息
– 保持消息简洁,不要过度打扰
3.3 Heartbeat 状态追踪
使用 memory/heartbeat-state.json 追踪检查状态:
{
"lastChecks": {
"email": 1703275200,
"calendar": 1703260800,
"weather": 1703253600,
"social": null
},
"checkIntervals": {
"email": 14400,
"calendar": 7200,
"weather": 28800,
"social": 43200
},
"quietHours": {
"start": "23:00",
"end": "08:00"
}
}
3.4 Heartbeat 执行流程
┌─────────────────────────────────────────────────────────────────┐
│ Heartbeat 执行流程 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 周期性触发 (~30分钟) │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ 读取心跳提示 │ │
│ │ HEARTBEAT.md│ │
│ └──────┬──────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ 检查安静时间 │ │
│ └──────┬──────┘ │
│ │ │
│ ├── 在安静时间内 ──▶ 返回 HEARTBEAT_OK │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ 读取检查状态 │ │
│ │ (上次检查时间)│ │
│ └──────┬──────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────┐ │
│ │ 执行需要检查的任务 │ │
│ │ ┌─────────┐ ┌─────────┐ ┌────────┐ │ │
│ │ │ 邮件检查│ │日程检查 │ │天气检查│ │ │
│ │ └─────────┘ └─────────┘ └────────┘ │ │
│ └──────────────┬──────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────┐ │
│ │ 有需要通知的内容? │ │
│ └──────────────┬──────────────────────┘ │
│ │ │
│ ┌───────┴───────┐ │
│ ▼ ▼ │
│ ┌──────────┐ ┌──────────────┐ │
│ │ 有内容 │ │ 无内容 │ │
│ │ 发送通知 │ │ HEARTBEAT_OK │ │
│ └──────────┘ └──────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
3.5 Heartbeat 与 Cron 的选择策略
┌─────────────────────────────────────────────────────────────────┐
│ 选择 Heartbeat 还是 Cron │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 需要定时执行任务? │
│ │ │
│ ┌────────────┴────────────┐ │
│ ▼ ▼ │
│ 需要精确时间 可以接受时间漂移 │
│ (如: 每天早上9点) (如: 周期性检查) │
│ │ │ │
│ ▼ ▼ │
│ ┌─────────┐ 需要访问会话上下文? │
│ │ Cron │ │ │
│ └─────────┘ ┌───────┴───────┐ │
│ ▼ ▼ │
│ 需要上下文 不需要上下文 │
│ │ │ │
│ ▼ ▼ │
│ ┌──────────┐ ┌──────────┐ │
│ │Heartbeat│ │ Cron │ │
│ └──────────┘ └──────────┘ │
│ │
│ 其他判断因素: │
│ • 需要批量检查多个来源 → Heartbeat │
│ • 需要使用不同模型 → Cron │
│ • 任务需要独立执行 → Cron │
│ • 结果需要直接发送到通道 → Cron │
│ │
└─────────────────────────────────────────────────────────────────┘
4. 自动化工作流设计
4.1 工作流设计原则
4.1.1 SOLID 原则
| 单一职责 | 每个工作流只做一件事 |
| 开闭原则 | 对扩展开放,对修改关闭 |
| 里氏替换 | 子任务可以替换父任务 |
| 接口隔离 | 任务接口应该最小化 |
| 依赖倒置 | 依赖抽象而非具体实现 |
4.1.2 设计模式
1) 管道模式 (Pipeline)
输入 → [步骤1] → [步骤2] → [步骤3] → 输出
2) 观察者模式 (Observer)
事件源 → [观察者1]
→ [观察者2]
→ [观察者3]
3) 责任链模式 (Chain of Responsibility)
请求 → [处理器1] → [处理器2] → [处理器3] → 最终处理
↓ 未处理 ↓ 未处理 ↓ 处理
4.2 工作流配置示例
4.2.1 每日简报工作流
{
"workflow": {
"id": "daily-briefing",
"name": "每日简报",
"trigger": {
"type": "cron",
"schedule": "0 8 * * 1-5"
},
"steps": [
{
"id": "check-email",
"type": "email",
"action": "listUnread",
"params": {
"maxResults": 10,
"priority": "high"
}
},
{
"id": "check-calendar",
"type": "calendar",
"action": "listEvents",
"params": {
"timeRange": "today"
}
},
{
"id": "check-weather",
"type": "weather",
"action": "getCurrent",
"params": {
"location": "auto"
}
},
{
"id": "generate-report",
"type": "llm",
"action": "summarize",
"params": {
"template": "daily-briefing",
"inputs": ["${check-email.result}", "${check-calendar.result}", "${check-weather.result}"]
}
},
{
"id": "send-notification",
"type": "message",
"action": "send",
"params": {
"channel": "feishu",
"content": "${generate-report.result}"
}
}
],
"errorHandling": {
"continueOnError": true,
"notifyOnFailure": true
}
}
}
4.2.2 周报生成工作流
{
"workflow": {
"id": "weekly-report",
"name": "周报生成",
"trigger": {
"type": "cron",
"schedule": "0 17 * * 5"
},
"steps": [
{
"id": "collect-tasks",
"type": "task",
"action": "listCompleted",
"params": {
"timeRange": "week"
}
},
{
"id": "collect-commits",
"type": "git",
"action": "log",
"params": {
"since": "1 week ago",
"repos": ["project-main", "project-api"]
}
},
{
"id": "collect-calendar",
"type": "calendar",
"action": "listEvents",
"params": {
"timeRange": "week"
}
},
{
"id": "generate-report",
"type": "llm",
"action": "generate",
"params": {
"template": "weekly-report",
"model": "claude-3-sonnet"
}
},
{
"id": "save-document",
"type": "document",
"action": "create",
"params": {
"format": "markdown",
"path": "/reports/weekly/${date:YYYY-MM-DD}.md"
}
},
{
"id": "send-summary",
"type": "message",
"action": "send",
"params": {
"channel": "discord",
"content": "周报已生成:${save-document.url}"
}
}
]
}
}
4.3 工作流执行引擎
┌─────────────────────────────────────────────────────────────────┐
│ 工作流执行引擎 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 触发器层 │ │
│ │ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │ │
│ │ │ Cron │ │Event │ │Manual │ │Webhook │ │ │
│ │ └────┬───┘ └────┬───┘ └────┬───┘ └────┬───┘ │ │
│ └───────┼────────────┼────────────┼────────────┼────────────┘ │
│ └────────────┴────────────┴────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 调度器层 │ │
│ │ ┌──────────────────────────────────────────────────┐ │ │
│ │ │ 工作流队列 │ 优先级管理 │ 并发控制 │ │ │
│ │ └──────────────────────────────────────────────────┘ │ │
│ └───────────────────────────────┬─────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 执行器层 │ │
│ │ ┌──────────────────────────────────────────────────┐ │ │
│ │ │ 步骤执行 │ 状态管理 │ 错误处理 │ 重试机制 │ │ │
│ │ └──────────────────────────────────────────────────┘ │ │
│ └───────────────────────────────┬─────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 输出层 │ │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
│ │ │ Message │ │ File │ │ Webhook│ │ Log │ │ │
│ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
4.4 工作流最佳实践
4.4.1 错误处理
{
"errorHandling": {
"strategy": "continue | stop | retry",
"maxRetries": 3,
"retryDelay": 60,
"fallback": {
"action": "notify",
"message": "工作流执行失败,请手动处理"
},
"notifications": {
"onSuccess": false,
"onFailure": true,
"channels": ["feishu", "email"]
}
}
}
4.4.2 条件分支
{
"steps": [
{
"id": "check-condition",
"type": "condition",
"branches": [
{
"condition": "${weather.result.condition == 'rain'}",
"steps": [
{
"id": "rain-alert",
"type": "message",
"action": "send",
"params": {
"content": "今天有雨,记得带伞!"
}
}
]
},
{
"condition": "${weather.result.condition == 'sunny'}",
"steps": [
{
"id": "sunny-tip",
"type": "message",
"action": "send",
"params": {
"content": "今天天气晴朗,适合户外活动"
}
}
]
}
]
}
]
}
4.4.3 并行执行
{
"steps": [
{
"id": "parallel-checks",
"type": "parallel",
"tasks": [
{
"id": "check-email",
"type": "email",
"action": "listUnread"
},
{
"id": "check-calendar",
"type": "calendar",
"action": "listEvents"
},
{
"id": "check-weather",
"type": "weather",
"action": "getCurrent"
}
]
}
]
}
5. 实战案例
5.1 案例一:智能日程助手
场景描述
创建一个智能日程助手,每天早上检查日程并提醒,会议前 15 分钟再次提醒。
配置实现
{
"cron": {
"jobs": [
{
"id": "morning-agenda",
"schedule": "0 8 * * 1-5",
"message": "检查今日日程,生成日程摘要并发送到飞书",
"channel": "feishu"
},
{
"id": "meeting-reminder",
"schedule": "*/15 9-18 * * 1-5",
"message": "检查未来15分钟是否有会议,如有则发送提醒"
}
]
}
}
HEARTBEAT.md 配置
# 日程助手心跳配置
## 检查频率
– 每次心跳都检查日程
– 安静时间(22:00-07:00)跳过
## 检查内容
1. 获取未来 2 小时内的日程
2. 如果有即将开始的会议(< 15 分钟),立即提醒
3. 如果今天有重要事件,早上提醒
## 输出格式
– 会议提醒:📅 **会议提醒** – [会议名称] – [剩余时间]
– 日程摘要:📋 **今日日程** – 列出所有会议
5.2 案例二:自动化内容发布
场景描述
每天定时收集 AI 行业资讯,生成文章并发布到微信公众号和小红书。
工作流配置
{
"workflow": {
"id": "auto-publish",
"name": "自动化内容发布",
"trigger": {
"type": "cron",
"schedule": "0 9 * * *"
},
"steps": [
{
"id": "collect-news",
"type": "web-search",
"action": "search",
"params": {
"queries": ["AI 最新进展", "人工智能行业动态", "大模型新闻"],
"sources": ["google", "bing"],
"maxResults": 20
}
},
{
"id": "filter-content",
"type": "llm",
"action": "filter",
"params": {
"model": "claude-3-sonnet",
"criteria": "相关性 > 0.7 且 时效性 > 0.8"
}
},
{
"id": "generate-article",
"type": "llm",
"action": "generate",
"params": {
"model": "claude-3-opus",
"template": "wechat-article",
"style": "专业但易懂"
}
},
{
"id": "create-cover",
"type": "image",
"action": "generate",
"params": {
"prompt": "AI technology abstract background",
"style": "modern"
}
},
{
"id": "publish-wechat",
"type": "wechat",
"action": "publish",
"params": {
"title": "${generate-article.title}",
"content": "${generate-article.content}",
"cover": "${create-cover.url}"
}
},
{
"id": "publish-xhs",
"type": "xiaohongshu",
"action": "publish",
"params": {
"title": "${generate-article.title}",
"content": "${generate-article.summary}",
"images": ["${create-cover.url}"]
}
}
]
}
}
5.3 案例三:智能邮件管理
场景描述
自动检查邮件,识别重要邮件并分类处理,发送摘要通知。
HEARTBEAT.md 配置
# 邮件管理心跳配置
## 检查频率
– 邮件检查:每 4 小时
– 紧急邮件:实时推送
## 检查内容
### 邮件优先级判断
1. 来自重要联系人(客户、老板)→ 高优先级
2. 标题包含 [紧急]、[重要] → 高优先级
3. 邮件列表订阅 → 低优先级
4. 自动化通知 → 低优先级
### 处理动作
– 高优先级:立即通知用户
– 中优先级:加入待办清单
– 低优先级:归档处理
## 输出规则
– 紧急邮件:🔴 **紧急邮件** – [发件人] – [主题摘要]
– 普通邮件:📧 **未读邮件** – [数量] 封,其中 [N] 封重要
状态追踪文件
{
"lastChecks": {
"email": 1703275200
},
"processedEmails": [
"msg-id-1",
"msg-id-2"
],
"importantContacts": [
"boss@company.com",
"client@example.com"
]
}
5.4 案例四:多时区日程协调
场景描述
团队成员分布在不同时区,自动协调会议时间并发送时区转换提醒。
Cron 配置
{
"cron": {
"timezone": "UTC",
"jobs": [
{
"id": "meeting-prep-beijing",
"schedule": "0 9 * * *",
"message": "北京团队:检查今日跨国会议,提供时区转换",
"timezone": "Asia/Shanghai"
},
{
"id": "meeting-prep-nyc",
"schedule": "0 9 * * *",
"message": "纽约团队:检查今日跨国会议,提供时区转换",
"timezone": "America/New_York"
},
{
"id": "meeting-prep-london",
"schedule": "0 9 * * *",
"message": "伦敦团队:检查今日跨国会议,提供时区转换",
"timezone": "Europe/London"
}
]
}
}
6. 最佳实践与注意事项
6.1 设计原则
6.1.1 任务粒度
┌─────────────────────────────────────────────────────────────────┐
│ 任务粒度选择指南 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 任务类型 粒度建议 示例 │
│ ───────────────────────────────────────────────── │
│ 监控检查 细粒度 每次检查一个来源 │
│ 数据处理 中粒度 一个处理流程 │
│ 报告生成 粗粒度 完整报告 │
│ 系统维护 细粒度 单一维护操作 │
│ │
│ 💡 原则:小而专注的任务更易于调试和维护 │
│ │
└─────────────────────────────────────────────────────────────────┘
6.1.2 错误处理策略
## 错误处理分级
### 致命错误(Critical)
– 立即停止工作流
– 发送紧急通知
– 记录详细日志
### 可恢复错误(Recoverable)
– 尝试重试(最多 3 次)
– 使用备用方案
– 记录警告日志
### 警告(Warning)
– 继续执行
– 记录信息日志
– 最终报告中提及
### 忽略(Ignore)
– 静默处理
– 记录调试日志
6.2 性能优化
6.2.1 避免过度轮询
{
"heartbeat": {
"checkIntervals": {
"email": 14400,
"calendar": 7200,
"weather": 28800,
"social": 43200
}
}
}
6.2.2 批量处理
# 推荐:批量检查
每次心跳检查多个来源(邮件、日程、天气)
减少 API 调用次数
# 不推荐:单独任务
为每个来源创建独立的 Cron 任务
增加系统负载
6.2.3 智能跳过
{
"skipConditions": {
"quietHours": {
"start": "23:00",
"end": "08:00"
},
"weekends": true,
"holidays": true,
"outOfOffice": true
}
}
6.3 安全考虑
6.3.1 权限控制
{
"permissions": {
"email": {
"read": true,
"send": false
},
"calendar": {
"read": true,
"write": false
},
"files": {
"read": true,
"write": ["~/reports/*"],
"delete": false
}
}
}
6.3.2 敏感信息处理
## 敏感信息处理规则
1. 不在日志中记录敏感信息
2. 使用环境变量存储 API 密钥
3. 对输出内容进行脱敏处理
4. 定期审计任务权限
6.4 监控与调试
6.4.1 日志记录
{
"logging": {
"level": "info",
"format": "json",
"outputs": ["file", "console"],
"retention": "30d"
}
}
6.4.2 性能指标
{
"metrics": {
"trackExecutionTime": true,
"trackSuccessRate": true,
"trackResourceUsage": true,
"alertThreshold": {
"executionTime": 60000,
"successRate": 0.9
}
}
}
6.5 故障排查清单
┌─────────────────────────────────────────────────────────────────┐
│ 故障排查清单 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ □ Cron 任务未执行 │
│ ├─ 检查任务是否启用(enabled: true) │
│ ├─ 检查时区设置是否正确 │
│ ├─ 检查 cron 表达式语法 │
│ └─ 检查系统日志是否有错误 │
│ │
│ □ Heartbeat 未触发 │
│ ├─ 检查 HEARTBEAT.md 是否存在 │
│ ├─ 检查是否在安静时间段 │
│ ├─ 检查上次心跳时间 │
│ └─ 检查主会话是否活跃 │
│ │
│ □ 任务执行失败 │
│ ├─ 检查 API 凭据是否有效 │
│ ├─ 检查网络连接 │
│ ├─ 检查目标服务是否可用 │
│ └─ 检查任务参数是否正确 │
│ │
│ □ 输出未发送到通道 │
│ ├─ 检查通道配置是否正确 │
│ ├─ 检查消息格式是否符合要求 │
│ ├─ 检查通道权限 │
│ └─ 检查是否有频率限制 │
│ │
└─────────────────────────────────────────────────────────────────┘
附录
A. Cron 表达式速查表
┌────────────────────────────────────────────────────────────────┐
│ Cron 表达式速查表 │
├────────────────────────────────────────────────────────────────┤
│ │
│ 字段位置: │
│ ┌───────────── 分钟 (0-59) │
│ │ ┌───────────── 小时 (0-23) │
│ │ │ ┌───────────── 日期 (1-31) │
│ │ │ │ ┌───────────── 月份 (1-12) │
│ │ │ │ │ ┌───────────── 星期 (0-6, 0=周日) │
│ │ │ │ │ │ │
│ * * * * * │
│ │
│ 特殊字符: │
│ * 任意值 │
│ , 值列表 (1,3,5) │
│ – 范围 (1-5) │
│ / 步长 (*/5 每 5 单位) │
│ │
│ 常用示例: │
│ ─────────────────────────────────────────────────── │
│ 0 * * * * 每小时整点 │
│ */15 * * * * 每 15 分钟 │
│ 0 9 * * 1-5 工作日早 9 点 │
│ 0 0 1 * * 每月 1 号午夜 │
│ 0 18 * * 5 每周五下午 6 点 │
│ 0 9,12,18 * * * 每天 9 点、12 点、18 点 │
│ │
└────────────────────────────────────────────────────────────────┘
B. HEARTBEAT.md 模板
# Heartbeat 配置
## 安静时间
– 开始:23:00
– 结束:08:00
– 规则:安静时间内返回 HEARTBEAT_OK
## 检查任务
### 邮件检查
– 频率:每 4 小时
– 检查项:未读邮件、重要邮件
– 输出:仅在有重要邮件时通知
### 日程检查
– 频率:每 2 小时
– 检查项:未来 24 小时内的日程
– 输出:即将开始的会议(< 2 小时)
### 天气检查
– 频率:每天早上
– 检查项:今日天气、异常天气预警
– 输出:仅在异常天气时通知
### 社交媒体
– 频率:每 12 小时
– 检查项:重要提及、互动提醒
– 输出:仅重要内容
## 输出规则
1. 安静时间不输出
2. 无重要内容返回 HEARTBEAT_OK
3. 保持消息简洁
4. 优先级排序:紧急 > 重要 > 一般
C. 工作流配置模板
{
"workflow": {
"id": "template-workflow",
"name": "工作流模板",
"version": "1.0.0",
"description": "工作流配置模板",
"trigger": {
"type": "cron | event | manual | webhook",
"schedule": "0 9 * * *"
},
"variables": {
"timezone": "Asia/Shanghai",
"outputPath": "/reports"
},
"steps": [
{
"id": "step-id",
"name": "步骤名称",
"type": "action-type",
"action": "action-name",
"params": {},
"condition": "${variable} == 'value'",
"onError": "continue | stop | retry"
}
],
"errorHandling": {
"strategy": "continue",
"maxRetries": 3,
"retryDelay": 60,
"notifications": {
"onSuccess": false,
"onFailure": true,
"channels": ["feishu"]
}
},
"output": {
"type": "message | file | webhook",
"format": "markdown | json | html",
"destination": "channel-id | file-path | url"
}
}
}
总结
OpenClaw 的定时任务和自动化工作流为 AI 助手提供了强大的主动性能力。通过合理配置 Cron 和 Heartbeat,可以构建高效、可靠的自动化系统:
| 定时提醒 | ✅ 精确时间触发 | ✅ 周期检查 |
| 数据处理 | ✅ 独立执行 | ✅ 上下文感知 |
| 条件检查 | ⚠️ 需脚本支持 | ✅ 原生智能判断 |
| 批量任务 | ⚠️ 需合并配置 | ✅ 天然支持 |
| 错误恢复 | ✅ 可配置重试 | ✅ 上下文恢复 |
选择合适的机制,遵循最佳实践,可以让 OpenClaw 成为真正智能的个人助理。





