自动化
这一课你将能做到
- 用
openclaw automations(或openclaw cron)创建定时任务 - 配置 webhook 接收外部事件并触发 bot 动作
- 理解 hooks 与 heartbeats 在自动化体系中的角色
为什么要学
团队里最有价值的 bot 不是「你问它答」,而是「不用你问,它主动做」:每天早上 9 点发昨日 PR 汇总、收到 GitHub webhook 就自动评审、每小时检查一次服务健康。这一课把 bot 从「被动问答机」升级为「主动同事」。
人话:自动化是 OpenClaw 的「闹钟」和「神经反射」——到点做事,遇事反应。
先建立图像
触发源(Trigger)
├── Cron:定时触发(每天 9:00、每小时、每周一)
├── Webhook:外部事件(GitHub PR、CI 完成、监控告警)
├── Hook:内部事件(消息收到、任务完成、错误发生)
└── Heartbeat:周期自检(每 5 分钟检查一次状态)
│
▼
OpenClaw Gateway ──→ 路由到指定 Agent
│
▼
执行动作
├── 生成文本回复(发消息到 Slack/Telegram)
├── 调用工具(执行脚本、查 API)
└── 调用 webhook(通知外部系统)
跟着做
步骤 1:创建第一个定时任务
# 每天早上 9 点发晨报
openclaw automations create "0 9 * * *" \
"汇总昨天到今天的主要变更,发晨报" \
--name "Morning Brief" \
--channel telegram \
--to "-1001234567890"
步骤 2:创建带时区的定时任务
# 每周一到五下午 6 点发部署汇总(上海时区)
openclaw automations create "0 18 * * 1-5" \
"Summarize today's deploys as JSON." \
--name "Deploy Digest" \
--tz "Asia/Shanghai" \
--webhook "https://hooks.slack.com/services/XXX/YYY/ZZZ"
步骤 3:查看与管理任务
openclaw automations list
openclaw automations list --json
# 查看任务执行历史
openclaw automations history --name "Morning Brief"
步骤 4:配置 Webhook 接收外部事件
编辑 ~/.openclaw/openclaw.json:
{
"webhooks": {
"github-pr": {
"path": "/webhooks/github-pr",
"agentId": "reviewer",
"secret": "${GITHUB_WEBHOOK_SECRET}"
}
}
}
然后 GitHub 仓库设置 Webhook URL 为 https://your-server:18789/webhooks/github-pr,事件触发时自动路由到 reviewer agent。
步骤 5:配置 Hook(内部事件)
{
"hooks": {
"onMessage": {
"enabled": true,
"script": "~/.openclaw/hooks/log-message.sh"
}
}
}
步骤 6:查看自动化 CLI 帮助
openclaw automations --help
openclaw hooks --help
openclaw webhooks --help
讲清楚要点
- cron 表达式是标准五字段:分 时 日 月 周,
0 9 * * *是每天 9 点,*/15 * * * *是每 15 分钟。--tz指定时区,避免服务器时区与业务时区不一致。 - webhook 需要 secret 验证:外部系统(GitHub、GitLab)推事件时带 secret,Gateway 校验后才执行,防伪造事件攻击。
- hook 是轻量脚本:内部事件触发时执行本地脚本,适合日志记录、简单通知、状态同步,不适合复杂逻辑。
- heartbeat 是 agent 的周期自检:配置后 agent 定期「醒来」检查状态(比如「检查是否有未读告警」),有异常才发消息,正常则静默。
- 任务失败有告警配置:
cron.failureAlert可配置失败时通知哪个渠道、哪个人,避免任务静默失败。
你可能会懵的地方
-
cron 和 heartbeat 什么区别? cron 是「到点执行固定动作」;heartbeat 是「定期检查状态,有异常才动作」。cron 是 schedule-driven,heartbeat 是 condition-driven。一个晨报用 cron,一个告警检查用 heartbeat。
-
webhook 和 hook 什么区别? webhook 是「外部系统推事件进来」;hook 是「内部事件发生时执行脚本」。一个是入口,一个是出口/副作用。
-
定时任务执行时 bot 的上下文是什么? 定时任务会创建新会话,agent 读取 workspace 和 memory,但没有「用户消息历史」。任务 prompt 要自包含,别写「回复刚才那个问题」。
-
任务执行失败会重试吗? 会,有重试策略。连续失败会进入告警流程(若配置了
cron.failureAlert)。可用automations history查看失败原因。 -
如何调试 webhook 不触发? 确认 Gateway 绑定了非 loopback 地址(webhook 需要外部可达);确认 secret 匹配;用
openclaw logs --tail 50看请求日志;用curl手动模拟 webhook 调用测试。
错法对照
| 错法 | 问题 | 正解 |
|---|---|---|
| cron 表达式不写时区 | 服务器 UTC 时区导致 9 点变 17 点 | --tz "Asia/Shanghai" 明确指定 |
| webhook 不配 secret | 任何人都能伪造事件触发 bot | 配置 secret 并校验 |
| 任务 prompt 写「回复用户」 | 定时任务没有用户上下文 | prompt 自包含:「生成晨报并发送到 Slack #general」 |
| hook 里写复杂业务逻辑 | 脚本超时、难调试、难维护 | hook 只做轻量通知,复杂逻辑走 skills 或外部服务 |
| 任务失败不管 | 静默失败,晨报三天没发没人知道 | 配置 cron.failureAlert 到值班渠道 |
卡点急救
- 定时任务没执行:
automations list确认任务存在且启用;automations history看最近执行记录;检查 Gateway 是否在运行(gateway status)。 - webhook 收不到:确认 Gateway 监听地址非 127.0.0.1;确认防火墙放行;用
curl -X POST本地测试 webhook 端点。 - 任务执行了但没发消息:确认
--channel和--to参数正确;确认渠道状态正常(channels status --probe);看死信队列(channels dead-letters list)。
面试常问
-
OpenClaw 自动化体系的四种触发方式及适用场景? Cron:固定时间表,如晨报、周报;Webhook:外部系统事件,如 GitHub PR、CI 完成;Hook:内部事件副作用,如消息日志、状态同步;Heartbeat:周期条件检查,如告警轮询、健康检查。四者覆盖「定时」「事件」「内部联动」「条件轮询」四大自动化需求。
-
如何保证 webhook 安全? 三层:传输层 HTTPS;验证层 secret 校验(HMAC 签名);权限层 webhook 触发的 agent 操作仍需遵守该 agent 的工具权限和审批规则。secret 用环境变量注入,不写死配置。
-
定时任务与 CI/CD 定时任务的区别? CI/CD 定时任务是确定性流水线(构建、测试、部署),失败即失败;OpenClaw 定时任务是 LLM agent 执行,结果有不确定性,适合「生成摘要」「撰写报告」「智能提醒」等需要理解力的场景。两者互补:CI 管确定性,OpenClaw 管理解性。
自测三问
- cron、webhook、hook、heartbeat 四者的触发源分别是什么?
- 为什么定时任务的 prompt 要自包含?
- webhook 的 secret 校验解决了什么安全问题?
小结一句话
自动化让 bot 主动工作:cron 管定时、webhook 管事件、hook 管联动、heartbeat 管巡检,四种触发覆盖团队所有「不用人催」的场景。
延伸
- 自动化概念
- Cron CLI 参考
- 下一课:安全——allowlist、审计、提示注入防护,把 bot 的权限关进笼子。