Reactive CRM साइट लीड इंटीग्रेशन गाइड ← इंटीग्रेशन गाइड

अपनी वेबसाइट से लीड प्राप्त करना

अपने वेबसाइट फ़ॉर्म को ReactiveCRM से जोड़ने के निर्देश: फ़ॉर्म सबमिशन को लीड के रूप में कैप्चर करना, मार्केटिंग एट्रिब्यूशन इवेंट भेजना और परिणाम सत्यापित करना।

1. अवलोकन

अनुशंसित फ़्लो में दो रिक्वेस्ट होती हैं:

  1. साइट फ़ॉर्म डेटा अपने ही backend को भेजती है।
  2. साइट backend POST /api/leads/create के माध्यम से CRM में लीड बनाता है।
  3. सफल निर्माण के बाद, backend POST /api/dashboard/marketing/events के माध्यम से lead_submitted मार्केटिंग इवेंट भेजता है, प्राप्त leadId पास करते हुए।
  4. CRM मार्केटिंग एट्रिब्यूशन के लिए UTM टैग, विज्ञापन पहचानकर्ता और referrer संग्रहीत करता है।
text
वेबसाइट फ़ॉर्म
    |
    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 ऑथराइज़ेशन की आवश्यकता होती है:

http
Authorization: Bearer <CRM_ACCESS_TOKEN>
Content-Type: application/json

उदाहरणों में उपयोग होता है:

text
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 में संग्रहीत करें:

पहली विज़िट पर मान सहेजें और साइट के भीतर नेविगेट करते समय उन्हें खाली पैरामीटर से न बदलें।

4. लीड बनाना

Endpoint

http
POST /api/leads/create

उदाहरण रिक्वेस्ट

bash
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 रिस्पॉन्स

json
{
  "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

http
POST /api/dashboard/marketing/events

उदाहरण रिक्वेस्ट

bash
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"
    }
  }'

उदाहरण रिस्पॉन्स

json
{
  "accepted": true,
  "duplicate": false,
  "eventId": "33333333-3333-3333-3333-333333333333"
}

यदि इस source और टेनेंट जोड़ी के लिए समान externalId पहले ही संसाधित हो चुका है, तो API duplicate: true के साथ सफलता रिस्पॉन्स लौटाता है। इसे सफलता मानें, त्रुटि नहीं, और दूसरी लीड न बनाएँ।

6. सर्वर-साइड हैंडलर उदाहरण

नीचे एक सरलीकृत Node.js उदाहरण है। फ़ॉर्म डेटा साइट backend को जाना चाहिए, सीधे ब्राउज़र से CRM को नहीं।

js
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 और रीट्राई

8. व्यक्तिगत डेटा और metadata

metadata में व्यक्तिगत डेटा और फ़ॉर्म सामग्री पास करना निषिद्ध है:

व्यक्तिगत डेटा केवल उसके लिए इच्छित CRM इकाइयों में पास किया जाना चाहिए — उदाहरण के लिए, पहले से बनाए गए contactId/clientId में। metadata में केवल तकनीकी विशेषताएँ रखें: फ़ॉर्म नाम, पेज प्रकार, बैनर वेरिएंट, इत्यादि।

9. सामान्य रिस्पॉन्स और त्रुटियाँ

HTTPस्थितिक्या करें
201लीड बनाई गईid सहेजें और lead_submitted भेजें
200 + duplicate: falseइवेंट स्वीकृतइंटीग्रेशन लॉग में eventId सहेजें
200 + duplicate: trueइवेंट पहले ही स्वीकृत हो चुकासंसाधित मानें; दोबारा न भेजें
400अमान्य डेटा या metadata में PIIpayload ठीक करें; बिना बदलाव रीट्राई मदद नहीं करेगा
401अमान्य या अनुपस्थित टोकनbackend पर CRM टोकन रीफ़्रेश करें
403टोकन में ऑपरेशन की अनुमति नहींभूमिका और टेनेंट जाँचें
5xx / timeoutअस्थायी CRM या नेटवर्क त्रुटिसमान externalId के साथ रीट्राई करें; लीड के लिए क्यू उपयोग करें

10. CRM में परिणाम सत्यापित करना

इंटीग्रेशन के बाद, सत्यापित करें:

  1. लीड GET /api/leads/{id} के माध्यम से या सूची GET /api/leads/paged में दिखती है।
  2. लीड का owner, author और निर्माण समय सही हैं।
  3. पहली बार भेजने पर मार्केटिंग-इवेंट रिस्पॉन्स में duplicate false है।
  4. समान सबमिशन दोबारा भेजने पर duplicate: true लौटता है।
  5. मार्केटिंग डैशबोर्ड में, डेटा सही अवधि, चैनल और कैंपेन में दिखता है।

बनाई गई लीड प्राप्त करना

bash
curl "$CRM_BASE_URL/api/leads/$LEAD_ID" \
  -H "Authorization: Bearer $CRM_ACCESS_TOKEN"

सूची या मिलान के लिए लीड प्राप्त करना

bash
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 में संग्रहीत है।