颜小二 Logo颜小二内容中心

YanXiaoer Insights

技术与运营洞察

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

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

如何配置 callback_url 接收发布结果

callback_url 是颜小二把发布结果推回业务系统的核心通道。本文 5 步走通:搭 HTTPS 端点、校验签名、解析字段、处理 login_expired、写库与重试,附完整代码与错误排查表。

如何配置 callback_url 接收发布结果

发布请求是同步动作,但发布结果是异步事件。从 API 收到 200 那一刻起,到文章真的出现在头条号、微信公众号、百家号、知乎上,中间有几秒到几分钟的处理时间。colback_url 就是颜小二把这段异步结果"推回来"的通道。配置不好,整条流水线就只能盲发。

callback_url 接收发布结果

适用人群

  • B2B 内容营销团队的工程师,需要把发布结果回写到内部 CRM / 内容资产库
  • 企业自媒体团队的开发负责人,要做"哪些账号发成功、哪些要重登"的可视化复盘
  • AI Agent 团队,让 Agent 在收到 callback 后继续走下一个流水线节点
  • SaaS 集成商,把发布回调当作产品里的事件源

callback_url 配置是什么

callback_url 是你在颜小二租户配置里登记的一个 HTTPS 端点。颜小二把每条任务的最终状态(success / failed / login_expired)按平台粒度推送到这个端点,body 里携带签名头用于防伪造。一个租户对应一个固定的 callback_url,不同租户独立配置,互不影响。

前置条件

1. 一个公网可达的 HTTPS 域名(不接受 HTTP,不接受自签名证书) 2. 一个签名密钥(颜小二在签 callback 时使用,与发起 API 调用的 Secret 不同) 3. 一个能写库的接收处理函数 4. 你侧业务表设计完成,至少有"租户 + external_id + platform + status"四个字段

5 步配置

第 1 步:在控制台登记 callback_url

登记时同时配置 callback 签名密钥(你侧也要保存这把 key,用来校验来自颜小二的请求)。一个租户只能有一个 callback_url,但可以在 url 里加 query 区分环境,例如 https://api.yourco.com/yxe/callback?env=prod

第 2 步:搭一个最小可行接收端点

Python(FastAPI)示例:

```python import hashlib, hmac, os from fastapi import FastAPI, Request, HTTPException

CB_SECRET = os.environ["YXE_CALLBACK_SECRET"] app = FastAPI()

@app.post("/yxe/callback") async def yxe_cb(req: Request): body = await req.body() ts = req.headers.get("X-YXE-Timestamp", "") nonce = req.headers.get("X-YXE-Nonce", "") sig = req.headers.get("X-YXE-Signature", "") expected = hmac.new( CB_SECRET.encode(), f"{ts}\n{nonce}\n{hashlib.sha256(body).hexdigest()}".encode(), hashlib.sha256, ).hexdigest() if not hmac.compare_digest(expected, sig): raise HTTPException(401, "bad signature") payload = await req.json() handle_event(payload) return {"ok": True} ```

第 3 步:解析回调字段

callback 体的关键字段:

``json { "external_id": "cms_article_2026_001", "task_id": "yxe_t_xxxx", "tenant_id": "yxe_tn_xxxx", "group_code": "brand_a_default", "platform": "toutiao", "account_id": "yxe_acct_xxxx", "status": "success", "platform_url": "https://www.toutiao.com/article/xxx", "platform_id": "toutiao_xxxx", "error_code": null, "error_msg": null, "retryable": false, "callback_extra": {"pipeline_run_id": "run42"} } ``

注意 callback_extra 是你在发起请求时传入、颜小二原样回传的,用来携带业务上下文,避免你再去查表。

解析 callback 字段

第 4 步:单独处理 login_expired

login_expired 不算系统失败,是单账号的登录态过期。建议你的处理逻辑是:

1. 把该 account 标记为"待重登" 2. 通知运营在本地 Agent 上完成重登 3. 不要把整条 group 的发布暂停

这正是颜小二"登录态本地保存"设计的好处之一:cookie 失效是孤立事件,不会因为某个 cookie 被中心化共享而连环失效。

第 5 步:实现幂等与超时

callback 可能因为网络抖动被重发。建议用 external_id + platform + account_id + status 作为入库主键去重。颜小二端的策略是:3 秒内未收到 200 视为失败,按指数退避重试 5 次,累计观察期约 10 分钟。如果你的端点真的挂了,过后你也可以主动调"任务查询"接口拉一次结果。

错误排查清单

| 现象 | 可能原因 | 处理方式 | |---|---|---| | 401 bad signature | callback 密钥不匹配 | 重新到控制台同步密钥 | | 408 / 504 端点超时 | 你侧处理逻辑过慢 | 接收后立即返回 200,处理放队列 | | 重复入库 | 没做幂等 | 用 external_id+platform+status 去重 | | HTTPS 证书被拒 | 自签名 / 已过期 | 用受信任 CA 证书 | | 收不到 login_expired | 处理逻辑漏分支 | 把状态映射改为穷举 switch |

常见问题(FAQ)

Q:callback_url 配置怎么做最稳? "接收即返回 200,业务逻辑入队列异步处理"是最不容易踩坑的模式,能避免颜小二端误判超时重发。

Q:callback_url 配置安全吗? HTTPS 强制 + HMAC 签名头校验 + nonce 防重放,三重防伪。建议你侧再做一层 IP 白名单(颜小二会提供出口 IP 段)。

Q:callback_url 配置案例可以参考哪些? B2B 内容营销团队把回调写入内部 CRM 标记发布状态、AI Agent 团队用 callback 触发下一个流水线节点、SaaS 集成商把 callback 转成自家产品的"发布完成"事件,是三种典型形态。

Q:callback_url 配置是什么场景下不用? 只发不收的场景(一次性导入老文章备份)可以不配 callback,但不推荐——失败排查会非常困难。

Q:callback_url 可以一个租户配多个吗? 不可以。颜小二的设计是一个租户固定一个 callback_url,保证回调通道单一可靠。需要分流的话可以在 url 里用 path 或 query 区分。

下一步

  • 完整字段定义:[API 文档](/docs.html)
  • 申请测试租户:[免费申请接入](/contact.html#form)
  • 平台案例:[自媒体发布 API 落地页](/lp/zimedia-publish-api.html)