S2S ping
Общий алгоритм работы
- Пользователь приходит на ваш сайт. Вы генерируете уникальный
kmnrIdи отстукиваетесь с ним на сервер Kaminari на URL /ping, мы сохраняем данные в кэш. - Затем вы показываете пользователю страницу с нашим JS-скриптом, добавив в вызов скрипта тот же самый
kmnrId. - Мы собираем данные о пользователе и шлём их на сервер Kaminari.
- На сервере мы проверяем в кэше:
- Если там есть запись с аналогичным
kmnrId(пришедшая на /ping), мы склеиваем данные из кеша с результатами проверки и пишем их в статистику. - Если записи с таким
kmnrIdнет, мы ждём пять минут. Если вторая запись так и не приходит, мы пишем в статистику то, что есть. - Так же мы периодически проверяем кэш и ищем просроченные клики, пришедшие на /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 | ... | нет |
| sub8 | ... | нет |
| sub9 | ... | нет |
| sub10 | ... | нет |
Также в этот запрос должны быть добавлены следующие заголовки, полученные от пользователя:
| Название | Описание |
|---|---|
| user-agent | user agent пользователя |
| referer | страница, с которой пришёл пользователь |
| accept-language | язык интерфейса браузера |
| x-original-ip | IP |
| x-forwarded-for | IP |
| x-real-ip | IP |
Пример запроса:
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","sub8":"94839150"}'
--compressed
Добавление kmnrId в скрипт
Сгенерированный kmnrId затем нужно добавить в вызов JS-скрипта на странице.
<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>