เริ่มการแปลเอกสารที่เผยแพร่ของสคีมาเป็นชุดไปยังภาษาปลายทางในเบื้องหลัง
จัดคิวการแปลเอกสารที่เผยแพร่ทั้งหมดจากสคีมาคอมโพเนนต์หนึ่งรายการหรือมากกว่าไปยังชุดภาษาปลายทาง ผลลัพธ์จะถูกเพิ่มหรืออัปเดตในตาราง translations เมื่อการแปลแต่ละรายการเสร็จสมบูรณ์
Endpoint: POST /translation
การยืนยันตัวตน: Bearer JWT (WorkOS)
{
"websiteId": "<uuid>",
"schemaNames": ["post", "hero"],
"languages": ["fr", "es", "de"]
}
| ฟิลด์ | ประเภท | จำเป็น | หมายเหตุ |
|---|---|---|---|
websiteId | uuid | ใช่ | เว็บไซต์ที่มีเอกสารต้นฉบับ |
schemaNames | string[] | ใช่* | สคีมาคอมโพเนนต์ที่ต้องการแปล ชื่อที่ซ้ำกันจะถูกนำออก |
schemaName | string | ใช่* | ทางเลือกแบบเดิมสำหรับส่งสคีมาเพียงรายการเดียว |
languages | string[] | ใช่ | รหัสภาษาปลายทางที่รองรับ รหัสที่ซ้ำกันจะถูกนำออก |
* ระบุ schemaNames หรือ schemaName อย่างใดอย่างหนึ่ง
ระบบจะพิจารณาเฉพาะเอกสารที่เผยแพร่แล้วและมีเนื้อหาที่เผยแพร่ไม่เป็นค่าว่างเท่านั้น
{
"job_id": "<uuid>",
"website_id": "<uuid>",
"schema_name": null,
"schema_names": ["post", "hero"],
"languages": ["fr", "es", "de"],
"status": "queued",
"documents_processed": 12,
"translations_scheduled": 30,
"translations_skipped": 6,
"translations_completed": 0,
"translations_failed": 0,
"reused": false,
"created_at": "2026-07-15T18:00:00Z",
"updated_at": "2026-07-15T18:00:00Z"
}
ส่งคืน:
202 Accepted เมื่อการแปลถูกจัดเข้าคิวแล้ว200 OK เมื่อการแปลทุกรายการเป็นข้อมูลปัจจุบันอยู่แล้ว| ฟิลด์ | คำอธิบาย |
|---|---|
job_id | ตัวระบุที่ใช้เรียกดูความคืบหน้าของงาน |
status | สถานะปัจจุบันของงาน |
documents_processed | จำนวนเอกสารต้นฉบับที่เข้าเกณฑ์ที่พบ |
translations_scheduled | จำนวนคู่เอกสาร-ภาษาที่ถูกจัดเข้าคิว |
translations_skipped | จำนวนรายการที่ข้ามเนื่องจากแฮชต้นฉบับเป็นข้อมูลปัจจุบัน |
translations_completed | จำนวนรายการที่แปลสำเร็จ |
translations_failed | จำนวนรายการที่ล้มเหลว |
reused | ระบุว่าการตอบกลับอ้างถึงงานที่กำลังทำงานอยู่เดิมหรือไม่ |
สถานะงานที่เป็นไปได้มีดังนี้:
preparingqueuedrunningcompletedcompleted_with_errorsfailedคู่เอกสาร-ภาษาแต่ละคู่จะจัดเก็บแฮช SHA-256 ของเนื้อหาที่เผยแพร่ของเอกสารต้นฉบับ
ระบบจะข้ามการแปลเมื่อแฮชต้นฉบับที่จัดเก็บไว้ตรงกับเนื้อหาที่เผยแพร่ปัจจุบัน ซึ่งทำให้สามารถเรียกใช้เอนด์พอยต์นี้ซ้ำได้โดยไม่ต้องแปลเนื้อหาที่ไม่มีการเปลี่ยนแปลงอีก
หากเนื้อหาที่เผยแพร่มีการเปลี่ยนแปลงในขณะที่งานที่เทียบเท่ากำลังทำงานอยู่ บริการจะปฏิเสธคำขอใหม่ ให้ส่งคำขออีกครั้งหลังจากงานที่กำลังทำงานอยู่เสร็จสิ้น
การแปลจะทำงานแบบอะซิงโครนัสหลังจากการตอบกลับครั้งแรก
completed_with_errorscurl -X POST '{TRANSLATION_API_URL}/translation' \\
-H 'Authorization: Bearer <workos-jwt>' \\
-H 'Content-Type: application/json' \\
-d '{
"websiteId": "<uuid>",
"schemaNames": ["post", "hero"],
"languages": ["fr", "es"]
}'
400 Bad Request — ไม่มีสคีมาหรือภาษา ภาษาที่ระบุไม่รองรับ หรือชุดงานมีขนาดเกินขีดจำกัดที่กำหนดค่าไว้401 Unauthorized — ไม่มีโทเค็น bearer หรือโทเค็นไม่ถูกต้อง409 Conflict — มีงานที่ตรงกันกำลังทำงานอยู่ แต่เนื้อหาต้นฉบับที่เผยแพร่มีการเปลี่ยนแปลง500 Internal Server Error — ไม่สามารถเตรียมเอกสารต้นฉบับได้ หรือการดำเนินการกับฐานข้อมูลล้มเหลวเรียกดูความคืบหน้าล่าสุดของงานแปล
Endpoint: GET /translation-jobs/{job_id}
การยืนยันตัวตน: Bearer JWT (WorkOS)
การตอบกลับจะใช้วัตถุงานเดียวกับที่ส่งคืนโดย POST /translation พร้อมสถานะและจำนวนความคืบหน้าที่อัปเดตแล้ว
{
"job_id": "<uuid>",
"website_id": "<uuid>",
"schema_name": null,
"schema_names": ["post", "hero"],
"languages": ["fr", "es"],
"status": "running",
"documents_processed": 12,
"translations_scheduled": 24,
"translations_skipped": 0,
"translations_completed": 16,
"translations_failed": 1,
"reused": false,
"created_at": "2026-07-15T18:00:00Z",
"updated_at": "2026-07-15T18:01:30Z"
}
curl '{TRANSLATION_API_URL}/translation-jobs/<job-id>' \\
-H 'Authorization: Bearer <workos-jwt>'
401 Unauthorized — ไม่มีโทเค็น bearer หรือโทเค็นไม่ถูกต้อง404 Not Found — ไม่มีงานดังกล่าว หรือไม่มีการเก็บงานนั้นไว้อีกต่อไปขณะนี้งานแปลจะถูกเก็บไว้ในหน่วยความจำ สถานะงานจะสูญหายเมื่อบริการแปลเริ่มทำงานใหม่ และการปรับใช้แบบหลายอินสแตนซ์จำเป็นต้องใช้การกำหนดเส้นทางแบบ sticky