Завдання генерації Meshy API (Text to 3D, Image to 3D, Rigging тощо) виконуються асинхронно — ви надсилаєте завдання, а потім маєте дізнатися, коли його завершено, перш ніж отримувати результат. У цій статті пояснюється життєвий цикл завдання та два підтримувані способи дізнатися, коли завдання завершено: опитування та вебхуки, а також як уникнути найпоширенішої проблеми з «errors retrieving the model».
Огляд
Життєвий цикл завдання
Кожне завдання генерації проходить через невеликий набір станів, які повертаються в полі status об'єкта завдання:
PENDING— завдання поставлено в чергу, але обробка ще не почалася.IN_PROGRESS— завдання активно обробляється. Полеprogress(0-100) зростає в міру виконання роботи.SUCCEEDED— завдання успішно завершено, аprogressдорівнює 100. URL-адреси результатів (файли моделей, текстури, попередні перегляди) тепер доступні у відповіді.FAILED— завдання не вдалося завершити. Кредити за невдалі завдання повертаються автоматично.CANCELED— завдання було скасовано до завершення.
Найважливіше правило під час інтеграції з API: ніколи не намагайтеся отримати або використати URL-адреси результатів, доки status завдання не стане SUCCEEDED. Читання результатів, коли завдання ще перебуває в стані PENDING або IN_PROGRESS, — найпоширеніша причина повідомлень про "помилки під час отримання моделі".
Приклад опитування
Опитування означає повторний виклик ендпойнта "get task" для вашого ідентифікатора завдання, доки воно не досягне кінцевого стану (SUCCEEDED, FAILED або CANCELED). Простий цикл опитування виглядає так:
Надішліть запит на генерацію та збережіть повернутий
idзавдання.Викликайте відповідний ендпойнт "retrieve task" (наприклад, ендпойнт завдання за ідентифікатором для Text to 3D або Image to 3D) через інтервал — зазвичай кілька секунд.
Перевіряйте поле
statusу кожній відповіді. Продовжуйте опитування, поки воно має значенняPENDINGабоIN_PROGRESS.Припиніть опитування, щойно
statusстанеSUCCEEDED(прочитайте URL-адреси результатів),FAILEDабоCANCELED.Додайте у свій клієнт розумне обмеження часу очікування/максимальної кількості спроб, щоб зависле завдання не опитувалося нескінченно.
Опитування просте й добре працює для скриптів, пакетних завдань і низьконавантажених інтеграцій. Для високонавантажених інтеграцій або інтеграцій, чутливих до затримки, зазвичай краще підходить вебхук.
Налаштування вебхука
Замість того щоб постійно запитувати «чи вже готово?», ви можете попросити Meshy повідомити ваш сервер у момент завершення завдання. Щоб використовувати вебхуки:
Налаштуйте URL вебхука (callback), доступний для Meshy — зазвичай він задається на рівні налаштувань облікового запису/API або передається як параметр у запиті на генерацію, залежно від ендпоінта.
Переконайтеся, що ваш ендпоінт загальнодоступний через HTTPS і швидко відповідає (одразу повертайте статус 2xx, а потім обробляйте дані асинхронно).
Коли завдання досягає термінального стану, Meshy надсилає на ваш ендпоінт дані, що містять
idзавдання та його фінальнийstatus.Після отримання знайдіть повні відомості про завдання за
idчерез API, а не покладайтеся лише на тіло вебхука, щоб переконатися, що ви маєте авторитетний актуальний результат.
Вебхуки зменшують кількість непотрібних викликів API і забезпечують майже миттєве сповіщення, але вам усе одно варто залишити періодичне опитування як резервний варіант для завдань, де доставку вебхука може бути пропущено або затримано (наприклад, через тимчасову мережеву проблему на вашому боці).
Ідемпотентність
Незалежно від того, використовуєте ви опитування чи вебхуки, ваш код обробки результатів має бути ідемпотентним — безпечним для багаторазового запуску для одного й того самого завдання без побічних ефектів. Це важливо, тому що:
Вебхук може надходити більше одного разу для одного й того самого завдання (повторні спроби на боці відправника, дублювання в мережі тощо).
Цикл опитування та обробник вебхука можуть обидва намагатися обробити одне й те саме завершене завдання, якщо обидва запущені.
Щоб зберегти ідемпотентність, прив’яжіть логіку обробки до id завдання — наприклад, перевірте, чи ви вже зберегли/завантажили результати для цього id, перш ніж робити це знову, і зробіть «позначити як оброблене» єдиним атомарним кроком у вашій базі даних.
status = SUCCEEDED
Відповідь із "status": "SUCCEEDED" та "progress": 100 — це єдиний сигнал, який гарантує, що дані результату (URL-адреси моделей, текстури, мініатюри) є повними й безпечними для використання. Конкретно, у вашому коді:
Перевіряйте
status === "SUCCEEDED", перш ніж читати будь-що з полівresult/URL-адреси моделі.Не покладайтеся лише на
progress— завжди перевіряйте такожstatus, оскількиprogressможе короткочасно показувати високі значення, перш ніж завдання буде остаточно завершено.Завантажуйте файли результатів одразу після
SUCCEEDED— згенеровані активи зберігаються на серверах Meshy лише протягом обмеженого часу, після чого URL-адреси більше не працюватимуть.
Поширені помилки
Більшість звітів «не можу отримати свою модель» зводяться до однієї з таких причин:
Занадто раннє отримання. Виклик URL результату або читання полів моделі до того, як
statusставSUCCEEDED. Це, безумовно, найчастіша причина.Прострочені ресурси. Занадто довге очікування після
SUCCEEDEDперед завантаженням — URL результатів перестають працювати після завершення вікна зберігання для цього типу завдання.Використання застарілого або неправильного ідентифікатора завдання — наприклад, повторне використання ID з попереднього, не пов’язаного запиту.
Ставлення до
FAILEDяк до тимчасового стану й продовження опитування завдання, яке вже завершилося невдачею, замість повторного надсилання.Проблеми з мережею/тайм-аутом між вашим сервером і Meshy, які неправильно сприймаються як проблема генерації.
Повторні спроби
Якщо генерація не відповідає вашим очікуванням або запит повністю не вдається, зверніть увагу на таке:
Meshy API наразі не підтримує повторну спробу наявного завдання на місці — щоб спробувати ще раз, надішліть новий запит на генерацію, який звичайним чином споживатиме кредити.
Для тимчасових мережевих збоїв під час виклику API (тайм-аути, відповіді 5xx) доцільно застосувати коротку експоненційну затримку перед повторним надсиланням запиту.
Щодо самого опитування, повторюйте виклик «get task» у разі тимчасових мережевих помилок, але не вважайте одну невдалу спробу опитування збоєм генерації — довіряйте полю
statusлише після отримання успішної відповіді.Якщо вам потрібна вбудована функція повторних спроб для генерацій, зверніться до відділу продажів Meshy щодо варіантів корпоративного плану.
FAQ
1. Чому я постійно отримую помилки під час отримання моделей із результату генерації через API?
Це майже завжди відбувається тому, що код намагається прочитати результат до завершення завдання. Завжди переконуйтеся, що status має значення SUCCEEDED (а progress — 100), перш ніж отримувати URL моделей.
2. Використовувати опитування чи вебхуки?
Опитування простіше налаштувати, і воно підходить для низького навантаження або одноразових скриптів. Вебхуки краще підходять для продакшн-інтеграцій із багатьма одночасними завданнями, оскільки вони уникають зайвих повторюваних запитів і одразу повідомляють вас про завершення завдання.
3. Що має робити мій сервер, якщо він отримує той самий вебхук двічі?
Обробляйте це ідемпотентно — перевіряйте id завдання за тим, що ви вже обробили, і пропускайте повторну обробку, якщо його вже було оброблено.
4. Мій вебхук так і не надійшов — що робити?
Поверніться до опитування завдання за id безпосередньо. Також переконайтеся, що ваша кінцева точка загальнодоступна через HTTPS і швидко повертає відповідь 2xx, оскільки повільні або недоступні кінцеві точки можуть спричиняти проблеми з доставкою.
5. Чи можу я повторити невдалу або незадовільну генерацію безпосередньо через API?
Наразі ні — вам потрібно надіслати новий запит на генерацію, який зазвичай споживає кредити. Зверніться до відділу продажів щодо корпоративних варіантів, якщо вам потрібна вбудована підтримка повторних спроб.
6. Скільки часу я маю на завантаження результатів після того, як статус став SUCCEEDED?
Файли результатів зберігаються на серверах Meshy лише обмежений час після завершення завдання, тому завантажуйте результати у власне сховище щойно завдання завершиться успішно, а не чекайте.