Skip to main content
Webhook 将资源的重要变化发送到你的 HTTPS 接收服务,例如会话等待审批、定时任务未能启动,或 OAuth 凭据刷新失败。你在控制台配置订阅,接收服务负责验签、去重、回查资源和后续业务处理。 需要展示 Agent 的逐步输出和工具调用时,使用事件与流式输出。Webhook 通知覆盖 Session、Agent、Deployment、Vault 等资源,与 Session 事件流使用不同的事件名。

在控制台配置

在控制台进入 Managed Agents → Webhooks,创建并管理接收端点。
1

创建端点

点击创建,填写服务的 HTTPS 接收地址,可选填名称和描述。接收地址必须使用 443 端口和公网可解析的域名,不接受 IP、localhost、内部保留域名、用户名密码或 fragment。
2

选择订阅事件

按业务需要选择至少一种事件,例如在会话停下来时通知业务系统,选择 session.status_idled。事件选择器按资源分类,只会投递已订阅的类型;保存前检查所选清单。
3

保存签名密钥

创建后端点立即启用。复制弹窗中显示的 whsec_ 签名密钥,安全保存并配置到接收器。密钥只在创建或轮换时显示,关闭弹窗后不能再次查看。
4

验证接收

配置好接收器后,再触发一次已订阅的业务操作,例如发起新的会话执行。确认接收器收到通知、验签通过并可靠保存后,再接入实际业务。
接收地址创建后不能修改。 服务地址变化时,按迁移接收地址创建新端点并验证,再删除旧端点。

管理已有端点

每租户默认最多 10 个端点,可由平台调整。达到上限时,控制台会提示无法继续创建;禁用仍占额度,删除后释放。订阅覆盖本租户所选类型;如只处理特定 Session 或 Agent,在接收器中按资源 ID 筛选。 先配置订阅,再触发业务。平台不补历史通知;Session 执行链启动时读取订阅配置,中途修改不保证影响已启动的执行。同一地址可注册多个端点,各自使用独立密钥,订阅重叠时会分别投递。创建端点只校验地址格式,投递时才检查 DNS 是否解析到公网地址。

接收通知

平台以 HTTPS POST 发送 application/json。接收服务需要读取原始请求体,验证以下请求头,再解析事件:

通知内容

通知不含完整资源。回查得到的是当前状态,可能与事件发生时不同;不要根据通知到达顺序推算当前状态。删除类事件发生后资源已无法回查,通知本身就是删除的依据。

验证签名

签名遵循 Standard Webhooks:移除密钥的 whsec_ 前缀,将剩余部分按标准 Base64 解码为密钥字节,签名输入为 webhook-id.webhook-timestamp.原始请求体。必须使用原始请求体字节,不要先解析 JSON 再序列化。 下面的函数校验签名与 5 分钟时间戳容差,使用恒定时间比较摘要。密钥从接收器的安全配置读取;Node.js 传入原始 Buffer,Python 传入 bytes。在 Flask 中可用 request.get_data() 获取原始字节,request.headers 传给验签函数。

确认接收与幂等处理

  1. 先验签。 签名无效或时间戳过期时,返回 400 或 401,不执行事件中的业务动作。
  2. 可靠保存后再确认。 验签通过后解析 JSON,以顶层 id(也就是 webhook-id)为唯一键,将通知幂等地持久化或写入可靠队列,再尽快返回 2xx。若保存失败,不要提前确认接收,应返回失败状态让平台按规则重试。
  3. 后台处理。 资源回查、发送提醒等耗时操作在后台完成。平台只根据 HTTP 状态判断送达,不读取响应体,也不知道你的后台业务是否完成。
已可靠接收过的重复通知也应返回 2xx。去重记录与业务处理状态应能跨接收服务重启保留;仅在进程内记录事件 ID 不能保证幂等。

收到通知后如何处理

根据 data.type 选择处理方式。这里查询的是 Session、Thread、Run 或凭据等业务资源,相关接口见下列指南。 session.status_idled 不代表任务成功。停止原因在会话事件中,Session 详情不返回该字段;中断也会以 end_turn 收口,是否完成任务仍需结合消息、错误和产物判断。

支持的事件

当前支持以下 33 种事件,在控制台的事件选择器中按资源类型选择。Webhook 与 Session 事件流的名称不同,例如事件流的 session.status_idle 对应 session.status_idled 通知。
Session 的开始和空闲表示所有线程的聚合变化,最后一个运行线程停下才发 Session 空闲通知。子线程事件额外包含 data.session_thread_id,data.id 仍为 Session ID;主线程不发这三种子线程通知。

投递行为

通知可能重复、乱序或最终丢失。当前不提供测试投递、投递记录查询、手动补发或历史重放。Webhook 不作为持久化变更日志;需要完整状态核对的业务,应定期查询相关资源。

端点维护与排查

自动禁用与恢复

在控制台列表或详情中查看端点是否启用。端点被自动禁用时,可按下表检查接收服务;无法定位原因时,提供端点 ID 和发生时间联系支持人员。 单条通知三次失败不会立即造成“持续失败”禁用;一次成功投递会清空连续失败计时。修复问题后,在端点操作菜单中选择启用,会清空失败计时与自动禁用原因。恢复不会补发停用期间或已放弃的通知。

迁移接收地址

接收地址创建后不能修改。服务迁移时:
  1. 在控制台创建使用新地址的端点,选择需要的事件。
  2. 给新接收器配置该端点的签名密钥。
  3. 触发一次订阅事件,验证新地址接收、验签与确认正常。
  4. 再从控制台删除旧端点。
新旧端点同时启用且订阅重叠期间,两端都会收到通知。禁用或删除不能撤回已发出的请求。

轮换签名密钥

密钥丢失或需要替换时,在控制台的端点操作菜单中选择轮换,复制一次性显示的新密钥,并尽快更新接收器配置。 平台没有新旧密钥同时生效的宽限期。轮换后新准备的请求使用新密钥,已签名的在途请求仍可能使用旧密钥。轮换不会改变端点是否启用,也不会清空连续失败计时。

常见问题

如仍需排查,可在控制台详情中复制端点 ID,连同资源 ID 和发生时间提供给支持人员;不要提供签名密钥。

下一步

定时任务

配置定时运行并通过通知跟踪结果

事件与流式输出

实时查看 Agent 输出并处理审批