Webhook 是 OpenClaw 最强大的集成方式之一——任何能发 HTTP 请求的系统, 都可以触发你的 AI 助手执行任务。GitHub Push、Stripe 支付、监控告警…… 一个 Webhook 端点,连接所有系统。
核心原理
外部系统(GitHub/Stripe/任意服务)
|
| HTTP POST(携带事件数据)
v
OpenClaw Webhook 端点
|
| 验证签名 + 解析事件
v
AI 处理(Claude 分析事件内容)
|
| 执行动作(发通知/调用API/更新数据)
v
Telegram/Slack/邮件通知
基础配置
json
// ~/.openclaw/config.json
{
"webhooks": {
"enabled": true,
"port": 3001,
"basePath": "/webhook",
"endpoints": [
{
"path": "/github",
"secret": "你设置的github-webhook-secret",
"handler": "github"
},
{
"path": "/stripe",
"secret": "whsec_你的stripe-webhook-secret",
"handler": "stripe"
},
{
"path": "/custom",
"token": "你自定义的bearer-token",
"handler": "custom"
}
]
}
}启动后,Webhook 端点地址:
https://你的域名/webhook/githubhttps://你的域名/webhook/stripehttps://你的域名/webhook/custom
场景 1:GitHub Webhook
配置
GitHub 仓库 Settings → Webhooks → Add webhook:
- Payload URL:
https://你的域名/webhook/github - Content type:
application/json - Secret: 与 config 里一致
- 事件:
push,pull_request,issues,workflow_run
SOUL.md 处理逻辑
markdown
## GitHub Webhook 处理规则
### push 事件
- 推送到 main 分支:发 Telegram 通知(推送人 + commit 摘要)
- 推送到 release/* 分支:发告警到 #releases 频道
### pull_request 事件
- opened:AI 分析 diff,生成代码审查要点,发到 Telegram
- merged:汇总本次 PR 的改动,更新项目 CHANGELOG 草稿
### workflow_run 事件
- failure:立刻发告警,包含失败的 step 和错误摘要
- success(main 分支):发部署成功通知场景 2:Stripe 支付 Webhook
markdown
## Stripe Webhook 处理规则
### payment_intent.succeeded
提取:金额、用户邮箱、订单ID
动作:
1. 更新 Notion 订单数据库状态为「已付款」
2. 发 Telegram 通知:新订单 $金额(用户邮箱)
3. 触发发货流程(POST 到内部 API)
### payment_intent.payment_failed
提取:失败原因、用户邮箱
动作:
1. 发 Telegram 告警(需要人工处理)
2. 记录到错误日志数据库
### customer.subscription.deleted
动作:
1. 发 Telegram 通知(哪个用户取消了,订阅了多久)
2. 标记用户状态为「已取消」场景 3:自定义系统 Webhook
任何内部系统都可以向 OpenClaw 发事件:
bash
# 服务器监控系统发告警
curl -X POST https://你的openclaw域名/webhook/custom -H "Authorization: Bearer 你的token" -H "Content-Type: application/json" -d '{
"event": "server_alert",
"severity": "critical",
"server": "prod-web-01",
"metric": "cpu_usage",
"value": 95.2,
"threshold": 80
}'markdown
## 自定义 Webhook 处理规则
### server_alert 事件
- severity=critical:立刻发 Telegram 告警 + @oncall
- severity=warning:记录日志,每小时汇总一次
- 连续 3 次同一告警:升级为 critical
### deploy_complete 事件
- 发部署通知:版本号、环境、耗时、操作人
### backup_failed 事件
- 立刻发告警,标记需要手动干预本地调试(内网穿透)
方案 1:ngrok
bash
# 安装 ngrok
brew install ngrok
# 暴露本地 3001 端口
ngrok http 3001
# 获得临时公网 URL:https://xxxx.ngrok.io
# 在 GitHub/Stripe 填这个 URL + /webhook/github方案 2:Cloudflare Tunnel(免费,更稳定)
bash
# 安装 cloudflared
brew install cloudflared
# 创建免费隧道
cloudflared tunnel --url http://localhost:3001
# 获得固定 URL:https://xxx.trycloudflare.comWebhook 签名验证原理
OpenClaw 自动验证签名,防止伪造请求:
python
# GitHub 签名验证示例(OpenClaw 内部处理,无需手动写)
import hmac, hashlib
def verify_github_signature(payload: bytes, signature: str, secret: str) -> bool:
expected = "sha256=" + hmac.new(
secret.encode(), payload, hashlib.sha256
).hexdigest()
return hmac.compare_digest(expected, signature)只有签名匹配的请求才会被处理,其余返回 401。
常见问题
Q:Webhook 没有触发
检查:1) URL 是否正确;2) 签名 Secret 是否一致;3) 查看 openclaw logs 是否有收到请求
Q:本地开发没有公网 IP 使用 ngrok 或 Cloudflare Tunnel 暴露本地端口,见上方教程
Q:怎么重放历史 Webhook Stripe 控制台可以重发;GitHub 在 Webhook 设置页面有 Recent Deliveries,可重发
来源:OpenClaw 官方文档