
भाषा 🇮🇳 हिन्दी
अवलोकन
कार्यान्वयन
पर्दे के पीछे
वेबहुक्स
FastComments के साथ जब भी कोई कमेंट हमारे सिस्टम में जोड़ा, अपडेट या हटाया जाता है, तब एक API endpoint को कॉल करना संभव है।
हम इसे HTTP/HTTPS के माध्यम से asynchronous webhooks के ज़रिए पूरा करते हैं।
वेबहुक्स क्या हैं 
वेबहुक दो सिस्टमों के बीच एक तंत्र, या एकीकरण है, जिसमें "उत्पादक" (FastComments) एक घटना उत्पन्न करता है जिसे "उपभोक्ता" (आप) एक API कॉल के माध्यम से उपभोग करता है।
समर्थित घटनाएँ और संसाधन 
FastComments केवल Comment रिसोर्स के लिए webhooks का समर्थन करता है।
हम कमेंट बनाने, हटाने और अपडेट होने पर webhooks का समर्थन करते हैं।
इनमें से प्रत्येक को हमारे सिस्टम में अलग-अलग इवेंट माना जाता है और इसलिए webhook इवेंट्स के लिए इनकी अलग-अलग semantics और संरचनाएँ होती हैं।
कोई भी संख्या में endpoints एक ही इवेंट की सदस्यता ले सकते हैं, चाहे dashboard से या API के माध्यम से (Managing Webhooks via the API देखें)। प्रत्येक webhook स्वतंत्र रूप से डिलीवर किया जाता है।
स्थानीय विकास सेटअप 
लोकल डेवलपमेंट के लिए, ngrok जैसे टूल का उपयोग करें।
सिस्टम को सुरक्षित रखना आसान बनाने के लिए, लोकल डेवलपमेंट अन्य एनवायरनमेंट सेट अप और सुरक्षित करने की उसी प्रक्रिया का पालन करता है।
चरण 1: अपने खाते के डोमेन में "localhost" जोड़ें।
"localhost" को यहाँ एक डोमेन के रूप में जोड़ें।
चरण 2: एक API Key चुनें
हम आपके डोमेन के लिए वेबहुक कॉन्फ़िगरेशन जोड़ने जा रहे हैं, इसलिए हमें एक API key की आवश्यकता होगी। आप यह यहाँ कर सकते हैं।
"Associate with domain" के अंतर्गत - अपना "localhost" डोमेन चुनें।
ध्यान दें: वैकल्पिक रूप से, आप सभी टेस्टिंग गतिविधि और स्टेजिंग एनवायरनमेंट के लिए एक ही API Secret का उपयोग कर सकते हैं। बस "All Domains" के लिए एक API Secret जोड़ें, और इसे "test" जैसा नाम दें।
सुनिश्चित करें कि आपके प्रोडक्शन डोमेन(s) के लिए एक API Secret परिभाषित है। अन्य सभी डोमेन के इवेंट्स वाइल्डकार्ड (टेस्टिंग) secret का उपयोग करेंगे।
चरण 3: अपना वेबहुक जोड़ें
ngrok या समान टूल चलाते समय, "localhost" के लिए मान यहाँ सेट करें।
Send Test Payload पर क्लिक करने पर, हम यह जांचने के लिए दो टेस्ट इवेंट्स भेजेंगे कि आप API key को वैलिडेट करते हैं या नहीं।
एक बार वैलिडेट होने के बाद, Save दबाएं।
चरण 4: एक कमेंट जोड़ें
अब आप कमेंट्स जोड़, संपादित या हटा सकते हैं और आपको हमें अपनी टेस्टिंग API key का उपयोग करके इवेंट्स के साथ आपकी लोकल डेवलपमेंट मशीन को कॉल करते देखना चाहिए। इवेंट्स के आपकी मशीन तक पहुंचने में 30 सेकंड तक की देरी हो सकती है।
सेटअप 
localhost के लिए वही चरण अपनाएँ जो आप production के लिए करते हैं। सुनिश्चित करें कि आपके पास production domains और API Secrets सेटअप हैं।
सबसे पहले, Webhooks admin पर जाएँ। इसे Manage Data -> Webhooks के माध्यम से एक्सेस किया जा सकता है।
यह पेज आपके खाते के प्रत्येक webhook की सूची दिखाता है:
एक जोड़ने के लिए New Webhook पर क्लिक करें। प्रत्येक webhook में एक URL, एक कमेंट इवेंट (created, updated या deleted), एक डोमेन, और एक HTTP मेथड होती है:
प्रत्येक webhook स्वतंत्र रूप से डिलीवर किया जाता है। आप एक ही इवेंट को कई endpoints पर भेज सकते हैं, और All Domains के लिए स्कोप किया गया webhook हर डोमेन से कमेंट प्राप्त करता है, भले ही उसी इवेंट के लिए कोई डोमेन-विशिष्ट webhook मौजूद हो। एक ही URL, इवेंट और डोमेन दो बार नहीं जोड़ा जा सकता।
सेव करने से पहले, यह जाँचने के लिए Send Test Payload पर क्लिक करें कि endpoint एक साइन किया गया रिक्वेस्ट स्वीकार करता है या नहीं। विवरण के लिए अगला सेक्शन, "Testing", देखें।
सूची से आप किसी webhook को एडिट, डिसेबल, फिर से इनेबल या डिलीट कर सकते हैं। डिसेबल करने पर कतार में मौजूद इवेंट तब तक बने रहते हैं जब तक webhook फिर से इनेबल नहीं किया जाता; डिलीट करने पर वे हटा दिए जाते हैं।
Webhooks को API के माध्यम से भी बनाया जा सकता है, उदाहरण के लिए Zapier द्वारा। वे उसी सूची में स्रोत API के साथ दिखाई देते हैं। API के माध्यम से Webhooks प्रबंधित करना देखें।
परीक्षण 
नए और एडिट वेबहुक पेजों में एक Send Test Payload बटन होता है जो फॉर्म में मौजूदा URL पर अनुरोध भेजता है, चाहे वह सेव किया गया हो या नहीं। Create और Update इवेंट्स एक डमी WebhookComment ऑब्जेक्ट भेजते हैं, जबकि Delete का परीक्षण करने पर केवल एक ID वाला डमी अनुरोध बॉडी भेजा जाता है।
पेलोड सत्यापित करना
अपने वेबहुक इंटीग्रेशन का परीक्षण करते समय, जांचें कि आने वाले अनुरोधों में निम्नलिखित हेडर शामिल हैं:
X-FastComments-Timestamp- Unix टाइमस्टैम्प (सेकंड)X-FastComments-Signature- HMAC-SHA256 हस्ताक्षर
हस्ताक्षर योजना के लागू होने से पहले बनाए गए वेबहुक्स को आपके API Secret वाला एक token हेडर भी प्राप्त होता है। नए वेबहुक्स को नहीं।
पेलोड की प्रामाणिकता सुनिश्चित करने के लिए HMAC हस्ताक्षर सत्यापन का उपयोग करें।
परीक्षण उपकरण
विकास के दौरान आने वाले वेबहुक पेलोड की जांच के लिए आप webhook.site या ngrok जैसे उपकरणों का उपयोग कर सकते हैं।
इवेंट प्रकार
- Create Event: तब ट्रिगर होता है जब एक नई टिप्पणी बनाई जाती है।
- Update Event: तब ट्रिगर होता है जब कोई टिप्पणी संपादित की जाती है।
- Delete Event: तब ट्रिगर होता है जब कोई टिप्पणी हटाई जाती है।
प्रत्येक वेबहुक एक इवेंट और एक HTTP मेथड (POST, PUT या DELETE) से जुड़ा होता है। प्रत्येक इवेंट में अनुरोध बॉडी में पूरी टिप्पणी का डेटा शामिल होता है (पेलोड फॉर्मेट के लिए Data Structures देखें)।
डेटा संरचनाएँ 
वेबहुक के माध्यम से भेजी जाने वाली एकमात्र संरचना WebhookComment ऑब्जेक्ट है, जिसे नीचे TypeScript में दर्शाया गया है।
WebhookComment ऑब्जेक्ट की संरचना
"Create" इवेंट की संरचना
"create" इवेंट का रिक्वेस्ट बॉडी एक WebhookComment ऑब्जेक्ट होता है।
"Update" इवेंट की संरचना
"update" इवेंट का रिक्वेस्ट बॉडी एक WebhookComment ऑब्जेक्ट होता है।
"Delete" इवेंट की संरचना
"delete" इवेंट का रिक्वेस्ट बॉडी एक WebhookComment ऑब्जेक्ट होता है।
14 नवंबर 2023 का परिवर्तन
पहले "delete" इवेंट के रिक्वेस्ट बॉडी में केवल कमेंट की id होती थी। अब इसमें डिलीशन के समय का पूरा कमेंट होता है।
हर कुंजी (key) हमेशा बॉडी में मौजूद रहती है। जब किसी फ़ील्ड के लिए कमेंट में कोई मान नहीं होता, तो बॉडी में null होता है
(बूलियन के लिए false और लिस्ट के लिए []), इसलिए डिलीवरी की संरचना एक कमेंट से दूसरे कमेंट में कभी नहीं बदलती।
Run 
जब किसी कमेंट में यूज़र्स को टैग किया जाता है, तो जानकारी mentions नामक लिस्ट में संग्रहीत होती है। उस लिस्ट के प्रत्येक ऑब्जेक्ट की
निम्नलिखित संरचना होती है।
Run 
badges लिस्ट की प्रत्येक एंट्री की निम्नलिखित संरचना होती है। बैज प्रकारों के लिए Badges गाइड देखें।
Run 
HTTP मेथड्स
आप एडमिन पैनल में प्रत्येक वेबहुक इवेंट प्रकार के लिए HTTP मेथड कॉन्फ़िगर कर सकते हैं:
- Create इवेंट: POST या PUT (डिफ़ॉल्ट: PUT)
- Update इवेंट: POST या PUT (डिफ़ॉल्ट: PUT)
- Delete इवेंट: DELETE, POST, या PUT (डिफ़ॉल्ट: DELETE)
चूंकि सभी रिक्वेस्ट में एक ID होती है, Create और Update ऑपरेशन डिफ़ॉल्ट रूप से इडेम्पोटेंट (idempotent) होते हैं (PUT)। उसी Create या Update रिक्वेस्ट को दोहराने से आपकी तरफ़ डुप्लिकेट ऑब्जेक्ट नहीं बनने चाहिए।
रिक्वेस्ट हेडर्स
प्रत्येक वेबहुक रिक्वेस्ट में निम्नलिखित हेडर्स शामिल होते हैं:
| हेडर | विवरण |
|---|---|
Content-Type | application/json |
token | आपकी API Secret |
X-FastComments-Timestamp | Unix टाइमस्टैम्प (सेकंड) जब रिक्वेस्ट साइन किया गया था |
X-FastComments-Signature | HMAC-SHA256 सिग्नेचर (sha256=<hex>) |
HMAC सिग्नेचर सत्यापित करने की जानकारी के लिए Security & API Tokens देखें।
सुरक्षा और API टोकन 
FastComments webhook अनुरोधों में सुरक्षा के लिए कई प्रमाणीकरण तंत्र शामिल हैं।
भेजे गए हेडर
| हेडर | विवरण |
|---|---|
token | आपका API Secret (पिछली संगतता के लिए) |
X-FastComments-Timestamp | Unix टाइमस्टैम्प (सेकंड) जब अनुरोध पर हस्ताक्षर किया गया |
X-FastComments-Signature | पेलोड का HMAC-SHA256 हस्ताक्षर |
HMAC हस्ताक्षर सत्यापन (अनुशंसित)
हम दृढ़ता से अनुशंसा करते हैं कि HMAC हस्ताक्षर को सत्यापित किया जाए ताकि यह सुनिश्चित हो सके कि webhook पेलोड प्रामाणिक हैं और उनमें छेड़छाड़ नहीं की गई है।
हस्ताक्षर प्रारूप: sha256=<hex-encoded-signature>
हस्ताक्षर की गणना कैसे होती है:
- जोड़ें:
timestamp + "." + JSON_payload_body - अपने API Secret को कुंजी के रूप में उपयोग करके HMAC-SHA256 गणना करें
- परिणाम को हेक्स-एनकोड करें
सत्यापन उदाहरण (Node.js)
const crypto = require('crypto');
function verifyWebhookSignature(req, apiSecret) {
const timestamp = req.headers['x-fastcomments-timestamp'];
const signature = req.headers['x-fastcomments-signature'];
if (!timestamp || !signature) {
return false;
}
// सत्यापित करें कि टाइमस्टैम्प हाल का है (5 मिनट के भीतर)
const now = Math.floor(Date.now() / 1000);
if (Math.abs(now - parseInt(timestamp, 10)) > 300) {
return false; // रीप्ले अटैक की रोकथाम
}
// हस्ताक्षर सत्यापित करें
const payload = JSON.stringify(req.body);
const expectedSignature = crypto
.createHmac('sha256', apiSecret)
.update(`${timestamp}.${payload}`)
.digest('hex');
return signature === `sha256=${expectedSignature}`;
}
सत्यापन उदाहरण (Python)
import hmac
import hashlib
import time
import json
def verify_webhook_signature(headers, body, api_secret):
timestamp = headers.get('X-FastComments-Timestamp')
signature = headers.get('X-FastComments-Signature')
if not timestamp or not signature:
return False
# सत्यापित करें कि टाइमस्टैम्प हाल का है
now = int(time.time())
if abs(now - int(timestamp)) > 300:
return False
# हस्ताक्षर सत्यापित करें
payload = json.dumps(body, separators=(',', ':'))
message = f"{timestamp}.{payload}"
expected = hmac.new(
api_secret.encode(),
message.encode(),
hashlib.sha256
).hexdigest()
return signature == f"sha256={expected}"
सत्यापन उदाहरण (PHP)
function verifyWebhookSignature($headers, $body, $apiSecret) {
$timestamp = $headers['X-FastComments-Timestamp'] ?? null;
$signature = $headers['X-FastComments-Signature'] ?? null;
if (!$timestamp || !$signature) {
return false;
}
// सत्यापित करें कि टाइमस्टैम्प हाल का है (5 मिनट के भीतर)
$now = time();
if (abs($now - intval($timestamp)) > 300) {
return false;
}
// हस्ताक्षर सत्यापित करें
$payload = json_encode($body, JSON_UNESCAPED_SLASHES);
$message = $timestamp . '.' . $payload;
$expectedSignature = 'sha256=' . hash_hmac('sha256', $message, $apiSecret);
return hash_equals($expectedSignature, $signature);
}
लेगेसी प्रमाणीकरण
आपके API Secret युक्त token हेडर पिछली संगतता के लिए अभी भी भेजा जाता है। हालाँकि, बेहतर सुरक्षा के लिए हम HMAC सत्यापन पर माइग्रेट करने की अनुशंसा करते हैं क्योंकि यह रीप्ले अटैक से सुरक्षा प्रदान करता है।
API के माध्यम से वेबहुक्स प्रबंधित करना 
Webhooks को REST API के माध्यम से भी प्रबंधित किया जा सकता है। इसी तरह Zapier जैसी इंटीग्रेशन डैशबोर्ड को छुए बिना कमेंट इवेंट्स की सदस्यता लेती हैं, और यह REST Hooks पैटर्न का पालन करता है: सब्सक्राइब करें, इवेंट्स प्राप्त करें, अनसब्सक्राइब करें।
API सब्सक्रिप्शन डैशबोर्ड में कॉन्फ़िगर किए गए webhooks के साथ-साथ रहते हैं। एक कमेंट इवेंट हर उस webhook को डिलीवर किया जाता है जो उसके डोमेन से मेल खाता है, प्रत्येक अपनी अलग डिलीवरी के रूप में, चाहे webhook किसी भी तरह से बनाया गया हो।
प्रमाणीकरण
हर अनुरोध में x-api-key हेडर (या API_KEY क्वेरी पैरामीटर) में आपकी API Key और tenantId क्वेरी पैरामीटर में आपकी tenant ID चाहिए। दोनों डैशबोर्ड के API Secret पेज पर दिखाए जाते हैं।
सब्सक्राइब करें
POST https://fastcomments.com/api/v1/webhooks?tenantId=YOUR_TENANT_ID
x-api-key: YOUR_API_KEY
Content-Type: application/json
{
"url": "https://hooks.zapier.com/hooks/catch/123/abc",
"event": "comment-created"
}| फ़ील्ड | आवश्यक | विवरण |
|---|---|---|
url | हाँ | एक पूर्ण http या https URL। |
event | हाँ | comment-created, comment-updated या comment-deleted। |
domain | नहीं | आपके खाते के कॉन्फ़िगरेशन से एक डोमेन। डिफ़ॉल्ट * है, जो हर डोमेन के इवेंट्स प्राप्त करता है। |
method | नहीं | POST (डिफ़ॉल्ट), PUT या DELETE। |
प्रतिक्रिया में सब्सक्रिप्शन होता है:
{
"status": "success",
"webhook": {
"id": "66f1c4c1e7a2b3d4f5a6b7c8",
"url": "https://hooks.zapier.com/hooks/catch/123/abc",
"event": "comment-created",
"domain": "*",
"method": "POST",
"source": "api",
"enabled": true,
"createdAt": "2026-09-08T12:00:00.000Z"
}
}
उसी URL को उसी इवेंट और डोमेन के लिए दोबारा सब्सक्राइब करने पर डुप्लिकेट बनाने के बजाय मौजूदा सब्सक्रिप्शन लौटाया जाता है, इसलिए क्लाइंट सुरक्षित रूप से रीट्राई कर सकता है। प्रत्येक tenant के पास अधिकतम 50 API सब्सक्रिप्शन हो सकते हैं।
सूची
GET https://fastcomments.com/api/v1/webhooks?tenantId=YOUR_TENANT_ID
Tenant के हर webhook को लौटाता है, जिनमें डैशबोर्ड में प्रबंधित वाले भी शामिल हैं ("source": "dashboard")। event, domain या source से फ़िल्टर करें।
अनसब्सक्राइब करें
DELETE https://fastcomments.com/api/v1/webhooks/SUBSCRIPTION_ID?tenantId=YOUR_TENANT_ID
किसी सब्सक्रिप्शन को डिलीट करने से उसके लिए कतार में मौजूद इवेंट्स भी हटा दिए जाते हैं। केवल API के माध्यम से बनाई गई सब्सक्रिप्शन ही इस तरह डिलीट की जा सकती हैं; डैशबोर्ड का webhook, या आपके खाते पर मौजूद न होने वाली कोई id, not-found कोड के साथ 404 लौटाता है। डैशबोर्ड webhooks को Webhooks पेज पर संपादित किया जाता है।
पेलोड और साइनिंग
डिलीवरी डैशबोर्ड webhooks के समान पेलोड का उपयोग करती हैं (Data Structures देखें) और उसी HMAC स्कीम से साइन की जाती हैं (Security & API Tokens देखें)। API सब्सक्रिप्शन को कभी भी लेगेसी token हेडर प्राप्त नहीं होता, इसलिए इसके बजाय X-FastComments-Signature हेडर सत्यापित करें।
नमूना पेलोड
GET https://fastcomments.com/api/v1/webhooks/sample-payloads?tenantId=YOUR_TENANT_ID&event=comment-created&limit=3
खाते की सबसे हाल की कमेंट्स को ठीक उसी आकार में लौटाता है जिस आकार में डिलीवरी होती है, ताकि कोई इंटीग्रेशन पहले इवेंट के आने से पहले वास्तविक नमूना डेटा दिखा सके। event वैकल्पिक है और केवल सत्यापित किया जाता है, क्योंकि हर इवेंट एक ही कमेंट ऑब्जेक्ट डिलीवर करता है। limit का डिफ़ॉल्ट 3 है और 1 से 10 स्वीकार करता है। 2 API क्रेडिट खर्च होते हैं।
{
"status": "success",
"payloads": [
{
"id": "66f1c4c1e7a2b3d4f5a6b7c8",
"urlId": "https://example.com/blog/hello-world",
"commenterName": "Jane Reader",
"comment": "Great article!",
"date": "2026-09-08T12:00:00.000Z",
"approved": true
}
]
}
410 Gone के साथ प्रतिक्रिया देना
यदि किसी API सब्सक्रिप्शन का एंडपॉइंट HTTP 410 Gone के साथ प्रतिक्रिया देता है, तो FastComments इसे अनसब्सक्राइब के रूप में मानता है: सब्सक्रिप्शन उसके कतार में मौजूद इवेंट्स के साथ डिलीट कर दिया जाता है, और आगे कोई डिलीवरी का प्रयास नहीं किया जाता। डैशबोर्ड में कॉन्फ़िगर किए गए webhooks कभी भी स्वचालित रूप से डिलीट नहीं किए जाते; उनके लिए 410 एक सामान्य विफलता है। कोई अन्य विफलता स्थिति रीट्राई की जाती है और अंततः webhook अक्षम कर दिया जाता है, जैसा कि How it Works & Handling Retries में वर्णित है।
डैशबोर्ड
API सब्सक्रिप्शन Webhooks सूची में स्रोत API के साथ दिखाई देते हैं, जहाँ एक व्यवस्थापक उन्हें संपादित, अक्षम, पुनः सक्षम या डिलीट कर सकता है।
यह कैसे काम करता है और पुनः प्रयासों को संभालना 
कमेंट ऑब्जेक्ट में सिस्टम में होने वाले सभी बदलाव एक इवेंट सक्रिय करते हैं जो एक क्यू (queue) में जाता है।
प्रारंभिक वेबहुक इवेंट आमतौर पर इवेंट स्रोत के घटित होने के छह सेकंड के भीतर भेजा जाता है।
आप अपने API के डाउन होने की स्थिति में Webhooks एडमिन में इस क्यू की निगरानी कर सकते हैं।
यदि आपके API को भेजा गया अनुरोध विफल हो जाता है, तो हम इसे एक शेड्यूल के अनुसार फिर से क्यू में डाल देंगे।
वह शेड्यूल है 1 Minute * the retry count। यदि कॉल एक बार विफल होती है, तो यह एक मिनट में फिर से प्रयास करेगी। यदि यह दो बार विफल होती है, तो यह दो मिनट प्रतीक्षा करेगी, और इसी तरह आगे भी। ऐसा इसलिए है ताकि यदि आपका API लोड संबंधी कारणों से डाउन हो रहा हो, तो हम उसे ओवरलोड न करें।
वेबहुक को logs page से रद्द किया जा सकता है।
निष्कर्ष
इसके साथ हमारा Webhooks दस्तावेज़ीकरण समाप्त होता है।
हमें उम्मीद है कि आप FastComments Webhook इंटीग्रेशन को समझने में आसान और सेट अप करने में तेज़ पाएंगे।
यदि आपको लगता है कि आपने हमारे दस्तावेज़ीकरण में कोई कमी पहचानी है, तो नीचे हमें बताएं।