```html Көп келісімшартты веб-сайттан лидтерді қабылдау — Reactive CRM
Reactive CRM Көп келісімшартты веб-сайттан лидтерді қабылдау ← Интеграция нұсқаулығы

Көп келісімшартты веб-сайттан лидтерді қабылдау

Бұл құжат веб-сайт бэкенді лид деректерін, келушінің байланыс мәліметтерін және маркетингтік UTM метрикаларын ReactiveCRM-ге бір сұраныспен жіберетін бірыңғай API келісімшартын сипаттайды.

1. Мақсаты

Веб-сайт интеграторы байланысты, телефонды, электрондық поштаны, лидті және маркетингтік оқиғаны бөлек жасаудың қажеті жоқ. Бір сұраныс атомарлы түрде мыналарды жасауы керек:

  1. байланыс;
  2. байланыстың негізгі телефоны;
  3. байланыстың негізгі электрондық поштасы, егер берілсе;
  4. лид;
  5. байланыс пен лид арасындағы байланыс;
  6. маркетингтік оқиға және UTM атрибуциясы.

Егер кез келген қадам сәтсіз болса, бүкіл сұраныс кері қайтарылады және ішінара жасалған деректер сақталмайды.

2. Эндпоинт

http
POST /api/site/leads
Authorization: Bearer <CRM_ACCESS_TOKEN>
Content-Type: application/json

Токен тек веб-сайт бэкендінен немесе serverless функциясынан берілуі керек. CRM токенін браузер JavaScript-іне ешқашан қоймаңыз.

Tenant авторизация токенінен анықталады. Барлық берілген UUID осы tenant ішінде тексеріледі.

3. Толық JSON келісімшарты

json
{
  "externalId": "site-form-01J7K9A2M4Y5T6",
  "lead": {
    "leadSourceId": "7b33b18f-55bd-48a5-a8f0-e450a56dde47",
    "quality": "WARM",
    "message": "CRM енгізу бойынша консультация алғым келеді"
  },
  "contact": {
    "firstName": "Иван",
    "lastName": "Иванов",
    "phone": "+79991234567",
    "email": "ivan@example.com"
  },
  "marketing": {
    "occurredAt": "2026-09-06T18:00:00Z",
    "visitorId": "visitor-8b7f",
    "sessionId": "session-31ac",
    "source": "website",
    "channel": "paid",
    "utmSource": "google",
    "utmMedium": "cpc",
    "utmCampaign": "summer-consulting",
    "utmContent": "banner-a",
    "utmTerm": "crm consultation",
    "gclid": "EAIaIQobChMI-example",
    "fbclid": null,
    "landingUrl": "https://example.com/consultation",
    "referrer": "https://www.google.com/"
  }
}

4. Сұраныс өрістері

4.1. Түбір өрістер

ӨрісТүріМіндеттіСипаттама
externalIdжолұсыныладыИдемпотенттілік үшін форманы жіберудің тұрақты бірегей ID-і
leadобъектиәҚұрылып жатқан лидтің деректері
contactобъектиәБайланыс адамының деректері
marketingобъектжоқМаркетингтік визиттің UTM метрикалары мен техникалық деректері

externalId бірінші жіберу әрекетіне дейін жасалады. Уақыт аяқталуынан немесе желілік қатеден кейін сұранысты қайталағанда, сол мәнді пайдаланыңыз.

4.2. lead объектісі

ӨрісТүріМіндеттіСипаттама
leadSourceIduuidиәАғымдағы tenant-тағы лид дереккөзінің ID-і
qualityжолжоқБастапқы бағалау: HOT, WARM, COOL немесе COLD
messageжолжоқКелушінің хабарламасы немесе жіберу туралы пікір

Егер сайт алдын ала саралауды орындамаса, quality өрісін жібермеген дұрыс.

4.3. contact объектісі

ӨрісТүріМіндеттіСипаттама
firstNameжолиәБайланыс адамының аты
lastNameжолжоқБайланыс адамының тегі
phoneжолиәНегізгі телефон; E.164 форматы ұсынылады
emailжол(email)жоқБайланыс адамының негізгі электрондық поштасы

Жіберуді өңдеу үшін қажетті ең аз деректер — firstName және phone.

4.4. marketing объектісі

ӨрісТүріМіндеттіСипаттама
occurredAtкүн-уақытжоқФорманы жіберу уақыты; болмаған жағдайда CRM уақыты пайдаланылады
visitorIdжолжоқАнонимді келуші ID-і
sessionIdжолжоқСайт сессиясының ID-і
sourceжолжоқОқиға дереккөзі, әдепкі бойынша website
channelжолжоқАрна: мысалы paid, organic, social, email, direct
utmSourceжолжоқutm_source мәні
utmMediumжолжоқutm_medium мәні
utmCampaignжолжоқutm_campaign мәні
utmContentжолжоқutm_content мәні
utmTermжолжоқutm_term мәні
gclidжолжоқGoogle басу ID-і
fbclidжолжоқMeta/Facebook басу ID-і
landingUrlжолжоқҚону бетінің URL-і
referrerжолжоқАлдыңғы беттің URL-і

Жеке деректер маркетинг объектісінде қайталанбауы керек. Аты, телефоны, электрондық поштасы және хабарлама мәтіні тек contact және lead арқылы беріледі.

5. Ең аз сұраныс

json
{
  "externalId": "site-form-550e8400-e29b-41d4-a716-446655440000",
  "lead": {
    "leadSourceId": "7b33b18f-55bd-48a5-a8f0-e450a56dde47"
  },
  "contact": {
    "firstName": "Иван",
    "phone": "+79991234567"
  }
}

6. Сәтті жауап

Бірінші сұраныс — 201 Created

json
{
  "leadId": "22222222-2222-2222-2222-222222222222",
  "contactId": "33333333-3333-3333-3333-333333333333",
  "phoneId": "44444444-4444-4444-4444-444444444444",
  "emailId": "55555555-5555-5555-5555-555555555555",
  "marketingEventId": "66666666-6666-6666-6666-666666666666",
  "duplicate": false,
  "createdAt": "2026-09-06T18:00:01Z"
}

Егер электрондық пошта немесе маркетинг деректері берілмесе, сәйкес ID-лер null ретінде қайтарылады.

Бірдей externalId арқылы қайталау — 200 OK

json
{
  "leadId": "22222222-2222-2222-2222-222222222222",
  "contactId": "33333333-3333-3333-3333-333333333333",
  "phoneId": "44444444-4444-4444-4444-444444444444",
  "emailId": "55555555-5555-5555-5555-555555555555",
  "marketingEventId": "66666666-6666-6666-6666-666666666666",
  "duplicate": true,
  "createdAt": "2026-09-06T18:00:01Z"
}

Қайталанатын сұраныс екінші лид немесе байланыс жасамауы керек.

7. cURL мысалы

bash
curl -X POST "$CRM_BASE_URL/api/site/leads" \
  -H "Authorization: Bearer $CRM_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "externalId": "site-form-01J7K9A2M4Y5T6",
    "lead": {
      "leadSourceId": "7b33b18f-55bd-48a5-a8f0-e450a56dde47",
      "quality": "WARM",
      "message": "Маған қоңырау шалыңыз"
    },
    "contact": {
      "firstName": "Иван",
      "lastName": "Иванов",
      "phone": "+79991234567",
      "email": "ivan@example.com"
    },
    "marketing": {
      "utmSource": "google",
      "utmMedium": "cpc",
      "utmCampaign": "crm-demo",
      "landingUrl": "https://example.com/demo"
    }
  }'

8. TypeScript интерфейстері

ts
type LeadQuality = 'HOT' | 'WARM' | 'COOL' | 'COLD';

interface SiteLeadRequest {
  externalId?: string;
  lead: {
    leadSourceId: string;
    quality?: LeadQuality;
    message?: string;
  };
  contact: {
    firstName: string;
    lastName?: string;
    phone: string;
    email?: string;
  };
  marketing?: {
    occurredAt?: string;
    visitorId?: string;
    sessionId?: string;
    source?: string;
    channel?: string;
    utmSource?: string;
    utmMedium?: string;
    utmCampaign?: string;
    utmContent?: string;
    utmTerm?: string;
    gclid?: string;
    fbclid?: string;
    landingUrl?: string;
    referrer?: string;
  };
}

interface SiteLeadResponse {
  leadId: string;
  contactId: string;
  phoneId: string;
  emailId: string | null;
  marketingEventId: string | null;
  duplicate: boolean;
  createdAt: string;
}

9. Сервер жағындағы мысал

ts
export async function sendLeadToCrm(payload: SiteLeadRequest): Promise<SiteLeadResponse> {
  const response = await fetch(`${process.env.CRM_BASE_URL}/api/site/leads`, {
    method: 'POST',
    headers: {
      Authorization: `Bearer ${process.env.CRM_ACCESS_TOKEN}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify(payload),
  });

  if (!response.ok) {
    const body = await response.text();
    throw new Error(`ReactiveCRM returned ${response.status}: ${body}`);
  }

  return response.json() as Promise<SiteLeadResponse>;
}

10. Қателер

HTTPСебебіИнтегратордың әрекеті
400Формат қатесі, міндетті өріс жоқ, жарамсыз электрондық пошта/телефон/qualityДеректерді түзетіңіз; өзгеріссіз автоматты түрде қайталамаңыз
401Токен жоқ немесе жарамсызИнтеграция токенін жаңартыңыз
403Tenant-қа немесе операцияға рұқсат жоқИнтеграция пайдаланушысы мен рөлін тексеріңіз
404leadSourceId ағымдағы tenant-та табылмадыСайт параметрлеріндегі дереккөз ID-ін жаңартыңыз
409externalId үйлесімсіз сұранысқа байланыстыID генерациясын және интеграция журналын тексеріңіз
5xxӨтпелі CRM қатесіСол externalId арқылы сол сұранысты қайталаңыз

Тексеру қатесінің мысалы:

json
{
  "status": 400,
  "error": "Bad Request",
  "message": "contact.phone must not be blank",
  "path": "/api/site/leads"
}

11. Идемпотенттілік

12. Веб-сайт әзірлеушісіне арналған шағын нұсқаулық

  1. Бірінші визитте UTM тегтерін, gclid, fbclid, қону URL-ін және реферерді сақтаңыз.
  2. Форма жіберілгенде, тұрақты externalId жасаңыз.
  3. Форманы сайт бэкендіне жіберіңіз.
  4. Бэкенд CRM токенін қосып, POST /api/site/leads шақырады.
  5. 201 немесе 200 және duplicate: true болса, жіберуді жеткізілген деп санаңыз.
  6. Уақыт аяқталғанда немесе 5xx кезінде сұранысты сол externalId арқылы қайталаңыз.
  7. CRM токенін браузерден тікелей ешқашан жібермеңіз.

13. CRM менеджері не алады

Сәтті сұраныстан кейін CRM келесі лидті қамтиды:

Бұл жиынтық менеджерге жіберуді көру, байланысқа қоңырау шалу және лидті саралау үшін жеткілікті.

```