Webhooks
ให้ Meshy ส่งคำขอ POST ไปยังเซิร์ฟเวอร์ของคุณเมื่องาน API มีความคืบหน้าหรือเสร็จสิ้น เพื่อที่คุณจะไม่ต้องคอยสำรวจสถานะ (polling)
เหตุผลที่ควรใช้ webhooks
webhooks ใช้แรงงานน้อยกว่าและมีค่าใช้จ่ายต่ำกว่าการ polling API เพื่อตรวจสอบสถานะของแต่ละงาน Meshy จะส่งการอัปเดตแต่ละครั้งทันทีที่เกิดขึ้น ทำให้คุณได้รับข้อมูลเร็วขึ้น และ webhooks ยังรองรับการขยายตัวได้ดีกว่าการ polling นอกจากนี้คุณยังส่งคำขอน้อยลง ซึ่งช่วยให้ห่างจาก ขีดจำกัดอัตรา มากขึ้น
ตั้งค่า webhook
หากต้องการเพิ่ม webhook ให้ทำตามขั้นตอนต่อไปนี้:
- เปิด หน้า Webhooks ใน Developer Platform แล้วคลิก Create Webhook
- ในช่อง Payload URL ให้ป้อน URL ที่จะรับการส่งข้อมูล Meshy จะส่งข้อมูลผ่าน
https://เท่านั้น - เก็บสำเนาของ Webhook Secret ที่ไดอะล็อกกรอกให้โดยอัตโนมัติไว้ ทุกการส่งข้อมูลจะมีค่านี้แนบมาด้วย เพื่อให้เซิร์ฟเวอร์ของคุณตรวจสอบได้ว่าคำขอนั้นมาจาก Meshy จริง สำหรับ webhook ที่คุณมีอยู่แล้ว ให้คลิกไอคอนรูปดวงตาในคอลัมน์ Secret เพื่อดูค่านี้
- เลือก Active แล้วคลิก Confirm
แต่ละบัญชีสามารถมี webhook ที่ใช้งานอยู่ได้ 5 รายการ และมีได้ทั้งหมดสูงสุด 10 รายการ webhook ที่ใช้งานอยู่ทุกรายการจะได้รับการอัปเดตสถานะของงาน API ทั้งหมดของคุณ
หากต้องการทดสอบ webhook กับเซิร์ฟเวอร์บนคอมพิวเตอร์ของคุณ โปรดดู ทดสอบบนคอมพิวเตอร์ของคุณ
จัดการการส่งข้อมูล
หากต้องการยอมรับการส่งข้อมูล ให้ตอบกลับด้วยสถานะที่ต่ำกว่า 400 เช่น 200 หรือ 202 Meshy จะรอการตอบกลับประมาณ 25 วินาที ดังนั้นให้จัดเก็บข้อมูลที่ส่งมาและตอบกลับก่อนเป็นอันดับแรก จากนั้นจึงค่อยทำงานที่ใช้เวลานาน เช่น การดาวน์โหลดโมเดล
สถานะที่ 400 ขึ้นไป หรือการไม่ตอบกลับเลย ถือว่าเป็นการส่งข้อมูลที่ล้มเหลว Meshy จะลองส่งซ้ำโดยเว้นระยะเวลารอนานขึ้นในแต่ละครั้ง สูงสุด 4 ครั้งสำหรับการอัปเดต IN_PROGRESS และสูงสุด 9 ครั้งสำหรับสถานะสุดท้าย หากการอัปเดต 20 ครั้งติดต่อกันล้มเหลวในทุกความพยายาม Meshy อาจปิดใช้งาน webhook นั้น หากต้องการเปิดใช้งานอีกครั้ง ให้แก้ไขที่หน้า Webhooks และเลือก Active
เขียนโค้ดของคุณให้รองรับกรณีต่อไปนี้:
- การส่งข้อมูลอาจมาถึงไม่เรียงลำดับ การส่งข้อมูล
IN_PROGRESSอาจมาถึงหลังจากการส่งข้อมูลสุดท้าย ดังนั้นอย่าให้มันไปแทนที่สถานะสุดท้าย - การอัปเดตเดียวกันอาจมาถึงมากกว่าหนึ่งครั้ง ให้จัดการแต่ละคู่ของ
idและstatusเพียงครั้งเดียว - ใครก็ตามที่รู้ URL ของคุณสามารถส่งคำขอมาได้ ให้เปรียบเทียบ
X-MESHY-API-WEBHOOK-SECRET-KEYกับสำเนา secret ของคุณ และปฏิเสธคำขอที่ไม่ตรงกัน
หากการส่งข้อมูลสุดท้ายของงานยังไม่มาถึงหลังจากเวลาประมาณสองเท่าของเวลาปกติของงานนั้น ให้ดึงข้อมูลงานจากเอนด์พอยต์ GET ของงานนั้น สำหรับเวลาที่ใช้โดยทั่วไปและควรรอนานเท่าใด โปรดดู วงจรชีวิตของงาน
ทดสอบบนคอมพิวเตอร์ของคุณ
Meshy จะส่งข้อมูลไปยัง URL https:// สาธารณะเท่านั้น ดังนั้นจึงไม่สามารถเข้าถึงเซิร์ฟเวอร์บนคอมพิวเตอร์ของคุณได้โดยตรง หากต้องการทดสอบโค้ดบนคอมพิวเตอร์ของคุณ ให้ส่งต่อ URL สาธารณะไปยังเครื่องของคุณด้วย webhook proxy ขั้นตอนต่อไปนี้ใช้ smee.io และบริการ webhook proxy อื่น ๆ ก็ทำงานในลักษณะเดียวกัน
-
เปิด smee.io แล้วคลิก Start a new channel คัดลอก URL ที่อยู่ใต้ Webhook Proxy URL
-
หากคุณยังไม่มี smee client ให้ติดตั้งก่อน:
npm install --global smee-client -
ส่งต่อช่องสัญญาณไปยังเซิร์ฟเวอร์ของคุณ แทนที่
WEBHOOK_PROXY_URLด้วย webhook proxy URL ของคุณ:smee --url WEBHOOK_PROXY_URL --path /webhook --port 3000ผลลัพธ์จะมีลักษณะดังนี้ โดยที่
WEBHOOK_PROXY_URLคือ webhook proxy URL ของคุณ:Forwarding WEBHOOK_PROXY_URL to http://127.0.0.1:3000/webhook Connected WEBHOOK_PROXY_URLเปิดให้ทำงานต่อไปในระหว่างที่คุณทดสอบ หากต้องการหยุดการส่งต่อ ให้กด Ctrl+C เซิร์ฟเวอร์ของคุณจะรับการส่งข้อมูลที่พอร์ต
3000ที่พาธ/webhookดังนั้นให้ตั้งค่าโค้ดของคุณให้คอยรับฟังที่จุดนั้น -
ที่ หน้า Webhooks ให้สร้าง webhook โดยใช้ webhook proxy URL เป็น Payload URL
เพย์โหลดการส่งข้อมูล
Meshy จะส่งข้อมูลครั้งหนึ่งขณะที่งานอยู่ในสถานะ IN_PROGRESS และส่งอีกครั้งเมื่องานถึงสถานะสุดท้าย งานอาจถึงสถานะสุดท้ายได้โดยไม่มีการส่งข้อมูล IN_PROGRESS ก็ได้
การส่งข้อมูลแต่ละครั้งเป็นคำขอ POST ไปยังเพย์โหลด URL ของคุณ พร้อมส่วนหัวต่อไปนี้:
| ส่วนหัว | ค่า |
|---|---|
X-MESHY-API-WEBHOOK-SECRET-KEY | secret ของ webhook |
X-MESHY-API-WEBHOOK-USER-ID | ไอดีของผู้ใช้ Meshy ที่เป็นเจ้าของ webhook |
Meshy-Webhook-Version | v1 รูปแบบของเนื้อหา |
Content-Type | application/json |
User-Agent | MeshyAPIWebhook/1.0.0 |
เนื้อหา JSON คือออบเจกต์ของงาน ซึ่งเป็นออบเจกต์เดียวกับที่เอนด์พอยต์ GET ของงานนั้นส่งคืน ยกเว้น progress การส่งข้อมูลแต่ละครั้งจะส่ง progress เป็นค่าใดค่าหนึ่งต่อไปนี้:
50ขณะที่งานอยู่ในสถานะIN_PROGRESS100เมื่องานสำเร็จ0เมื่องานล้มเหลวหรือถูกยกเลิก
สำหรับฟิลด์ของแต่ละออบเจกต์งาน พร้อมตัวอย่าง โปรดดูหัวข้อต่อไปนี้: