词元之母TOK.MOM - 平台充值汇率 1:1 即 1 人民币充值到账 1 美元,支持一个 Key 调用近 600+ 海内外模型,限时特价模型低至 1 折,欢迎上岸!
🎯 学习目标:理解 Webhook 的工作原理,并搭建一个 GitHub PR/Issue 分诊机器人,自动将代码评审建议推送到 Telegram 或飞书。
Cron/Heartbeat: 你 → 每隔一段时间 → 问有什么新消息?
Webhook: 外部系统 → 事件发生时 → 主动推送给你~/.openclaw/openclaw.json,添加 hooks 配置块:{
"hooks": {
"enabled": true,
// 用于验证请求合法性的共享密钥,不能为空
"token": "your-secret-token-here",
"path": "/hooks",
// 默认会话 key,所有 hook 触发的 Agent 共用这个会话隔离空间
"defaultSessionKey": "hook:github",
"allowRequestSessionKey": false,
"allowedSessionKeyPrefixes": ["hook:"],
// 只允许路由到 main 和 hooks 这两个 Agent
"allowedAgentIds": ["main", "hooks"]
}
}~/.zshrc 或 ~/.bashrc):POST http://127.0.0.1:18789/hooks/{mapping名称} 端点了。例如,当你在后面的 Step 3 中添加名为 github 的 mapping 后,对应端点就是 /hooks/github。~/.openclaw/workspace-hooks/ 下初始化一套独立的工作区。接下来为它配置专业人格,编辑 ~/.openclaw/workspace-hooks/SOUL.md:hooks.mappings 功能允许你把任意 HTTP payload 转换成 Agent 可以理解的指令。这是整个流程的核心配置。openclaw.json 中添加 mappings 字段:{
"hooks": {
"enabled": true,
"token": "your-secret-token-here",
"path": "/hooks",
"defaultSessionKey": "hook:github",
"allowRequestSessionKey": false,
"allowedSessionKeyPrefixes": ["hook:"],
"allowedAgentIds": ["main", "hooks"],
"mappings": [
{
"name": "github",
"action": "agent",
// 路由到专门的 hooks Agent
"agentId": "hooks",
// 分析完成后推送到 Telegram(改成 "feishu" 即可切换到飞书)
"deliver": true,
"channel": "telegram",
// 用 {{}} 模板语法从 GitHub payload 中提取字段,组装成 messageTemplate
"messageTemplate": "请对以下 GitHub 事件进行分诊:\n\n类型:{{action}} {{pull_request.title}}{{issue.title}}\n作者:{{pull_request.user.login}}{{issue.user.login}}\n仓库:{{repository.full_name}}\n链接:{{pull_request.html_url}}{{issue.html_url}}\n描述:{{pull_request.body}}{{issue.body}}"
}
]
}
}模板语法说明:字段名是 messageTemplate(不是message)。{{pull_request.title}}会从 GitHub 发来的 JSON payload 中提取对应字段。PR 事件和 Issue 事件的 payload 结构不同,{{pull_request.title}}{{issue.title}}这种写法是把两个字段拼在一起——实际只有一个会有值,另一个为空,所以结果是对的。
127.0.0.1:18789(本机回环),无法被外网直接访问。建议用 nginx 在 80 端口接收外部请求,再转发给本机的 18789。安全性说明:这个方案的安全边界依赖 hooks.token。每个请求必须携带正确的Authorization: Bearer <token>才会被处理,错误 token 会触发 429 限速。只要 token 足够随机(openssl rand -hex 24生成),暴力破解的成本极高。/hooks/以外的路径不会被 nginx 转发,其余端口也保持关闭。
http://你的服务器IP/hooks/githubapplication/jsonAuthorization 头承担)Let me select individual events,勾选:ping 事件测试连通性,你可以在 Webhooks 页面看到绿色勾表示成功。curl 模拟 GitHub 发来的 payload:200 OK📋 feat: 新增用户认证模块,使用 JWT
🔴 优先级:紧急
- 判断依据:涉及认证机制的破坏性变更,移除了旧 session 系统
⚠️ 风 险点:
- JWT 密钥管理:需确认 secret 是否通过环境变量注入,不能硬编码
- 向后兼容性:移除 session 机制会导致已登录用户被强制登出
- /api/token 端点安全:需检查是否有速率限制防止暴力破解
💬 建议回复:
感谢贡献!这个 PR 引入了认证机制的重要变更。在合并前,能否确认:1)JWT secret 的存储方式;2)是否有迁移方案避免现有用户被登出;3)新端点是否已有限流保护?
401 UnauthorizedAuthorization: Bearer <token> 的 token 值是否与配置一致400 Bad RequestContent-Type: application/json 是否已设置jq 校验)openclaw.json 中 deliver: true 和 channel 已正确设置channels 中配置并正常工作openclaw gateway logs 查看实时日志openclaw.json 中启用 hooks,重启后用 Step 5 的 curl 命令测试 /hooks/github 端点能正常返回 200channel 字段,尝试同时推送到两个渠道完整配置参考: examples/webhooks/github-pr-triage.json