S2S ping

From Wiki Kaminari Click

Общий алгоритм работы

  1. Пользователь приходит на ваш сайт. Вы генерируете уникальный kmnrId и отстукиваетесь с ним на сервер Kaminari на URL /ping, мы сохраняем данные в кэш.
  2. Затем вы показываете пользователю страницу с нашим JS-скриптом, добавив в вызов скрипта тот же самый kmnrId.
  3. Мы собираем данные о пользователе и шлём их на сервер Kaminari.
  4. На сервере мы проверяем в кэше:
    1. Если там есть запись с аналогичным kmnrId (пришедшая на /ping), мы склеиваем данные из кеша с результатами проверки и пишем их в статистику.
    2. Если записи с таким kmnrId нет, мы ждём пять минут. Если вторая запись так и не приходит, мы пишем в статистику то, что есть.
    3. Так же мы периодически проверяем кэш и ищем просроченные клики, пришедшие на /ping, но так и оставшиеся без пары. Если нам не удалось никак их проверить, мы пишем их в стату со статусом «Технические потери».

Настройка на стороне клиента

Отправка данных на https://kaminari.systems/v2/ping

Когда пользователь приходит на страницу необходимо с бэкенда (с помощью PHP, Python, NodeJS — в зависимости от того, на чём у вас написан сайт) послать на URL https://kaminari.systems/v2/ping инициализирующую информацию.

Данные должны слаться в формате JSON.

Список параметров.

Название Описание параметра Обязательный?
kmnrId Рандомный идентификатор показа. Генерируется на стороне клиента. Это может быть всё, что угодно — UUID, случайное число, случайная текстовая строка. Должна слаться в виде строки. да
kmnrKey Идентификатор интеграции, в рамках которой анализируется показ. да
sub1 Заполенные суб-метки. Если какие-то метки вы не используете, их слать не обязательно. нет
sub2 ... нет
sub3 ... нет
sub4 ... нет
sub5 ... нет
sub6 ... нет
sub7 ... нет

Также в этот запрос должны быть добавлены следующие заголовки, полученные от пользователя:

Название Описание
user-agent user agent пользователя
referer страница, с которой пришёл пользователь
accept-language язык интерфейса браузера

Пример curl-запроса:

curl 'https://kaminari.systems/v2/ping' \
  -H 'accept: application/json' \ 
  -H 'accept-language: en-US,en;q=0.9' \ 
  -H 'cache-control: no-cache' \ 
  -H 'content-type: text/plain;charset=UTF-8' \
  -H 'origin: https://test.com' \ 
  -H 'pragma: no-cache' \ 
  -H 'referer: https://test.com/' \ 
  -H 'user-agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36' 
  --data-raw '{"kmnrKey":"aaaaaaaa","kmnrId":"1125570260","sub1":"test","sub2":"1001","sub3":"10","sub4":"1385282124113622","sub5":"222","sub6":"555666","sub7":"8833705265931305"}' 
  --compressed

Пример на PHP:

$url = 'https://kaminari.systems/v2/ping';
$ch = curl_init( $url );
$payload = json_encode([
    'kmnrKey' => $kmnr_key,
    'kmnrId' => $kmnr_id,
    'sub1' => $sub1,
    'sub2' => $sub2,
    'sub3' => $sub3,
    'sub4' => $sub4,
    'sub5' => $sub5,
    'sub6' => $sub6,
    'sub7' => $sub7,
]);

curl_setopt( $ch, CURLOPT_POSTFIELDS, $payload );
curl_setopt( $ch, CURLOPT_HTTPHEADER, [
    'Content-Type:application/json',
    'Accept-Language:' . $_SERVER['HTTP_ACCEPT_LANGUAGE'],
    'User-Agent:' . $_SERVER['HTTP_USER_AGENT'],
    isset($_SERVER['HTTP_REFERER']) ? 'Referer:' . $_SERVER['HTTP_REFERER'] : '',
]);
curl_exec($ch);
curl_close($ch);

Добавление kmnrId в скрипт

Сгенерированный kmnrId затем нужно добавить в вызов JS-скрипта на странице (должен быть таким же, как в запросе на /ping).

<script>
    window.kmnr = {
        kmnrKey: 'aaaaaaaa',
        kmnrId: '1125570260',
        sub1: 'bbbbbbbb',
        sub2: 'cccccccc',
    };

    var kmnrSc = document.createElement('script');
    var kmnrPrnt = document.getElementsByTagName('head')[0] || document.body;
    kmnrSc.setAttribute('async', true);
    kmnrSc.setAttribute('charset', 'utf-8');
    kmnrSc.src = '//kaminari.systems/v1/script.js?kmnrKey=' + window.kmnr.kmnrKey;
    kmnrPrnt && kmnrPrnt.appendChild(kmnrSc);
</script>