Início rápido
Ao enviar uma tarefa, adicione um campowebhook ao corpo da requisição:
sua URL + /callback.
Outros endpoints de tarefas assíncronas (vídeo, áudio, etc.) funcionam da mesma forma — basta adicionar o campo
webhook ao corpo da requisição.Regras de URL
Owebhook que você fornece é a URL base, à qual anexamos automaticamente /callback:
Seu webhook | Para onde realmente enviamos o POST |
|---|---|
https://your-server.com | https://your-server.com/callback |
https://your-server.com/api | https://your-server.com/api/callback |
https://your-server.com/api/ | https://your-server.com/api/callback |
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.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.
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.
Deduplique por id
Use
id (task_id) como chave de idempotência para evitar processamento em duplicidade.Requisitos para a URL de callback
Por segurança, a URL de callback deve atender a:| Requisito | Descrição |
|---|---|
| Acessível publicamente | Não pode ser um endereço interno / local (ex.: 127.0.0.1, 10.x, 192.168.x serão rejeitados) |
| Protocolo | http ou https (https recomendado) |
| Porta | Use portas padrão (80 / 443); portas não padrão podem ser bloqueadas |
| Domínio | Não pode apontar para o nosso próprio domínio de serviço |
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.