استقبل إشعارات في الوقت الحقيقي عند حدوث أحداث في مؤسستك. تتيح لك Webhooks بناء تكاملات تفاعلية تستجيب على الفور لمسح رموز QR وغيرها من الأحداث.
احصل على إشعار فور حدوث الأحداث، دون الحاجة إلى الاستطلاع
تتحقق توقيعات HMAC من أن Webhooks تأتي من iloveQR
إعادة محاولات تلقائية مع تراجع أسي للتسليمات الفاشلة
قم بتكوين Webhooks من خلال لوحة التحكم أو API لبدء تلقي الأحداث.
قم بإعداد نقطة نهاية HTTPS على خادمك لاستقبال حمولات Webhook.
أضف عنوان URL لنقطة النهاية الخاصة بك واختر الأحداث التي ترغب في الاشتراك فيها.
قم بتنفيذ التحقق من التوقيع لضمان أن الحمولات أصلية.
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"
}'اشترك في الأحداث التي تحتاجها. كل نوع من الأحداث له هيكل حمولة محدد.
qr.createdتم إنشاء رمز QR جديدqr.updatedتم تحديث رمز QRqr.deletedتم حذف رمز QRqr.scannedتم مسح رمز QRqr.archivedتم أرشفة رمز QRqr.restoredتم استعادة رمز QR من الأرشيفsubscription.createdتم إنشاء اشتراك جديدsubscription.updatedتم تحديث الاشتراكsubscription.cancelledتم إلغاء الاشتراكsubscription.payment_succeededتمت معالجة الدفع بنجاحsubscription.payment_failedفشل الدفعmember.joinedانضم عضو إلى المنظمةmember.leftغادر عضو المنظمةmember.role_changedتم تغيير دور عضوتتبع جميع حمولات الويب هيكلًا متسقًا مع بيانات وصف الحدث.
{
"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"
}
}
}تحقق دائمًا من توقيعات الويب لضمان أن الحمولة جاءت من iloveQR ولم يتم العبث بها أثناء النقل.
يتضمن كل طلب Webhook ترويسة X-Webhook-Signature تحتوي على توقيع HMAC-SHA256 لجسم الطلب.
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', 200أعد 2xx استجابة في غضون 5 ثوانٍ. عالج الويب بشكل غير متزامن إذا استغرق التعامل وقتًا أطول.
قم بتخزين معرف الحدث والتحقق من التكرارات. قد يتم تسليم الويب أكثر من مرة في حالات نادرة.
استخدم دائمًا نقاط نهاية HTTPS. لا نقوم بتسليم الويب إلى عناوين URL HTTP.
قم بإعداد مراقبة لفشل تسليم الويب. تحقق من سجلات الويب في لوحة التحكم للتصحيح.
إذا أعاد نقطة النهاية خطأ أو لم يستجب، فإننا نعيد التسليم تلقائيًا مع تراجع أسي:
| محاولة | تأخير |
|---|---|
| إعادة المحاولة الأولى | 1 دقيقة |
| إعادة المحاولة الثانية | 5 دقائق |
| إعادة المحاولة الثالثة | 30 دقيقة |
| إعادة المحاولة الرابعة | ساعتان |
| إعادة المحاولة الخامسة (الأخيرة) | 24 ساعة |
ملاحظة: بعد 5 محاولات فاشلة، يتم وضع علامة على الويب على أنه فشل ونتوقف عن إعادة المحاولة. ستتلقى إشعارًا عبر البريد الإلكتروني حول الفشل.
هل أنت مستعد للبدء؟ استكشف المزيد من الموارد: