Skip to content

Webhook 目前只能发送固定 JSON,很多常见通知平台无法直接使用 #276

@pia

Description

@pia

问题描述

当前「聊天频道 → 事件 → Webhooks」功能可以添加任意 webhook URL,但 Codeg 发送的 payload 是固定的通用 JSON:

{
  "event": "turn_complete",
  "level": "info",
  "title": "...",
  "body": "...",
  "fields": [],
  "connection_id": "...",
  "source": "codeg"
}

这个格式只适合能直接接收并解析 Codeg schema 的服务。很多常见通知平台或 webhook 服务都有自己的 payload 格式,因此用户虽然可以成功保存 webhook URL,但实际不会收到提醒。

例如:

  • 钉钉机器人要求 msgtypetext 等字段。
  • 其他 webhook 中转服务也可能要求特定 JSON schema。实测某个非钉钉 webhook 地址返回:
HTTP 400
{"code":400,"message":"invalid json payload"}

当前行为

  1. 在「聊天频道 → 事件 → Webhooks」里添加 webhook URL。
  2. 启用 turn_complete 事件。
  3. 等待 agent 正常完成一轮回复。
  4. Codeg 向 webhook URL 发送固定通用 JSON。
  5. 如果目标服务不接受这个 schema,请求会失败,或者不会产生任何可见提醒。

目前失败信息只会写到后端 stderr,UI 中看不到投递状态。用户很难判断到底是:

  • 事件没有触发;
  • webhook 请求失败;
  • 还是目标服务拒绝了 payload。

期望行为

希望 webhook 配置至少支持以下一种能力:

  1. 内置常见平台 payload 适配器,例如:

    • 通用 JSON
    • 钉钉
    • 飞书 / Lark
    • 企业微信
    • Slack / Discord 等
  2. 支持每个 webhook 配置自定义 payload 模板,例如把 Codeg 的字段映射为:

    • title
    • body
    • event
    • fields
    • connection_id
  3. 支持配置自定义 headers / 签名参数,以适配需要 secret、timestamp、signature 的平台。

另外也建议增加:

  • 「测试 webhook」按钮;
  • 最近一次投递状态;
  • 最近一次 HTTP 状态码 / 错误信息;
  • 文档或 UI 提示:turn_complete 只在 agent 正常 end_turn 结束时触发。

影响

现在 UI 看起来像是可以直接填任意 webhook URL,但实际上 webhook payload 没有统一标准。很多真实平台无法直接接收 Codeg 当前的固定 JSON。

这会导致用户配置看起来成功,但没有收到任何提醒,而且 UI 中没有错误反馈,排查成本比较高。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions