颜小二 Logo颜小二内容中心

YanXiaoer Insights

技术与运营洞察

从内容生成到多平台发布,从 AI Agent 调用到账号矩阵运营,颜小二把发布这件事变成可调用、可追踪、可持续维护的执行层。

YanXiaoer Insight · 2026-05-10 · 6 分钟阅读

callback_url 怎么用——一句话结论 + 字段、签名、重试机制详解

callback_url 是颜小二每条任务结果的回流通道。本文先一句话回答它怎么用,再展开调用时机、结构化字段、签名校验、重试机制与幂等处理,给出最小可行接收端代码示例。

callback_url 怎么用

callback_url 的工作机制

一句话结论

callback_url 是你侧的一个公网可达 HTTPS 端点,颜小二自媒体发布 API 平台会在每条发布任务完成(或失败)后,主动把结构化结果 POST 给这个端点——你不需要轮询,签名校验通过、入库、按 external_id 找回上下文即可。

背景:为什么要用回调

发布任务是异步的:你调一次统一文章接收 API,平台层把任务下放给本地 Agent 去执行——执行时长从几秒到几分钟不等(取决于平台限频、登录态、网络)。如果让你每秒轮询查任务状态,两侧都浪费 CPU 和带宽

固定 callback_url 把"等结果"变成"被通知":

  • 你侧:注册一个固定回调端点,等通知就行
  • 颜小二侧:任务完成后主动 POST,结构化字段 success / failed / login_expired

同步轮询 vs 固定回调

详细解答:分 5 步讲清楚

步骤 1:在你的服务里准备一个 HTTPS 端点

最简化形式(伪代码):

```python @app.post("/yxe/callback") def yxe_callback(req): body = req.json()

1. 校验签名(避免伪造)

if not verify_signature(req.headers, body): return 401

2. 按 external_id 找你侧业务上下文

article = find_article(body["external_id"])

3. 处理状态

if body["status"] == "success": save_publish_result(article, body) elif body["status"] == "failed": notify_human_review(article, body["error_msg"]) elif body["status"] == "login_expired": trigger_relogin(body["account_id"])

4. 必须在 5 秒内返回 200

return 200 ```

步骤 2:在颜小二后台 / 接入时配置 callback_url

每个租户独立 callback_url、独立签名密钥。一个租户内可以有多个 group_code,但通常一个租户一个回调端点足够。

步骤 3:理解回调字段结构

颜小二回调的核心字段大致包含:

| 字段 | 含义 | |---|---| | external_id | 你提交时的外部 ID,用于幂等与定位 | | group_code | 当时指定的账号分组 | | account_id | 实际执行该任务的账号 | | platform | 平台名(toutiao / wechat_mp / baijiahao / zhihu 等) | | status | success / failed / login_expired | | platform_url | 成功时的发布链接 | | platform_id | 平台侧文章 ID | | error_msg | 失败时的结构化原因 | | retryable | 是否可重试 | | timestamp | 回调时间戳 |

具体字段以 [API 文档](/docs.html) 为准。

步骤 4:处理签名与时间戳

签名校验防伪造,时间戳防重放。建议:

  • 时间戳与服务器时差 ≤ 5 分钟
  • 签名算法(如 HMAC-SHA256)按 [API 文档](/docs.html) 实现
  • 签名校验失败直接返回 401,不要返回 200

步骤 5:处理回调幂等

颜小二在网络抖动或 5xx 时会重试投递。你侧必须按 "external_id + platform + status" 做幂等去重,避免同一结果入库两次。

回调处理流程

注意事项:4 个常见坑

坑 1:callback_url 返回慢或挂掉

颜小二期望 5 秒内拿到 200。如果你侧处理逻辑重,应该先入队再返回 200,不要在回调里同步做大量计算。

坑 2:HTTPS 证书问题

颜小二只投递到 HTTPS 端点。证书过期、自签名、TLS 版本过低都会导致投递失败。建议用 Let's Encrypt 或商业证书。

坑 3:未做签名校验

不做签名校验意味着任何人可以伪造回调让你脏数据。必须做签名校验

坑 4:忽略 login_expired

login_expired 不是普通失败,是登录态失效信号。收到后应触发该账号的本地 Agent 重登流程,否则后续所有任务都失败。

重试与失败兜底

颜小二的重试策略大致是:

| 类型 | 重试 | |---|---| | 你侧 callback 返回 5xx | 自动重试,指数退避 | | 你侧 callback 返回 4xx | 不重试,进死信 | | 你侧 callback 超时 | 自动重试 | | 你侧 callback 返回 200 | 不重试 |

如果你的端点长时间不可达,颜小二会把回调推入死信队列,可在后台手动重试。

重试策略

注意事项决策树

`` 收到回调 → 校验签名 ├ 失败 → 返回 401,告警 └ 成功 └ 解析 status ├ success → 入库 platform_url + platform_id ├ failed → 看 retryable,true 则等下次自动重发,false 转人工 └ login_expired → 触发该账号本地 Agent 重登 ``

相关问题

  • [颜小二是什么?和编辑器有什么区别](/faq.html)
  • [多租户隔离怎么实现](/faq.html)
  • [登录态保存在哪里安全吗](/faq.html)
  • [失败任务怎么自动重试](/faq.html)
  • [callback 详细工作机制](/lp/faq-how-callback-works.html)

常见问题(FAQ)

Q:callback_url 必须是公网吗? SaaS 形态下需要公网 HTTPS 可达。私有部署形态支持私网 callback。

Q:每个 group_code 可以有不同的 callback_url 吗? 默认一个租户一个 callback_url。需要分组级别隔离的场景[联系商务](/contact.html#form)定制。

Q:颜小二的回调有保证投递(at-least-once)吗? 有,至少一次投递,所以你侧必须做幂等处理。

Q:callback 失败之后死信队列保留多久? 默认有保留期,期间可在后台手动重试。具体时长见[API 文档](/docs.html)。

Q:如果我侧暂时下线,已经发出去的任务怎么办? 任务在颜小二侧不变,回调进死信队列等你恢复后手动重试或自动恢复。

下一步

把上面伪代码改成你自己的语言,跑通最小可行回调端点(含签名校验 + 状态处理)。这一步通常 0.5-1 人天。

→ [查看 API 文档](/docs.html) | [callback 工作机制详解](/lp/faq-how-callback-works.html) | [更多常见问题](/faq.html) | [咨询商务 / 申请试用](/contact.html#form)