你有没有想过,为什么你的 Agent 总是在「等命令」而不是「主动干活」?事件驱动就是答案。让 Agent 从被动变主动,从工具变同事。
OpenClaw 的事件系统由三个核心组件构成:
| 类型 | 触发方式 | 典型场景 |
|---|---|---|
| Hooks | Agent 生命周期事件 | 消息前后处理、状态变更 |
| Webhooks | 外部 HTTP 回调 | GitHub、飞书、Discord 集成 |
| Cron | 定时触发 | 日报、巡检、数据聚合 |
| Events | 内部事件广播 | 跨 Agent 通信、状态同步 |
Hooks 允许你在 Agent 生命周期的关键节点插入自定义逻辑:
# openclaw.config.yaml
hooks:
beforeMessage:
- script: ./hooks/validate-input.sh
- plugin: content-filter
afterMessage:
- script: ./hooks/log-response.sh
onError:
- script: ./hooks/error-handler.sh
onSessionStart:
- script: ./hooks/init-context.sh#!/bin/bash
# hooks/validate-input.sh
INPUT="$1"
MAX_LENGTH=10000
if [ ${#INPUT} -gt $MAX_LENGTH ]; then
echo "输入超过 $MAX_LENGTH 字符限制"
exit 1
fi
if echo "$INPUT" | grep -qiE "(password|secret|token)"; then
echo "输入包含敏感信息"
exit 1
fi
exit 0# openclaw.config.yaml
webhooks:
github:
secret: "${GITHUB_WEBHOOK_SECRET}"
events: [push, pull_request, issues]
handler: ./handlers/github-event.sh
feishu:
verification: "${FEISHU_VERIFICATION_TOKEN}"
events: [message, approval]
handler: ./handlers/feishu-event.sh#!/bin/bash
# handlers/github-event.sh
EVENT="$1"
PAYLOAD="$2"
case "$EVENT" in
push)
BRANCH=$(echo "$PAYLOAD" | jq -r '.ref')
[[ "$BRANCH" == "refs/heads/main" ]] && echo "🚀 main 有新提交"
;;
pull_request)
ACTION=$(echo "$PAYLOAD" | jq -r '.action')
[ "$ACTION" = "opened" ] && echo "📥 新 PR,开始审查..."
;;
esac# 每天早上 8 点生成日报
cron add --name "daily-report" \
--schedule "0 8 * * *" --tz "Asia/Shanghai" \
--payload "生成今日AI新闻日报"
# 每2小时检查系统状态
cron add --name "health-check" \
--schedule "0 */2 * * *" \
--payload "检查系统健康状态"GitHub Push → Webhook → Agent 代码审查 → 自动部署 → 通知
Cron 定时 → Agent 搜索热点 → 生成内容 → 多平台发布
Cron 巡检 → Agent 检查指标 → 异常时通知 → 自动修复