जब आपके संगठन में घटनाएँ होती हैं, तो वास्तविक समय में सूचनाएँ प्राप्त करें। वेबहुक आपको प्रतिक्रियाशील एकीकरण बनाने की अनुमति देते हैं जो तुरंत QR कोड स्कैन और अन्य घटनाओं का जवाब देते हैं।
जब घटनाएँ होती हैं, तो तुरंत सूचित किया जाए, कोई पोलिंग आवश्यक नहीं
HMAC हस्ताक्षर यह सत्यापित करते हैं कि वेबहुक iloveQR से आते हैं
विफल डिलीवरी के लिए स्वचालित पुनः प्रयास के साथ गुणात्मक बैकऑफ
डैशबोर्ड या API के माध्यम से वेबहुक कॉन्फ़िगर करें ताकि घटनाएँ प्राप्त करना शुरू कर सकें।
अपने सर्वर पर एक HTTPS एंडपॉइंट सेट करें ताकि वेबहुक पेलोड प्राप्त कर सकें।
अपने एंडपॉइंट 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एक QR कोड को अपडेट किया गयाqr.deletedएक QR कोड को हटा दिया गयाqr.scannedएक QR कोड को स्कैन किया गयाqr.archivedएक QR कोड को आर्काइव किया गयाqr.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 से आया है और ट्रांजिट में छेड़छाड़ नहीं की गई।
प्रत्येक वेबहुक अनुरोध में एक 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', 2005 सेकंड के भीतर 2xx प्रतिक्रिया लौटाएं। यदि आपका हैंडलिंग अधिक समय लेता है तो वेबहुक को असिंक्रोनस रूप से प्रोसेस करें।
घटना ID को स्टोर करें और डुप्लिकेट के लिए जांचें। दुर्लभ मामलों में वेबहुक एक से अधिक बार वितरित किए जा सकते हैं।
हमेशा HTTPS एंडपॉइंट का उपयोग करें। हम HTTP URLs पर वेबहुक वितरित नहीं करते हैं।
वेबहुक डिलीवरी विफलताओं के लिए निगरानी सेट करें। डिबगिंग के लिए डैशबोर्ड में वेबहुक लॉग की जांच करें।
यदि आपका एंडपॉइंट एक त्रुटि लौटाता है या प्रतिक्रिया नहीं देता है, तो हम गुणात्मक बैकऑफ के साथ स्वचालित रूप से डिलीवरी का पुनः प्रयास करते हैं:
| प्रयास | विलंब |
|---|---|
| 1st पुनः प्रयास | 1 मिनट |
| 2nd पुनः प्रयास | 5 मिनट |
| 3rd पुनः प्रयास | 30 मिनट |
| 4वां पुनः प्रयास | 2 घंटे |
| 5वां पुनः प्रयास (अंतिम) | 24 घंटे |
नोट: 5 असफल प्रयासों के बाद, वेबहुक को असफल के रूप में चिह्नित किया जाता है और हम पुनः प्रयास करना बंद कर देते हैं। आपको असफलता के बारे में एक ईमेल सूचना प्राप्त होगी।
शुरू करने के लिए तैयार? अधिक संसाधनों का अन्वेषण करें: