Webhooklar
Olay aboneliği kurma, imza doğrulama, yeniden deneme davranışı ve yerelde test etme.
Güncelleme: 8 Ağustos 2026
Webhook, bir olay gerçekleştiğinde Atlas’ın sizin adresinize POST isteği
göndermesidir. Sürekli sorgu atmak yerine olayı beklemenizi sağlar.
Abonelik kurma
curl -X POST https://api.atlas.example/v1/webhooks \
-H "Authorization: Bearer atl_live_••••••••" \
-H "Content-Type: application/json" \
-d '{
"url": "https://ornek.com/atlas/olaylar",
"events": ["user.created", "publication.live"]
}'
Yanıtta dönen secret değerini saklayın — imza doğrulaması bu değerle yapılır ve
sonradan tekrar görüntülenemez.
Olaylar
| Olay | Ne zaman tetiklenir |
|---|---|
user.created | Davet edilen kullanıcı daveti kabul ettiğinde |
user.deleted | Kullanıcı çalışma alanından çıkarıldığında |
publication.live | Yayın dağıtımı tamamlandığında |
publication.failed | Yayın hata verdiğinde |
collection.deleted | Koleksiyon silindiğinde |
Gövde biçimi
Her istek aynı zarfı kullanır; olaya özgü veriler data içindedir.
{
"id": "evt_7Kq2",
"type": "publication.live",
"created_at": "2026-08-09T10:31:20Z",
"data": {
"publication_id": "pub_44Qn",
"collection_id": "col_82Kd",
"duration_ms": 19400
}
}
İmzayı doğrulayın
Her istek X-Atlas-Signature başlığı taşır. Başlığın değeri, zaman damgası ve ham
gövdenin secret ile HMAC-SHA256 özetidir.
import crypto from 'node:crypto';
export function verify(rawBody, header, secret) {
const [tsPart, sigPart] = header.split(',');
const timestamp = tsPart.replace('t=', '');
const signature = sigPart.replace('v1=', '');
// 5 dakikadan eski istekleri reddedin — yeniden oynatmayı önler
const age = Math.abs(Date.now() / 1000 - Number(timestamp));
if (age > 300) return false;
const expected = crypto
.createHmac('sha256', secret)
.update(`${timestamp}.${rawBody}`)
.digest('hex');
// Sabit süreli karşılaştırma — zamanlama saldırısını önler
return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(signature));
}
Gövdeyi JSON’a çevirmeden ham hâliyle imzalayın. Çoğu çatı gövdeyi otomatik ayrıştırır; ham gövdeyi ayrıca saklamanız gerekir, aksi hâlde imza tutmaz.
Yeniden deneme
5 saniye içinde 2xx dönmezse istek başarısız sayılır ve artan aralıklarla yeniden
denenir: 1 dk, 5 dk, 30 dk, 2 sa, 6 sa. Altıncı denemeden sonra abonelik disabled
durumuna geçer ve çalışma alanı yöneticilerine e-posta gider.
İşi uç noktada senkron yapmayın: isteği kuyruğa alıp hemen 200 dönün.
Yerelde test
Yerel sunucunuzu geçici bir adresle dışarı açıp o adresi kaydedin. Panelden Test olayı gönder ile gerçek bir olay beklemeden zarf biçimini görebilirsiniz.