Las tareas de generación de la API de Meshy (Text to 3D, Image to 3D, Rigging y demás) se ejecutan de forma asíncrona: envías una tarea y luego debes averiguar cuándo ha terminado antes de obtener el resultado. En este artículo se explica el ciclo de vida de la tarea y las dos formas admitidas de saber cuándo ha finalizado una tarea: el sondeo y los webhooks, además de cómo evitar el problema más común de «errores al recuperar el modelo».
Descripción general
Ciclo de vida de la tarea
Cada tarea de generación pasa por un pequeño conjunto de estados, que se devuelven en el campo status del objeto de tarea:
PENDING— la tarea se ha puesto 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 avanza el trabajo.SUCCEEDED— la tarea finalizó correctamente yprogresses 100. Las URLs de los resultados (archivos de 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 se canceló antes de completarse.
La regla más importante al integrar la API: nunca intentes obtener ni usar las URLs de resultados hasta que el status de la tarea sea SUCCEEDED. Leer los resultados mientras una tarea sigue en PENDING o IN_PROGRESS es la causa más común de los informes de "errores al recuperar el modelo".
Ejemplo de sondeo
El sondeo consiste en llamar repetidamente al endpoint «obtener tarea» para tu ID de tarea hasta que alcance un estado terminal (SUCCEEDED, FAILED o CANCELED). Un bucle de sondeo sencillo tiene este aspecto:
Envía la solicitud de generación y guarda el
idde tarea devuelto.Llama al endpoint «recuperar tarea» correspondiente (por ejemplo, el endpoint de tarea por ID de Text to 3D o Image to 3D) a intervalos regulares; unos pocos segundos es lo habitual.
Comprueba el campo
statusen cada respuesta. Sigue sondeando mientras seaPENDINGoIN_PROGRESS.Deja de sondear en cuanto
statusseaSUCCEEDED(lee las URL del resultado),FAILEDoCANCELED.Añade en tu cliente un límite razonable de tiempo de espera o de intentos máximos para que una tarea bloqueada no se sondee indefinidamente.
El sondeo es sencillo y funciona bien para scripts, trabajos por lotes e integraciones de bajo volumen. Para integraciones de gran volumen o sensibles a la latencia, un webhook suele encajar mejor.
Configuración del webhook
En lugar de preguntar repetidamente "¿ya está listo?", puedes pedirle a Meshy que notifique a tu servidor en el momento en que finalice una tarea. Para usar webhooks:
Configura una URL de webhook (callback) a la que Meshy pueda acceder; esto normalmente se establece en el 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 mediante HTTPS y responda con rapidez (devuelve un estado 2xx de inmediato y luego procesa el payload de forma asíncrona).
Cuando la tarea alcanza un estado terminal, Meshy envía un payload a tu endpoint que contiene el
idde la tarea y sustatusfinal.Al recibirlo, consulta los detalles completos de la tarea por
idmediante la API en lugar de confiar únicamente en el cuerpo del webhook, para asegurarte de tener el resultado autoritativo 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 sondeo periódico como respaldo 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: seguro de 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 emisor, duplicación de red, etc.).
Un bucle de sondeo y un controlador de webhooks 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, verifica si ya has almacenado o descargado los resultados de ese id antes de volver a hacerlo, y haz que «marcar como procesado» sea 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 (URLs del modelo, texturas, miniaturas) está completo y se puede usar de forma segura. En concreto, en tu código:
Verifica
status === "SUCCEEDED"antes de leer cualquier dato de los camposresulto de la URL del modelo.No te bases solo en
progress: comprueba siempre tambiénstatus, ya que el progreso puede mostrar valores altos de forma momentánea antes de que la tarea esté totalmente finalizada.Descarga los archivos de resultado en cuanto aparezca
SUCCEEDED: los recursos generados solo se conservan en los servidores de Meshy durante un tiempo limitado, tras el cual las URL dejarán de resolverse.
Errores comunes
La mayoría de los informes de «no puedo recuperar mi modelo» se remontan a una de estas causas:
Consultar demasiado pronto. Llamar a la URL de 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 resultado dejan de funcionar una vez transcurrida la ventana de retención para 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 reenviarla.Problemas de red/tiempo de espera entre tu servidor y Meshy que se interpretan erróneamente como un problema de generación.
Reintentos
Si una generación no cumple tus expectativas, o si una solicitud falla por completo, ten en cuenta lo siguiente:
Actualmente, la API de Meshy no admite reintentar una tarea existente en el mismo lugar; para volver a intentarlo, envía una nueva solicitud de generación, lo que consumirá créditos con normalidad.
Para fallos de red transitorios al llamar a la API (tiempos de espera agotados, respuestas 5xx), es razonable aplicar un breve retroceso exponencial antes de reenviar la solicitud.
Para el propio sondeo, reintenta la llamada de «obtener tarea» ante errores de red transitorios, pero no consideres un único sondeo fallido como un fallo de generación; solo confía en el campo
statuscuando obtengas una respuesta correcta.Si necesitas funcionalidad de reintento integrada para las generaciones, ponte en contacto con el equipo de ventas de Meshy para conocer las opciones de los planes enterprise.
Preguntas frecuentes
1. ¿Por qué recibo errores de forma constante al recuperar modelos de un resultado de generación mediante la API?
Esto casi siempre ocurre porque el código intenta leer el resultado antes de que la tarea haya finalizado. Confirma siempre que status sea SUCCEEDED (y que progress sea 100) antes de recuperar las URL de los modelos.
2. ¿Debo usar sondeo o webhooks?
El sondeo es más sencillo de configurar y es adecuado para scripts de bajo volumen o puntuales. Los webhooks son mejores para integraciones de producción con muchas tareas simultáneas, ya que evitan solicitudes repetidas innecesarias y te notifican de inmediato cuando una tarea finaliza.
3. ¿Qué debe hacer mi servidor si recibe el mismo webhook dos veces?
Gestiónalo 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. Mi webhook nunca llegó — ¿qué debo hacer?
Usa el sondeo de la tarea por id directamente como alternativa. También confirma que tu endpoint sea accesible públicamente mediante HTTPS y devuelva una respuesta 2xx rápida, ya que los endpoints lentos o inaccesibles pueden causar problemas de entrega.
5. ¿Puedo reintentar directamente mediante la API una generación fallida o insatisfactoria?
Actualmente no: tendrás que enviar una nueva solicitud de generación, lo que consume créditos con normalidad. Contacta con ventas para consultar las opciones empresariales si necesitas compatibilidad con reintentos integrada.
6. ¿Cuánto tiempo tengo para descargar mis resultados después de que el estado sea SUCCEEDED?
Los archivos de resultado solo se conservan en los servidores de Meshy durante un tiempo limitado después de que finalice una tarea, así que descarga los resultados en tu propio almacenamiento en cuanto la tarea se complete, en lugar de esperar.