Referência
Novas tentativas e falhas
Como o Emailit faz novas tentativas de requisições de webhook com falha, quando envia e-mails para você e desativa um endpoint, e como inspecionar e reenviar requisições com falha.
Quando o seu endpoint não aceita uma requisição de webhook, o Emailit guarda os eventos e tenta de novo seguindo um cronograma que dura pouco mais de três dias. Esta página lista esse cronograma, explica os e-mails que o Emailit envia e quando ele desativa um endpoint, e mostra como inspecionar e reenviar requisições com falha.
O que conta como falha
Uma requisição falha quando o seu endpoint:
- Retorna qualquer status fora de
200–299, incluindo redirecionamentos (3xx). - Não responde em até 30 segundos.
- Não pode ser alcançado: erros de DNS, conexões recusadas, erros de TLS ou uma URL que resolve para um endereço IP privado.
A falha vale para o lote inteiro: todos os eventos da requisição recebem novas tentativas juntos.
Cronograma de novas tentativas
Após cada tentativa com falha, o Emailit espera antes de tentar de novo:
| Tentativa | Espera após a tentativa anterior | Tempo desde a primeira tentativa |
|---|---|---|
| 1 | Enviada poucos segundos após o evento | 0 |
| 2 | 5 minutos | 5 minutos |
| 3 | 30 minutos | 35 minutos |
| 4 | 2 horas | 2 horas e 35 minutos |
| 5 | 5 horas | 7 horas e 35 minutos |
| 6 | 12 horas | 19 horas e 35 minutos |
| 7 | 12 horas | 1 dia e 7 horas |
| 8 | 12 horas | 1 dia e 19 horas |
| 9 | 12 horas | 2 dias e 7 horas |
| 10 | 12 horas | 2 dias e 19 horas |
| 11 | 12 horas | 3 dias e 7 horas |
Se a tentativa 11 falhar, a requisição é marcada como Failed e não recebe mais novas tentativas automáticas. Você ainda pode reenviá-la por 7 dias.
Cada tentativa é assinada de novo com um timestamp novo. Os eventos que chegam enquanto requisições anteriores aguardam uma nova tentativa são enviados em lotes próprios, então um evento problemático não bloqueia os mais recentes.
E-mails de notificação
O Emailit envia um e-mail ao proprietário do workspace em dois momentos:
| Quando | |
|---|---|
| Uma requisição falha pela terceira vez (cerca de 35 minutos após a primeira falha) | O webhook está falhando. Enviado uma vez por incidente. Você só recebe outro depois de uma entrega bem-sucedida seguida de novas falhas, ou após 4 dias. |
| O webhook é desativado automaticamente | O webhook foi desativado, com o último código de status. |
Desativação automática
Se um webhook passar 3 dias sem nenhuma entrega bem-sucedida desde a requisição com falha mais antiga, o Emailit o desativa na próxima tentativa com falha. Na prática, isso acontece por volta da 11ª tentativa da primeira requisição com falha, ou antes, se novos eventos continuarem falhando.
Enquanto um webhook está desativado:
- Novos eventos não entram na fila dele. Eles continuam sendo registrados no fluxo de eventos.
- As requisições que aguardavam uma nova tentativa ficam pendentes e são retomadas quando você o ativa.
- A página do webhook mostra o status Disabled.
Para reativá-lo, selecione Enable webhook no menu de ações do webhook ou chame Atualizar um webhook com {"enabled": true}. Retry failed e tentar de novo uma única requisição também ativam o webhook.
A aba Requests
Abra um webhook em Email APIWebhooks para ver a aba Requests dele, com as mais recentes primeiro:
| Coluna | Descrição |
|---|---|
| Event type | O evento da requisição. |
| Event ID | O ID evt_, o mesmo valor que o seu endpoint recebe como event_id. |
| Created | Quando a requisição foi colocada na fila. |
| Attempts | Quantas tentativas de entrega falharam até agora. |
| Status | Pending (ainda não tentada), Attempting (falhou pelo menos uma vez e receberá novas tentativas), Delivered ou Failed (as novas tentativas se esgotaram). |
Filtre por Status code, Event ou Created. Os eventos de teste de Send test não aparecem aqui.
Em uma requisição Failed, selecione View para abrir Failure reason: o código de status que o seu endpoint retornou (0 quando não houve resposta HTTP), quando a requisição foi criada e quando falhou, e os primeiros 2.000 caracteres do corpo da resposta.
Reenviar requisições com falha
Você pode reenviar requisições marcadas como Failed cuja última falha ocorreu nos últimos 7 dias. As requisições reenviadas voltam para Pending e começam um novo ciclo de novas tentativas a partir da tentativa 1. A entrega não é instantânea: a próxima rodada de entregas as pega em poucos segundos.
Tentar de novo uma requisição
Na aba Requests, selecione Retry em uma linha com falha. O botão só aparece em requisições com falha dos últimos 7 dias.
O endpoint da API é Tentar de novo uma requisição, POST /v2/webhooks/{id}/requests/{request_id}/retry, que retorna {"retried": 1, "id": "whr_…"}. Ele só aceita requisições marcadas como Failed e retorna 400 para as demais. Os IDs de requisição (whr_…) não são listados por nenhum endpoint público, então, para automação pela API, use Retry failed.
Tentar de novo as requisições com falha
Abra o menu de ações do webhook e selecione Retry failed. Todas as requisições que falharam nos últimos 7 dias voltam para a fila, e o painel mostra “Queued 3 failed request(s) for retry” com a contagem real, ou “No failed requests in the last 7 days”.
Pela API, chame Tentar de novo as requisições com falha:
curl -X POST https://api.emailit.com/v2/webhooks/wh_2xGk8Hd3RvN6qT1mWsB9cL4pZ7e/retry-failed \
-H "Authorization: Bearer $EMAILIT_API_KEY"{ "retried": 42 }Recuperar-se de uma interrupção
-
Corrija o endpoint. Use View em uma requisição com falha para ver o que o seu endpoint retornou.
-
Confirme que ele funciona. Use Send test no menu de ações, ou Enviar um evento de teste pela API, e confira se a resposta é
2xx. -
Ative o webhook se o Emailit o tiver desativado.
-
Reenvie as falhas. Selecione Retry failed para colocar de volta na fila todas as requisições que falharam nos últimos 7 dias. As requisições ainda marcadas como Attempting recebem novas tentativas no próprio cronograma.
-
Preencha as lacunas. Os eventos que aconteceram enquanto o webhook estava desativado nunca entraram na fila, e as falhas com mais de 7 dias não podem ser reenviadas. Leia-os com a API de eventos para o período afetado e processe os que estiverem faltando.
Como as novas tentativas reenviam lotes inteiros, torne o seu handler idempotente: armazene cada event_id e ignore os que você já processou. Consulte Requisições de webhook.
Retenção
As requisições de webhook seguem o período de retenção de Logs, então as linhas mais antigas somem da aba Requests com o tempo.
| Pay as you go | Pro | Business | Custom | |
|---|---|---|---|---|
| Retenção dos logs de requisições | 7 dias | 30 dias | 30 dias | Flexível |