> ## Documentation Index
> Fetch the complete documentation index at: https://omniflow-vpn.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Измерение рекламы

> Счётчики, подтверждение сайта и идентификатор клика, связывающий объявление с полученным заказом, — ваша собственная аналитика, по умолчанию выключенная и никогда не отправляемая проекту

`/admin/settings/analytics` включает измерение вашей собственной витрины, а
`/admin/reports` → **Каналы** показывает, что оно обнаружило.

Два замечания прежде всего.

**Это ваша аналитика, а не проекта.** Ничего отсюда не отправляется проекту
Omniflow или кому-либо ещё. Это отдельно от
[телеметрии](https://omniflow-vpn.mintlify.site/ru/operations/telemetry.md), которая принадлежит проекту и тоже
выключена по умолчанию; экраны намеренно разные, чтобы одно не приняли за
другое.

**Это программное обеспечение ничего не загружает в рекламные сети.** Выгрузка
конверсий — это файл, который вы скачиваете и передаёте платформе сами.
Отправка покупки клиента в Google из-за включённого переключателя — не то, о чём
следует узнавать по поведению системы.

## Почему один счётчик ничего не атрибутирует

Скрипт счётчика наблюдает за витриной. Он видит визит.

Он никогда не видит продажу. Оплата здесь происходит на стороне сервера — часто
через день после клика, иногда переводом, который вы подтверждаете вручную, — и
к этому моменту сессии браузера, нёсшей идентификатор клика рекламной платформы,
давно нет. Платформа продала вам клик, помеченный `gclid` или `yclid`, и никак
не узнает, что этот клик превратился в деньги.

Поэтому в дорожной карте и было сказано, что *ни один рекламный канал невозможно
атрибутировать вообще*, — и это было верно даже для установки, куда счётчик уже
вставили.

Поэтому идентификатор переносится:

1. Посетитель приходит по ссылке с параметрами `gclid`, `yclid`, `fbclid`,
   `msclkid`, `ttclid`, `twclid` или `utm_*`.
2. Если он согласился на измерение, браузер хранит эти параметры first-party
   тридцать дней. Побеждает первая запись: тот, кто пришёл по объявлению,
   подумал неделю и вернулся по ссылке от друга, приведён объявлением.
3. При подтверждении покупки параметры привязываются **к этому заказу**.
4. Когда заказ оплачен, он попадает в выгрузку с идентификатором клика и суммой.

Привязка — к заказу, а не к клиенту. Заказ — это конверсия с суммой и датой,
ровно то, что принимает офлайн-загрузка. Идентификатор клика, закреплённый за
человеком на всё время существования его аккаунта, — это профиль, другая вещь с
другими обязательствами, которая здесь не нужна.

## Счётчик — это номер, а не фрагмент кода

Здесь нет поля, куда можно вставить код счётчика, и это сделано намеренно.

Текстовое поле, принимающее скрипт, было бы способом выполнить произвольный код
в браузере каждого клиента, защищённым лишь правом оператора на запись, — а в
браузере клиента лежат ссылки на подписку, то есть учётные данные. Поэтому
скрипт, попадающий на страницу, написан в этом репозитории, а вы указываете
только идентификатор, проверяемый по форме конкретного провайдера:

| Провайдер | Идентификатор |
| - | - |
| Яндекс Метрика | Номер счётчика, 5–12 цифр |
| Google Analytics 4 | Идентификатор `G-` и 6–16 символов |

Это менее гибко, чем поле для фрагмента кода. Цена той гибкости — ровно то, от
чего мы отказались.

**Включение отделено от наличия идентификаторов.** Выключить измерение в спешке —
попросил регулятор, пожаловался клиент — не должно означать, что номера придётся
искать заново, поэтому идентификаторы остаются, а на странице не рисуется ничего.

## Согласие

Счётчики загружаются только у посетителя, который на это согласился, — и захват
клика тоже. Отказавшийся не измеряется, а то, что несла его посадочная страница,
забывается, а не ждёт покупки.

Запрос показывается, только когда есть на что соглашаться. Установка, где не
настроен ни один счётчик, не показывает баннер никому: просить согласия ни на
что хуже, чем не спрашивать.

Обе кнопки одинакового веса. Дизайн, где отказ — маленькая серая ссылка рядом с
большой цветной кнопкой согласия, собирает согласие, которого никто не давал, а
установка, продающая приватность, — последнее место, где такое уместно.

## Подтверждение сайта

`<meta name="google-site-verification">` и его аналоги доказывают инструменту
для вебмастеров, что домен ваш. Это **не** счётчики: они не ставят cookie, не
загружают скриптов и ни за кем не наблюдают.

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

Поддерживаются четыре: `google-site-verification`, `yandex-verification`,
`msvalidate.01` и `facebook-domain-verification`. Имя берётся из этого списка, а
содержимое должно быть непрозрачным токеном; «любой мета-тег, какой захочет
оператор» — задача куда более крупная, чем «докажите, что домен ваш».

## Отчёт по каналам и выгрузка

`/admin/reports` → **Каналы**, за тот же период, что и отчёт по продажам, и с
тем же ключом: по моменту поступления денег.

| Столбец | Что означает |
| - | - |
| Канал | `utm_source`, либо платформа, выдавшая идентификатор клика, либо `direct` |
| Заказы | Оплаченные заказы, отнесённые к каналу |
| Можно загрузить | Сколько из них несут идентификатор клика |
| Выручка | Сколько оплачено |
| Возвраты | Сколько вернулось |

**«Можно загрузить» — самый важный столбец.** Заказ относится к каналу, как
только он нёс UTM-метку, но сопоставить с оплаченным кликом можно только заказ с
идентификатором клика самой платформы. Двадцать заказов и три загружаемых
означают, что ссылки где-то теряют идентификатор — обычно на редиректе,
срезающем query, — и это стоит узнать раньше, чем кто-то решит, что реклама не
работает.

**Выгрузить для загрузки** скачивает CSV в том наборе столбцов, который ожидает
импорт офлайн-конверсий:

```
order_id,click_id,click_source,conversion_time,state,currency,value_minor,refunded_minor,utm_source,utm_medium,utm_campaign,utm_content,utm_term
```

Заказы с возвратом в нём есть, с суммой возврата, а не выброшены. Платформа,
оптимизировавшая ставки по продаже, которую потом вернули, учится не тому, и
поправить это можно, только если в выгрузке об этом сказано.

## Чего здесь намеренно нет

* **Никаких серверных вызовов conversion API.** Ничто отсюда не обращается в
  рекламную сеть. Иначе это программное обеспечение отправляло бы покупки
  клиентов третьей стороне по расписанию, а такое решение принимаете вы — и
  файлом, который передаёте осознанно.
* **Никакой сквозной идентификации.** Ничто не связывает два визита одного
  человека. Клик привязывается к одному заказу и забывается.
* **Никакого измерения в панели оператора.** Никто не приходит по рекламе на
  страницу входа администратора, а оператор — не тот, кого измеряют.

## Права

| Действие | Право |
| - | - |
| Читать настройки | `settings.read` |
| Менять их | `settings.write` |
| Читать отчёт по каналам и выгрузку | `finance.read` |

Именно `finance.read`, а не отдельное право: выгрузка конверсий — это данные о
выручке с рекламной пометкой, и её читает тот же человек, что и отчёт по
продажам.

## Справочник

| Маршрут | Метод | Примечания |
| - | - | - |
| `/v1/analytics` | `GET` | Публичный. Что рисует браузер посетителя; `measurable: false` означает, что ничего не запустится даже с согласием |
| `/v1/panel/analytics` | `GET` | `settings.read` |
| `/v1/panel/analytics` | `PUT` | `settings.write`, с текущим `version` |
| `/v1/panel/reports/channels` | `GET` | `finance.read`; `?since&until` |
| `/v1/panel/reports/conversions` | `GET` | `finance.read`; `?since&until&source&format=csv` |
| `/v1/account/orders/{id}/attribution` | `POST` | Только собственный заказ клиента; чужой отвечает 404 |

## Смежные страницы

> [card] [Отчёты по продажам](https://omniflow-vpn.mintlify.site/ru/operations/sales-reporting.md)
>
> Что продано за период — а здесь объясняется, откуда это пришло.

> [card] [Телеметрия](https://omniflow-vpn.mintlify.site/ru/operations/telemetry.md)
>
> Проекта, а не ваша. Тоже выключена по умолчанию и совсем о другом.

> [card] [Кампании](https://omniflow-vpn.mintlify.site/ru/commerce/campaigns.md)
>
> Обращение к своим клиентам, а не измерение того, как приходят новые.

> [card] [Персональные данные](https://omniflow-vpn.mintlify.site/ru/customer/privacy.md)
>
> Что хранится о клиенте и что забирает с собой удаление.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.