目标可以将事件发送到 Webhook URL 或 Slack 频道。两者使用本页所述的相同事件类型和最低优先级筛选。Slack 目标通过 LangSmith 托管的 Slack 应用发布消息,而不是发送下面的JSON payload,因此签名密钥和自定义标头不适用。要设置 Slack 投递,请参阅通知 Slack 频道。本页其余内容介绍 Webhook URL 目标。
投递
LangSmith 会向你的 Webhook URL 发送带有 JSON body 的POST 请求。请求使用 Content-Type: application/json,并包含你附加到订阅的所有自定义标头。
重试会投递字节完全相同的 payload,包括相同的
id。请根据 id 去重,以免重试投递在下游产生重复效果。自定义标头
你可以为每个订阅附加任意标头(例如Authorization: Bearer …),以便在你的端点对调用方进行身份验证。Content-Type 始终由 LangSmith 设置,无法覆盖。
签名密钥
每个订阅都有一个签名密钥。LangSmith 使用此密钥对原始 Webhook 请求 body 进行签名,并将结果发送到X-LangSmith-Signature 标头中。
标头值格式如下:
轮换签名密钥
当签名密钥可能已泄露,或组织的凭据轮换策略要求使用新密钥时,请轮换签名密钥。 要轮换密钥,请在 Engine Settings 中打开订阅行,点击 Roll signing secret,然后确认。LangSmith 会生成新的签名密钥,并立即将其用于后续 Webhook 投递。轮换完成后,旧密钥会立即停止用于投递签名。 轮换密钥后,请更新所有使用新值验证X-LangSmith-Signature 的消费者。
严重性筛选
每个订阅都有一个介于0 到 3 之间的 severity_threshold。对于问题事件,仅当问题的 severity 小于或等于该阈值时,才会投递事件。数字越小表示越紧急。
例如,
severity_threshold: 1 的订阅只会接收 URGENT (0) 和 HIGH (1) 问题的事件。
严重性阈值不适用于 issue.agent_run.failed,因为运行失败事件的范围是 Engine 会话,而不是某个具体问题。
事件类型筛选
每个订阅都会指定希望接收的事件类型。未显式指定列表的订阅默认使用["issue.created"]。
事件信封
投递到你端点的每个事件都使用相同的外层 JSON 结构。Issue data.object
对于 issue.created 和 issue.trace.added,data.object 是问题的快照。应将其视为生成事件时问题的权威状态。
运行失败 data.object
对于 issue.agent_run.failed,data.object 描述失败的 Engine 运行。
data.trace
data.trace 仅包含在 issue.trace.added 事件中。
批量合并
单个上游操作可能产生多个 Webhook 事件。当 Engine 打开一个新问题并向其附加五条追踪记录时,你会收到一个issue.created 事件和五个 issue.trace.added 事件,这些事件都共享同一个 request_id。使用 request_id 将它们归并为一条下游通知。
事件类型
以下是 LangSmith Engine 当前发送的完整事件类型集合。未来可能会添加新类型,因此处理程序应忽略未知的type 值,而不是因此失败。
issue.created
LangSmith Engine 创建新问题时发送。省略 data.trace。
issue.trace.added
新追踪记录关联到现有问题时发送。data.trace 描述关联的追踪记录。
issue.agent_run.failed
LangSmith Engine 未能完成运行时发送。此事件的范围是会话,因此不包含 data.trace,也不使用严重性筛选。
测试你的端点
在将真实订阅指向你的端点之前,发送一个示例 payload,以验证端点能够接受请求并在 20 秒超时内确认收到:issue.created 中的示例 body 作为 sample-issue-created.json。请验证:
- 自定义
Authorization标头能够到达,并且与订阅中配置的密钥匹配。 - 处理程序会根据事件的
id持久化事件,以便对重试进行去重。 - 处理程序会在启动缓慢的下游工作之前返回
2xx。
安全性
- Webhook URL 会在创建订阅时以及投递时再次进行验证。在 SaaS 中,私有 IP 范围和元数据 IP 范围会被阻止。
http://和https://均可接受;请使用https://,以免 payload 和任何自定义标头以明文传输。 - LangSmith 使用订阅的签名密钥对 Webhook body 进行签名。在处理 payload 之前验证
X-LangSmith-Signature。 - 你还可以在订阅上设置自定义标头,例如
Authorization: Bearer …,用于在你的端点进行路由或额外身份验证。 - 根据事件的
id进行去重,以免重试投递导致重复通知。
最佳实践
- 快速确认。 持久化事件后立即响应
2xx。将耗时较长的工作(扇出、寻呼、下游 API 调用)放入队列,以便处理程序保持在 20 秒超时范围内。 - 容忍未知事件类型。 忽略处理程序无法识别的
type值。未来可能会添加新的事件类型,恕不另行通知。 - 容忍新增字段。 使用宽松的架构解析 payload。现有事件类型可能会在不另行通知的情况下新增字段。
Connect these docs to Claude, VSCode, and more via MCP for real-time answers.

