language para elegir el idioma del mensaje de error.
Inicio rápido
Al enviar una tarea, añadewebhook en el nivel superior del cuerpo de la solicitud. Para traducir los mensajes de error, añade también language:
tu URL + /callback.
Otros endpoints de tareas asíncronas (video, audio, etc.) usan
webhook de la misma forma. Actualmente, language se aplica a POST /v1/videos/generations y POST /v1/images/generations; ambos campos deben estar en el nivel superior del cuerpo de la solicitud.Elegir el idioma del mensaje de error
language es un parámetro de cadena opcional que solo afecta a error.message en las devoluciones de llamada fallidas. El ID de la tarea, el estado, el progreso, el coste y las URL de resultados no cambian según el idioma. Si se omite, se devuelve el mensaje de error original del proveedor upstream o de la plataforma.
- Los valores no distinguen entre mayúsculas y minúsculas, y los espacios iniciales y finales se eliminan automáticamente. Por ejemplo,
"ES"y" es "se tratan comoes. - Usa los códigos de dos letras de la tabla. Las etiquetas regionales como
zh-CN,en-USypt-BRno se reconocen. - Un valor no admitido no hace que falle el envío de la tarea; la devolución de llamada conserva el mensaje de error original.
- Si el mensaje original ya está en el idioma de destino, se devuelve sin volver a traducirlo.
- Si la traducción falla, se devuelve el mensaje original sin retrasar ni descartar la devolución de llamada.
Durante el sondeo, usa el parámetro de consulta
language del endpoint de estado de la tarea para elegir el mismo idioma del mensaje de error. Un Webhook no tiene cadena de consulta, por lo que language debe especificarse al enviar la tarea.Reglas de la URL
Elwebhook que proporcionas es la URL base, a la que añadimos automáticamente /callback:
Por lo tanto, tu servidor necesita un endpoint que acepte
POST .../callback.
Qué vas a recibir
El contenido enviado es exactamente igual al que devuelve el endpoint «Obtener estado de la tarea»: puedes procesarlo con la misma lógica de análisis.Para tareas de video el resultado está en
result.videos, y para audio en result.audios.El ejemplo de error anterior usa
"language": "es". El parámetro de idioma solo cambia error.message; los demás campos permanecen iguales.Reintentos y deduplicación (importante)
- Reintentos: Si tu servidor no devuelve
2xxen unos 10 segundos, o devuelve5xx, reintentaremos automáticamente, hasta 3 veces, con intervalos de aproximadamente 10 s, 30 s y 60 s. Si las 3 fallan, desistimos (en unos 2 minutos). - Sin reintento: Si tu endpoint devuelve
4xx(se considera URL / solicitud incorrecta), desistimos de inmediato sin reintentar. - Deduplicación: Normalmente una tarea se envía solo una vez. Pero en casos extremos (p. ej., un reinicio de nuestro lado tras el envío pero antes de la confirmación) podrías recibir envíos duplicados. Asegúrate de deduplicar de forma idempotente por
id(task_id) para evitar el procesamiento doble.
1
Devuelve 2xx lo antes posible
Recibe y encola primero, luego procesa de forma asíncrona; no nos hagas esperar a que termines de procesar.
2
Deduplica por id
Usa
id (task_id) como clave de idempotencia para evitar el procesamiento doble.3
Configura y verifica la firma
En producción, verifica el origen de las solicitudes de devolución de llamada y rechaza las falsificadas.
Requisitos de la URL de devolución de llamada
Por seguridad, la URL de devolución de llamada debe cumplir:
Las URL que no cumplan estos requisitos se descartan (sin envío ni reintento).
Preguntas frecuentes
¿Envié una tarea con webhook pero no recibí ningún envío?
¿Envié una tarea con webhook pero no recibí ningún envío?
Revisa punto por punto:
- ¿La tarea realmente finalizó? Consulta los detalles de la tarea: ¿
statusescompleted/failed(no se envía durante el procesamiento)? - ¿Tu URL es accesible públicamente? ¿Podemos alcanzar tu
/callback? - ¿El puerto es estándar (80 / 443)? Los puertos no estándar pueden ser bloqueados por las políticas de seguridad.
- ¿Tu
/callbackdevolvió 2xx a tiempo? Si devuelve 4xx, desistimos de inmediato. - ¿Usas
https? ¿El certificado es válido?
¿Por qué url en el resultado es un array?
¿Por qué url en el resultado es un array?
Algunos modelos producen varias imágenes a la vez, por lo que
images[].url puede ser un array; simplemente trátalo como un array.¿Los enlaces de resultado caducan?
¿Los enlaces de resultado caducan?
Si
result incluye expires_at (marca de tiempo Unix), indica la hora de caducidad del enlace; transfiérelo/guárdalo a tiempo.¿Se envía el estado 'en procesamiento'?
¿Se envía el estado 'en procesamiento'?
No. Solo enviamos una vez, cuando la tarea finalmente tiene éxito o falla.
Ejemplo mínimo de receptor
Python
200 lo antes posible y ejecuta tu lógica de procesamiento de forma asíncrona en segundo plano.