Etkinlikler gerçekleştiğinde organizasyonunuzda gerçek zamanlı bildirimler alın. Webhooks, QR kodu taramaları ve diğer etkinliklere anında yanıt veren reaktif entegrasyonlar oluşturmanıza olanak tanır.
Etkinlikler gerçekleştiğinde anında bildirim alın, anket gerektirmez
HMAC imzaları, webhooks'un iloveQR'den geldiğini doğrular
Başarısız teslimatlar için otomatik yeniden denemeler ile üstel geri çekilme
Etkinlikleri almaya başlamak için webhooks'u kontrol paneli veya API aracılığıyla yapılandırın.
Webhook yüklerini almak için sunucunuzda bir HTTPS uç noktası ayarlayın.
Uç nokta URL'nizi ekleyin ve hangi etkinliklere abone olacağınızı seçin.
Yüklerin gerçek olduğunu doğrulamak için imza doğrulaması uygulayın.
curl -X POST \
"https://api.iloveqr.com/api/v1/organizations/org_abc123/webhooks" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://your-server.com/webhooks/iloveqr",
"events": ["qr.scanned", "qr.created", "qr.updated"],
"secret": "your_webhook_secret"
}'İhtiyacınız olan etkinliklere abone olun. Her etkinlik türünün belirli bir yük yapısı vardır.
qr.createdYeni bir QR kodu oluşturulduqr.updatedBir QR kodu güncellendiqr.deletedBir QR kodu silindiqr.scannedBir QR kodu tarandıqr.archivedBir QR kodu arşivlendiqr.restoredBir QR kodu arşivden geri yüklendisubscription.createdYeni bir abonelik oluşturuldusubscription.updatedBir abonelik güncellendisubscription.cancelledBir abonelik iptal edildisubscription.payment_succeededBir ödeme başarılı oldusubscription.payment_failedBir ödeme başarısız oldumember.joinedBir üye organizasyona katıldımember.leftBir üye organizasyondan ayrıldımember.role_changedBir üyenin rolü değiştirildiTüm webhook yükleri, etkinlik meta verileri ve verilerle tutarlı bir yapıyı takip eder.
{
"id": "evt_1a2b3c4d5e6f",
"event": "qr.scanned",
"createdAt": "2024-01-15T14:30:00Z",
"organizationId": "org_abc123",
"data": {
"qrCodeId": "qr_xyz789",
"qrCodeName": "Product Landing Page",
"shortCode": "xyz789",
"destinationUrl": "https://example.com/product",
"scan": {
"id": "scan_123abc",
"timestamp": "2024-01-15T14:30:00Z",
"location": {
"country": "US",
"city": "New York",
"latitude": 40.7128,
"longitude": -74.0060
},
"device": {
"type": "mobile",
"os": "iOS",
"browser": "Safari"
},
"isUnique": true
}
}
}{
"id": "evt_7g8h9i0j1k2l",
"event": "qr.created",
"createdAt": "2024-01-15T10:00:00Z",
"organizationId": "org_abc123",
"data": {
"qrCode": {
"id": "qr_newcode",
"type": "URL",
"name": "New Campaign QR",
"shortUrl": "https://ilqr.co/newcode",
"destinationUrl": "https://example.com/campaign",
"createdBy": "user_abc123"
}
}
}Her zaman webhook imzalarını doğrulayın, böylece yükün iloveQR'den geldiğinden ve transit sırasında değiştirilmediğinden emin olun.
Her webhook isteği, istek gövdesinin HMAC-SHA256 imzasını içeren bir X-Webhook-Signature başlığı içerir.
const crypto = require('crypto');
function verifyWebhookSignature(payload, signature, secret) {
const expectedSignature = crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expectedSignature)
);
}
// In your webhook handler
app.post('/webhooks/iloveqr', (req, res) => {
const signature = req.headers['x-webhook-signature'];
const payload = JSON.stringify(req.body);
if (!verifyWebhookSignature(payload, signature, WEBHOOK_SECRET)) {
return res.status(401).send('Invalid signature');
}
// Process the webhook
const event = req.body;
console.log('Received event:', event.event);
res.status(200).send('OK');
});import hmac
import hashlib
def verify_webhook_signature(payload: bytes, signature: str, secret: str) -> bool:
expected = hmac.new(
secret.encode(),
payload,
hashlib.sha256
).hexdigest()
return hmac.compare_digest(signature, expected)
# In your Flask handler
@app.route('/webhooks/iloveqr', methods=['POST'])
def handle_webhook():
signature = request.headers.get('X-Webhook-Signature')
payload = request.get_data()
if not verify_webhook_signature(payload, signature, WEBHOOK_SECRET):
return 'Invalid signature', 401
event = request.get_json()
print(f"Received event: {event['event']}")
return 'OK', 2005 saniye içinde 2xx yanıtı döndürün. İşlemleriniz daha uzun sürerse webhooks'u asenkron olarak işleyin.
Etkinlik kimliğini saklayın ve yinelenenleri kontrol edin. Webhooks nadir durumlarda birden fazla kez teslim edilebilir.
Her zaman HTTPS uç noktaları kullanın. HTTP URL'lerine webhooks teslim etmiyoruz.
Webhook teslimat başarısızlıkları için izleme ayarlayın. Hata ayıklama için kontrol panelindeki webhook günlüklerini kontrol edin.
Eğer uç noktanız bir hata dönerse veya yanıt vermezse, otomatik olarak üstel geri çekilme ile teslimatı yeniden deneriz:
| Deneme | Gecikme |
|---|---|
| 1. yeniden deneme | 1 dakika |
| 2. yeniden deneme | 5 dakika |
| 3. yeniden deneme | 30 dakika |
| 4. deneme | 2 saat |
| 5. deneme (son) | 24 saat |
Not: 5 başarısız denemeden sonra, webhook başarısız olarak işaretlenir ve denemeyi durdururuz. Başarısızlık hakkında bir e-posta bildirimi alacaksınız.
Başlamak için hazır mısınız? Daha fazla kaynağı keşfedin: