Інтеграція Segment CDP на сайт

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.
Розробка та обслуговування будь-яких видів сайтів:
Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Інтеграція Segment CDP на сайт
Складна
~2-3 робочих дні
Часті питання
Наші компетенції:
Етапи розробки
Останні роботи
  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Інтеграція Segment CDP

Segment — Customer Data Platform: єдина точка збору подій, яка маршрутизує їх до десятків інструментів одночасно. Замість того щоб ставити Mixpanel, Amplitude, Intercom та Braze окремо, підключуєте один SDK та через UI настроюєте destinations. Ключові концепції — Sources (звідки), Destinations (куди), Protocols (контракт даних).

Архітектура

Браузер / Сервер / Мобіль
         │
    Segment Analytics.js / Node SDK
         │
    ┌────┴─────────────────────────┐
    │         Segment              │
    │  Sources → Protocols → ...   │
    └────┬─────────────────────────┘
         │
    ┌────┴──────────────────────────────────────────┐
    │  Destinations                                  │
    │  ├── Mixpanel (event analytics)               │
    │  ├── Amplitude (product analytics)            │
    │  ├── BigQuery (data warehouse)                │
    │  ├── Intercom (customer messaging)            │
    │  ├── Braze (marketing automation)             │
    │  ├── HubSpot (CRM)                           │
    │  └── Webhook (custom)                        │
    └───────────────────────────────────────────────┘

Встановлення Analytics.js 2.0

npm install @segment/analytics-next
// src/analytics/segment.ts
import { AnalyticsBrowser } from '@segment/analytics-next';

export const analytics = AnalyticsBrowser.load({
  writeKey: import.meta.env.VITE_SEGMENT_WRITE_KEY,
  cdnURL: undefined, // користувацький proxy опціонально
}, {
  integrations: {
    'All': true,
    'Segment.io': {
      deliveryStrategy: {
        strategy: 'batching',
        config: {
          size: 10,
          timeout: 5000,
        },
      },
    },
  },
});

export default analytics;

CDN без бандлера:

<script>
!function(){var i="analytics",analytics=window[i]=window[i]||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","once","off","on","addSourceMiddleware","addIntegrationMiddleware","setAnonymousId","addDestinationMiddleware","register"];analytics.factory=function(e){return function(){if(window[i].initialized)return window[i][e].apply(window[i],arguments);var n=Array.prototype.slice.call(arguments);if(["track","screen","alias","group","page","identify"].indexOf(e)>-1){var c=document.querySelector("link[rel='canonical']");n.push({__t:"bpc",c:c&&c.getAttribute("href")||void 0,p:location.pathname,u:location.href,s:location.search,t:document.title,r:document.referrer})}n.unshift(e);analytics.push(n);return analytics}};for(var n=0;n<analytics.methods.length;n++){var key=analytics.methods[n];analytics[key]=analytics.factory(key)}analytics.load=function(key,n){var t=document.createElement("script");t.type="text/javascript";t.async=!0;t.setAttribute("data-global-segment-analytics-key",i);t.src="https://cdn.segment.com/analytics.js/v1/"+key+"/analytics.min.js";var r=document.getElementsByTagName("script")[0];r.parentNode.insertBefore(t,r);analytics._writeKey=key;analytics._loadOptions=n};analytics.SNIPPET_VERSION="5.2.1";
analytics.load("YOUR_WRITE_KEY");
analytics.page();
}}();
</script>

Основні методи

Page

// Автоматично — явно називаємо для SPA
analytics.page('Product', 'Listing', {
  url: window.location.href,
  path: window.location.pathname,
  title: document.title,
  referrer: document.referrer,
  search: window.location.search,
  // користувацькі властивості
  category: 'electronics',
  locale: 'ru-RU',
});

Track

analytics.track('Order Completed', {
  order_id: 'ORDER-789',
  affiliation: 'Web Store',
  total: 14500,
  subtotal: 13500,
  revenue: 14500,
  shipping: 500,
  tax: 500,
  discount: 0,
  currency: 'RUB',
  products: [
    {
      product_id: 'SKU-001',
      sku: 'SKU-001',
      name: 'Professional Plan',
      price: 13500,
      quantity: 1,
      category: 'subscription',
    },
  ],
});

Segment дотримується ecommerce spec — якщо називати eventi за специфікацією, вони автоматично映射ються в Destinations без додаткової настройки.

Identify

analytics.identify('usr_12345', {
  email: '[email protected]',
  name: 'Іван Петров',
  plan: 'pro',
  company: {
    id: 'company_abc',
    name: 'ООО Приклад',
  },
  createdAt: '2024-01-15T10:00:00Z',
  // Trait-и, специфічні для вашого продукту
  projects_count: 5,
  last_login: new Date().toISOString(),
});

Group

// Привязати користувача до організації (B2B)
analytics.group('company_abc', {
  name: 'ООО Приклад',
  industry: 'Technology',
  employees: 25,
  plan: 'enterprise',
  website: 'https://example.com',
});

Middleware для збагачення подій

// Додаємо контекст до всіх подій
analytics.addSourceMiddleware(({ payload, next }) => {
  // Додати версію додатка
  payload.obj.context = {
    ...payload.obj.context,
    app: {
      version: APP_VERSION,
    },
    locale: navigator.language,
  };

  // Додати AB-варіант
  const abVariant = localStorage.getItem('ab_variant');
  if (abVariant && payload.obj.properties) {
    payload.obj.properties.ab_variant = abVariant;
  }

  next(payload);
});

Server-side джерело (Node.js / PHP)

Для подій, які неможна трекати з фронту (webhook-оплата, активація підписки):

// Node.js
import { Analytics } from '@segment/analytics-node';

const analytics = new Analytics({
  writeKey: process.env.SEGMENT_SERVER_WRITE_KEY,
  flushAt: 20,
  flushInterval: 10000,
});

// Подія оплати від платіжного шлюзу
analytics.track({
  userId: 'usr_12345',
  event: 'Subscription Started',
  properties: {
    plan: 'pro',
    revenue: 2990,
    currency: 'RUB',
    billing_cycle: 'monthly',
    payment_method: 'card',
    mrr: 2990,
  },
  context: {
    ip: clientIp,
  },
});

// Обов'язково викликати flush перед завершенням процесу
process.on('SIGTERM', async () => {
  await analytics.closeAndFlush({ timeout: 5000 });
  process.exit(0);
});
// PHP через HTTP API
class SegmentService
{
    private string $writeKey;
    private string $endpoint = 'https://api.segment.io/v1/track';

    public function track(string $userId, string $event, array $properties = []): void
    {
        Http::withBasicAuth($this->writeKey, '')
            ->timeout(3)
            ->post($this->endpoint, [
                'userId'     => $userId,
                'event'      => $event,
                'properties' => $properties,
                'timestamp'  => now()->toIso8601String(),
                'messageId'  => uniqid('php_', true),
                'context'    => ['library' => ['name' => 'analytics-php']],
            ]);
    }
}

Protocols: контракт даних

Segment Protocols дозволяє задати JSON Schema для кожної події — порушення схеми логуються та блокуються:

{
  "name": "Order Completed",
  "description": "Користувач завершив оформлення замовлення",
  "rules": {
    "required": ["order_id", "total", "currency"],
    "properties": {
      "order_id": { "type": "string" },
      "total": { "type": "number", "minimum": 0 },
      "currency": { "type": "string", "enum": ["RUB", "USD", "EUR"] },
      "products": {
        "type": "array",
        "items": {
          "required": ["product_id", "price"],
          "properties": {
            "product_id": { "type": "string" },
            "price": { "type": "number" }
          }
        }
      }
    }
  }
}

Це особливо цінно в командах: розробник не може випадково відправити total: "14500" (рядок замість числа) — Protocols відхилить подію та сповістить.

Functions (Destination Functions)

Коли потрібного Destination немає в каталозі — пишемо Function на JS прямо в UI:

// Segment Function — відправка в користувацький webhook
async function onTrack(event, settings) {
  if (event.event !== 'Order Completed') return;

  const response = await fetch(settings.webhookUrl, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json', 'X-API-Key': settings.apiKey },
    body: JSON.stringify({
      orderId: event.properties.order_id,
      userId: event.userId,
      revenue: event.properties.total,
      timestamp: event.timestamp,
    }),
  });

  if (!response.ok) {
    throw new Error(`Webhook failed: ${response.status}`);
  }
}

Строки

Базове встановлення Analytics.js з page/track/identify — 1 день. Настройка Destinations (Mixpanel + BigQuery + CRM) — 2–3 дні. Настройка Protocols та валідації схем — 1 день. Server-side джерело + functions — ще 1–2 дні.