Sonundan sonuna iş akışı · Rehberler
Webhooks ve etkinlik odaklı entegrasyon
Dışarı çıkış webhook kurulum, güvenli bir alıcı, kopya koruma ve API aracılığıyla kayıp olayların kurtarılması.
Webhooks değişim gecikmesini azaltır, ancak gerçeğin kaynağını değiştirmez. Alıcılar idempotent olmalıdır ve periyodik uzlaşma hâlâ gereklidir.
Olaylara dayalı entegrasyonlar ve arka uç hizmetler1
Olayları ve mülkiyetleri tanımlamak
Yeni veya değiştirilmiş bir sipariş, stok değişikliği veya fiyat değişikligi gibi bir iş etkinliği ile başlayın.
Webhook'un orijinal payload'unu normal modelinizden ayrı olarak sınırlı bir süre için tutun.
Yeni bir seçeneği alan bilinen bir olay yapısının analizini kırmamalıdır.
İlişkili API uç noktaları
POST/api/webhook/Bir web bağlantısı oluşturGET/api/webhook/Webhook ayarlarını listele
2
Güvenli bir HTTP alıcı oluştur
- 1
İstek kısıtlı
Sadece gerekli yöntemleri ve içerik türlerini kabul edin, vücut boyutunuzu sınırlayın ve kısa bir okuma süresi kullanın.
- 2
Kaynak doğrulanması
Webhook'a göre imzalama ile X-SelSup-Signature'i doğrulayın Gizli: HMAC-SHA256 ASCII(t + "." + id + ".") ardından çiğ beden baytları. Eski zaman damgalarını ve teslimat kimliklerini kopyalayın.
- 3
Olay devam etsin .
Faydalı yük ve kopyalanma anahtarını tek bir işlemde saklayın, sonra hızlı bir şekilde başarılı bir yanıt gönderin.
- 4
İşlem asinkron
Giren HTTP talebi yerine ERP, WMS ve diğer sistemleri bir kuyruktan arayın.
Yavaş bir cevap, zaman kesimini ve ikili teslimat riskini arttırır.
const crypto = require('node:crypto');
const signingSecret = process.env.SELSUP_WEBHOOK_SECRET;
// Register this route before express.json() so req.body is a Buffer.
app.post('/selsup/events', express.raw({type: 'application/json'}), async (req, res) => {
const header = req.get('X-SelSup-Signature') || '';
const match = /^t=(\d+),id=([0-9a-f-]{36}),v1=([0-9a-f]{64})$/.exec(header);
if (!match) return res.sendStatus(401);
const [, timestamp, deliveryId, hex] = match;
if (Math.abs(Date.now() / 1000 - Number(timestamp)) > 300) return res.sendStatus(401);
const signed = Buffer.concat([
Buffer.from(`${timestamp}.${deliveryId}.`, 'ascii'), req.body
]);
const expected = crypto.createHmac('sha256', Buffer.from(signingSecret, 'hex'))
.update(signed).digest();
const actual = Buffer.from(hex, 'hex');
if (actual.length !== expected.length || !crypto.timingSafeEqual(actual, expected)) {
return res.sendStatus(401);
}
const inserted = await inbox.insertOnce(deliveryId, req.body);
return res.sendStatus(inserted ? 202 : 200);
});
3
Doppel, düzenleme ve deduple
Doppled delivery'i normal olarak kullanın. Var olduğunda sabit bir olay kimliği kullanın; aksi takdirde bir anahtarı bir varlık türünden, varlık kimliği, değiştirme süresi ve anlamlı verilerin bir haş'inden çıkarın.
Olaylar sıradan gelebilir. API üzerinden yazmadan önce değiştirilmiş Tarihi karşılaştırın veya mevcut varlığı yeniden yükleyin.
İşlem yapılmış bir olay için başarı durumunu geri gönderin. Aksi takdirde gönderen tamamlanmış çalışmayı yeniden deneyebilir.
Eşsiz etkinlik anahtarı, durum ve deneme sayımı ile gelen olaylar tablosu, kopyalanmayı, tekrarlamayı ve denetlemeyi basitleştirir.
4
Kaybolan olayları kurtar
Webhooks sağlıklı olduğunda bile API uzantısını düzenli olarak çalıştırın.
Alıcı çalışmadıktan sonra, gelen kutuyu boşaltın ve tam kesinti penceresi için değişiklikleri isteyin. Aynı deduplasyon mantığı webhook ve API sonuçlarını birleştirmelidir.
İlişkili API uç noktaları
GET/api/order/findDüzen değişikliklerini geri alınGET/api/wms/stock/findSahal değişimlerini uzlaştır
5
Webhook yaşam döngüsünü yönet
Entegre etmenize aktif URL, etkinlik türü, son başarılı alınma ve en son error'i gösterin. Bu doğrudan sunucu günlük erişimsiz teşhis yapmayı sağlar.
Bir URL'yi değiştirmeden veya silmeden önce, yeni alıcının olayları kabul ettiğini kontrol edin.