工程实践

文档翻译 API 接入指南:用 Python 批量翻译 Word、PDF,并用 Webhook 接收结果

用 OmniDoc 文档翻译 API 批量翻译 Word、PDF、Excel 等文件:上传、创建任务、Webhook 回调与下载的完整流程,附 Python 示例、参数说明、幂等重试和计费规则。

阅读文本 / Reading text
文档翻译 API 接入指南:用 Python 批量翻译 Word、PDF,并用 Webhook 接收结果 如果你的系统每天要处理合同、说明书、论文或报表,手动上传、等待、下载很快就会变成瓶颈。OmniDoc(至译)的文档翻译 API 把整个流程交给程序: 上传文件、创建任务、接收完成通知、下载译文 ,译文保留原文件的版式、表格、图片和公式,可输出双语对照或仅译文。 基本信息 表 1 API 基本约定 项目 说明 Base URL https://omnidoc.top/api/v1 认证 API Key 放在 X-API-Key 请求头,也可作为 Bearer 凭据发送;在 API 控制台创建 请求格式 JSON,Content-Type: application/json 请求追踪 保存每次响应的 X-Request-Id,联系支持时提供 限流 返回 429 时按 Retry-After 重试 支持哪些文件 Word(.docx)、Excel(.xlsx)、PowerPoint(.pptx)、PDF、HTML、EPUB、Markdown 与文本、SRT/ASS 字幕、CSV、PNG/JPG 图片和 UniDoc 文档(.udoc)。除 PPTX 外都支持双语输出:Word 按段落对照,Excel 按列对照,PDF 按页面对照,字幕按行对照;PPTX 请求双语时返回仅译文。 四步完成一次翻译 申请上传 :POST /upload/presign,提交文件名和大小,拿到直传地址、上传头和 finalize_token。 上传并确认 :用返回的上传头 PUT 文件(不要带 API Key),再 POST /upload/finalize 换取 document.id。 创建任务 :POST /jobs,提交 document_id 和 target_lang,建议带 Idempotency-Key。 取回结果 :轮询 GET /jobs/{id},或订阅 SSE 进度、配置 Webhook;完成后用 GET /artifacts?job_id=... 获取产物并下载。 创建任务的常用参数 表 2 POST /jobs 请求字段 字段 默认 说明 document_id — 已确认的文档 ID(必填) target_lang — 目标语言代码(必填) source_lang 自动检测 源语言代码 engine xr-397b 翻译配置:xr-397b、deepseek、qwen、chatgpt、gemini、claude output_mode bilingual bilingual 双语对照,single 仅译文 glossary_id — 术语表 ID,统一品牌名和专业词 include_images false 是否处理文档中的图片文字 context_translation false 上下文增强,前后术语更一致 style_preset — 文风预设 Python 示例:创建任务并等待完成 下面的片段只依赖 requests。完整的上传与下载流程见开发者文档的 Python 页面。 import time, uuid, requests BASE = "https://omnidoc.top/api/v1" HEADERS = {"X-API-Key": "sk_your_key"} def create_job(document_id, target_lang="en", engine="xr-397b"): r = requests.post(f"{BASE}/jobs", headers={**HEADERS, "Idempotency-Key": str(uuid.uuid4())}, json={"document_id": document_id, "target_lang": target_lang, "engine": engine}, timeout=30) r.raise_for_status() return r.json() def wait_for_job(job_id): while True: job = requests.get(f"{BASE}/jobs/{job_id}", headers=HEADERS, timeout=20).json() if job["status"] in ("completed", "failed"): return job time.sleep(5) 批量与重试:并发、排队和幂等 自动排队 :每个账号同时处理最多 5 个文件,更多任务照常创建并排队,stage_message 会说明前面还有几个。 幂等键 :相同 Idempotency-Key、相同请求体会返回原任务,不会重复创建或重复扣费;网络超时时先查询状态,不要换新键重提。 错误码 :403 表示 Key 不允许所选配置,404 表示文档或术语表不存在,415 表示格式不支持,422 表示文件为空或参数无效。 Webhook:任务结束时通知你的服务器 每个用户最多配置 3 个 Webhook(POST /webhooks 创建,PATCH 更新或停用)。文件翻译任务结束时(成功或失败)发送 job.completed 事件,data.status 为 completed 或 failed,data.char_count 为译文字符数。创建时填写 secret 后,每次回调都带 X-Webhook-Signature,用 HMAC-SHA256 对原始请求体验签即可确认来源。URL 必须可从公网访问,建议使用 HTTPS。 费用怎么算 开始前检查门槛 :PDF 需余额高于“页数 × 2 积分”,其他格式按原文字数,最少 2 积分;不足时任务以 quota_exceeded 结束,不扣费。 完成后按实际用量扣费 ;任务失败或取消不扣费。 查询免费 :余额、任务状态、用量、凭证和下载地址都不扣积分。 积分包 :3,000 积分 ¥9.9 起,购买的积分长期有效;在售套餐可用 GET /billing/credits/plans 查询。 下一步 开发者文档:https://docs.omnidoc.top/guide/quickstart/ (cURL、Python、Node.js 三种完整示例)。不想写代码?接入 OmniDoc 的 AI 助手也能直接翻译本机文件,见《让 AI 直接操作 Word、Excel 和 PPT》:https://omnidoc.top/blog/ai-word-excel-ppt-omnidoc/ 。 - 1 -
更新于 2026-10-18