वेबहुक
एक्सटेंशन वेबहुक आपके कॉन्फ़िगर किए गए वेबहुक यूआरएल पर POST अनुरोधों के रूप में भेजे जाते हैं।
शीर्षक:
Content-Type: application/jsonx-webhook-event: <event-name>x-webhook-token-hash: <sha256-hash>
शीर्ष-स्तरीय पेलोड का आकार:
{
"id": "uuid",
"event": "lock.time_changed",
"eventData": {},
"timestamp": "2026-02-16T01:23:45.678Z",
"app": {
"id": "app_id",
"slug": "my-app",
"displayName": "My App"
},
"sessionId": "extension_session_id",
"extension": {
"sessionId": "extension_session_id",
"enabled": true,
"config": {}
},
"wearer": {
"id": "wearer_user_id",
"username": "wearer_name"
},
"keyholder": {
"id": "keyholder_user_id",
"username": "keyholder_name"
},
"lock": {
"id": "lock_id",
"title": "Lock title",
"releaseAt": "2026-02-20T00:00:00.000Z",
"remainingSeconds": 12345,
"isLocked": true,
"isFrozen": false
}
}
डिलीवरी, पुनः प्रयास और ऑर्डर करना
- वेबहुक को कतारबद्ध किया जाता है और पृष्ठभूमि में अतुल्यकालिक रूप से वितरित किया जाता है।
- डिलीवरी क्रैश रिकवरी के लिए इन-फ्लाइट प्रोसेसिंग लिस्ट के साथ रेडिस-समर्थित क्यू का उपयोग करती है।
- प्रोसेसिंग लगातार चलती रहती है (प्राइमरी वर्कर पर लगभग एक बार प्रति सेकंड)।
- प्रत्येक प्रयास के लिए HTTP टाइमआउट लगभग 3 सेकंड है।
पुनः प्रयास नीति:
- डिलीवरी को दोबारा तब आजमाया जाता है जब:
- अनुरोध का समय समाप्त हो गया है या नेटवर्क में कोई त्रुटि है।
- एंडपॉइंट
429लौटाता है - एंडपॉइंट किसी भी
5xxस्थिति को लौटाता है - अन्य
4xxस्थितियों के लिए डिलीवरी का पुनः प्रयास नहीं किया जाता है। - बैकऑफ़ विलंब हैं:
15s,60s,150s,600s।
एकीकरणकर्ताओं के लिए निहितार्थ:
- डिलीवरी कम से कम एक बार होनी चाहिए, न कि ठीक एक बार। आपका एंडपॉइंट आइडम्पोटेंट होना चाहिए।
- क्रम निर्धारण सर्वोत्तम प्रयास के आधार पर किया गया है। सभी आयोजनों में एक समान क्रम लागू होने की धारणा न रखें।
- एक तेज़
2xxप्रतिक्रिया लौटाएँ और अपने भारी काम को अतुल्यकालिक रूप से संसाधित करें। - आप पेलोड
idका उपयोग डुप्लिकेशन हटाने की कुंजी के रूप में कर सकते हैं।
घटना डेटा
lock.time_changed
{
"event": "lock.time_changed",
"eventData": {
"source": "keyholder",
"beforeReleaseAt": "2026-02-20T00:00:00.000Z",
"afterReleaseAt": "2026-02-20T01:00:00.000Z",
"requestedDeltaSeconds": 3600,
"appliedDeltaSeconds": 3600
}
}
टिप्पणियाँ:
requestedDeltaSecondsवह कोड है जिसके तहत कार्रवाई का अनुरोध किया गया था।appliedDeltaSecondsही वह कोड था जिसे प्रभावी रूप से सहेजा गया था।- यदि
appliedDeltaSecondsको रिलीज़ टाइमस्टैम्प से प्राप्त नहीं किया जा सकता है, तो यहnullहो सकता है।
lock.frozen / lock.unfrozen
{
"event": "lock.frozen",
"eventData": {
"source": "keyholder",
"durationSeconds": 3600,
"beforeFrozen": false,
"afterFrozen": true
}
}
{
"event": "lock.unfrozen",
"eventData": {
"source": "dice",
"durationSeconds": 900,
"beforeFrozen": true,
"afterFrozen": false
}
}
task.* घटनाएँ
task.assigned
{
"event": "task.assigned",
"eventData": {
"runId": "tr_1739665200000",
"taskId": "task_123",
"status": "active",
"source": "keyholder",
"overriddenRunId": null
}
}
task.completed
{
"event": "task.completed",
"eventData": {
"runId": "tr_1739665200000",
"taskId": "task_123",
"status": "completed",
"pointsAwarded": 10
}
}
task.failed
{
"event": "task.failed",
"eventData": {
"runId": "tr_1739665200000",
"taskId": "task_123",
"status": "failed",
"penaltyApplied": true,
"outcomeDescription": "1 hour added"
}
}
hygiene.* घटनाएँ
hygiene.started
{
"event": "hygiene.started",
"eventData": {
"startedAt": "2026-02-16T02:00:00.000Z",
"expiresAt": "2026-02-16T02:30:00.000Z",
"windowSeconds": 1800,
"penaltySeconds": 3600
}
}
hygiene.resumed
{
"event": "hygiene.resumed",
"eventData": {
"completedAt": "2026-02-16T02:20:00.000Z",
"lateMinutes": 0,
"penaltyApplied": false,
"punishmentSeconds": 0,
"penaltyMode": null,
"cardsAdjusted": 0,
"actualDeltaSeconds": null
}
}
hygiene.resumed_late
{
"event": "hygiene.resumed_late",
"eventData": {
"completedAt": "2026-02-16T02:45:00.000Z",
"lateMinutes": 15,
"penaltyApplied": true,
"punishmentSeconds": 3600,
"penaltyMode": "time",
"cardsAdjusted": 0,
"actualDeltaSeconds": 3600
}
}
verification.picture_submitted
{
"event": "verification.picture_submitted",
"eventData": {
"verificationId": "verification_id",
"date": "2026-02-16",
"submittedAt": "2026-02-16T03:10:00.000Z",
"photoUrl": "https://cdn.example.com/locks/..."
}
}
dice.rolled
{
"event": "dice.rolled",
"eventData": {
"userTotalScore": 14,
"botTotalScore": 8,
"difference": 6,
"requestedAdjustmentSeconds": -3600,
"appliedAdjustmentSeconds": -3600,
"cardGameEnabled": false
}
}
lock.archive_removal
{
"event": "lock.archive_removal",
"eventData": {
"source": "archive",
"actorRole": "wearer",
"lockId": "lock_id"
}
}
टिप्पणियाँ:
sourceया तोdeleteहै याarchive।actorRoleया तोwearerहै याkeyholder।