OneTrace.pro Yordam markazi

Server orqali integratsiya

Maʼlumotlarning bir qismini brauzerdan emas, balki saytingiz serveridan yuborish ishonchliroq: rasmiylashtirilgan va toʻlangan buyurtmalar, roʻyxatdan oʻtishlar, holatlar oʻzgarishi, mahsulotlar katalogi. Brauzer yuborishdan oldin yopilishi yoki trekerni bloklashi mumkin, server esa — yoʻq. Tayyor misollar Kommunikatsiyalar → Sayt boʻlimidagi Server yorligʻida jamlangan.

Ushbu maqola dasturchilar uchun. Bunda saytdagi treker saqlanib qoladi: u koʻrishlarni hisoblaydi va vidjetlarni koʻrsatadi, server esa uni muhim hodisalar bilan toʻldiradi.

«Server» yorligʻi

Yorliqda Til almashtirgichi bor: PHP, Go, Node.js va Python. Misollar uchinchi tomon kutubxonalarisiz yozilgan, ularga OneTrace.pro manzili, hodisa nomlari va loyihangiz sozlamalaridagi mahsulot id si xossasi allaqachon qoʻyilgan. Tanlangan til brauzerda eslab qolinadi.

PHP uchun yorliq tayyor kutubxonani ham taklif qilishi mumkin — butun API, nosozliklarda takrorlanishsiz qayta urinishlar va hodisalar buferiga ega Composer paketi. Agar yorliqda PHP uchun tayyor kutubxona bloki boʻlsa, paketni namunadagi buyruq bilan oʻrnating; qolgan namunalar xuddi shu chaqiruvlarni oddiy HTTP soʻrovlari sifatida koʻrsatadi. Oʻsha blokda Laravel uchun paket ham bor: hodisalar javobdan keyin yoki navbat orqali yuboriladi, direktiva trekerni shablonlarga qoʻshadi, mahsulotlar modellardan sinxronlanadi.

PHP misollari bilan «Server» yorligʻi

Kalitlar

  • Yozish kaliti (cdp_wk_…, Write turi) — hodisalarni yuborish uchun. Treker kodidagi bilan bir xil.
  • Maxfiy kalit (cdp_sk_…, Secret turi) — katalogni yuklash va loyihani boshqarish uchun. Katalog uchun unga «Mahsulotlarni yuklash va oʻchirish» (products.write) ruxsati kerak.

Kalitlar API kalitlari boʻlimida yaratiladi — buni «Egasi» va «Administrator» bajara oladi. Maxfiy kalitni faqat serverda saqlang va hech qachon sahifalar kodiga qoʻymang.

Qadamlar

1. Muhit oʻzgaruvchilari

Manzil va kalitlarni kodga emas, server muhit oʻzgaruvchilariga joylang. Oʻzgaruvchilar nomlarini oʻzingiz tanlashingiz mumkin:

CDP_URL=https://cdp.onetrace.pro/api/v1
CDP_WRITE_KEY=cdp_wk_…
CDP_SECRET_KEY=cdp_sk_…

2. Mijoz

Yuborish funksiyasi: JSON bilan POST, Authorization: Bearer sarlavhasidagi kalit, 5 soniyalik taymaut, 2xx boʻlmagan javobda xato.

PHP:

function cdp_send(string $path, array $body, string $keyEnv = 'CDP_WRITE_KEY'): void
{
    $ch = curl_init(getenv('CDP_URL') . '/' . $path);
    curl_setopt_array($ch, [
        CURLOPT_POST => true,
        CURLOPT_HTTPHEADER => ['Content-Type: application/json', 'Authorization: Bearer ' . getenv($keyEnv)],
        CURLOPT_POSTFIELDS => json_encode(array_filter($body, fn ($v) => $v !== null), JSON_UNESCAPED_UNICODE),
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT => 5,
    ]);
    curl_exec($ch);
    $status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
    curl_close($ch);

    if ($status >= 300) {
        throw new RuntimeException("CDP: HTTP {$status}");
    }
}

Node.js:

export async function cdpSend(path, body, key = process.env.CDP_WRITE_KEY) {
  const response = await fetch(`${process.env.CDP_URL}/${path}`, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${key}` },
    body: JSON.stringify(body),
    signal: AbortSignal.timeout(5000),
  });
  if (!response.ok) throw new Error(`CDP: HTTP ${response.status}`);
}

3. Kirish va roʻyxatdan oʻtish

Foydalanuvchi id si va xususiyatlarni uzating. cdp_aid cookie fayli — treker bergan tashrif buyuruvchi identifikatori. Uni anonymousId sifatida uzating, shunda xaridor profili uning saytga tashriflari bilan birlashadi.

cdp_send('identify', [
    'userId' => (string) $user->id,
    'anonymousId' => $_COOKIE['cdp_aid'] ?? null,
    'traits' => ['email' => $user->email, 'first_name' => $user->first_name],
]);
await cdpSend('identify', {
  userId: String(user.id),
  anonymousId: req.cookies?.cdp_aid,
  traits: { email: user.email, first_name: user.firstName },
});

Boʻsh xususiyatlarni uzatmang: null qiymati xususiyatni profildan oʻchiradi.

4. Buyurtma

Buyurtma mahsulotlari bilan xarid hodisasi. Buyurtma raqamidan olingan messageId dublikatlardan himoya qiladi: 24 soat ichida xuddi shu messageId bilan takrorlangan hodisa rad etiladi, shuning uchun yuborishni xavfsiz takrorlash mumkin.

await cdpSend('track', {
  messageId: `order-${order.id}`,
  userId: String(order.userId),
  anonymousId: req.cookies?.cdp_aid,
  event: 'order_completed',
  properties: {
    order_id: String(order.id),
    amount: order.total,
    products: order.lines.map((line) => ({ product_id: String(line.productId), quantity: line.quantity, price: line.price })),
  },
});

PHP da — xuddi shu maydonlar bilan oʻsha cdp_send('track', [...]) chaqiruvi. Hodisa nomi va mahsulot id si xossasi Tavsiyalar boʻlimi sozlamalariga mos kelishi kerak, aks holda xaridlar modellarga tushmaydi.

5. Mahsulotlar katalogi

Mahsulotlar va kategoriyalar maxfiy kalit bilan, har bir soʻrovda 1000 tagacha yuklanadi. Xuddi shu id ni qayta yuklash mahsulotni yangilaydi.

cdp_send('products', [
    'items' => [[
        'id' => 'SKU-1', 'name' => 'Krossovkalar', 'url' => 'https://shop.example.com/p/sku-1',
        'image' => 'https://shop.example.com/i/sku-1.jpg', 'price' => 4990, 'currency' => 'RUB',
        'available' => true, 'category_ids' => ['shoes'], 'brand' => 'Brand',
    ]],
    'categories' => [['id' => 'shoes', 'name' => 'Poyabzallar']],
], 'CDP_SECRET_KEY');

Agar katalog allaqachon fid koʻrinishida boʻlsa (YML, Google Merchant, CSV), fidni Tavsiyalar boʻlimida ulash osonroq.

Node.js misollari bilan «Server» yorligʻi

Maslahatlar

  • Fon navbatidan yuboring, xaridor soʻrovi ishlovchisida emas: shunda sayt javobi tarmoqqa bogʻliq boʻlmaydi.
  • Xatolarda takrorlang. 202 javobi hodisa qabul qilinganini va bir necha soniyada qayta ishlanishini bildiradi. 429 (soʻrovlar limiti yoki oylik hodisalar kvotasi oshib ketgan) va 5xx da soʻrovni keyinroq xuddi shu messageId bilan takrorlang.
  • Cheklovlar: xabar 32 KB gacha, /batch da 500 tagacha xabar, soʻrov tanasi 1 MB gacha. Yozish kaliti daqiqasiga 6000 tagacha soʻrov qabul qiladi.
  • Sayt domenlari boʻyicha cheklov server soʻrovlariga taʼsir qilmaydi.

Metodlarning toʻliq roʻyxati — API maʼlumotnomasida: https://cdp.onetrace.pro/api/v1/openapi.json.