Webhook 通知
在系统设置中配置 Webhook 端点(地址、认证、请求头、超时与重试),发送测试请求,查看发送记录并设置自动清理。说明当前版本没有事件触发的自动推送。
概述
Webhook 用于向外部系统的 HTTP 地址发送请求。管理员在「系统设置」中维护 Webhook 配置,包含请求地址、方法、认证、请求头、超时和重试参数,并可以向该地址发送一次测试请求验证连通性。
当前版本的实际能力:
| 能力 | 状态 |
|---|---|
| 创建、编辑、启用、停用、删除 Webhook 配置 | 已提供 |
| 手动发送测试请求,查看响应状态与响应内容 | 已提供 |
| 发送记录列表、详情查看,按天数与条数自动清理 | 已提供 |
| 由平台事件(报表发布、留言、告警等)自动触发推送 | 当前版本未提供 |
| 直接对接钉钉、企业微信、飞书群机器人的专用适配 | 当前版本未提供,只能按对方的 HTTP 接口要求自行填写地址与请求头 |
| 签名认证(SIGNATURE)实际生成签名 | 当前版本未实现,选择后不会附加任何签名 |
也就是说,配置好的 Webhook 目前不会被平台事件自动调用,「测试」是唯一会发出请求的入口。需要事件通知的场景,请使用宿主事件在嵌入页面里接收报表事件,或由业务系统自己调用平台接口。
功能入口
系统 > 系统设置 > 「Webhook配置」 标签页,页面分三个面板:
| 面板 | 内容 |
|---|---|
| Webhook配置 | Webhook 列表,右上角 + 新增、刷新图标刷新 |
| 发送记录 | 发送日志列表与详情 |
| 清理配置 | 发送记录的自动清理规则 |
操作步骤
新增并测试 Webhook
- 在「Webhook配置」面板点击「新增Webhook配置」(或右上角
+),弹出「新增Webhook」对话框。 - 填写「名称」和「请求地址」,在地址输入框前选择请求方法(GET、POST、PUT、DELETE、PATCH)。
- 在「认证方式」选择对方接口要求的认证,并填写对应凭据。
- 按需添加「请求头」,选择「Content-Type」,调整「超时时间」「重试次数」「重试间隔」。
- 保持「启用」开启,点击保存,提示「创建成功」。
- 在列表中该行的操作里点击「测试」,提示「正在发送测试请求...」,随后显示「测试成功!响应状态: 200」这样的结果,或「测试失败」及错误原因。
注意:测试必须先保存配置。对话框里在未保存时点击测试会提示「请先保存Webhook配置后再测试」。
查看发送记录
在「发送记录」面板可以按关键字(Webhook 名称或 URL)和「发送状态」筛选,点击某条记录打开「Webhook调用详情」,含 Webhook 名称、状态、请求方法、响应状态、URL、耗时、重试次数、发送时间,以及「请求体」「响应体」「错误信息」页签。
发送状态有四种:待发送、发送中、成功、失败。
设置自动清理
在「清理配置」面板设置后点击「保存」:
| 属性 | 说明 | 取值/默认值 |
|---|---|---|
| 启用定时清理 | 开启后按计划自动清理过期记录 | 默认关闭 |
| 清理周期 | Cron 表达式,启用后出现 | 默认 0 0 3 * * ?(每天 3 点) |
| 最大保留天数 | 超过该天数的记录被清理 | 1 到 365,默认 30 |
| 最大保留记录数 | 超过该数量时删除最旧的记录 | 100 到 1000000,默认 10000 |
点击「立即清理」按上述保留规则立刻执行一次,确认后提示「已删除 N 条记录」。
属性/参数说明
| 属性 | 说明 | 取值/默认值 |
|---|---|---|
| 名称 | 配置名称 | 必填 |
| 请求地址 | 目标 URL | 必填,如 https://example.com/webhook |
| 请求方法 | HTTP 方法 | GET、POST、PUT、DELETE、PATCH;后端对其他值按 POST 处理 |
| 认证方式 | 见下表 | 默认无认证 |
| 请求头 | 自定义请求头,名称与值成对填写 | 可选 |
| Content-Type | 请求体类型 | JSON(application/json,默认)、Form(application/x-www-form-urlencoded)、Text(text/plain) |
| 响应编码 | 读取响应时的字符编码 | UTF-8(默认)、GBK、GB2312、ISO-8859-1 |
| 超时时间 | 请求超时,单位秒 | 界面默认 15 秒,最小 1 |
| 重试次数 | 失败后重试的次数 | 0 到 10,默认 3 |
| 重试间隔 | 单位秒 | 界面默认 5 秒,最小 1 |
| 忽略SSL证书 | 忽略 HTTPS 证书验证错误 | 默认关闭,不建议在生产环境使用 |
| 描述 | 备注 | 可选 |
| 启用 | 配置开关,列表中可直接切换,提示「已启用」或「已禁用」 | 默认开启 |
认证方式
| 认证方式 | 需要填写 | 实际发出的请求头 |
|---|---|---|
| 无认证 | 无 | 无 |
| Basic认证 | 用户名、密码 | Authorization: Basic <Base64(用户名:密码)> |
| Bearer Token认证 | Token | Authorization: Bearer <Token> |
| API Key认证 | Header名称、API Key值 | 以填写的「Header名称」为请求头名、「API Key值」为请求头值附加到请求 |
| 签名认证 | 签名密钥、签名算法(HMAC-SHA256、HMAC-SHA1、HMAC-MD5) | 当前版本不生成签名,只记录一条警告日志,请求照常发出 |
注意:「响应编码」「忽略SSL证书」「重试次数」「重试间隔」目前只随配置保存,测试请求不使用它们(测试请求只使用请求地址、方法、Content-Type、请求头、认证与超时时间)。
注意:需要签名的目标地址(如带加签的群机器人)不能直接使用「签名认证」。请改用对方支持的其他认证,或在地址里带上对方要求的静态参数。
测试请求
点击「测试」时,系统向配置的地址发送一次请求:
- 请求体默认为
{"test": true, "timestamp": <毫秒时间戳>},在配置对话框内测试时额外带有"source": "webhook_config_dialog"。 - GET 和 DELETE 请求不带请求体。
- 判定成功的标准是响应状态码在 200 到 299 之间。测试请求不会重试,也不会写入发送记录。
- 结果包含
success、statusCode、responseBody、duration(毫秒),异常时包含error。
管理端接口
Webhook 接口只允许管理员的登录会话调用,请求头带 satoken,路径前缀 /api/admin/webhook。
| 接口 | 方法 | 说明 |
|---|---|---|
/configs |
GET | 配置列表 |
/configs/{id} |
GET | 配置详情 |
/configs |
POST | 创建配置 |
/configs/{id} |
PUT | 更新配置 |
/configs/{id} |
DELETE | 删除配置 |
/configs/{id}/enable、/configs/{id}/disable |
POST | 启用、停用 |
/configs/test |
POST | 发送测试请求,请求体 webhookId、可选 testPayload |
/logs |
GET | 发送记录分页,可按 webhookId、status、startTime、endTime 筛选 |
/logs/{id} |
GET | 发送记录详情 |
/logs/clean |
POST | 按保留天数清理记录,请求体为天数 |
/cleanup/config |
GET、PUT | 读取、更新清理配置 |
/cleanup/execute |
POST | 立即按清理配置执行 |
BASE=https://your-domain
TOKEN=<管理员登录后的 satoken>
# 创建一个 Webhook
curl -s -X POST "$BASE/api/admin/webhook/configs" \
-H "satoken: $TOKEN" -H 'Content-Type: application/json' \
-d '{"name":"订单系统回调","url":"https://example.com/hook","method":"POST","authType":"BEARER","authConfig":{"token":"xxxx"},"contentType":"application/json","timeout":15000,"retryTimes":3,"retryInterval":5000,"enabled":true}'
# 用返回的 id 发送测试请求
curl -s -X POST "$BASE/api/admin/webhook/configs/test" \
-H "satoken: $TOKEN" -H 'Content-Type: application/json' \
-d '{"webhookId":"<配置ID>","testPayload":{"hello":"sight"}}'
接口中的 timeout、retryInterval 单位为毫秒,与界面上的秒相差 1000 倍。authType 取值 NONE、BASIC、BEARER、API_KEY、SIGNATURE。
示例
用一个临时接收地址验证平台能否访问外部系统:
- 在测试环境准备一个能返回 200 的 HTTP 地址,如内部的回调接收服务
https://hook.example.com/receive。 - 新增 Webhook:名称「联通测试」,方法 POST,认证「无认证」,Content-Type 选 JSON,保存。
- 点击列表里的「测试」。
预期:接收服务收到 {"test":true,"timestamp":...},界面提示「测试成功!响应状态: 200」。如果显示「测试失败」,按提示的错误信息检查网络出口、域名解析和 HTTPS 证书。
注意事项
注意:Webhook 配置里保存的密码、Token、API Key 属于敏感凭据,配置界面仅限管理员访问。
提示:请求由平台服务器发出。目标地址必须能从服务器网络访问,与浏览器所在网络无关。