使用指南
轮询已复核文档
说明外部 worker 如何轮询已在 Numora 中复核完成、可进入下游交付流程的文档。
适用范围
本页说明外部 worker(例如 n8n)应如何轮询 Numora 中已经完成复核、可进入下游交付的文档。
适用于以下场景:
- 文档已经在 Numora 内完成处理与复核
- 外部 worker 需要一个稳定的轮询读取口
- 只有复核完成后才允许进入下游交付
完整的 outbox -> dispatch 集成模式见 n8n 出站交付。
推荐接口
GET /v1/delivery/outbox?provider=dynamics365&limit=100
这是首阶段对外交付模型中推荐的轮询入口。
它会返回已经 reviewed 且 finalized、并且可进入下游交付流程的文档。
为什么推荐轮询 Outbox
相比自行扫描所有 documents,轮询 delivery/outbox 更安全,因为该接口已经应用了交付语义的过滤条件。
当前模型会排除已经处于以下状态的文档:
push_pendingpush_succeeded
因此,worker 可以只关注仍待交付的 reviewed documents。
推荐轮询流程
- 每 5 到 10 分钟调度一次。
- 调
GET /v1/delivery/outbox。 - 读取返回的
data数组。 - 对每个 item,调用
dispatch_url,或在外部执行目标系统写入。 - 如果响应里有
meta.next_cursor,下一次请求时原样带回。
请求示例
curl "https://api.numora.example/v1/delivery/outbox?provider=dynamics365&limit=100" \
-H "Authorization: Bearer $NUMORA_API_KEY" \
-H "x-request-id: reviewed-poll-001"响应示例
{
"data": [
{
"document_id": "4be38121-3791-4856-80d5-c57dbec2cf78",
"schema": "invoice_v2",
"status": "reviewed",
"external_id": null,
"metadata": {},
"result_url": "/v1/documents/4be38121-3791-4856-80d5-c57dbec2cf78/result",
"dispatch_url": "/v1/documents/4be38121-3791-4856-80d5-c57dbec2cf78/dispatch",
"updated_at": "2026-03-24T02:36:37.684Z"
}
],
"meta": {
"provider": "dynamics365",
"next_cursor": null
}
}Cursor 处理规则
meta.next_cursor 是 opaque 值。
- 不要自行解析
- 不要修改内容
- 下一次请求时原样带回
如果 next_cursor 为 null,表示当前扫描窗口已经结束。
轮询后支持的两种交付路径
文档出现在 outbox 后,当前支持两条路径。
1. Numora 管理 dispatch
这是首阶段多租户模式下的推荐路径。
- 轮询 outbox
- 调
POST /v1/documents/{id}/dispatch - 轮询
GET /v1/documents/{id},直到状态离开push_pending
2. 外部执行后 callback
只有当目标系统写入发生在 Numora 外部时才使用。
- 轮询 outbox
- 调
GET /v1/documents/{id}/result - 在外部写入目标系统
- 调
POST /v1/documents/{id}/delivery
运行建议
- 轮询应视为最终一致性的后台流程
- 首次上线时建议保守控制并发
- 建议记录
document_id、x-request-id以及返回的 run 标识,便于排障 - 如果文档后续进入
push_failed,它可能在未来再次出现在轮询结果中