งานการสร้างของ Meshy API (Text to 3D, Image to 3D, Rigging และอื่น ๆ) ทำงานแบบอะซิงโครนัส — คุณส่งงานแล้วจำเป็นต้องตรวจสอบว่างานเสร็จสิ้นเมื่อใดก่อนดึงผลลัพธ์ บทความนี้จะอธิบายวงจรชีวิตของงาน และวิธีที่รองรับสองวิธีในการทราบว่างานเสร็จสิ้นแล้ว ได้แก่ polling และ webhooks พร้อมวิธีหลีกเลี่ยงปัญหาที่พบบ่อยที่สุดคือ "เกิดข้อผิดพลาดในการดึงข้อมูลโมเดล"
วงจรชีวิตของงาน
งานการสร้างทุกงานจะเคลื่อนผ่านสถานะต่าง ๆ เพียงไม่กี่สถานะ ซึ่งแสดงผลในฟิลด์ status ของออบเจกต์งาน:
-
PENDING— งานถูกจัดคิวแล้วแต่ยังไม่เริ่มประมวลผล -
IN_PROGRESS— งานกำลังถูกประมวลผลอยู่ ฟิลด์progress(0-100) จะเพิ่มขึ้นเรื่อย ๆ ตามความคืบหน้าของงาน -
SUCCEEDED— งานเสร็จสิ้นสำเร็จและprogressเท่ากับ 100 URL ของผลลัพธ์ (ไฟล์โมเดล, เท็กซ์เจอร์, ตัวอย่าง) จะพร้อมใช้งานในการตอบกลับ -
FAILED— งานไม่สามารถเสร็จสิ้นได้ เครดิตของงานที่ล้มเหลวจะถูกคืนโดยอัตโนมัติ -
CANCELED— งานถูกยกเลิกก่อนเสร็จสิ้น
กฎที่สำคัญที่สุดเมื่อทำการเชื่อมต่อกับ API คือ อย่าพยายามดึงหรือใช้ URL ของผลลัพธ์จนกว่า status ของงานจะเป็น SUCCEEDED การอ่านผลลัพธ์ขณะที่งานยังอยู่ในสถานะ PENDING หรือ IN_PROGRESS เป็นสาเหตุที่พบบ่อยที่สุดของรายงาน "เกิดข้อผิดพลาดในการดึงข้อมูลโมเดล"
ตัวอย่างการใช้ Polling
Polling หมายถึงการเรียก endpoint "get task" ซ้ำ ๆ ด้วย task ID ของคุณจนกว่างานจะเข้าสู่สถานะสุดท้าย (SUCCEEDED, FAILED หรือ CANCELED) ลูป polling แบบง่ายมีลักษณะดังนี้:
-
ส่งคำขอการสร้างและจัดเก็บ task
idที่ได้รับกลับมา -
เรียก endpoint "retrieve task" ที่เกี่ยวข้อง (เช่น endpoint task-by-id ของ Text to 3D หรือ Image to 3D) เป็นระยะ ๆ — โดยทั่วไปคือทุกไม่กี่วินาที
-
ตรวจสอบฟิลด์
statusในการตอบกลับแต่ละครั้ง ให้คงการ polling ต่อไปขณะที่สถานะเป็นPENDINGหรือIN_PROGRESS -
หยุด polling ทันทีที่
statusเป็นSUCCEEDED(อ่าน URL ของผลลัพธ์),FAILEDหรือCANCELED -
เพิ่มการป้องกันแบบ timeout/max-attempts ที่เหมาะสมในโค้ดของคุณ เพื่อไม่ให้งานที่ค้างอยู่ถูก polling ไปเรื่อย ๆ ไม่สิ้นสุด
Polling เป็นวิธีที่ง่ายและเหมาะสำหรับสคริปต์ งานแบบกลุ่ม และการเชื่อมต่อที่มีปริมาณต่ำ สำหรับการเชื่อมต่อที่มีปริมาณสูงหรือที่ต้องการความเร็วในการตอบสนอง webhook มักเป็นตัวเลือกที่ดีกว่า
การตั้งค่า Webhook
แทนที่จะถามซ้ำ ๆ ว่า "เสร็จหรือยัง?" คุณสามารถขอให้ Meshy แจ้งเตือนเซิร์ฟเวอร์ของคุณทันทีที่งานเสร็จสิ้น วิธีใช้ webhooks:
-
กำหนดค่า webhook (callback) URL ที่ Meshy สามารถเข้าถึงได้ — โดยทั่วไปจะตั้งค่าที่ระดับบัญชี/การตั้งค่า API หรือส่งผ่านเป็นพารามิเตอร์ในคำขอการสร้าง ขึ้นอยู่กับ endpoint
-
ตรวจสอบให้แน่ใจว่า endpoint ของคุณสามารถเข้าถึงได้แบบสาธารณะผ่าน HTTPS และตอบกลับอย่างรวดเร็ว (ส่งคืนสถานะ 2xx ทันที แล้วจึงประมวลผล payload แบบอะซิงโครนัส)
-
เมื่องานเข้าสู่สถานะสุดท้าย Meshy จะส่ง payload ไปยัง endpoint ของคุณ ซึ่งมี task
idและstatusสุดท้ายของงาน -
เมื่อได้รับแล้ว ให้ค้นหารายละเอียดงานทั้งหมดด้วย
idผ่าน API แทนที่จะเชื่อเนื้อหาของ webhook เพียงอย่างเดียว เพื่อให้แน่ใจว่าคุณมีผลลัพธ์ที่ถูกต้องและเป็นปัจจุบันที่สุด
Webhooks ช่วยลดการเรียก API ที่ไม่จำเป็นและให้การแจ้งเตือนแบบเกือบทันที แต่คุณควรยังคงมีระบบ polling สำรองเป็นระยะ ๆ สำหรับงานที่การส่ง webhook อาจสูญหายหรือล่าช้า (เช่น เนื่องจากปัญหาเครือข่ายชั่วคราวในฝั่งของคุณ)
Idempotency
ไม่ว่าคุณจะใช้ polling หรือ webhooks โค้ดจัดการผลลัพธ์ของคุณควรเป็นแบบ idempotent — ปลอดภัยที่จะรันซ้ำหลายครั้งสำหรับงานเดียวกันโดยไม่เกิดผลข้างเคียง ข้อควรระวังนี้สำคัญเพราะ:
-
Webhook หนึ่งรายการอาจถูกส่งมากกว่าหนึ่งครั้งสำหรับงานเดียวกัน (การลองใหม่ฝั่งผู้ส่ง การซ้ำซ้อนของเครือข่าย ฯลฯ)
-
ลูป polling และ webhook handler อาจพยายามประมวลผลงานที่เสร็จสิ้นแล้วเดียวกันพร้อมกัน หากทั้งสองทำงานอยู่
เพื่อรักษาความเป็น idempotent ให้กำหนดตรรกะการประมวลผลของคุณโดยอ้างอิงจาก task id — ตัวอย่างเช่น ตรวจสอบก่อนว่าคุณได้จัดเก็บ/ดาวน์โหลดผลลัพธ์สำหรับ id นั้นไปแล้วหรือไม่ก่อนทำซ้ำ และทำให้การ "ทำเครื่องหมายว่าประมวลผลแล้ว" เป็นขั้นตอนเดียวแบบ atomic ในฐานข้อมูลของคุณเอง
status = SUCCEEDED
การตอบกลับที่มี "status": "SUCCEEDED" และ "progress": 100 เป็นสัญญาณเดียวที่รับประกันว่า payload ของผลลัพธ์ (URL โมเดล, เท็กซ์เจอร์, ภาพย่อ) สมบูรณ์และปลอดภัยต่อการใช้งาน โดยเฉพาะอย่างยิ่ง ในโค้ดของคุณ:
-
ตรวจสอบ
status === "SUCCEEDED"ก่อนอ่านข้อมูลใด ๆ จากฟิลด์result/URL ของโมเดล -
อย่าพึ่งพา
progressเพียงอย่างเดียว — ให้ตรวจสอบstatusด้วยเสมอ เนื่องจาก progress อาจแสดงค่าที่สูงชั่วขณะก่อนที่งานจะถูกสรุปสมบูรณ์ -
ดาวน์โหลดไฟล์ผลลัพธ์ทันทีเมื่อ
SUCCEEDED— ไฟล์ที่สร้างขึ้นจะถูกเก็บไว้บนเซิร์ฟเวอร์ของ Meshy เป็นระยะเวลาจำกัดเท่านั้น หลังจากนั้น URL จะไม่สามารถใช้งานได้อีก
ข้อผิดพลาดที่พบบ่อย
รายงาน "ฉันดึงข้อมูลโมเดลไม่ได้" ส่วนใหญ่ย้อนกลับไปที่สาเหตุใดสาเหตุหนึ่งต่อไปนี้:
-
การดึงข้อมูลเร็วเกินไป เรียกใช้ URL ของผลลัพธ์หรืออ่านฟิลด์ของโมเดลก่อนที่
statusจะเป็นSUCCEEDEDนี่เป็นสาเหตุที่พบบ่อยที่สุดอย่างชัดเจน -
ไฟล์หมดอายุ รอนานเกินไปหลังจาก
SUCCEEDEDก่อนดาวน์โหลด — URL ของผลลัพธ์จะหยุดทำงานหลังจากช่วงเวลาการเก็บรักษาของงานประเภทนั้นสิ้นสุดลง -
ใช้ task ID ที่ล้าสมัยหรือผิด — ตัวอย่างเช่น การนำ ID จากคำขอก่อนหน้าที่ไม่เกี่ยวข้องกันมาใช้ซ้ำ
-
เข้าใจผิดว่า
FAILEDเป็นสถานะชั่วคราว และคง polling งานที่ล้มเหลวไปแล้วต่อไป แทนที่จะส่งคำขอใหม่ -
ปัญหาเครือข่าย/timeout ระหว่างเซิร์ฟเวอร์ของคุณกับ Meshy ที่ถูกเข้าใจผิดว่าเป็นปัญหาการสร้างโมเดล
การลองใหม่
หากผลลัพธ์การสร้างไม่เป็นไปตามความคาดหวังของคุณ หรือคำขอล้มเหลวทั้งหมด โปรดคำนึงถึงสิ่งต่อไปนี้:
-
ปัจจุบัน Meshy API ไม่รองรับการลองใหม่ของงานที่มีอยู่ในตัว — หากต้องการลองอีกครั้ง ให้ส่งคำขอการสร้างใหม่ ซึ่งจะใช้เครดิตตามปกติ
-
สำหรับความล้มเหลวของเครือข่ายชั่วคราวเมื่อเรียก API (timeout, การตอบกลับ 5xx) การใช้ exponential backoff ช่วงสั้น ๆ ก่อนส่งคำขอใหม่เป็นสิ่งที่สมเหตุสมผล
-
สำหรับการ polling เอง ให้ลองเรียก "get task" ซ้ำเมื่อเกิดข้อผิดพลาดเครือข่ายชั่วคราว แต่อย่าถือว่าการ poll ที่ล้มเหลวเพียงครั้งเดียวเป็นความล้มเหลวของการสร้าง — ให้เชื่อฟิลด์
statusเฉพาะเมื่อคุณได้รับการตอบกลับที่สำเร็จเท่านั้น -
หากคุณต้องการฟังก์ชันการลองใหม่ในตัวสำหรับการสร้าง โปรดติดต่อทีมขายของ Meshy เกี่ยวกับตัวเลือกแผน enterprise
FAQ
1. ทำไมฉันจึงพบข้อผิดพลาดอย่างต่อเนื่องเมื่อดึงข้อมูลโมเดลจากผลลัพธ์การสร้างผ่าน API?
สิ่งนี้เกิดขึ้นเกือบทุกครั้งเนื่องจากโค้ดพยายามอ่านผลลัพธ์ก่อนที่งานจะเสร็จสิ้น โปรดยืนยันเสมอว่า status เป็น SUCCEEDED (และ progress เท่ากับ 100) ก่อนดึง URL ของโมเดล
2. ฉันควรใช้ polling หรือ webhooks?
Polling ตั้งค่าง่ายกว่าและเหมาะสำหรับการใช้งานที่มีปริมาณต่ำหรือสคริปต์ครั้งเดียว ส่วน Webhooks เหมาะกว่าสำหรับการเชื่อมต่อระดับ production ที่มีงานพร้อมกันจำนวนมาก เนื่องจากช่วยหลีกเลี่ยงคำขอซ้ำที่ไม่จำเป็นและแจ้งเตือนคุณทันทีเมื่องานเสร็จสิ้น
3. เซิร์ฟเวอร์ของฉันควรทำอย่างไรหากได้รับ webhook เดียวกันสองครั้ง?
จัดการแบบ idempotent — ตรวจสอบ task id เทียบกับสิ่งที่คุณประมวลผลไปแล้ว และข้ามการประมวลผลซ้ำหากจัดการไปแล้ว
4. Webhook ของฉันไม่มาเลย — ควรทำอย่างไร?
ให้กลับไปใช้การ polling งานโดยตรงด้วย id พร้อมทั้งตรวจสอบว่า endpoint ของคุณสามารถเข้าถึงได้แบบสาธารณะผ่าน HTTPS และส่งคืนการตอบกลับ 2xx อย่างรวดเร็ว เนื่องจาก endpoint ที่ช้าหรือเข้าถึงไม่ได้สามารถทำให้เกิดปัญหาในการส่งข้อมูลได้
5. ฉันสามารถลองใหม่การสร้างที่ล้มเหลวหรือไม่น่าพอใจโดยตรงผ่าน API ได้หรือไม่?
ปัจจุบันยังไม่รองรับ — คุณจะต้องส่งคำขอการสร้างใหม่ ซึ่งจะใช้เครดิตตามปกติ หากคุณต้องการการรองรับการลองใหม่ในตัว โปรดติดต่อฝ่ายขายเกี่ยวกับตัวเลือก enterprise
6. หลังจาก status เป็น SUCCEEDED ฉันมีเวลาเท่าไหร่ในการดาวน์โหลดผลลัพธ์?
ไฟล์ผลลัพธ์จะถูกเก็บไว้บนเซิร์ฟเวอร์ของ Meshy เป็นระยะเวลาจำกัดหลังจากงานเสร็จสิ้นเท่านั้น ดังนั้นควรดาวน์โหลดผลลัพธ์ไปยังพื้นที่จัดเก็บของคุณเองทันทีที่งานสำเร็จ แทนที่จะรอ