Skip to content

自定义 Webhook ​

将改页侦探的通知接入 自建系统(内部告警、低代码平台、二次转发等)。在 通知渠道 中与其他渠道一并管理,创建任务时多选即可。客户端入口:「我的」→ 通知渠道」→ 添加渠道 → 选择「自定义 Webhook」(需高级会员)。

配置字段 ​

字段必填说明
渠道名称✅自定义
请求 URL✅完整的接收端 URL(http/https)
请求方法✅POST / PUT / GET
Content-Type-默认 application/json
自定义请求头-JSON 格式,如 {"Authorization":"Bearer xxx"}
请求体模板-留空则发送默认结构(见下文)
超时 (秒)-默认 10 秒

默认请求体 ​

如果不配置「请求体模板」,改页侦探会按以下 JSON 结构发送:

json
{
  "taskId": 12,
  "taskName": "京东 PS5 价格监控",
  "url": "https://item.jd.com/100012043978.html",
  "triggerTime": "2026-05-11T10:30:00+08:00",
  "summary": "价格变化:3899 → 3499",
  "changes": [
    {
      "selector": "//span[@class='price']",
      "oldValue": "3899",
      "newValue": "3499"
    }
  ],
  "executionId": 8821,

  "title": "京东 PS5 价格监控 内容已变化",
  "diffUrl": "https://webdiff.perk-net.com/diff/xxxxxxxx",
  "changeDetail": "…原始变化明细…",
  "bodyMarkdown": "…通知模板渲染出的 Markdown 正文…",
  "bodyHtml": "…HTML 正文…",
  "bodyText": "…纯文本正文…",
  "timestamp": 1778000000000
}

上半部分是核心字段,title 之后的几个是为兼容既有接收端保留的附加字段(bodyMarkdown / bodyHtml / bodyText 是同一条通知按不同格式渲染的正文,diffUrl 是完整差异详情页链接)。接收端按需取用即可。

自定义请求体模板 ​

可以用变量模板自定义请求体,例如把它发往一个企业 IM 的接口:

json
{
  "msg_type": "text",
  "content": {
    "text": "【改页侦探】{{taskName}} 已变化\n网址:{{url}}\n摘要:{{summary}}"
  }
}

可用变量 ​

变量类型说明
{{taskId}}number任务 ID
{{taskName}}string任务名称
{{url}}string任务网址
{{triggerTime}}string触发时间 (ISO8601)
{{summary}}string变化摘要
{{title}}string通知标题(由通知模板渲染)
{{diffUrl}}string完整差异详情页链接
{{oldValue}}string旧值(仅单元素时)
{{newValue}}string新值(仅单元素时)
{{executionId}}number执行记录 ID
{{changesJson}}string完整变化 JSON 字符串

自定义请求头 ​

例如带签名 / Bearer Token:

json
{
  "Authorization": "Bearer eyJxxxxxxxx",
  "X-Source": "WebDiff"
}

响应判断 ​

  • HTTP 状态码 2xx 视为发送成功
  • 其他状态码视为失败,不会自动重试,直接记为失败并写入消息记录
  • 响应体内容不会被检查,请确保接收端返回 2xx 即可

失败不重试

接收端短暂抖动就会丢掉这一条通知。如果接入的是重要告警链路,建议在你自己的接收端做幂等与补偿,或者给任务再绑一个渠道兜底。

安全建议 ​

  • 请使用 HTTPS,避免请求中的敏感字段被窃听
  • 改页侦探 不会 自动给请求加签名。若接收端需要鉴权,请在「自定义请求头」里放一个自己的密钥,由接收端校验
  • 不要把数据库密码 / 长效 Token 等敏感字段放进 URL 查询参数

示例:接入 Slack ​

text
URL:     https://hooks.slack.com/services/T0/B0/XX
方法:    POST
请求体:  {"text": "*{{taskName}}* changed → {{summary}} <{{url}}>"}

示例:接入飞书自定义机器人(非内置类型) ​

text
URL:     https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxxxx
方法:    POST
请求体:
{
  "msg_type": "text",
  "content": {"text": "[改页侦探] {{taskName}} 变化\n{{summary}}\n{{url}}"}
}

示例:接入企业内部告警系统 ​

text
URL:     https://alert.example.com/api/notify
方法:    POST
请求头:  {"X-API-Key": "your-key"}
请求体:
{
  "source": "webdiff",
  "level": "warning",
  "title": "{{taskName}}",
  "body": "{{summary}}",
  "url": "{{url}}"
}

调试技巧 ​

  • 用 https://webhook.site 拿一个临时 URL 看实际发送内容
  • 检查「消息记录」里每次发送的完整请求体与响应体