Reference
Opakování a selhání
Jak Emailit opakuje neúspěšné požadavky webhooků, kdy vám pošle e-mail a vypne endpoint a jak neúspěšné požadavky prohlížet a znovu odeslat.
Když váš endpoint požadavek webhooku nepřijme, Emailit si události ponechá a zkouší je odeslat znovu podle plánu, který trvá něco přes tři dny. Tato stránka tento plán uvádí, vysvětluje, jaké e-maily Emailit posílá a kdy endpoint vypne, a ukazuje, jak neúspěšné požadavky prohlížet a znovu odeslat.
Co se považuje za selhání
Požadavek selže, když váš endpoint:
- Vrátí jakýkoli stav mimo rozsah
200–299, včetně přesměrování (3xx). - Neodpoví do 30 sekund.
- Není dostupný: chyby DNS, odmítnutá spojení, chyby TLS nebo URL, která se přeloží na soukromou IP adresu.
Selhání se týká celé dávky: všechny události v požadavku se opakují společně.
Plán opakování
Po každém neúspěšném pokusu Emailit před dalším pokusem počká:
| Pokus | Čekání po předchozím pokusu | Čas od prvního pokusu |
|---|---|---|
| 1 | Odešle se během několika sekund po události | 0 |
| 2 | 5 minut | 5 minut |
| 3 | 30 minut | 35 minut |
| 4 | 2 hodiny | 2 hodiny 35 minut |
| 5 | 5 hodin | 7 hodin 35 minut |
| 6 | 12 hodin | 19 hodin 35 minut |
| 7 | 12 hodin | 1 den 7 hodin |
| 8 | 12 hodin | 1 den 19 hodin |
| 9 | 12 hodin | 2 dny 7 hodin |
| 10 | 12 hodin | 2 dny 19 hodin |
| 11 | 12 hodin | 3 dny 7 hodin |
Pokud selže i 11. pokus, požadavek dostane stav Failed a automaticky se už neopakuje. Ještě 7 dní ho ale můžete odeslat znovu.
Každý pokus se znovu podepíše s novým časovým razítkem. Události, které dorazí, zatímco starší požadavky čekají na opakování, se odesílají ve vlastních dávkách, takže jedna problémová událost nezablokuje novější.
E-mailová upozornění
Emailit pošle vlastníkovi workspace e-mail ve dvou případech:
| Kdy | |
|---|---|
| Požadavek selže potřetí (asi 35 minut po prvním selhání) | Upozornění, že webhook selhává. Odešle se jednou za incident. Další dostanete, jen pokud po úspěšném doručení dojde k novým selháním, nebo po 4 dnech. |
| Webhook se automaticky vypne | Upozornění, že byl webhook vypnut, s posledním stavovým kódem. |
Automatické vypnutí
Pokud webhook od svého nejstaršího neúspěšného požadavku 3 dny nic úspěšně nedoručil, Emailit ho při dalším neúspěšném pokusu vypne. V praxi se to stane zhruba při 11. pokusu prvního neúspěšného požadavku, nebo dřív, pokud nové události dál selhávají.
Dokud je webhook vypnutý:
- Nové události se pro něj do fronty nezařazují. V proudu událostí se ale dál zaznamenávají.
- Požadavky, které čekaly na opakování, dál čekají a pokračují, jakmile webhook zapnete.
- Stránka webhooku ukazuje stav Disabled.
Pokud ho chcete znovu zapnout, vyberte v nabídce akcí webhooku Enable webhook, nebo zavolejte endpoint Úprava webhooku s {"enabled": true}. Webhook zapne také Retry failed a opakování jednoho požadavku.
Karta Requests
Otevřete webhook v Email APIWebhooks a na jeho kartě Requests uvidíte požadavky od nejnovějšího:
| Sloupec | Popis |
|---|---|
| Event type | Událost v požadavku. |
| Event ID | ID evt_, stejná hodnota, jakou váš endpoint dostává jako event_id. |
| Created | Kdy se požadavek zařadil do fronty. |
| Attempts | Kolik pokusů o doručení zatím selhalo. |
| Status | Pending (ještě se nezkoušel), Attempting (alespoň jednou selhal, bude se opakovat), Delivered, nebo Failed (opakování se vyčerpala). |
Filtrovat můžete podle Status code, Event nebo Created. Testovací události z Send test se tu nezobrazují.
U požadavku ve stavu Failed vyberte View a otevře se Failure reason: stavový kód, který váš endpoint vrátil (0, když nepřišla žádná HTTP odpověď), kdy byl požadavek vytvořen a kdy selhal, a prvních 2 000 znaků těla odpovědi.
Znovu odešlete neúspěšné požadavky
Znovu odeslat můžete požadavky ve stavu Failed, jejichž poslední selhání nastalo během posledních 7 dní. Znovu odeslané požadavky se vrátí do stavu Pending a začnou nový cyklus opakování od 1. pokusu. Doručení není okamžité: převezme je další doručovací běh během několika sekund.
Zopakujte jeden požadavek
Na kartě Requests vyberte v řádku neúspěšného požadavku Retry. Tlačítko se zobrazuje jen u neúspěšných požadavků z posledních 7 dní.
Endpoint API je Opakování jednoho požadavku, POST /v2/webhooks/{id}/requests/{request_id}/retry, a vrací {"retried": 1, "id": "whr_…"}. Přijímá jen požadavky ve stavu Failed a pro ostatní vrací 400. ID požadavků (whr_…) nevypisuje žádný veřejný endpoint, takže pro automatizaci přes API použijte raději Retry failed.
Zopakujte neúspěšné požadavky
Otevřete nabídku akcí webhooku a vyberte Retry failed. Všechny požadavky, které selhaly během posledních 7 dní, se znovu zařadí do fronty a webové rozhraní zobrazí „Queued 3 failed request(s) for retry“ se skutečným počtem, nebo „No failed requests in the last 7 days“.
Přes API zavolejte Opakování neúspěšných požadavků:
curl -X POST https://api.emailit.com/v2/webhooks/wh_2xGk8Hd3RvN6qT1mWsB9cL4pZ7e/retry-failed \
-H "Authorization: Bearer $EMAILIT_API_KEY"{ "retried": 42 }Obnovte provoz po výpadku
-
Opravte endpoint. Pomocí View u neúspěšného požadavku zjistíte, co váš endpoint vrátil.
-
Ověřte, že funguje. Použijte Send test z nabídky akcí, nebo přes API Odeslání testovací události, a zkontrolujte, že dostanete
2xx. -
Zapněte webhook, pokud ho Emailit vypnul.
-
Znovu odešlete neúspěšné požadavky. Vyberte Retry failed a do fronty se znovu zařadí všechny požadavky, které selhaly během posledních 7 dní. Požadavky, které jsou stále ve stavu Attempting, se opakují podle vlastního plánu.
-
Doplňte mezery. Události, které nastaly, zatímco byl webhook vypnutý, se do fronty nikdy nezařadily, a selhání starší než 7 dní nelze znovu odeslat. Načtěte je za dotčené období přes API událostí a zpracujte ty, které vám chybějí.
Protože se při opakování znovu odesílají celé dávky, udělejte svůj handler idempotentní: ukládejte si každé event_id a události, které jste už zpracovali, přeskakujte. Viz Požadavky webhooků.
Uchovávání
Požadavky webhooků se řídí dobou uchovávání pro Logs, takže starší řádky z karty Requests postupně mizí.
| Pay as you go | Pro | Business | Custom | |
|---|---|---|---|---|
| Uchovávání logů požadavků | 7 dní | 30 dní | 30 dní | Flexibilní |