深度

OpenClaw Hooks 自动化进阶:消息前后的智能拦截、转换与触发机制

OpenClaw Hooks(钩子)自动化系统进阶教程:Hooks 的触发时机(before-send/after-receive/on-tool-call)、用 Hooks 拦截消息并修改内容(自动翻译/过滤/格式化)、基于条件的 Hook 触发(渠道过滤/关键词匹配)、Hook 中调用外部 API(Notion 记录/Bark 通知/监控告警)、exec 工具二次确认 Hook,以及 Hooks 与 SOUL.md 和 Standing Orders 的优先级关系详解。

2026/3/263分钟 阅读ClaudeEagle

Hooks(钩子)是 OpenClaw 最强大的自动化原语—— 在消息流的每个关键节点插入自定义逻辑, 无需修改核心代码,就能改变 AI 的行为。

Hooks 触发时机

消息流: 用户发消息 ↓ [hook: on-message-receive] — 消息到达时 Gateway 处理 ↓ [hook: before-agent-run] — AI 开始处理前 AI 运行 ↓ [hook: on-tool-call] — AI 每次调用工具时 ↓ [hook: after-agent-run] — AI 完成处理后 回复用户 ↓ [hook: before-send] — 消息发出前 消息发出 ↓ [hook: on-error] — 发生错误时

基础 Hook 配置

json
{
  "hooks": {
    "on-message-receive": [
      {
        "name": "log-all-messages",
        "enabled": true,
        "action": "log",
        "level": "info"
      }
    ],
    "before-send": [
      {
        "name": "format-check",
        "enabled": true,
        "action": "transform",
        "script": "./hooks/format-check.js"
      }
    ]
  }
}

实战案例一:自动记录关键对话到 Notion

javascript
// hooks/save-to-notion.js
module.exports = async function afterAgentRun(context) {
  const { message, response, channel } = context;

  // 只记录包含特定关键词的对话
  const keywords = ['决定', '方案', 'plan', 'decision'];
  const isImportant = keywords.some(kw =>
    message.text.includes(kw) || response.text.includes(kw)
  );
  if (!isImportant) return;

  await fetch('https://api.notion.com/v1/pages', {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer ' + process.env.NOTION_TOKEN,
      'Notion-Version': '2022-06-28',
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      parent: { database_id: process.env.NOTION_DB_ID },
      properties: {
        Title: { title: [{ text: { content: message.text.slice(0, 50) } }] },
        Channel: { select: { name: channel } },
        Date: { date: { start: new Date().toISOString() } },
      }
    })
  });
};

配置:

json
{
  "hooks": {
    "after-agent-run": [
      {
        "name": "save-to-notion",
        "script": "./hooks/save-to-notion.js"
      }
    ]
  }
}

实战案例二:收到紧急关键词立即推送通知

javascript
// hooks/urgent-alert.js
module.exports = async function onMessageReceive(context) {
  const urgentKeywords = ['紧急', 'urgent', 'ASAP', '宕机', 'down'];
  const isUrgent = urgentKeywords.some(kw =>
    context.message.text.toLowerCase().includes(kw.toLowerCase())
  );
  if (!isUrgent) return;

  // 通过 Bark 推送到手机
  const key = process.env.BARK_KEY;
  const msg = encodeURIComponent(context.message.text.slice(0, 100));
  await fetch('https://api.day.app/' + key + '/紧急消息/' + msg);
};

实战案例三:exec 工具调用前需要二次确认

javascript
// hooks/exec-confirm.js
module.exports = async function onToolCall(context) {
  const { toolName, toolParams } = context;
  if (toolName !== 'exec') return;

  const dangerPatterns = ['rm ', 'drop ', 'delete ', 'format'];
  const isDangerous = dangerPatterns.some(p =>
    toolParams.command?.toLowerCase().includes(p)
  );

  if (isDangerous) {
    context.interrupt({
      message: '警告:AI 即将执行命令:' + toolParams.command + '\n确认执行请回复 confirm',
      waitFor: 'confirm',
      timeout: 30000
    });
  }
};

消息内容自动转换

javascript
// hooks/auto-translate-hint.js
// 收到英文消息时自动在前面加翻译提示
module.exports = async function onMessageReceive(context) {
  const text = context.message.text;
  const isEnglish = /^[\x00-\x7F]+$/.test(text) && text.length > 10;
  if (!isEnglish) return;
  context.message.text = '[以下是英文消息,请用中文回复]\n' + text;
};

条件触发:只在特定渠道生效

json
{
  "hooks": {
    "after-agent-run": [
      {
        "name": "save-to-notion",
        "script": "./hooks/save-to-notion.js",
        "conditions": {
          "channels": ["telegram", "slack"],
          "messageContains": ["决定", "方案", "plan"]
        }
      }
    ]
  }
}

Hook 执行优先级

SOUL.md(最高优先级,定义基础人格) ↓ Standing Orders(用户动态规则) ↓ Hooks(程序化拦截和转换) ↓ Agent 实际执行(最终行为)

来源:OpenClaw 官方文档 - docs.openclaw.ai/automation/hooks

相关文章推荐

深度Claude Code Hooks 深度参考:事件类型、配置结构与高级用法Claude Code Hooks 完整参考文档:17 种生命周期事件详解、三层嵌套配置结构、Matcher 正则表达式模式、Shell/HTTP/Prompt 三类处理器、MCP 工具 Hook 匹配、异步 Hook 配置,以及阻止危险命令的完整实战示例。2026/2/28深度OpenClaw Webhook 完全指南:接收任意平台事件触发 AI 自动化工作流OpenClaw Webhook 集成完整教程:配置 Webhook 端点接收外部事件、签名验证防伪造、GitHub/Stripe/自定义系统 Webhook 处理、事件解析与路由、基于 Webhook 的自动化工作流设计,以及内网穿透(ngrok/Cloudflare Tunnel)本地调试方案。2026/3/16深度Claude Code Hooks 完整参考:18 种 Hook 事件、配置 Schema、退出码与异步 HookClaude Code Hooks 完整技术参考:18 种 Hook 事件生命周期表(SessionStart/InstructionsLoaded/UserPromptSubmit/PreToolUse/PermissionRequest/PostToolUse/PostToolUseFailure/Notification/SubagentStart/SubagentStop/Stop/TeammateIdle/TaskCompleted/ConfigChange/WorktreeCreate/WorktreeRemove/PreCompact/SessionEnd)、配置结构(settings.json 完整 Schema)、四种 Hook 类型(command/http/prompt/agent)字段详解、Matcher 模式(工具/Bash 命令/MCP 服务器)、输入 stdin JSON 格式、退出码含义(0/2/非零)和每种事件退出码 2 效果、结构化 JSON 输出(permissionDecision/updatedInput/Stop decision/SessionStart env 注入)、异步 Hook(background: true 不阻塞/适用场景)、Prompt-based Hook、WorktreeCreate 自定义 worktree 和调试方法。2026/3/9深度OpenClaw 多 Gateway 架构完全指南:一台机器运行多个独立 AI 助手实例OpenClaw 多 Gateway(Multi-Gateway)架构完整教程:多实例的隔离优势、同一台机器运行多个 Gateway(不同端口/配置文件/workspace)、systemd 管理多个 Gateway 服务、Nginx 虚拟主机为每个实例分配独立域名、API Key 隔离与成本拆分、单机多实例 vs 多机方案对比,以及 Docker Compose 多容器隔离部署方案。2026/3/26深度OpenClaw 插件开发完全指南:从零构建自定义渠道和工具插件OpenClaw 插件(Plugin)开发完整教程:插件类型(渠道插件/工具插件/Provider插件)、插件的目录结构和 package.json 规范、使用 Plugin SDK 开发自定义消息渠道(实现 onMessage/sendMessage 接口)、开发自定义工具(Tool)的函数签名和参数 Schema、本地插件安装与调试(openclaw plugins install ./local-plugin)、发布到 npm 的规范要求(@openclaw/ 命名空间)、插件的权限声明(capabilities)、社区插件列表(Plugin Bundles)获取,以及常见插件开发错误和调试技巧。2026/3/25深度OpenClaw 安全威胁模型深度解析:MITRE ATLAS 框架下的 AI 助手攻防分析OpenClaw 安全架构深度分析:个人助手信任模型(单用户/单 Gateway 边界)、形式化验证的认证逻辑、基于 MITRE ATLAS 框架的 AI 系统威胁分类(直接提示注入/间接提示注入/工具滥用/数据泄露/会话劫持)、多租户共享 Gateway 的风险与安全边界说明、exec/browser/文件工具的权限最小化配置、频道白名单与沙箱配置对应的威胁缓解措施,以及 `openclaw security audit` 命令的使用方法。2026/3/24