## 自动化机制选择指南
OpenClaw 提供了五种自动化机制,适用于不同场景。先看一张决策表,帮你快速选择:
| 机制 | 触发方式 | 精度 | 适用场景 | 复杂度 |
|------|----------|------|----------|--------|
| **Cron** | 精确定时 | 分钟级 | 每天 9 点发报告、每周一清理日志 | ⭐⭐ |
| **Heartbeat** | 近似周期 | ~30 分钟 | 定期检查收件箱、监控通知 | ⭐ |
| **Hooks** | 事件驱动 | 实时 | 新会话初始化、会话压缩后处理 | ⭐⭐⭐ |
| **Standing Orders** | 持久指令 | 每次会话 | "每次回答都用中文"、"总是先搜索再回答" | ⭐ |
| **Task Flow** | 多步骤编排 | 按步骤 | 复杂工作流、需要修订跟踪的任务 | ⭐⭐⭐⭐ |
简单来说:
- 需要**精确时间**触发 → 用 **Cron**
- 需要**定期巡检**但不要求精确 → 用 **Heartbeat**
- 需要**响应特定事件** → 用 **Hooks**
- 需要**永久生效的行为规则** → 用 **Standing Orders**
- 需要**多步骤复杂流程** → 用 **Task Flow**
## Cron 定时任务
Cron 是最直观的定时机制,让智能体在指定时间自动执行任务。
### 基本用法
```bash
# 添加一个定时任务
openclaw cron add "每天早上 9 点给我发天气预报" --schedule "0 9 * * *"
# 查看所有定时任务
openclaw cron list
# 删除定时任务
openclaw cron remove
```
### Cron 表达式速查
```
┌───────────── 分钟 (0-59)
│ ┌───────────── 小时 (0-23)
│ │ ┌───────────── 日 (1-31)
│ │ │ ┌───────────── 月 (1-12)
│ │ │ │ ┌───────────── 星期 (0-7, 0和7都是周日)
│ │ │ │ │
* * * * *
```
常用表达式:
| 表达式 | 含义 |
|--------|------|
| `0 9 * * *` | 每天早上 9:00 |
| `0 9 * * 1` | 每周一早上 9:00 |
| `0 9,18 * * *` | 每天 9:00 和 18:00 |
| `*/30 * * * *` | 每 30 分钟 |
| `0 0 1 * *` | 每月 1 号 0:00 |
| `0 9 * * 1-5` | 工作日每天 9:00 |
### 一次性提醒
如果只需要一次性提醒(不是周期性的),使用 `--at` 参数:
```bash
# 明天下午 3 点提醒我开会
openclaw cron add "提醒我下午 3 点有产品评审会议" --at "2025-01-16 15:00"
```
### 输出到渠道或 Webhook
定时任务的输出可以发送到指定渠道:
```bash
# 输出到 Telegram
openclaw cron add "检查服务器状态并报告" --schedule "0 */6 * * *" --channel telegram
# 输出到 Webhook
openclaw cron add "生成日报" --schedule "0 18 * * 1-5" --webhook "https://hooks.example.com/daily"
```
## Heartbeat 周期检查
Heartbeat 是一种"近似周期"机制,默认每 30 分钟触发一次。它不像 Cron 那样精确,但更适合"定期巡检"类任务。
### 工作原理
1. Gateway 每隔约 30 分钟触发一次 Heartbeat
2. 智能体读取 `HEARTBEAT.md` 文件中的检查清单
3. 逐项执行检查任务
4. 将结果汇总或发送通知
### 配置 HEARTBEAT.md
在工作区中创建 `HEARTBEAT.md`:
```markdown
# Heartbeat 检查清单
## 收件箱检查
检查邮箱是否有新邮件,如果有重要邮件,通过 Telegram 通知我。
## 日历提醒
检查接下来 2 小时内是否有会议,如果有,提前提醒我。
## 通知汇总
检查 GitHub 通知,汇总未读的 PR 评审请求。
```
### 调整 Heartbeat 间隔
在 `openclaw.json` 中配置:
```json
{
"heartbeat": {
"interval": 1800,
"enabled": true
}
}
```
`interval` 单位为秒,默认 1800(30 分钟)。
### 适用场景
- **收件箱监控**:定期检查邮件,汇总重要信息
- **日历提醒**:提前通知即将到来的会议
- **通知聚合**:批量处理 GitHub/GitLab 通知
- **状态巡检**:定期检查服务器或服务状态
## Hooks 事件脚本
Hooks 是事件驱动的自动化机制,当特定事件发生时自动执行脚本。
### 支持的事件类型
| 事件 | 触发时机 | 典型用途 |
|------|----------|----------|
| `/new` | 新会话创建 | 初始化会话、加载上下文 |
| `/reset` | 会话重置 | 清理临时数据 |
| `/stop` | 会话结束 | 保存会话摘要 |
| `compaction` | 会话压缩完成 | 压缩后处理、更新记忆 |
| `gateway.start` | Gateway 启动 | 初始化检查、发送上线通知 |
| `message.pre` | 消息处理前 | 消息预处理、过滤 |
| `message.post` | 消息处理后 | 日志记录、统计 |
| `tool.pre` | 工具调用前 | 权限检查、参数验证 |
| `tool.post` | 工具调用后 | 结果处理、审计日志 |
### Hook 文件结构
Hooks 存放在工作区的 `hooks/` 目录下:
```
~/.openclaw/workspace/
└── hooks/
├── on-new-session.md # /new 事件
├── on-compaction.md # 压缩事件
└── on-gateway-start.md # Gateway 启动事件
```
### 创建第一个 Hook
创建一个新会话初始化 Hook:
```markdown
---
event: /new
---
# 新会话初始化
当新会话开始时:
1. 读取 MEMORY.md 中的用户偏好
2. 检查今天的日历安排
3. 用一句话问候用户,提及今天的重要事项
```
### 按事件类型过滤
一个 Hook 文件可以监听多个事件:
```markdown
---
event:
- /new
- /reset
---
# 会话初始化/重置
无论是新会话还是重置会话,都执行以下初始化步骤...
```
### CLI 管理命令
```bash
# 列出所有 Hooks
openclaw hooks list
# 查看 Hook 详情
openclaw hooks show on-new-session
# 测试触发 Hook
openclaw hooks trigger on-new-session
```
## Standing Orders 持久指令
Standing Orders 是写在 `AGENTS.md` 中的永久指令,每次会话都会生效。它不是"定时"触发,而是"始终"生效。
### 使用方式
在 `AGENTS.md` 中添加持久指令:
```markdown
# Standing Orders
## 语言规则
- 始终使用中文回答
- 技术术语保留英文原文
- 代码注释用中文
## 行为规则
- 回答问题前先搜索最新信息
- 涉及文件操作时先确认路径
- 执行危险命令前必须征求确认
## 输出格式
- 代码块标注语言类型
- 长回答使用标题分段
- 列表不超过 10 项
```
### 与 Hooks 的区别
| 对比 | Standing Orders | Hooks |
|------|----------------|-------|
| 生效时机 | 每次会话的每条消息 | 特定事件触发时 |
| 定义位置 | AGENTS.md | hooks/ 目录下的独立文件 |
| 执行方式 | 作为系统提示词注入 | 作为独立任务执行 |
| 适用场景 | 行为规则、输出格式 | 初始化、清理、通知 |
## Task Flow 多步骤编排
Task Flow 适用于需要多个步骤、可能跨越多次对话的复杂任务。
### 基本概念
Task Flow 将一个大任务拆分为多个步骤,每个步骤可以:
- 依赖前一步的输出
- 需要人工确认后继续
- 自动跟踪修订历史
### 创建 Task Flow
```bash
# 创建一个新的 Task Flow
openclaw tasks create "部署新版本"
```
Task Flow 文件示例:
```markdown
# 部署新版本
## 步骤 1:代码检查
- [ ] 运行测试套件
- [ ] 检查 lint 错误
- [ ] 确认版本号已更新
## 步骤 2:构建
- [ ] 执行生产构建
- [ ] 验证构建产物
## 步骤 3:部署
- [ ] 备份当前版本
- [ ] 上传新版本到服务器
- [ ] 重启服务
## 步骤 4:验证
- [ ] 检查服务状态
- [ ] 运行冒烟测试
- [ ] 通知团队部署完成
```
### 修订跟踪
Task Flow 自动记录每个步骤的执行时间和结果,方便回溯:
```bash
# 查看 Task Flow 历史
openclaw tasks history "部署新版本"
# 查看某个步骤的详情
openclaw tasks show "部署新版本" --step 3
```
## 常用场景示例
### 每日报告
使用 Cron 每天下班前自动生成工作日报:
```bash
openclaw cron add "汇总今天的工作内容,生成日报发送到 Telegram" \
--schedule "0 18 * * 1-5" \
--channel telegram
```
### 收件箱监控
使用 Heartbeat 定期检查邮箱:
```markdown
# HEARTBEAT.md
## 邮件检查
每次 Heartbeat 时检查 Gmail 收件箱:
- 如果有标记为"紧急"的邮件,立即通过 WhatsApp 通知我
- 其他新邮件汇总为列表,等我主动询问时再报告
```
### 日历提醒
使用 Cron 在会议前提醒:
```bash
# 每天早上 8:30 检查今天的日程
openclaw cron add "检查今天的日历,列出所有会议和截止日期" \
--schedule "30 8 * * *"
```
### PR 审查通知
使用 Heartbeat 监控 GitHub PR:
```markdown
# HEARTBEAT.md
## GitHub PR 监控
检查我负责审查的 PR:
- 新的 PR 请求 → 通知我
- 已审查的 PR 有新提交 → 提醒我重新查看
- 超过 48 小时未审查的 PR → 发送紧急提醒
```
### Gateway 启动通知
使用 Hook 在 Gateway 启动时发送通知:
```markdown
---
event: gateway.start
---
# Gateway 启动通知
Gateway 启动后:
1. 检查所有渠道连接状态
2. 如果有渠道未连接,通过可用渠道通知我
3. 报告当前运行的智能体列表
```
## 组合使用
实际场景中,多种自动化机制经常组合使用:
```
Standing Orders(始终生效)
↓ 定义基本行为规则
Hooks(事件触发)
↓ 处理会话生命周期事件
Heartbeat(周期巡检)
↓ 定期检查外部状态
Cron(精确定时)
↓ 在特定时间执行任务
Task Flow(复杂编排)
↓ 管理多步骤工作流
```
比如一个完整的"每日工作助手"配置:
- **Standing Orders**:始终用中文回答,优先使用搜索工具
- **Hook(/new)**:新会话时自动加载今天的待办事项
- **Heartbeat**:每 30 分钟检查邮箱和日历
- **Cron**:每天 9:00 发送今日计划,18:00 发送日报
- **Task Flow**:管理周报编写流程
## 小结
OpenClaw 的自动化体系覆盖了从简单定时到复杂编排的各种需求:
- **Cron** 适合精确定时任务
- **Heartbeat** 适合周期性巡检
- **Hooks** 适合事件驱动的自动化
- **Standing Orders** 适合永久生效的行为规则
- **Task Flow** 适合多步骤复杂流程
根据实际需求选择合适的机制,或组合使用多种机制,让智能体真正成为你的自动化助手。
---
#OpenClaw自动化 #定时任务 #Cron #Heartbeat #龙虾技能库