Las tareas de generación de la API de Meshy (Text to 3D, Image to 3D, Rigging y más) se ejecutan de forma asíncrona: envías una tarea y luego necesitas saber cuándo ha terminado antes de obtener el resultado. Este artículo explica el ciclo de vida de las tareas y las dos formas admitidas de saber cuándo una tarea ha finalizado: el sondeo (polling) y los webhooks, además de cómo evitar el problema más común de «errores al recuperar el modelo».
Ciclo de vida de las tareas
Cada tarea de generación pasa por un pequeño conjunto de estados, devueltos en el campo status del objeto de la tarea:
PENDING: la tarea está en cola, pero el procesamiento aún no ha comenzado.IN_PROGRESS: la tarea se está procesando activamente. El campoprogress(0-100) aumenta a medida que se completa el trabajo.SUCCEEDED: la tarea finalizó correctamente yprogresses 100. Las URL de los resultados (archivos del modelo, texturas, vistas previas) ya están disponibles en la respuesta.FAILED: la tarea no pudo completarse. Los créditos de las tareas fallidas se reembolsan automáticamente.CANCELED: la tarea fue cancelada antes de completarse.
La regla más importante al integrarte con la API es: nunca intentes obtener ni usar las URL de los resultados hasta que el status de la tarea sea SUCCEEDED. Leer los resultados mientras la tarea todavía está en PENDING o IN_PROGRESS es la causa más frecuente de los informes de «errores al recuperar el modelo».
Ejemplo de sondeo
El sondeo significa llamar repetidamente al endpoint de «obtener tarea» para el ID de tu tarea hasta que alcance un estado terminal (SUCCEEDED, FAILED o CANCELED). Un bucle de sondeo simple se ve así:
Envía la solicitud de generación y guarda el
idde tarea devuelto.Llama al endpoint correspondiente de «recuperar tarea» (por ejemplo, el endpoint de tarea por ID de Text to 3D o Image to 3D) a intervalos regulares; unos segundos es lo habitual.
Comprueba el campo
statusen cada respuesta. Sigue sondeando mientras esté enPENDINGoIN_PROGRESS.Deja de sondear en cuanto
statusseaSUCCEEDED(lee las URL de los resultados),FAILEDoCANCELED.Añade un límite razonable de tiempo de espera o número máximo de intentos en tu cliente para que una tarea atascada no haga sondeos indefinidamente.
El sondeo es simple y funciona bien para scripts, trabajos por lotes e integraciones de bajo volumen. Para integraciones de alto volumen o sensibles a la latencia, un webhook suele ser una mejor opción.
Configuración de webhooks
En lugar de preguntar repetidamente «¿ya está lista?», puedes pedirle a Meshy que notifique a tu servidor en el momento en que una tarea termine. Para usar webhooks:
Configura una URL de webhook (callback) que Meshy pueda alcanzar; esto generalmente se establece a nivel de configuración de la cuenta/API o se pasa como parámetro en la solicitud de generación, según el endpoint.
Asegúrate de que tu endpoint sea accesible públicamente a través de HTTPS y responda rápidamente (devuelve un estado 2xx de inmediato y luego procesa el payload de forma asíncrona).
Cuando la tarea alcance un estado terminal, Meshy enviará un payload a tu endpoint con el
idde la tarea y sustatusfinal.Al recibirlo, consulta los detalles completos de la tarea por
ida través de la API en lugar de confiar solo en el cuerpo del webhook, para asegurarte de tener el resultado autorizado y actualizado.
Los webhooks reducen las llamadas innecesarias a la API y te ofrecen una notificación casi instantánea, pero aun así deberías mantener un respaldo de sondeo periódico para las tareas en las que la entrega de un webhook pueda perderse o retrasarse (por ejemplo, debido a un problema de red transitorio de tu lado).
Idempotencia
Ya sea que uses sondeo o webhooks, tu código de manejo de resultados debe ser idempotente, es decir, seguro para ejecutarse más de una vez para la misma tarea sin efectos secundarios. Esto es importante porque:
Un webhook puede entregarse más de una vez para la misma tarea (reintentos del lado del remitente, duplicación en la red, etc.).
Un bucle de sondeo y un controlador de webhook podrían intentar procesar la misma tarea completada si ambos están en ejecución.
Para mantener la idempotencia, basa tu lógica de procesamiento en el id de la tarea; por ejemplo, comprueba si ya has almacenado o descargado los resultados de ese id antes de hacerlo de nuevo, y convierte «marcar como procesada» en un único paso atómico en tu propia base de datos.
status = SUCCEEDED
Una respuesta con "status": "SUCCEEDED" y "progress": 100 es la única señal que garantiza que el payload del resultado (URL del modelo, texturas, miniaturas) está completo y es seguro de usar. En concreto, en tu código:
Verifica que
status === "SUCCEEDED"antes de leer nada de los camposresulto de la URL del modelo.No confíes solo en
progress; comprueba siempre tambiénstatus, ya que el progreso puede mostrar brevemente valores altos antes de que la tarea esté completamente finalizada.Descarga los archivos de resultados con prontitud una vez que el estado sea
SUCCEEDED; los recursos generados solo se conservan en los servidores de Meshy durante un tiempo limitado, después del cual las URL dejarán de funcionar.
Errores comunes
La mayoría de los informes de «no puedo recuperar mi modelo» se remiten a una de estas causas:
Obtener los resultados demasiado pronto. Llamar a la URL del resultado o leer los campos del modelo antes de que
statusseaSUCCEEDED. Esta es, con diferencia, la causa más frecuente.Recursos caducados. Esperar demasiado después de
SUCCEEDEDpara descargar; las URL de los resultados dejan de funcionar una vez transcurrida la ventana de retención de ese tipo de tarea.Usar un ID de tarea obsoleto o incorrecto: por ejemplo, reutilizar un ID de una solicitud anterior no relacionada.
Tratar
FAILEDcomo un estado transitorio y seguir sondeando una tarea que ya ha fallado en lugar de volver a enviarla.Problemas de red o de tiempo de espera entre tu servidor y Meshy que se malinterpretan como un problema de generación.
Reintentos
Si una generación no cumple tus expectativas o una solicitud falla por completo, ten en cuenta lo siguiente:
La API de Meshy actualmente no admite reintentar una tarea existente en su lugar; para intentarlo de nuevo, envía una nueva solicitud de generación, que consumirá créditos con normalidad.
Ante fallos de red transitorios al llamar a la API (tiempos de espera agotados, respuestas 5xx), es razonable aplicar un retroceso exponencial breve antes de reenviar la solicitud.
Para el sondeo en sí, reintenta la llamada de «obtener tarea» ante errores de red transitorios, pero no trates un único sondeo fallido como un fallo de generación; confía únicamente en el campo
statusuna vez que recibas una respuesta exitosa.Si necesitas una función de reintento integrada para las generaciones, contacta con el equipo de ventas de Meshy para conocer las opciones de planes empresariales.
Preguntas frecuentes
1. ¿Por qué obtengo errores constantemente al recuperar modelos de un resultado de generación a través de la API?
Esto casi siempre sucede porque el código intenta leer el resultado antes de que la tarea haya terminado. Confirma siempre que status sea SUCCEEDED (y que progress sea 100) antes de recuperar las URL del modelo.
2. ¿Debería usar sondeo o webhooks?
El sondeo es más sencillo de configurar y adecuado para scripts de bajo volumen o de un solo uso. Los webhooks son mejores para integraciones de producción con muchas tareas concurrentes, ya que evitan solicitudes repetidas innecesarias y te notifican de inmediato cuando una tarea se completa.
3. ¿Qué debe hacer mi servidor si recibe el mismo webhook dos veces?
Manéjalo de forma idempotente: comprueba el id de la tarea con lo que ya has procesado y omite el reprocesamiento si ya se ha gestionado.
4. Nunca llegó mi webhook, ¿qué debo hacer?
Recurre al sondeo de la tarea directamente por su id. También confirma que tu endpoint sea accesible públicamente a través de HTTPS y devuelva una respuesta 2xx rápida, ya que los endpoints lentos o inaccesibles pueden causar problemas de entrega.
5. ¿Puedo reintentar una generación fallida o insatisfactoria directamente a través de la API?
Actualmente no; tendrás que enviar una nueva solicitud de generación, que consume créditos con normalidad. Contacta con ventas sobre las opciones empresariales si necesitas compatibilidad con reintentos integrados.
6. ¿Cuánto tiempo tengo para descargar mis resultados después de que el estado sea SUCCEEDED?
Los archivos de resultados solo se conservan en los servidores de Meshy durante un tiempo limitado después de que una tarea se completa, así que descarga los resultados en tu propio almacenamiento tan pronto como la tarea se complete con éxito, en lugar de esperar.
Artículos relacionados