Skip to content

Webhook 是 OpenRouter Broadcast 的通用集成方式,支持将 trace 发送到任意可接收 JSON Payload 的 HTTP Endpoint。Trace 以标准 OTLP JSON 格式发送(包含 resourceSpans 数组),兼容任何 OTLP 感知系统。配置只需填写 Endpoint URL,可选配置 HTTP 方法(POST/PUT)和自定义 Header(用于认证)。测试连接时 OpenRouter 发送带 X-Test-Connection: true Header 的空 OTLP Payload,返回 2xx 或 400 均视为通过。自定义元数据通过 trace.metadata.* 命名空间存储在 span attributes 中。

Webhook 允许将 OpenRouter 请求 trace 发送到任意可接收 JSON Payload 的 HTTP Endpoint,适用于自建数据分析管道、内部监控系统或任何支持 HTTP 请求的服务。

配置步骤

第一步:准备 Webhook Endpoint

创建一个 HTTP Endpoint,需满足:

  1. 接受 application/json Content-Type
  2. 成功时返回 2xx 状态码
  3. 可从公网访问

Endpoint 将接收 OpenTelemetry Protocol (OTLP) 格式的 JSON Payload,兼容任何 OTLP 感知系统。

第二步:在 OpenRouter 开启 Broadcast

前往 Settings > Observability,打开 Enable Broadcast 开关。

第三步:配置 Webhook

点击 Webhook 旁边的编辑图标,填写:

字段填写内容
URLWebhook Endpoint URL(如 https://api.example.com/traces
Method(可选)HTTP 方法:POST(默认)或 PUT
Headers(可选)自定义 HTTP Header(JSON 对象格式),用于认证或其他目的

认证 Header 示例:

json
{
  "Authorization": "Bearer your-token",
  "X-Webhook-Signature": "your-webhook-secret"
}

第四步:测试并保存

点击 Test Connection 验证配置。测试时 OpenRouter 发送带 X-Test-Connection: true Header 的空 OTLP Payload。你的 Endpoint 返回 2xx 视为通过;400 状态码也可接受(部分 Endpoint 会拒绝空 Payload)。

第五步:验证数据接收

通过 OpenRouter 发送 API 请求,验证 Webhook Endpoint 是否收到 trace 数据。

Payload 格式

Trace 以 OTLP JSON 格式发送,包含 resourceSpans 数组:

json
{
  "resourceSpans": [
    {
      "resource": {
        "attributes": [
          { "key": "service.name", "value": { "stringValue": "openrouter" } }
        ]
      },
      "scopeSpans": [
        {
          "spans": [
            {
              "traceId": "abc123...",
              "spanId": "def456...",
              "name": "chat",
              "startTimeUnixNano": "1705312800000000000",
              "endTimeUnixNano": "1705312801000000000",
              "attributes": [
                { "key": "gen_ai.request.model", "value": { "stringValue": "openai/gpt-4" } },
                { "key": "gen_ai.usage.prompt_tokens", "value": { "intValue": "100" } },
                { "key": "gen_ai.usage.completion_tokens", "value": { "intValue": "50" } }
              ]
            }
          ]
        }
      ]
    }
  ]
}

元数据映射

OTLP 映射说明
trace_idtraceId将多个请求归入同一 trace
trace_nameSpan name根 span 的自定义名称
span_nameSpan name中间 span 的名称
generation_nameSpan nameLLM 生成 span 的名称
parent_span_idparentSpanId链接到已有 span

自定义元数据以 trace.metadata.* 命名空间存储在 span attributes 中:

json
{
  "key": "trace.metadata.order_id",
  "value": { "stringValue": "ORD-12345" }
}

适用场景

Webhook 目的地适合:

  • 自建分析管道:发送到自有数据仓库或分析系统
  • 内部监控工具:与私有可观测性平台集成
  • 事件驱动架构:基于 LLM 用量触发工作流
  • 合规日志:存储到满足特定监管要求的系统
  • 开发调试:使用 webhook.site 检查 trace Payload

Privacy Mode

当为此目的地开启 Privacy Mode 时,prompt 和 completion 内容会从 trace 中排除。其他 trace 数据(token 用量、费用、时间、模型信息)仍正常发送。

常见问题

Q: Webhook Endpoint 需要满足什么可用性要求?

A: 生产环境中,确保 Endpoint 高可用并能处理预期的 trace 量。OpenRouter 异步发送 trace,失败时可能不会重试——建议在 Endpoint 侧实现幂等接收和队列缓冲,避免因 Endpoint 短暂不可用丢失 trace。

Q: 如何在 Webhook Payload 中找到我传入的自定义元数据?

A: 自定义键存储在 span 的 attributes 数组中,key 格式为 trace.metadata.{your_key}。例如,trace.order_id 会出现为 { "key": "trace.metadata.order_id", "value": { "stringValue": "..." } }

Q: Webhook 和 OpenTelemetry Collector 目的地有什么区别?

A: OTLP Collector 专门适配标准 OTLP Collector 端点(直接发送到 /v1/traces),更适合已有 OTel 基础设施的场景。Webhook 更通用,支持自定义 Header 和 HTTP Method,适合需要接入非标准 HTTP 服务的场景。