अपनी वेबसाइट से लीड प्राप्त करना
अपने वेबसाइट फ़ॉर्म को ReactiveCRM से जोड़ने के निर्देश: फ़ॉर्म सबमिशन को लीड के रूप में कैप्चर करना, मार्केटिंग एट्रिब्यूशन इवेंट भेजना और परिणाम सत्यापित करना।
1. अवलोकन
अनुशंसित फ़्लो में दो रिक्वेस्ट होती हैं:
- साइट फ़ॉर्म डेटा अपने ही backend को भेजती है।
- साइट backend
POST /api/leads/createके माध्यम से CRM में लीड बनाता है। - सफल निर्माण के बाद, backend
POST /api/dashboard/marketing/eventsके माध्यम सेlead_submittedमार्केटिंग इवेंट भेजता है, प्राप्तleadIdपास करते हुए। - CRM मार्केटिंग एट्रिब्यूशन के लिए UTM टैग, विज्ञापन पहचानकर्ता और referrer संग्रहीत करता है।
वेबसाइट फ़ॉर्म
|
v
साइट backend / server-side proxy
| POST /api/leads/create
v
ReactiveCRM -> leadId
| POST /api/dashboard/marketing/events
v
मार्केटिंग एट्रिब्यूशन और डैशबोर्ड
CRM JWT और secrets सीधे ब्राउज़र से न भेजें। साइट backend या serverless function उपयोग करें ताकि CRM टोकन और सेवा पहचानकर्ता विज़िटर को कभी उजागर न हों।
2. ऑथेंटिकेशन और बेस URL
सभी रिक्वेस्ट संबंधित टेनेंट के संदर्भ में चलती हैं और CRM ऑथराइज़ेशन की आवश्यकता होती है:
Authorization: Bearer <CRM_ACCESS_TOKEN>
Content-Type: application/json
उदाहरणों में उपयोग होता है:
CRM_BASE_URL=https://crm.example.com
इसे अपने एनवायरनमेंट के URL से बदलें।
3. साइट पर एकत्र करने योग्य डेटा
लीड डेटा
लीड बनाने के लिए, API समर्थन करता है:
| फ़ील्ड | आवश्यक | विवरण |
|---|---|---|
message | नहीं | फ़ॉर्म से पूछताछ का संदेश या टेक्स्ट |
ownerId | हाँ | लीड के लिए ज़िम्मेदार CRM यूज़र का UUID |
authorId | हाँ | लीड बनाने वाले CRM यूज़र का UUID |
clientId | नहीं | मौजूदा क्लाइंट का UUID |
contactId | नहीं | मौजूदा संपर्क का UUID |
leadSourceId | नहीं | लीड-स्रोत ट्री में एक नोड का UUID |
statusId | नहीं | प्रारंभिक स्टेटस का UUID |
quality | नहीं | HOT, WARM, COOL या COLD |
ownerId और authorId CRM यूज़र्स के UUID हैं। सार्वजनिक वेबसाइट फ़ॉर्म के लिए, विज़िटर को ये मान स्वयं सेट न करने दें: backend को इन्हें इंटीग्रेशन कॉन्फ़िगरेशन से प्रदान करना चाहिए।
मार्केटिंग विज़िट डेटा
फ़ॉर्म सबमिट होने से पहले, निम्नलिखित को cookies, session storage या backend में संग्रहीत करें:
utm_source→utmSourceutm_medium→utmMediumutm_campaign→utmCampaignutm_content→utmContentutm_term→utmTermgclid— Google Ads पहचानकर्ताfbclid— Meta/Facebook पहचानकर्ता- लैंडिंग पेज URL →
landingUrl - पिछले पेज का URL →
referrer - आपके स्वयं के विज़िटर और सेशन पहचानकर्ता →
visitorId,sessionId
पहली विज़िट पर मान सहेजें और साइट के भीतर नेविगेट करते समय उन्हें खाली पैरामीटर से न बदलें।
4. लीड बनाना
Endpoint
POST /api/leads/create
उदाहरण रिक्वेस्ट
curl -X POST "$CRM_BASE_URL/api/leads/create" \
-H "Authorization: Bearer $CRM_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"message": "Website inquiry: consultation request",
"ownerId": "11111111-1111-1111-1111-111111111111",
"authorId": "11111111-1111-1111-1111-111111111111",
"quality": "WARM"
}'
उदाहरण 201 Created रिस्पॉन्स
{
"id": "22222222-2222-2222-2222-222222222222",
"message": "Website inquiry: consultation request",
"quality": "WARM",
"dealId": null,
"createdAt": "2026-09-05T20:00:00Z",
"updatedAt": "2026-09-05T20:00:00Z",
"version": 0,
"author": {
"id": "11111111-1111-1111-1111-111111111111",
"firstName": "CRM",
"lastName": "Bot"
},
"owner": {
"id": "11111111-1111-1111-1111-111111111111",
"firstName": "CRM",
"lastName": "Bot"
}
}
रिस्पॉन्स id सहेजें: यह मान मार्केटिंग इवेंट के leadId फ़ील्ड में पास किया जाता है।
5. lead_submitted इवेंट भेजना
Endpoint
POST /api/dashboard/marketing/events
उदाहरण रिक्वेस्ट
curl -X POST "$CRM_BASE_URL/api/dashboard/marketing/events" \
-H "Authorization: Bearer $CRM_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"eventType": "lead_submitted",
"occurredAt": "2026-09-05T20:00:00Z",
"visitorId": "visitor-8b7f",
"sessionId": "session-31ac",
"leadId": "22222222-2222-2222-2222-222222222222",
"externalId": "site-form-submit-20260905-000123",
"source": "website",
"channel": "paid",
"utmSource": "google",
"utmMedium": "cpc",
"utmCampaign": "summer-consulting",
"utmContent": "banner-a",
"utmTerm": "crm consultation",
"gclid": "EAIaIQobChMI-example",
"landingUrl": "https://www.example.com/consultation",
"referrer": "https://www.google.com/",
"metadata": {
"formName": "consultation",
"pageType": "landing"
}
}'
उदाहरण रिस्पॉन्स
{
"accepted": true,
"duplicate": false,
"eventId": "33333333-3333-3333-3333-333333333333"
}
यदि इस source और टेनेंट जोड़ी के लिए समान externalId पहले ही संसाधित हो चुका है, तो API duplicate: true के साथ सफलता रिस्पॉन्स लौटाता है। इसे सफलता मानें, त्रुटि नहीं, और दूसरी लीड न बनाएँ।
6. सर्वर-साइड हैंडलर उदाहरण
नीचे एक सरलीकृत Node.js उदाहरण है। फ़ॉर्म डेटा साइट backend को जाना चाहिए, सीधे ब्राउज़र से CRM को नहीं।
async function createWebsiteLead(form, attribution) {
const headers = {
Authorization: `Bearer ${process.env.CRM_ACCESS_TOKEN}`,
'Content-Type': 'application/json',
};
const leadResponse = await fetch(
`${process.env.CRM_BASE_URL}/api/leads/create`,
{
method: 'POST',
headers,
body: JSON.stringify({
message: form.message || `Website inquiry: ${form.subject || 'no subject'}`,
ownerId: process.env.CRM_LEAD_OWNER_ID,
authorId: process.env.CRM_LEAD_AUTHOR_ID,
quality: 'WARM',
}),
},
);
if (!leadResponse.ok) {
throw new Error(`CRM lead creation failed: ${leadResponse.status}`);
}
const lead = await leadResponse.json();
const externalId = `website-${form.requestId}`;
const eventResponse = await fetch(
`${process.env.CRM_BASE_URL}/api/dashboard/marketing/events`,
{
method: 'POST',
headers,
body: JSON.stringify({
eventType: 'lead_submitted',
occurredAt: new Date().toISOString(),
visitorId: attribution.visitorId,
sessionId: attribution.sessionId,
leadId: lead.id,
externalId,
source: 'website',
channel: attribution.channel || 'direct',
utmSource: attribution.utmSource,
utmMedium: attribution.utmMedium,
utmCampaign: attribution.utmCampaign,
utmContent: attribution.utmContent,
utmTerm: attribution.utmTerm,
gclid: attribution.gclid,
fbclid: attribution.fbclid,
landingUrl: attribution.landingUrl,
referrer: attribution.referrer,
metadata: { formName: form.formName || 'website' },
}),
},
);
if (!eventResponse.ok) {
// लीड पहले ही बन चुकी है। इवेंट को क्यू करें और समान externalId के साथ
// रीट्राई करें, न कि दूसरी लीड बनाएँ।
throw new Error(`CRM marketing event failed: ${eventResponse.status}`);
}
return { leadId: lead.id, marketingEvent: await eventResponse.json() };
}
7. Idempotency और रीट्राई
- प्रत्येक फ़ॉर्म सबमिशन के लिए एक स्थिर
externalIdबनाएँ। उदाहरण के लिए, पहली रिक्वेस्ट से पहले बनाया गया UUID, या एक अद्वितीय फ़ॉर्मrequestIdउपयोग करें। - नेटवर्क त्रुटि पर, समान
externalIdके साथ मार्केटिंग-इवेंट रिक्वेस्ट रीट्राई करें। - रीट्राई पर नया
externalIdन बनाएँ: इससे डुप्लिकेट इवेंट बनेगा। - यदि टाइमआउट के कारण लीड-निर्माण रिक्वेस्ट का परिणाम अज्ञात रहता है, तो आँख बंद करके नई लीड न बनाएँ। पहले अपने
requestIdऔर साइट backend पर deduplication तंत्र का उपयोग करें, या CRM में बनाई गई लीड खोजें। - इवेंट-भेजने की त्रुटि के कारण उपयोगकर्ता को लीड-निर्माण परिणाम जाँचे बिना फ़ॉर्म दोबारा सबमिट न करने दें।
8. व्यक्तिगत डेटा और metadata
metadata में व्यक्तिगत डेटा और फ़ॉर्म सामग्री पास करना निषिद्ध है:
- ईमेल
- फ़ोन
- पहला और अंतिम नाम
- पता
- संदेश टेक्स्ट
- व्यक्तिगत डेटा युक्त पहचानकर्ताओं वाली cookies
व्यक्तिगत डेटा केवल उसके लिए इच्छित CRM इकाइयों में पास किया जाना चाहिए — उदाहरण के लिए, पहले से बनाए गए contactId/clientId में। metadata में केवल तकनीकी विशेषताएँ रखें: फ़ॉर्म नाम, पेज प्रकार, बैनर वेरिएंट, इत्यादि।
9. सामान्य रिस्पॉन्स और त्रुटियाँ
| HTTP | स्थिति | क्या करें |
|---|---|---|
201 | लीड बनाई गई | id सहेजें और lead_submitted भेजें |
200 + duplicate: false | इवेंट स्वीकृत | इंटीग्रेशन लॉग में eventId सहेजें |
200 + duplicate: true | इवेंट पहले ही स्वीकृत हो चुका | संसाधित मानें; दोबारा न भेजें |
400 | अमान्य डेटा या metadata में PII | payload ठीक करें; बिना बदलाव रीट्राई मदद नहीं करेगा |
401 | अमान्य या अनुपस्थित टोकन | backend पर CRM टोकन रीफ़्रेश करें |
403 | टोकन में ऑपरेशन की अनुमति नहीं | भूमिका और टेनेंट जाँचें |
5xx / timeout | अस्थायी CRM या नेटवर्क त्रुटि | समान externalId के साथ रीट्राई करें; लीड के लिए क्यू उपयोग करें |
10. CRM में परिणाम सत्यापित करना
इंटीग्रेशन के बाद, सत्यापित करें:
- लीड
GET /api/leads/{id}के माध्यम से या सूचीGET /api/leads/pagedमें दिखती है। - लीड का owner, author और निर्माण समय सही हैं।
- पहली बार भेजने पर मार्केटिंग-इवेंट रिस्पॉन्स में
duplicatefalseहै। - समान सबमिशन दोबारा भेजने पर
duplicate: trueलौटता है। - मार्केटिंग डैशबोर्ड में, डेटा सही अवधि, चैनल और कैंपेन में दिखता है।
बनाई गई लीड प्राप्त करना
curl "$CRM_BASE_URL/api/leads/$LEAD_ID" \
-H "Authorization: Bearer $CRM_ACCESS_TOKEN"
सूची या मिलान के लिए लीड प्राप्त करना
curl "$CRM_BASE_URL/api/leads/paged?page=0&size=20&createdAtFrom=2026-09-05T00:00:00Z&createdAtTo=2026-09-05T23:59:59Z&sort=createdAt,desc" \
-H "Authorization: Bearer $CRM_ACCESS_TOKEN"
page पैरामीटर 0 से शुरू होता है; डिफ़ॉल्ट size 20 है। वेबसाइट लीड प्राप्त करने के लिए, अतिरिक्त रूप से message, createdAtFrom/createdAtTo, contactEmail, या search फ़िल्टर उपयोग करें यदि संबंधित डेटा पहले से CRM में संग्रहीत है।
Reactive CRM