Erhalten Sie Echtzeitbenachrichtigungen, wenn Ereignisse in Ihrer Organisation auftreten. Webhooks ermöglichen es Ihnen, reaktive Integrationen zu erstellen, die sofort auf QR-Code-Scans und andere Ereignisse reagieren.
Erhalten Sie sofortige Benachrichtigungen, wenn Ereignisse auftreten, kein Polling erforderlich
HMAC-Signaturen bestätigen, dass Webhooks von iloveQR stammen
Automatische Wiederholungen mit exponentiellem Backoff bei fehlgeschlagenen Zustellungen
Konfigurieren Sie Webhooks über das Dashboard oder die API, um mit dem Empfang von Ereignissen zu beginnen.
Richten Sie einen HTTPS-Endpunkt auf Ihrem Server ein, um Webhook-Nutzlasten zu empfangen.
Fügen Sie Ihre Endpunkt-URL hinzu und wählen Sie aus, für welche Ereignisse Sie sich anmelden möchten.
Implementieren Sie die Signaturüberprüfung, um sicherzustellen, dass die Nutzlast authentisch ist.
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"
}'Melden Sie sich für die Ereignisse an, die Sie benötigen. Jeder Ereignistyp hat eine spezifische Nutzlaststruktur.
qr.createdEin neuer QR-Code wurde erstelltqr.updatedEin QR-Code wurde aktualisiertqr.deletedEin QR-Code wurde gelöschtqr.scannedEin QR-Code wurde gescanntqr.archivedEin QR-Code wurde archiviertqr.restoredEin QR-Code wurde aus dem Archiv wiederhergestelltsubscription.createdEin neues Abonnement wurde erstelltsubscription.updatedEin Abonnement wurde aktualisiertsubscription.cancelledEin Abonnement wurde storniertsubscription.payment_succeededEine Zahlung war erfolgreichsubscription.payment_failedEine Zahlung ist fehlgeschlagenmember.joinedEin Mitglied trat der Organisation beimember.leftEin Mitglied verließ die Organisationmember.role_changedDie Rolle eines Mitglieds wurde geändertAlle Webhook-Nutzlasten folgen einer konsistenten Struktur mit Ereignismetadaten und Daten.
{
"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"
}
}
}Überprüfen Sie immer die Signaturen von Webhooks, um sicherzustellen, dass die Nutzlast von iloveQR stammt und während der Übertragung nicht manipuliert wurde.
Jede Webhook-Anfrage enthält einen X-Webhook-Signature-Header, der eine HMAC-SHA256-Signatur des Anfragekörpers enthält.
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', 200Geben Sie innerhalb von 5 Sekunden eine 2xx-Antwort zurück. Verarbeiten Sie Webhooks asynchron, wenn Ihre Bearbeitung länger dauert.
Speichern Sie die Ereignis-ID und überprüfen Sie auf Duplikate. Webhooks können in seltenen Fällen mehr als einmal zugestellt werden.
Verwenden Sie immer HTTPS-Endpunkte. Wir liefern keine Webhooks an HTTP-URLs.
Richten Sie ein Monitoring für fehlgeschlagene Webhook-Zustellungen ein. Überprüfen Sie die Webhook-Protokolle im Dashboard zur Fehlersuche.
Wenn Ihr Endpunkt einen Fehler zurückgibt oder nicht antwortet, versuchen wir die Zustellung automatisch mit exponentiellem Backoff:
| Versuch | Verzögerung |
|---|---|
| 1. Wiederholung | 1 Minute |
| 2. Wiederholung | 5 Minuten |
| 3. Wiederholung | 30 Minuten |
| 4. Wiederholung | 2 Stunden |
| 5. Wiederholung (final) | 24 Stunden |
Hinweis: Nach 5 fehlgeschlagenen Versuchen wird der Webhook als fehlgeschlagen markiert und wir hören auf, es erneut zu versuchen. Sie erhalten eine E-Mail-Benachrichtigung über den Fehler.
Bereit, loszulegen? Entdecken Sie weitere Ressourcen: