🎉 新版站点已上线 — 新用户请在 v2.cloudmist.cloud 注册使用,本站教程均以新站地址为准 · 老用户账号已迁移完成,用原用户名/邮箱 + 原密码可直接登录 新站(登不上请在用户名后加 _82350),原站余额可继续在 api.cloudmist.cloud 用完,新站需重建令牌并改用新站 base_url
首页 › 回调接入 · 文章 › AI API Webhook 怎么接收?验签、重复回调与结果写入验收

AI API Webhook 怎么接收?验签、重复回调与结果写入验收

云岚API · 回调接入 · 更新于 2026-11-05

模型任务回调的正确顺序是:原始请求体验签与时间戳检查、可靠保存事件、返回接收成功,再由后台取回并验收结果。 HTTP 2xx 只确认接收;同一事件再次送达、后台处理失败、旧结果晚到,都需要独立处理,不能直接覆盖业务数据。

本文以 OpenAI 已支持的 Webhooks 为例,官方资料核对日期为 2026 年 11 月 5 日。接收流程和验收表是实施建议,没有执行真实回调。云岚API是否提供供应商原生 Webhook 尚未确认,不能根据模型接口兼容性推定支持。

先确认你需要的是任务回调

Webhook 是服务在事件发生后,向你配置的地址发送通知。例如异步响应完成后,应用再读取输出。它与外部系统触发工作区 Agent方向不同;也不负责Batch 文件逐条配对。先确认目标服务支持的事件、项目范围、签名协议和结果读取方式。OpenAI Webhooks 指南

接收地址应直接指向最终处理路径。OpenAI 当前对超时或非 2xx 响应最多重投 72 小时,采用指数退避;3xx 跳转也视为失败。这个窗口不是业务完成时限,更不是结果一定保留 72 小时的承诺。投递与重试规则

验签需要保留什么?

保存接收到的原始请求体,交给官方 SDK 的验签方法;不要先解析 JSON、重新序列化,再用改变过的文本验签。同时传入原始请求头,使用该接收端点的 signing secret。这个签名密钥与调用模型用的 API Key 分开管理。官方验签示例

验签还检查时间戳是否新鲜。缺少必要头、签名错误或时间超出允许窗口,应拒绝执行后续业务;排查时检查服务器时间、端点密钥和请求体是否被中间件修改,不通过关闭验证来“修好”。通过验签不代表只会收到一次:同一签名请求在有效窗口内仍可能多次通过。SDK 对时间戳和重复处理的说明

快速返回 2xx,为什么还要先保存?

建议把接收端做成短流程,把模型结果读取、文档写入等工作放到后台:

  1. 验签通过后,校验事件结构和类型,提取已验证的 webhook-id。
  2. 用“接收端点范围 + webhook-id”建立持久化唯一键,原子保存必要事件内容与待处理状态。
  3. 数据库提交成功,或可靠队列确认持久接收后,才返回 2xx。
  4. 后台 worker 领取任务,记录处理中、重试和完成状态。

这里的“保存”不能只是写日志、放进内存或启动一个临时线程。数据库不可用、队列拒收时,不应返回成功造成事件丢失;应暴露接收失败并告警。若先写数据库再另发队列,需有同事务待投递记录和补投机制,避免两步之间崩溃丢任务。这是本文建议的可靠接收设计。

重复事件若已可靠入库,可以确认接收,但必须保留未完成任务的恢复路径。不要把“事件已收到”标记当作“业务已完成”,否则 worker 失败后,后续重投可能被全部跳过。

事件去重和业务幂等,要用两种标识

标识 解决的问题 建议保存的内容
接收端点范围 + webhook-id 同一投递事件被反复接收 原始事件引用、接收时间、处理状态
业务记录 ID + 输入版本 + 动作类型 不同事件或重试导致同一业务动作重复 目标位置、动作状态、结果证据

去重记录应由各 worker 共享并持久保存。“先查没见过,再插入”存在并发竞争;内存集合无法跨重启、跨副本协调。保留多久应覆盖实际重投和人工重放策略,不能只按验签时间窗口清理。官方持久化去重建议

例如,假设文档 doc-42 的第 3 版摘要需要写入知识库。即使后台重复领取同一任务,目标动作仍使用 doc-42 / v3 / 写摘要 这组稳定标识。数据库内的动作记录与业务更新应保持事务一致;外部系统则需持久化待发送动作,并使用接收方实际支持的幂等机制。若外部写入结果未知且没有可核对的去重机制,转人工核对,不声称保证“恰好一次”。

后台取回结果时,还要核对归属与版本

以 response.completed 为例,事件中的 data.id 指向响应,后台可通过 responses.retrieve 读取。不要把通知体当作完整答案,也不要因为事件名称带 completed 就跳过内容验收。响应读取接口

建议在创建模型任务时就记录:供应商与项目、响应 ID、业务记录、输入版本和预期动作。收到事件后按这张映射核对;未知 ID、项目不符或输入版本已被替换,先隔离复核。结果仍需检查状态、内容和必需字段,可继续使用结构化输出验收。

不要直接按事件到达顺序覆盖状态。若第 3 版摘要晚于第 4 版返回,保留第 3 版记录,但不覆盖当前正文;状态冲突时回查服务端对象,再按业务版本规则决定动作。取回暂时失败,只重试取回阶段,不立即重新生成模型任务。

回调投递窗口与结果保留窗口分别设置。应按项目的实际存储配置及时取回结果,仅保存业务所需内容;不能等到回调重试窗口结束才处理。Background 的存储与查询条件

上线前,至少验收这六种情况

以下是测试计划,不是已经通过的测试记录。可在隔离环境使用供应商提供的测试事件,或按其测试方式构造样例。

情形 要观察的通过条件
正常回调 可靠入库后才 2xx,结果对应原任务,业务动作有证据
签名错误或时间戳过期 不进入业务处理,不写目标数据
同一事件并发或重启后重投 只有一份接收记录,未完成任务可恢复,业务不重复写入
数据库或队列不可用 不虚报接收成功,恢复后能处理重新投递
worker 取回或写入中途失败 从未完成阶段恢复,不因已收到标记丢任务
旧版本、乱序或归属不符 不覆盖新版本,冲突隔离并保留核对记录

下载 Webhook 接收与业务验收表。表中只预填六种情形和预期判据;实际状态、响应码、证据与结论留空。它不会发送请求,也不包含密钥。出现模型请求超时,另按超时与重复请求排查定位,避免混淆投递重试和模型重跑。

目标模型接口没有 Webhook 时怎么办?

先查服务是否提供任务查询;若没有,可由自己的持久任务队列安排调用和结果保存,处理完成后通知业务系统。供应商回调与自建队列是不同能力,不能给普通请求加一个回调地址就默认生效。

如果你选择自建队列调用模型,云岚API可作为模型接入选项。先核对当前模型与协议,确认所需接口后注册云岚API,按入门教程验证基础请求,再实现任务状态和通知。已有账号直接进入控制台。这条路径不承诺云岚API提供上述供应商原生 Webhook。

需要自建任务队列的模型调用?

先核对云岚API当前模型与协议,再注册验证基础请求;不要默认支持供应商原生 Webhook。

注册云岚API →已有账号?进入控制台创建令牌 · 调用报错先排查
注册、充值和调用均在云岚API 新业务站完成
相关内容
本站为云岚API 注册、登录与充值入口站点 · 模型与价格以控制台实时数据为准 · 更新于 2026-11-05
Claude、GPT、Gemini 等名称为各自权利人商标,本站为独立第三方 API 中转/聚合服务,与上述厂商无隶属或授权关系。