अवलोकन
DBestChatBot तब आउटबाउंड वेबहुक भेजता है जब आपके चैटबॉट्स पर सार्थक घटनाएँ होती हैं (लीड कैप्चर होती है, बातचीत शुरू या समाप्त होती है, संदेश भेजा या प्राप्त होता है)। आप डैशबोर्ड में एक गंतव्य URL कॉन्फ़िगर करते हैं और हम प्रत्येक घटना के कुछ सेकंड के भीतर उस पर एक JSON एनवेलप POST करते हैं।
Webhooks एक Pro / Agency फ़ीचर हैं। Free-tier accounts can still view conversations and leads in the dashboard but can't pipe them to external systems.
इवेंट
हर webhook इनमें से एक या अधिक इवेंट प्रकारों की सदस्यता लेता है:
| इवेंट | जब यह ट्रिगर होता है |
|---|---|
lead.captured | एक विज़िटर pre-chat फ़ॉर्म सबमिट करता है, या WhatsApp inbound संदेश से बातचीत शुरू होती है (हमारे पास उनका फ़ोन हमेशा होता है)। CRM piping के लिए अनुशंसित। |
conversation.started | एक नई बातचीत शुरू होती है। मार्केटिंग एनालिटिक्स या तुरंत फ़ॉलो-अप वर्कफ़्लो शुरू करने के लिए उपयोगी। |
conversation.ended | विज़िटर चैट बंद कर देता है, या यह 5+ मिनट तक निष्क्रिय रहती है। फ़ॉलो-अप ईमेल ट्रिगर करने के लिए अच्छा है। |
message.received | विज़िटर ने एक संदेश भेजा। उच्च मात्रा — केवल तभी सदस्यता लें जब आपकी कोई विशिष्ट आवश्यकता हो। |
message.sent | AI ने एक आगंतुक को उत्तर दिया। उच्च मात्रा — केवल तभी सदस्यता लें जब आपकी कोई विशिष्ट आवश्यकता हो। |
पेलोड प्रारूप
हर वेबहुक एक JSON एनवेलप POST करता है जिसमें समान टॉप-लेवल फ़ील्ड होते हैं। data ऑब्जेक्ट ईवेंट प्रकार के अनुसार भिन्न होता है। उदाहरण के लिए lead.captured:
{
"event": "lead.captured",
"id": "evt_abc123def456",
"created_at": "2026-05-17T15:30:00+00:00",
"data": {
"conversation_id": "conv_xyz789",
"chatbot": {
"id": 42,
"name": "Acme Support"
},
"visitor": {
"name": "Jane Doe",
"email": "jane@acme.com",
"phone": "+15551234567"
},
"source_url": "https://acme.com/pricing",
"message_count": 4,
"transcript_url": "https://dbestchatbot.com/app/conversations/conv_xyz789",
"capture_method": "prechat_form"
}
}अनुरोध हेडर
हर अनुरोध में शामिल है:
Content-Type: application/jsonUser-Agent: DBestChatBot-Webhook/1.0X-DBestChatBot-Event: lead.captured— इवेंट का नामX-DBestChatBot-Delivery: evt_abc123— अद्वितीय डिलीवरी ID, डीडुप के लिए उपयोग करेंX-DBestChatBot-Signature: t=1747490400,v1=<hex_hmac>— सत्यापन हस्ताक्षर
हस्ताक्षर सत्यापित करना (अनुशंसित)
वेबहुक पेलोड को हमेशा सत्यापित करें ताकि यह सुनिश्चित हो सके कि वे वास्तव में DBestChatBot से आए हैं। हस्ताक्षर प्रारूप Stripe-संगत है: एक Unix टाइमस्टैम्प t और एक HMAC-SHA-256 हेक्स डाइजेस्ट v1, कॉमा से जोड़ा गया।
एल्गोरिदम:
- निकालें
tandv1हेडर से - इनकार करें अगर
tवर्तमान समय से 5 मिनट से अधिक है (रीप्ले सुरक्षा) - Compute
expected = HMAC_SHA256(signing_secret, "t.raw_request_body") - कॉन्स्टेंट-टाइम तुलना
expectedwithv1 - यदि वे मेल खाते हैं, तो पेलोड प्रामाणिक है। अन्यथा अस्वीकार करें।
Node.js / Express
// Node.js / Express example — verify the signature header
import express from 'express';
import crypto from 'crypto';
const app = express();
const SIGNING_SECRET = process.env.DBESTCHATBOT_SIGNING_SECRET;
// IMPORTANT: use raw body, not parsed JSON, for signature verification
app.post('/webhooks/dbestchatbot',
express.raw({ type: 'application/json' }),
(req, res) => {
const header = req.header('X-DBestChatBot-Signature') || '';
const match = header.match(/t=(\d+),v1=([a-f0-9]+)/);
if (!match) return res.status(400).send('bad signature header');
const [, ts, signature] = match;
// 5-minute replay window
if (Math.abs(Date.now() / 1000 - parseInt(ts)) > 300) {
return res.status(400).send('stale timestamp');
}
const expected = crypto
.createHmac('sha256', SIGNING_SECRET)
.update(`${ts}.${req.body}`)
.digest('hex');
if (!crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(signature))) {
return res.status(401).send('signature mismatch');
}
const event = JSON.parse(req.body.toString());
console.log('Verified event:', event.event, event.data);
// Always respond 2xx quickly — we'll retry up to 5x with backoff if you don't
res.status(200).send('ok');
},
);PHP
<?php
// PHP example — verify the signature header
$signingSecret = getenv('DBESTCHATBOT_SIGNING_SECRET');
$rawBody = file_get_contents('php://input');
$header = $_SERVER['HTTP_X_DBESTCHATBOT_SIGNATURE'] ?? '';
if (! preg_match('/t=(\d+),v1=([a-f0-9]+)/', $header, $m)) {
http_response_code(400); exit('bad signature header');
}
[, $ts, $signature] = $m;
if (abs(time() - (int) $ts) > 300) {
http_response_code(400); exit('stale timestamp');
}
$expected = hash_hmac('sha256', "{$ts}.{$rawBody}", $signingSecret);
if (! hash_equals($expected, $signature)) {
http_response_code(401); exit('signature mismatch');
}
$event = json_decode($rawBody, true);
// process $event['event'], $event['data'] ...
http_response_code(200);
echo 'ok';पुनः प्रयास और डिलीवरी गारंटी
हम पुनः प्रयास करते हैं 5 बार with exponential backoff if your endpoint doesn't return a 2xx response within 30 seconds:
| प्रयास | पिछले से देरी |
|---|---|
| 1 | immediate |
| 2 | +1 मिनट |
| 3 | +5 मिनट |
| 4 | +30 मिनट |
| 5 | +2 घंटे |
5वें असफल प्रयास के बाद, डिलीवरी को चिह्नित किया जाता है failed और हम फिर से प्रयास करना बंद कर देते हैं। आप अपने डैशबोर्ड में वेबहुक विवरण पेज पर पूरा डिलीवरी लॉग (HTTP स्थिति, त्रुटि संदेश और प्रयासों की संख्या सहित) देख सकते हैं।
हमेशा शीघ्रता से 2xx स्थिति लौटाएँ. यदि आपको भारी प्रोसेसिंग करनी है, तो पहले 200 के साथ स्वीकार करें और एसिंक्रोनस रूप से प्रोसेस करें।
इडेम्पोटेंसी
हर डिलीवरी का एक यूनिक id फ़ील्ड (इस रूप में भी भेजा जाता है X-DBestChatBot-Delivery). Because we retry on failure, your endpoint may receive the same event more than once. Store the IDs you've already processed and skip duplicates.
IP allowlisting
आउटबाउंड वेबहुक हमारे प्रोडक्शन सर्वर से यहाँ से आते हैं 15.204.199.41. यदि आप IP द्वारा अनुमति सूची बनाते हैं, तो इस पते को अनुमति दें। हालांकि हस्ताक्षर अधिक विश्वसनीय सत्यापन पथ हैं — IP धोखा दे सकता है, HMAC नहीं (गुप्त के बिना)।
शुरुआत करें
- पर जाएँ Webhooks आपके डैशबोर्ड में
- क्लिक करें एंडपॉइंट जोड़ें — अपना URL पेस्ट करें, इवेंट चुनें
- कॉपी करें साइनिंग सीक्रेट बनाने के बाद दिखाया जाता है
- यह सत्यापित करने के लिए एक परीक्षण ईवेंट भेजें कि आपका एंडपॉइंट इसे प्राप्त और मान्य करता है
- देखें कि आगंतुकों के आपके चैटबॉट का उपयोग करते ही वास्तविक इवेंट कैसे प्रवाहित होते हैं
Zapier / Make / n8n से कनेक्ट हो रहा है
All three tools have a generic "Catch Hook" or "Webhook Trigger" action — paste the URL they generate into a new endpoint here, subscribe to the events you want, done. Map fields from data.visitor into your CRM, Sheets, or wherever from there.
HubSpot — पूरा वॉकथ्रू
यह सबसे आम सेटअप है। हर चैटबॉट लीड को HubSpot Contact के रूप में कैप्चर करता है:
- Zapier में, क्लिक करें Zap बनाएं → ट्रिगर: Webhooks by Zapier → event Catch Hook → जारी रखें। Zapier आपको एक कस्टम URL दिखाता है जैसे
https://hooks.zapier.com/hooks/catch/12345/abc/ - DBestChatBot में, जाएँ Webhooks → एंडपॉइंट जोड़ें. Paste the Zapier URL, name it "HubSpot via Zapier," subscribe to
lead.captured, सहेजें। - Back in Zapier: click परीक्षण ट्रिगर. फिर अपने DBestChatBot वेबहुक पेज पर, क्लिक करें परीक्षण इवेंट भेजें. Zapier को एक नमूना पेलोड प्राप्त होना चाहिए — नमूने में शामिल है
data.visitor.name,data.visitor.email,data.visitor.phone, और आपके द्वारा परिभाषित कोई भी कस्टम प्री-चैट फ़ील्ड। - Zapier में, एक जोड़ें क्रिया → HubSpot → event संपर्क बनाएं या अपडेट करें. अपना HubSpot खाता अधिकृत करें।
- फ़ील्ड मैप करें:
- HubSpot
email← Zapierdata.visitor.email - HubSpot
firstname← Zapierdata.visitor.name(यदि आपको आवश्यकता हो तो पहला/अंतिम विभाजित करें) - HubSpot
phone← Zapierdata.visitor.phone - HubSpot
company← Zapierdata.visitor.company(if you added a custom "Company" field in your chatbot's pre-chat form) - HubSpot
lifecycle_stage→ hardcode to लीड or सब्सक्राइबर - HubSpot
website← Zapierdata.source_url
- HubSpot
- वैकल्पिक लेकिन अनुशंसित: दूसरी क्रिया जोड़ें → HubSpot → नोट बनाएँ चैट ट्रांसक्रिप्ट URL के साथ उस संपर्क पर
data.transcript_urlनोट बॉडी के रूप में। आपकी सेल्स टीम लिंक पर क्लिक करती है और कैप्चर तक ले जाने वाली पूरी बातचीत देखती है। - Zap चालू करें। हर भविष्य
lead.capturedइवेंट कुछ ही सेकंड में HubSpot Contact को अपने आप बनाता / अपडेट करता है।
प्रो टिप: if you want to route HIGH-VALUE leads differently (e.g. enterprise pricing inquiries) from FAQ-style chats, add a custom field to your pre-chat form like "What are you looking to do?" with options "Just browsing / Buying / Sales question." Then in Zapier add a Filter step that only continues to HubSpot if the answer is "Sales question" — your CRM stays clean.
अन्य CRM: यही पैटर्न Pipedrive (action: Create Deal), Salesforce (action: Create/Update Lead), Close (action: Create Lead), monday.com (action: Create Item), और Airtable (action: Create Record) के लिए काम करता है। DBestChatBot पक्ष समान है — बस एक अलग Zap को उसी वेबहुक URL पर इंगित करें।
FAQ
Why isn't my endpoint receiving events?
- जांचें कि वेबहुक है active डैशबोर्ड में
- Check you're subscribed to the right event type
- HTTP त्रुटियों के लिए वेबहुक विवरण पृष्ठ पर डिलीवरी लॉग जांचें
- उपयोग करें परीक्षण इवेंट भेजें button to bypass real-world triggers
मैं अस्थायी रूप से इवेंट प्राप्त करना कैसे रोकूँ?
Toggle the webhook off — no events are queued or buffered, they're simply dropped.
क्या मुझे पहले से हुए पुराने इवेंट मिल सकते हैं?
नहीं, वेबहुक फ़ायर-एंड-फ़ॉरगेट हैं। ऐतिहासिक डेटा के लिए डैशबोर्ड का उपयोग करें बातचीत export (CSV) करें या एक बार के बैकफ़िल के बारे में हमसे संपर्क करें।