示例 | 使用回调获取任务结果的最佳实践
什么场景需要用到回调?
由于绘画任务是一个耗时的操作,因此所有任务都是在提交后在队列中执行,不会直接返回结果,因此结果需要另外获取单独的任务接口用轮询的方式获取进度
或者结果
,但是假如我们不需要获取任务进度,而是仅需要获取任务的结果,并且轮询存在一定的延迟和资源消耗,我们就可以通过回调的形式来获取任务成功
或者失败
的结果
怎么使用回调?
- 所有的提交任务接口都支持以下两个参数
callback
用于传一个任务执行成功后需要由触站AI调用请求的回调地址nonce
用于客户自定义的一个标识,在任务成功或者失败后,调用回调的时候会自动带上这个参数,用于调用方标识自己的业务ID(选填)
- 任务回调时机
- 任务处理成功,和普通任务一样,回调对应的结果
- 任务处理失败,回调任务错误状态和错误的原因
- 触站AI如何执行回调http请求
- 在任务成功或者失败的时候,触站AI会使用http请求提交任务时候带上的
callback
参数,使用POST
method+JSON
body的格式进行请求
- 在任务成功或者失败的时候,触站AI会使用http请求提交任务时候带上的
以下是一个典型的任务回调的工作过程
- 提交绘画请求:
{ "prompt":"girl", "modelStyleId": 1, "callback":"https://exmaple.com/callback", "nonce": "123" }
- 任务完成后调用http回调,callback收到的JSON POST请求参数:
{ // taskId仅在callback的参数中会返回 "taskId":"此次任务ID", // 由提交任务带上的参数,可以进行业务标识或者权限有效性判断 "nonce": "123", // 以下参数与原始获取任务详情接口返回的结果中的data一致 "state": "success", "progress": 1, "audit": 1, "imgUrl":"https://test.img.com/1.jpg" }
其他注意事项
- 回调接收方返回
200http响应码
代表处理回调成功,返回非200的响应码
代表回调请求失败,回调失败后触站AI会在一定的周期内进行重试请求,最多尝试5次
,重试间隔时间依次递增5秒(比如第一次是5s后重试,第二次则是10s后,依次递增) - 由于网络等不可抗力的原因,回调接收方可能会收到同一个任务多次回调请求,因此需要做好任务
幂等
处理,防止产生因重复回调导致业务处理不正确的问题 - 所有回调请求的超时时间为
10s
,请勿在回调处理中同步进行耗时的操作 callback
需要是标准的URL格式,支持ip:port
类型url,但是需要公网可以接收请求,不能是localhost
、127.0.0.1
、局域网IP
修改于 2 个月前