Erro 408 - Read Timed Out
O que fazer quando vejo este erro nos logs de Webhooks do Asaas?
O que significa
O erro 408 - Read Timed Out nos logs de Webhooks indica que a conexão entre o Asaas e o seu servidor foi estabelecida corretamente, porém sua aplicação não respondeu dentro do tempo máximo esperado.
O evento foi enviado, mas o Asaas não recebeu uma confirmação de sucesso em tempo hábil.
Como funciona o timeout do Asaas
Após enviar o webhook, o Asaas aguarda até 10 segundos pela resposta do seu servidor.
Se nesse período não for recebido um retorno HTTP 200, a tentativa é considerada uma falha e o evento entra no fluxo normal de retentativas.
Caso ocorram 15 falhas consecutivas, a fila de Webhooks será interrompida.
ImportanteO Asaas considera o webhook processado com sucesso somente quando recebe HTTP
200.
Quando esse erro acontece
As causas mais comuns são:
- processamento excessivamente demorado;
- consultas lentas ao banco de dados;
- chamadas para APIs externas durante o processamento;
- deadlocks ou filas internas congestionadas;
- alto consumo de CPU ou memória;
- indisponibilidade parcial da aplicação;
- processamento síncrono de tarefas pesadas.
Impacto na integração
Enquanto o endpoint continuar excedendo o tempo limite:
- os eventos serão reenviados automaticamente;
- a fila poderá sofrer penalização;
- após 15 falhas consecutivas, a fila será interrompida;
- novos eventos continuarão sendo acumulados;
- os eventos permanecem armazenados por até 14 dias;
- eventos não processados após esse período serão excluídos permanentemente.
Por isso, é importante reduzir o tempo de resposta do endpoint.
Exemplo de cenário comum
Fluxo problemático:
Asaas
↓
POST webhook
↓
Aplicação recebe evento
↓
Consulta banco
↓
Chama API externa
↓
Gera relatório
↓
Envia e-mail
↓
Retorna HTTP 200 após 15 segundos
↓
Read Timed OutEmbora a aplicação eventualmente responda, o Asaas já terá encerrado a conexão e considerado a tentativa como falha.
Estratégia recomendada
A melhor prática é responder imediatamente ao Asaas e processar as operações mais demoradas em segundo plano.
Fluxo recomendado:
Asaas
↓
POST webhook
↓
Salvar evento
↓
Retornar HTTP 200 imediatamente
↓
Processar em fila assíncrona
↓
Executar regras de negócioDessa forma, o tempo de resposta permanece baixo e a integração fica mais resiliente.
Como resolver
1. Medir o tempo de resposta do endpoint
Verifique quanto tempo sua aplicação está levando para responder.
O ideal é que a resposta seja enviada em poucos milissegundos.
2. Evitar processamento pesado no webhook
Evite executar:
- consultas demoradas;
- chamadas para APIs de terceiros;
- geração de arquivos;
- envio de e-mails;
- tarefas complexas.
Essas operações podem ser realizadas posteriormente através de filas assíncronas.
3. Implementar processamento assíncrono
O webhook deve:
- Receber o evento.
- Persistir os dados necessários.
- Retornar HTTP
200. - Processar a lógica posteriormente.
4. Monitorar a aplicação
Verifique:
- utilização de CPU;
- consumo de memória;
- tempo de resposta do banco de dados;
- lentidão de APIs externas;
- logs do servidor.
Boas práticas
- responder rapidamente ao webhook;
- retornar HTTP
200assim que possível; - utilizar filas assíncronas;
- implementar idempotência;
- registrar logs do processamento;
- monitorar tempo médio de resposta;
- evitar dependência direta de serviços externos durante o recebimento do evento.
Como validar se funcionou
Após os ajustes:
- Reative a fila de Webhooks.
- Gere um novo evento.
- Consulte os logs.
Se corrigido:
- o erro 408 deixará de ocorrer;
- os eventos voltarão a ser entregues normalmente;
- a fila será processada em ordem cronológica.
Erros comuns
- responder somente após finalizar toda a lógica da aplicação;
- esperar resposta de APIs externas;
- realizar consultas pesadas ao banco;
- gerar arquivos ou PDFs antes de retornar o HTTP 200;
- confundir processamento do evento com confirmação do recebimento.
Conteúdos relacionados
- Penalização de filas
- Fila pausada
- Como reativar fila interrompida
- Logs de Webhooks
- Como implementar idempotência em Webhooks
- Erro 400 (Bad Request)
- Erro 403 (Forbidden)
- Erro 404 (Not Found)
- Erro 500 (Internal Server Error)
