Yeniden Deneme Mantığı
Mail.Land'in başarısız webhook teslimatlarını nasıl yeniden denediğini anlayın
Bir webhook teslimi başarısız olduğunda, MailLand artan gecikmelerle otomatik olarak yeniden dener. Bu sayfa yeniden deneme programını, teslim durumlarını, hata yönetimini ve teslimatları nasıl izleyip elle yeniden deneyeceğinizi kapsamaktadır.
Yeniden Deneme Programı
Bu bölüm, durable dispatcher tarafından teslim edilen tüm olayları kapsar: message.*, suppression.*,
account.* ve inbound.received. Gelen olaylara özgü kısımlar için aşağıdaki
Gelen Kutusu Teslimatları bölümüne bakın.
MailLand başarısız bir teslimatı toplamda 6 defaya kadar, her yeniden denemeden önce artan bir gecikmeyle yeniden dener:
| Deneme | Bu denemeden önceki gecikme | Toplam Geçen Süre |
|---|---|---|
| 1 | : (ilk deneme) | 0 |
| 2 | Hemen | ~0 |
| 3 | 1 dakika | ~1 dakika |
| 4 | 5 dakika | ~6 dakika |
| 5 | 15 dakika | ~21 dakika |
| 6 | 1 saat | ~1 saat 21 dakika |
- deneme başarısız olursa teslimat kalıcı olarak başarısız işaretlenir, başka bekleme ve 7. bir deneme yoktur.
Yeniden Denenebilir ile Yeniden Denenemez
Yeniden denenebilir yanıtlar
Bu durum kodları otomatik yeniden denemeyi tetikler:
408Request Timeout429Too Many Requests500Internal Server Error502Bad Gateway503Service Unavailable504Gateway Timeout- Ağ hataları (zaman aşımı, soket hataları, DNS hataları)
Yeniden denenemez yanıtlar
Bu durum kodları kalıcı hata olarak kabul edilir, yeniden deneme yapılmaz:
400Bad Request401Unauthorized403Forbidden404Not Found- Diğer tüm
4xxhataları (408 ve 429 hariç) - Doğrulamayı geçemeyen bir yönlendirme yanıtı (bkz. Yönlendirmeler) veya sıçrama sınırını aşan bir yönlendirme
Uç noktanız yeniden denenebilir bir yanıtta Retry-After başlığı döndürürse, MailLand yukarıdaki
program yerine bir sonraki deneme için bu değeri gecikme olarak kullanır: yalnızca 429 için değil,
yeniden denenebilir her durum için. Bunun için üst sınır veya jitter uygulanmaz: siz de gönderiyorsanız
kendi tarafınızda buna uyun, çünkü çok büyük bir değer olduğu gibi kabul edilir.
Yönlendirmeler
MailLand uç noktanızı bir tarayıcı gibi ele almaz. Yönlendirmeler elle takip edilir, en fazla 3 sıçrama, ve her sıçramaya bir şey gönderilmeden önce yeniden doğrulanır:
- hedef
https://olmalıdır:http://adresine bir yönlendirme reddedilir, düşürülmez; - hedef genel bir adrese çözümlenmelidir: özel, loopback veya link-local bir adrese yönlendirme reddedilir ve istek hiçbir zaman gönderilmez;
- 3 sıçramayı aşmak teslimatı başarısız kılar.
Reddedilen bir yönlendirme, durum kodu olmadan bir teslimat hatası olarak bildirilir. Uç noktanız taşındıysa, bir yönlendirmeye güvenmek yerine webhook'u yeni URL'ye yönlendirin.
Teslim Yapılandırması
| Ayar | Varsayılan | Açıklama |
|---|---|---|
| HTTP zaman aşımı | 15 saniye | Her teslim denemesi başına maksimum bekleme süresi |
| Maksimum yeniden deneme | 6 deneme | İlk deneme dahil toplam teslim denemesi sayısı |
| Otomatik duraklama eşiği | 10 ardışık hata | Webhook bu kadar ardışık hata sonrasında duraklatılır: 0'dan büyük bir değere ayarlanmışsa webhook'un kendi pauseThreshold değeri, aksi halde bu varsayılan değer kullanılır |
| Yinelenen kaldırma | Teslim kaydı var olduğu sürece | Aynı olayın kopyaları, satır var olduğu sürece (WebhookId, EventId) kısıtlaması tarafından bastırılır: teslim edilenler için en az 30 gün |
Gelen Kutusu Teslimatları
inbound.received, diğer tüm olaylarla aynı durable dispatcher tarafından; yukarıda anlatılan aynı yeniden
deneme planı, aynı Retry-After işleyişi, aynı teslimat geçmişi ve aynı otomatik duraklatma ile teslim edilir.
- Diğer olaylarda olduğu gibi
event_id(X-MLND-Event-Idile aynı) üzerinden yinelenenleri kaldırın. Bu kimlik her gelen ileti ve webhook için sabittir; aynı e-posta için her deneme aynı kimliği taşır. - Elle yeniden oynatma yeni bir olaydır: yeni bir
event_idalır, özgün kimlikdata.replay_ofiçindedir.data.idempotency_keyaynı kalır. - Her ekin
download_urldeğeri her denemede imzalanır ve o andan itibaren 15 dakika geçerlidir; ekiniddeğeri her denemede aynıdır. Bkz. Gelen Posta Webhook'ları.
Teslim Geçmişini Görüntüleme
Bir webhook için geçmiş teslimatları görün:
GET https://api.mail.land/v1/webhooks/{id}/deliveriescurl -X GET "https://api.mail.land/v1/webhooks/wh_abc123/deliveries?limit=20" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."Sorgu Parametreleri
| Parametre | Tür | Varsayılan | Açıklama |
|---|---|---|---|
cursor | string | - | Önceki sayfanın nextCursor değerinden alınan opak imleç. İlk sayfa için belirtmeyin. |
limit | int | 20 | Sayfa başına öge sayısı |
status | string | - | Filtre: success veya failed |
eventType | string | - | Olay türüne göre filtrele (örn. message.delivered) |
from | datetime | - | Başlangıç tarihi |
to | datetime | - | Bitiş tarihi |
{
"items": [
{
"publicId": "p8r2kx7m9wq4rtz",
"eventType": "message.delivered",
"messageId": "t_a1b2c3d4e5f6",
"statusCode": 200,
"responseTimeMs": 145,
"success": true,
"errorMessage": null,
"createdAt": "2026-02-17T12:34:58.000Z",
"attemptNumber": 1
},
{
"publicId": "p8r2kx7m3nq1abc",
"eventType": "message.bounced",
"messageId": "t_d4e5f6a1b2c3",
"statusCode": 503,
"responseTimeMs": 15000,
"success": false,
"errorMessage": "Service Unavailable",
"createdAt": "2026-02-17T12:30:00.000Z",
"attemptNumber": 3
}
],
"nextCursor": "eyJ2IjoxLCJzIjoiY3JlYXRlZGF0OmRlc2MiLCJrIjoi...",
"hasMore": true
}Başarısız Teslimatı Yeniden Dene
Belirli bir başarısız teslimatı elle yeniden deneyin:
POST https://api.mail.land/v1/webhooks/{id}/deliveries/{publicId}/retrycurl -X POST https://api.mail.land/v1/webhooks/wh_abc123/deliveries/p8r2kx7m3nq1abc/retry \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."Başarı durumunda 202 Accepted döner. Yeniden deneme kuyruğa alınır ve orijinal olay verisini kullanır.
| Durum | Kod | Açıklama |
|---|---|---|
202 | - | Yeniden deneme başarıyla kuyruğa alındı |
202 | - | Teslimat zaten yeniden deneme için kuyrukta, hata değil, hiçbir şey yapılmaz |
400 | ALREADY_SUCCEEDED | Zaten başarılı olan teslimat yeniden denenemez |
400 | INVALID_REQUEST | Teslimat kalıcı yeniden deneme takibinden önceye ait, ya da şu anda işlemde |
404 | WEBHOOK_NOT_FOUND | Webhook mevcut değil |
404 | DELIVERY_NOT_FOUND | Teslim kimliği mevcut değil |
Hatalarda Otomatik Duraklatma
Bir webhook yeterince ardışık başarısız teslim denemesi biriktirdiğinde, MailLand onu otomatik
olarak duraklatır. Eşik değeri, 0'dan büyük bir değere ayarlanmışsa webhook'un kendi
pauseThreshold değeridir, aksi halde varsayılan değer olan 10 ardışık başarısız teslim
denemesidir:
- Webhook'un
isActivedeğerifalseolarak ayarlanır vepausedAt/pausedReasondoldurulur:pausedReasonkaç hata olduğunu ve sonuncusunun ne olduğunu söyler - Uygulama içi bir bildirim oluşturulur
- Webhook yeniden başlatılana kadar başka olay teslim edilmez
Sayaç denemelerin sayacıdır, olayların değil: tüm yeniden deneme merdivenini tüketen tek bir olay birden fazla hataya katkıda bulunur.
Eşiğe ulaşılmadan önce erken bir uyarı bildirimi yoktur: bildirilmeyi beklemek yerine
consecutiveFailures alanını proaktif olarak kontrol edin (aşağıdaki En İyi Uygulamalar'a bakın).
Duraklatılmış Webhook'u Yeniden Başlat
POST https://api.mail.land/v1/webhooks/{id}/resumecurl -X POST https://api.mail.land/v1/webhooks/wh_abc123/resume \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."Bu işlem webhook'u yeniden etkinleştirir: duraklama durumunu temizler, ardışık hata sayacını sıfırlar ve tekrar etkin yapar. Sonraki olay teslimi normal şekilde denenir.
Herhangi bir başarılı teslim, ardışık hata sayacını otomatik olarak sıfırlar. 9 hatanın ardından gelen tek bir başarı, webhook'un duraklatılmasını önler.
En İyi Uygulamalar
- 200'ü hızlı döndürün: webhook verilerini zaman uyumsuz olarak işleyin. Olayı kuyruğa alın ve hemen
200döndürün. Uzun süren işleyiciler zaman aşımı riskini artırır. - Idempotent işleme için olay kimliğini kullanın:
X-MLND-Event-Idbaşlığı (ve payload'daki karşılık gelenevent_idalanı), yeniden denemeler ve yeniden gönderimler boyunca sabittir: aynı temel olay, kaç kez yeniden teslim edilirse edilsin her zaman aynı kimlikle gelir. İşlenmiş kimlikleri saklayın ve daha önce işlediklerinizi atlayın, böylece yinelenen bir teslimat sizin tarafınızda hiçbir şey yapmaz. - Ardışık hataları izleyin: webhook'ları listelerken
consecutiveFailuresalanını kontrol edin. Otomatik duraklama eşiğine ulaşmadan önce araştırın. - 429'u düzgün işleyin: uç noktanız aşırı yüklendiyse,
Retry-Afterbaşlığıyla429döndürün. MailLand buna uyacaktır.
Sonraki Adımlar
- İmza Doğrulama: webhook özgünlüğünü doğrulayın
- Olaylar: tam olay türü başvurusu
- Webhook'lara Genel Bakış: webhook'ları oluşturun ve yönetin