language para escolher o idioma da mensagem de falha.
Início rápido
Ao enviar uma tarefa, adicionewebhook no nível superior do corpo da requisição. Para traduzir mensagens de falha, adicione também language:
sua URL + /callback.
Outros endpoints de tarefas assíncronas (vídeo, áudio, etc.) usam
webhook da mesma forma. language atualmente se aplica a POST /v1/videos/generations e POST /v1/images/generations; ambos os campos devem estar no nível superior do corpo da requisição.Escolher o idioma da mensagem de erro
language é um parâmetro de string opcional que afeta apenas error.message nos callbacks de falha. ID da tarefa, status, progresso, custo e URLs de resultado não mudam de acordo com o idioma. Se omitido, a mensagem de erro original do provedor upstream ou da plataforma será retornada.
- Os valores não diferenciam maiúsculas de minúsculas, e os espaços no início e no fim são removidos automaticamente. Por exemplo,
"PT"e" pt "são tratados comopt. - Use os códigos de duas letras da tabela. Tags regionais como
zh-CN,en-USept-BRnão são reconhecidas. - Um valor não compatível não faz a submissão da tarefa falhar; o callback mantém a mensagem de erro original.
- Se a mensagem original já estiver no idioma de destino, ela será retornada sem uma nova tradução.
- Se a tradução falhar, a mensagem original será retornada sem atrasar nem descartar o callback.
Ao fazer polling, use o parâmetro de query
language do endpoint de status da tarefa para escolher o mesmo idioma da mensagem de erro. Um Webhook não tem query string, portanto language deve ser especificado ao enviar a tarefa.Regras de URL
Owebhook que você fornece é a URL base, à qual anexamos automaticamente /callback:
Portanto, seu servidor precisa de um endpoint que aceite
POST .../callback.
O que você vai receber
O conteúdo enviado é exatamente igual ao que o endpoint “Obter status da tarefa” retorna — você pode processá-lo com a mesma lógica de análise.Para tarefas de vídeo, o resultado fica em
result.videos, e para áudio em result.audios.O exemplo de falha acima usa
"language": "pt". O parâmetro de idioma altera apenas error.message; todos os outros campos permanecem iguais.Novas tentativas e deduplicação (importante)
- Novas tentativas: Se o seu servidor não retornar
2xxem cerca de 10 segundos, ou retornar5xx, tentaremos novamente de forma automática, até 3 vezes, em intervalos de aproximadamente 10s, 30s e 60s. Se as 3 falharem, desistimos (em cerca de 2 minutos). - Sem nova tentativa: Se o seu endpoint retornar
4xx(considerado URL / requisição com problema), desistimos imediatamente, sem tentar de novo. - Deduplicação: Normalmente uma tarefa é enviada apenas uma vez. Mas em casos extremos (ex.: um reinício do nosso lado após o envio, mas antes da confirmação) você pode receber envios duplicados. Certifique-se de deduplicar de forma idempotente por
id(task_id) para evitar processamento em duplicidade.
1
Retorne 2xx o quanto antes
Aceite e enfileire primeiro, depois processe de forma assíncrona — não nos faça esperar até você terminar o processamento.
2
Deduplique por id
Use
id (task_id) como chave de idempotência para evitar processamento em duplicidade.3
Configure e verifique a assinatura
Em produção, verifique a origem das requisições de callback e rejeite as falsificadas.
Requisitos para a URL de callback
Por segurança, a URL de callback deve atender a:
URLs que não atendem a esses requisitos são descartadas (sem envio nem nova tentativa).
Perguntas frequentes
Enviei uma tarefa com webhook, mas não recebi nenhum envio?
Enviei uma tarefa com webhook, mas não recebi nenhum envio?
Verifique item por item:
- A tarefa realmente terminou? Consulte os detalhes da tarefa — o
statusestácompleted/failed(não há envio durante o processamento)? - Sua URL está acessível publicamente? Conseguimos alcançar o seu
/callback? - A porta é padrão (80 / 443)? Portas não padrão podem ser bloqueadas por políticas de segurança.
- Seu
/callbackretornou 2xx a tempo? Retornar 4xx é descartado imediatamente. - Você está usando
https? O certificado é válido?
Por que url no result é um array?
Por que url no result é um array?
Alguns modelos produzem várias imagens de uma vez, então
images[].url pode ser um array — basta tratá-lo como um array.Os links de resultado expiram?
Os links de resultado expiram?
Se
result incluir expires_at (timestamp Unix), ele indica a hora de expiração do link — transfira/salve-o a tempo.Vocês enviam o status 'em processamento'?
Vocês enviam o status 'em processamento'?
Não. Enviamos apenas uma vez, quando a tarefa finalmente tem sucesso ou falha.
Exemplo mínimo de receptor
Python
200 o quanto antes e execute sua lógica de processamento de forma assíncrona em segundo plano.