Инструкция по настройке

Метрика+ CDP для МойСклад · версия 1.2 · обновлено 25 сентября 2026

В этой инструкции:
  1. Что делает решение
  2. Установка и первый запуск (3 минуты) (включая что решение меняет в МойСклад и чего не делает никогда)
  3. Подключение Яндекс.Метрики
  4. Сопоставление статусов
  5. Подключение рекламных кабинетов
  6. Что показывает панель аналитики (включая себестоимость: откуда берётся и насколько ей верить и продажи без заказа покупателя)
  7. Как увеличить % сопоставления ClientID (главное)
  8. Расширенные настройки (включая модели атрибуции)
  9. Решение проблем
  10. Тарифы и оплата
  11. Поддержка

1. Что делает решение

«Метрика+ CDP для МойСклад» — серверное решение для МойСклад. Автоматически передаёт заказы и контакты клиентов из вашего аккаунта МойСклад в Яндекс.Метрика CDP, считает реальную окупаемость рекламы с учётом расходов из Яндекс.Директ, Google Ads и Яндекс.Промостраниц. В индустрии эту метрику называют ROAS или ROMI — мы используем «окупаемость рекламы» как более понятный для бизнеса термин.

Ключевые возможности:

1.1 Что критично для полноценной работы

По убыванию важности. Все пункты этого списка работают без программистов и без правок кода сайта — это устанавливается через UI в МС, Метрике или нашем виджете. Скрипты на сайте (см. §7) — отдельная история про улучшение качества матчинга, а не про базовую работоспособность.

ЧекКому критичноЧто сломается без него
OAuth Яндекс.Метрики подключён в виджете Всем Нет канала отправки заказов в Метрику. Без этого ничего не работает.
Webhooks МС зарегистрированы (автоматически на установке) Всем Нет realtime-синхронизации. Заказы попадают в Метрику только при ручном «Загрузить 21 день». Если МС отключил webhook (после ~5 неудачных доставок) — проверьте «Диагностика подключения МС» в Настройках.
Маппинг статусов МС → 5 типов Метрики проверен (особенно PAID) Всем Метрика не понимает что такое «оплачен». PAID-статус — основа всех расчётов окупаемости и прибыли. Wizard угадывает 90% по ключевым словам, но проверьте вручную в «Настройки → Цели и статусы».
E-commerce включён в счётчике Метрики + dataLayer.push({ecommerce.purchase}) на сайте Магазинам с онлайн-чекаутом Главный путь сопоставления «без программистов». Большинство CMS ставят dataLayer из коробки (Tilda / Bitrix / WordPress+WooCommerce / InSales / Shopify / OpenCart) — проверьте в Метрика → Отчёты → E-commerce, появляются ли там покупки. Если да — наш матчинг через purchase_id ↔ номер заказа МС работает сразу, покрытие ≈ 80–90%. Если нет — в CMS обычно есть галка «включить интеграцию с Метрикой» в админке, без кода. Также Метрика автоматически собирает хеши email/телефонов из форм (если включено «Сбор хешированных email и телефонов»). Подробности в §7.8.
Рекламные кабинеты подключены к Метрике (Директ, Google Ads, VK, ...) Всем Без расходов окупаемость = 0. Делается ОДИН раз в самой Метрике (Настройки → Загрузка данных о расходах). Мы читаем готовые цифры, дополнительной настройки в нашем виджете не нужно.
Отгрузки по заказам и приёмки товаров с реальными закупочными ценами Бизнес+ (маржа) Себестоимость берём только чтением по цепочке: проведённая отгрузка заказа → склад, указанный в заказе → оценка по отчёту остатков → закупочная цена из карточки товара. Если ничего из этого нет — заказ не входит в маржу (неизвестная себестоимость не считается нулём). Подробно — в разделе 6.1.
Промостраницы подключены через OAuth (если используете) Бизнес+ (Промостраницы) Метрика не тянет расходы Промостраниц нативно. Без подключения в нашем виджете окупаемость Промо = 0. См. §5.
≥ 100 уникальных посетителей в сегменте за 90 дней Бизнес+ (Аудитории) Direct требует этот порог. До накопления сегмент создан у нас и виден в виджете, но в селекторе Direct → «Условия подбора аудитории» его не будет.
Минимальный сценарий «3 минуты без программистов»: установить виджет (1), подключить Метрику (2), проверить маппинг PAID (3), убедиться что E-commerce работает в Метрике (4), подключить хотя бы один рекламный кабинет к Метрике (5). Этого достаточно чтобы видеть оплаченные заказы и базовую окупаемость в течение 24 часов. Никакого кода на сайте не требуется — стандартные CMS уже всё умеют из коробки.
Углублённая оптимизация для тех у кого % сопоставления ниже 70% (см. §7) — JS-снипеты для проброса ClientID с сайта в формы заказа, кастомные интеграции с CRM/телефонией/ чатами, проброс параметров мессенджеров. Это улучшит покрытие с 80–90% до 95%+, но требует доступа к коду сайта или к настройкам CRM. Это не обязательно для базовой работы решения — для большинства магазинов достаточно стандартного e-commerce dataLayer + хешей контактов из Метрики.

2. Установка (3 минуты)

Шаг 1. Найдите решение в каталоге МойСклад → нажмите «Установить» → согласитесь с запрашиваемыми правами.
Шаг 2. После установки в меню МойСклад появится наш модуль. Откройте его — запустится мастер первичной настройки.
Что произойдёт автоматически при первой установке: Решение не создаёт обязательных полей. Пишет оно только в собственные дополнительные поля и только когда они пусты: значение, которое уже стоит в поле (ваше или от сайта), не перезаписывается. Если поле с таким названием у вас уже есть — используется оно, дубль не создаётся. Ваши рабочие данные — склад, статус, контрагент, позиции, суммы, комментарии — решение не меняет (см. 2.1).

2.1 Что решение меняет в МойСклад и чего не делает никогда

ЧтоПодробности
✓ Собственные дополнительные поля — только пустые Заказ: «ClientID Метрики», «Источник заказа», «Кампания». Контрагент: «ClientID Метрики», «Первый источник», «Является менеджером». Обязательное — только «ClientID Метрики»; остальные 4 можно не создавать. Заполненное поле никогда не перезаписывается.
✓ Webhook-и (уведомления) на заказы и отгрузки Это подписки на события, а не изменение данных. Удаляются вместе с приложением.
✗ Склад в заказе Никогда. Раньше решение могло проставить склад в заказ без склада для расчёта себестоимости — это убрано полностью, ни при каких настройках. Себестоимость теперь только читается (6.1).
✗ Статус, контрагент, позиции, суммы, проведение Никогда. Решение читает заказы и передаёт их в Метрику; обратно в эти поля ничего не пишет.
✗ Комментарий заказа/контрагента Никогда на обычных тарифах МС. На бесплатном тарифе МС, где дополнительные поля недоступны, можно отдельно разрешить добавлять блок «— Метрика+ —» в конец комментария (Настройки → Расширенные). По умолчанию выключено, ваш текст не меняется.
✗ Удаление полей и данных Решение не удаляет дополнительные поля из МС — даже свои, даже если вы отключили их создание. Лишние поля убираются вручную в настройках МС.
Всё видно и всё отменяется. Каждая запись решения фиксируется в журнале: виджет → Настройки → Аккаунт → «Изменения решения в МойСклад». Там видно, что, куда и когда записано, можно скачать CSV и нажать «Отменить изменения…» — сначала покажем, что вернётся, потом вернём прежние значения. Записи, которые после нас изменили вы или другая интеграция, откат не трогает.

3. Подключение Яндекс.Метрики

  1. На первом экране мастера нажмите «Подключить Метрику через OAuth».
  2. Откроется окно Яндекс.OAuth — авторизуйтесь под аккаунтом, у которого есть доступ к нужному счётчику Метрики.
  3. Дайте решению запрашиваемые права. Запрашиваются 6 scope:
    • metrika:read — чтение счётчиков и статистики
    • metrika:segments — создание/удаление API-сегментов для ретаргетинга
    • metrika:write — создание целей (внутри схемы CDP-статусов)
    • metrika:offline_data — загрузка заказов и контактов в CDP
    • metrika:expenses — чтение расходов из коннекторов Метрики
    • metrika:user_params — параметры визита для расширенной CRM-сегментации
  4. После авторизации мастер автоматически вернётся к настройке. Если у вас один счётчик — он будет выбран автоматически. Если несколько — выберите нужный.
Если ваш браузер блокирует всплывающее окно OAuth — разрешите popup для домена МойСклад и повторите подключение.

4. Сопоставление статусов

На втором шаге мастера решение автоматически загружает статусы заказов из вашего МойСклад и сопоставляет их с 5 типами статусов Метрики:

Автомаппинг работает по ключевым словам в названии статуса (например, «оплачен», «выдан клиенту» попадают в PAID; «отменён», «не оплачен» — в CANCELLED). Если результат вас устраивает, нажмите «Принять». Если хотите поправить — это можно сделать позже в разделе «Статусы».

5. Подключение источников расходов

Для расчёта окупаемости рекламы нужно подтянуть расходы рекламных кабинетов. Есть два пути — рекомендуемый через коннекторы Яндекс.Метрики, и резервный через прямой OAuth к рекламному аккаунту.

Сначала настройте коннекторы в Метрике (рекомендуется) — это надёжнее, бесплатно и быстрее. Прямой OAuth-метод нужен только если коннектор недоступен (типичный случай — Яндекс.Промостраницы).

5.1 Расходы через коннекторы Метрики (рекомендуемый путь)

У Яндекс.Метрики есть встроенные коннекторы, которые сами тянут расходы из рекламных кабинетов и показывают их в отчёте «Источники → Сводка». Никаких токенов передавать нашему сервису не нужно — мы просто читаем уже собранные Метрикой данные.

Доступные коннекторы расходов в Метрике:

* Meta Platforms (Facebook, Instagram) признана экстремистской и запрещена на территории Российской Федерации (Решение Тверского районного суда г. Москвы от 21.03.2022). Подключение Meta-коннектора имеет смысл только для зарубежных кабинетов (AE / KZ / BY / UZ / другие).

Актуальный список коннекторов смотрите на странице «Источники, расходы и ROI» в Метрике — Яндекс периодически добавляет новые платформы.

Как настроить (1 раз на счётчик):

  1. В виджете откройте Настройки → Подключения. У каждого подключённого счётчика в блоке «💰 Расходы рекламы → 🪙 Метрика-коннектор» нажмите кнопку с номером счётчика — откроется страница «Источники расходов» в Метрике.
  2. Авторизуйтесь Яндекс-аккаунтом владельца кабинета Директа.
  3. Для каждого нужного источника (Директ / Google Ads / VK / FB / myTarget) нажмите «Подключить» и подтвердите OAuth.
  4. Метрика начнёт собирать расходы ежедневно автоматически. Первые данные появятся через 4–24 часа.
  5. В нашем виджете ничего настраивать не нужно — мы каждые 6 часов автоматически синхронизируем эти данные. Кнопка «Обновить за 30 дней» в том же блоке дёрнет данные вручную.
Что у вас будет в итоге: на странице «Аналитика → Источники» появится колонка «Расход» с честными цифрами по каждой кампании, и окупаемость будет считаться автоматически. Никаких отдельных аккаунтов в нашем виджете заводить не надо.
Минусы:

5.2 Яндекс.Директ — автоматически через Метрику

Direct грузится автоматически через Метрика-токен (ym:ad:RUBConvertedAdCost + auto-discovery direct_client_logins). Отдельный OAuth Direct не нужен.

  1. В Настройках → Подключения → конкретный счётчик → блок «💰 Расходы рекламы» → секция «🎯 Яндекс.Директ для этого счётчика».
  2. Логин определяется автоматически по привязке Direct в Метрика-UI. Если нужно вручную — кнопка «Изменить логин».
  3. Кнопка «Обновить расходы Директа» подтягивает данные за 30 дней.
Суммы Directa подгружаются с НДС (RU 20% / KZ 12% / AE 5% — определяется автоматически по региону счётчика). В нашем UI цифры совпадают с тем что юзер видит в счёт-фактурах Direct.

5.3 Яндекс.Промостраницы

Промостраницы Метрика не тянет через коннекторы — мы сами грузим расходы в Метрика-счётчик через /management/v1/counter/{id}/expense/upload под нашим backend.

  1. В Настройках → Подключения → конкретный счётчик → блок «💰 Расходы рекламы» → секция «📰 Яндекс.Промостраницы».
  2. Кнопка «Подключить Яндекс.Промостраницы» — OAuth под аккаунтом с правами в Промо-редакции.
  3. «Залить расходы (7 дней)» запускает асинхронную загрузку — данные появятся в Метрика-отчётах как источник yandex.promopages через ~30 минут.
  4. Автозагрузка раз в 6 часов после первого ручного клика.
Промостраницы часто дают окупаемость ×5–7 в нашей выборке — это лучший канал для нативной аналитики в e-commerce. Валюта Promo берётся из региона счётчика (KZ → KZT, AE → AED, и т.д.).

5.4 Холдинг с несколькими счётчиками (RU/AE/KZ и т.п.)

Каждый счётчик настраивается per-connection в блоке «Настройки → Подключения». В одном Яндекс-аккаунте может быть несколько счётчиков; кнопка «+ Счётчик» в шапке карточки паспорта добавляет ещё.

СценарийКак настроить
Один сайт — один кабинет ДиректаОдин counter в Настройках, всё подтянется автоматически
Холдинг с несколькими регионами (RU/KZ/AE/BY/UA/UZ)Один Яндекс-аккаунт, несколько счётчиков. Каждый со своим регионом → автоматически правильные НДС и валюта
Несколько юр.лиц с разными Direct-кабинетамиПодключить отдельный паспорт через «+ Подключить ещё один Яндекс-аккаунт»

6. Что показывает панель аналитики

Раздел «Аналитика»

Основные KPI за выбранный период (7/30/90 дней): выручка, окупаемость рекламы, средний чек, конверсия заявка → оплата. Под графиком — журнал последних выгрузок в Метрику.

Раздел «Источники»

Таблица по каждой рекламной кампании с показателями: количество заказов, выручка, расход на рекламу, маржа (выручка − себестоимость), прибыль, окупаемость рекламы и прибыль на рубль рекламы. Сортировка по любой колонке. Над таблицей — плашка качества себестоимости (см. 6.1).

6.1 Себестоимость: откуда берётся и насколько ей верить

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

#ИсточникТочностьКогда используется
1 Отгрузка по заказу (факт) Точно — та же цифра, что в отчёте МС «Прибыль» Есть проведённая отгрузка, привязанная к заказу. Берётся себестоимость позиций отгрузки на её дату.
2 Склад заказа (расчёт МС) Высокая Отгрузки ещё нет, но в заказе указан склад — МойСклад считает себестоимость позиций по остаткам этого склада на текущий момент.
3 Оценка по отчёту остатков Оценка Нет ни отгрузки, ни склада в заказе. Берётся средняя себестоимость товара по всем складам — или по складу, который вы выбрали в Настройках → «Себестоимость» → «Склад для оценки».
4 Закупочная цена из карточки товара Грубая оценка Товара нет на остатках (приёмок не было). Используется как последний резерв — раньше это поле не учитывалось вовсе.
— Нет данных — Ничего из перечисленного нет. Такой заказ показывается в выручке, но не входит в маржу, прибыль и ROI: неизвестная себестоимость не подставляется нулём.

В разделах «Аналитика» и «Источники» над цифрами показана плашка вида «Себестоимость: факт по отгрузкам 62% · расчёт МС 25% · оценка 9% · нет данных у 12 заказов (не учтены в марже)». Если данных нет у 10% оплаченных заказов и больше — появится подсказка, что сделать в МС: провести отгрузку, указать склад в заказе или заполнить закупочные цены / приёмки. Пересчёт себестоимости происходит автоматически при проведении отгрузки (через несколько минут) и при следующей синхронизации заказа.

6.2 Продажи без заказа покупателя

Если вы оформляете продажу сразу отгрузкой (без заказа покупателя) — например, при продаже со склада или в шоуруме, — проведённая отгрузка без заказа считается продажей: она попадает в Метрику как оплаченный заказ (статус «Отгрузка (без заказа)»), в выручку, маржу и отчёты по источникам. Себестоимость берётся из самой отгрузки. Отгрузка, привязанная к заказу покупателя, отдельной продажей не считается — она учитывается только как себестоимость своего заказа, двойного учёта нет. Если отгрузку распровести, удалить или привязать к заказу — продажа снимается. Источник такой продажи определяется по контакту (телефон/email покупателя в карточке контрагента); в карточку отгрузки решение ничего не пишет. Нужно право на чтение отгрузок — оно появится после обновления приложения в МойСклад; до этого функция неактивна и включится автоматически.

Раздел «Воронка»

Распределение заказов по 5 типам статусов Метрики и топ-30 ваших статусов МС с долей. Помогает увидеть, где теряются деньги в воронке продаж.

Раздел «Аудитории»

Создание аудиторий для ретаргетинга в Директе. Кнопка «Создать недостающие» разворачивает 7 типовых шаблонов в Метрике (Все CDP-заказы / Оплачено / Отмена / Прочие / Средний чек / Выручка / Прибыль). Кнопка «+ Свой сегмент» открывает билдер с 7 параметрами и 7 операторами (= ≠ > ≥ < ≤ диапазон) для произвольных порогов в валюте счётчика. Важно: Direct показывает аудиторию в селекторе только когда в ней накопилось ≥ 100 уникальных посетителей за 90 дней. До этого порога аудитория создана и видна у нас, но в Direct её не будет. После создания аудитории автоматически появляются в Direct → Условия подбора аудитории (с задержкой 5–30 мин на синхронизацию Direct).

Раздел «Статусы»

Таблица сопоставления статусов МС с типами Метрики — можно править вручную. В нижней части страницы свёрнут блок «Фильтр сотрудников и менеджеров (по email-домену)» — туда можно добавить домены, заказы с которых не должны передавать ПДн клиентов в Метрику.

Раздел «Инструкция»

Эта страница в краткой форме — внутри виджета. Описывает основные сценарии настройки.

Раздел «Настройки»

Per-connection архитектура: один Яндекс-аккаунт может иметь несколько счётчиков (RU/AE/KZ и т.п.). Каждая карточка счётчика содержит блок «💰 Расходы рекламы» (3 подсекции: 🪙 Метрика-коннектор, 🎯 Яндекс.Директ, 📰 Яндекс.Промостраницы), блок «🌍 Регион» (автоматически определяет НДС и валюту), а также секции каналов продаж/юр.лиц/расширенных настроек. Кнопка «Удалить ВСЕ данные» в самом низу — необратимое действие.

7. Как увеличить % сопоставления ClientID (главное)

ClientID Метрики — это строка цифр вида 1778784550496063444 (19 цифр, превышает Number.MAX_SAFE_INTEGER — храните как строку, иначе JS округлит последние цифры и Метрика не свяжет заказ с визитом), идентификатор посетителя сайта, который Метрика выдаёт каждому пользователю при первом визите и хранит в cookie _ym_uid. Чтобы Метрика смогла построить связку «визит → оплата» и посчитать честную окупаемость рекламы, нам нужно знать ClientID для каждого заказа в МС.

Важно: ClientID — это строка, не число. Длина до 20 символов (превышает Number.MAX_SAFE_INTEGER). Не сохраняйте его как int64 / JS-Number — последние цифры округлятся (IEEE-754 precision loss), и Метрика не свяжет визит с заказом. Только строкой.
Как Метрика привязывает заказ к визиту (официальная схема Яндекса):
Когда мы отправляем в Метрику CDP информацию о заказе из МС, Метрика привязывает этот заказ к ближайшему по времени визиту посетителя сайта. Посетитель определяется по трём идентификаторам, которые мы отправляем вместе с заказом:
  1. ClientID — самый точный (если у нас он есть);
  2. email_md5 — MD5-хеш email клиента (мы хешируем на нашем сервере перед отправкой в Метрику CDP по 152-ФЗ);
  3. phone_md5 — MD5-хеш телефона клиента (хешируется аналогично).

Какой алгоритм хеша — зависит от того где хешируем: Чтобы Метрика автоматически собирала email/phone (Advanced Matching) с форм сайта, в настройках счётчика включите сбор хешированных email и телефонов из форм (точное название UI-опции может меняться — ищите «хеши», «маскированные», «Точные цели» в разделе настроек). Альтернатива для ручного контроля — явно передавать через JS API: ym(N, 'firstPartyParams', { phone_number: '+79991234567', email: 'user@example.com' }) (Метрика сама хеширует SHA-256) или ym(N, 'firstPartyParamsHashed', { phone_number: '<sha256>', email: '<sha256>' }) если хешируете на сайте. Это вариант 3 ниже — fallback покрытие ≈ 40–60%.
⏱ Важные тайминги Метрики:
Главное правило: чем раньше вы поймаете ClientID (в момент заполнения формы / звонка / чата) и положите его в соответствующее поле заказа в МС, тем выше будет процент сопоставления. Без этого Метрика не свяжет оффлайн-оплату с онлайн-визитом, и кампания будет показывать окупаемость = 0.

Решение пытается найти ClientID четырьмя путями (от самого надёжного к best-effort):

  1. В кастомном атрибуте заказа — самый надёжный.
  2. В кастомном атрибуте контрагента — для повторных покупок.
  3. Через purchase_id — обратный запрос в Метрику по номеру заказа.
  4. Через хеш телефона/email — если в Метрике включены «Дополнительные настройки отслеживания» + «Запоминать маскированные данные» либо на сайте вызывается ym(N, 'firstPartyParams', ...).

7.1 На сайте: добавьте скрытое поле yandex_client_id

Самый эффективный способ. В формы заказа на сайте добавьте скрытое поле, которое автоматически заполняется ClientID-ом из Метрики. Это поле должно попадать в МС вместе с заказом (через API JSON или интеграцию вашего сайта с МС).

Вставьте этот код в <head> сайта (после кода счётчика Метрики):

<script>
// Получаем ClientID Метрики и кладём во все формы сайта
(function() {
  var COUNTER_ID = 12345678; // ваш номер счётчика
  function setClientId(cid) {
    document.querySelectorAll('form').forEach(function(form) {
      var input = form.querySelector('input[name="yandex_client_id"]');
      if (!input) {
        input = document.createElement('input');
        input.type = 'hidden';
        input.name = 'yandex_client_id';
        form.appendChild(input);
      }
      input.value = cid;
    });
  }
  function tryGet() {
    if (typeof ym === 'function') {
      ym(COUNTER_ID, 'getClientID', setClientId);
    } else {
      setTimeout(tryGet, 300);
    }
  }
  tryGet();
})();
</script>
Имя поля может быть любым из списка по умолчанию: yandex_client_id, clientid, _ym_uid, ym_uid, yandex_uid, id клиента метрики. Главное — чтобы такое же имя было в названии атрибута заказа МС. Можно добавить свои имена в «Настройки → Расширенные → Дополнительные источники ClientID».
Дополнительно: передавайте параметры посетителя через userParams (не обязательно, но повышает качество данных в Метрике). После авторизации клиента на сайте вы можете прокинуть в Метрику его UserID, статус (VIP/обычный), сегмент и пр. — это поможет Метрике объединить визиты одного клиента с разных устройств и обогатить отчёты.
ym(COUNTER_ID, 'userParams', {
  UserID: 12345,
  vip_status: true,
  segment: 'b2b'
});
Данные привяжутся к ClientID, появятся в отчёте «Параметры посетителей» через несколько часов и хранятся 2 года с последней загрузки. Подробнее: docs.yandex/metrica/visitor-params.

7.2 По типу CMS — где поправить шаблон

CMS / ПлатформаКуда вставить скриптПоле для проброса в МС
Tilda Настройки сайта → «Главное» → блок T123 «HTML-код в HEAD» В каждой форме добавьте скрытое поле через «Содержимое → Скрытые поля» с именем yandex_client_id
Bitrix / 1С-Битрикс Шаблон сайта (main → header.php) В webform/order-форме добавьте <input type="hidden" name="UF_YANDEX_CLIENT_ID"> и в МС-интеграции маппинг на атрибут
WordPress / WooCommerce Плагин «Insert Headers and Footers» (рекомендуется) ИЛИ в functions.php темы через PHP-функцию add_action('wp_head', ...) — НЕ вставлять <script> напрямую в PHP-файл (Fatal Error) Через hook woocommerce_checkout_create_order добавьте поле в meta, плагин «МойСклад» прокинет в атрибут заказа
OpenCart / ocStore Шаблон catalog/view/theme/.../template/common/header.tpl Через vqMod / OCMOD добавьте поле в order-form, маппинг в МС-модуле
InSales / Shopify Шаблон layout/theme.liquid перед </head> В cart.liquid или checkout-форме добавьте поле, прокиньте в МС через атрибут
Самописный сайт Перед закрытием </head> В backend при создании заказа в МС API передавайте в массив attributes объект {"id": "<uuid_атрибута>", "value": "<clientId>"}

7.3 amoCRM — что прокинуть в поле заказа

В amoCRM нет стандартного поля для ClientID — его нужно создать самостоятельно. Подробное руководство Яндекса по интеграции: yandex.ru/support/metrica/ru/crm/amocrm.

  1. В amoCRM откройте «Настройки → Поля → Сделки» (или «Контакты»)
  2. Создайте новое поле — название произвольное, рекомендуем yandex_client_id или ClientID Метрики (тип «Короткий текст»). Запомните технический id поля (например cf123456)
  3. В JS-формах вашего сайта добавьте скрытое поле и пробросьте его в API создания сделки amoCRM через параметр custom_fields_values[] с указанным id и значением из ym(COUNTER_ID, 'getClientID', cb)
  4. В интеграции amoCRM → МойСклад настройте перенос этого поля сделки в кастомный атрибут заказа МС — название атрибута в МС должно совпадать с одним из распознаваемых (yandex_client_id, ClientID Метрики и т.п.)

7.4 Bitrix24 — настройка сквозной аналитики

В Bitrix24 готового поля для ClientID Метрики нет — нужно создать кастомное поле сделки и настроить передачу _ym_uid через сайт-CRM-форму или REST API. См. инструкцию Яндекса по интеграции с Битрикс24: yandex.ru/support/metrica/ru/crm/bitrix.

  1. В Bitrix24 откройте «CRM → Настройки → Сделки → Пользовательские поля» и создайте поле «ClientID Метрики» (тип «Строка»). Запомните его UF-имя
  2. В формах сайта (Bitrix24.Sites или встроенная CRM-форма) добавьте скрытое поле с указанным UF-именем и в JS заполняйте его значением из ym(COUNTER_ID, 'getClientID', cb)
  3. В интеграции Bitrix24 → МойСклад настройте сопоставление UF-поля сделки с кастомным атрибутом заказа МС (рекомендуемое имя в МС: yandex_client_id или ClientID Метрики)
Если у вас уже подключено приложение b24-yandex-metrika в Bitrix24 — оно сохраняет ClientID в собственное поле (часто «Yandex Client Id»). Используйте его — в интеграции с МС просто маппите это поле в атрибут заказа.

7.5 Телефония — какое поле от провайдера прокинуть в МС

Если клиент звонит вам через виртуальную АТС с коллтрекингом, провайдер уже знает ClientID Метрики посетителя на сайте (из своего скрипта на сайте). Решение поддерживает 9 провайдеров по умолчанию. Просто положите идентификатор сессии в атрибут заказа.

ПровайдерПоле провайдераПоложите в атрибут МС
Calltouch session_id (sessionId) или call_id calltouch_session_id или calltouch_call_id
Callibri ym_uid в API /metrika_visitor_info или callibri_id из JS-виджета callibri_id или callibri_visitor_id
Comagic / UISCom session_id из API звонка comagic_id
Mango Office call_id из webhook звонка mango_callid или mango_call_id
Roistat roistat_visit (cookie) или visitor_id roistat_visit или roistat_visitor
Прочие (Sipuni, MCN, Zadarma) Любой идентификатор сессии посетителя Любое имя из списка в «Настройки → Расширенные → Дополнительные источники ClientID»
⚠️ Важно: Метрика CDP НЕ понимает идентификаторы сторонних систем напрямую (roistat_visit, calltouch_session_id, jivo_visitor_id и т.п.). Если передать их «как есть» в Метрику — статус загрузки сменится на linkage_failure (ни один идентификатор не сматчился с визитом).

Правильный путь:
  1. Calltouch отдаёт yaClientId в API сессии, Callibri — через /metrika_visitor_info, Roistat и большинство коллтрекинг-систем сами передают ClientID в Метрику через свой JS-трекер (тогда в МС просто нужно прокинуть наш атрибут «ClientID Метрики»);
  2. Использовать хеши контактов (мы автоматически хешируем phone/email на нашем сервере перед отправкой в Метрика CDP — Метрика свяжет визит с заказом по ним);
  3. В настройках счётчика Метрики (раздел «Безопасность и использование данных») включить «Дополнительные настройки отслеживания» и sub-опцию «Запоминать маскированные данные» — Метрика автоматически собирает Advanced Matching (email/phone хеши) с форм на сайте, без вмешательства в JS.
Идентификаторы в таблице выше — это поля сессии стороннего сервиса, которые вы прокидываете в МС-заказ. Они нужны для обогащения CRM-данных, но не работают в Метрике CDP как ключ привязки. Подробнее: CRM-интеграции Метрики.

7.6 Чаты на сайте — какое поле прокинуть

Чат-сервисПоле сессииАтрибут МС
Jivo (JivoSite) visitor.id в webhook payload (server-side; в JS Jivo идентификация через setUserToken JWT) jivo_visitor_id или jivosite_id
Talk-Me client_id сессии (уточните точное имя в их актуальной документации) talkme_id
Webim visitor.id в webhook payload (server-side) webim_id
Carrot quest, Verbox, LiveTex visitor id чата Добавьте имя в «Настройки → Расширенные → Дополнительные источники ClientID»

7.7 Авто-обогащение карточки заказа МС

Решение автоматически заполняет 3 поля в карточке заказа МС: ClientID Метрики, Источник заказа, Кампания — и 2 в карточке контрагента: ClientID Метрики, Первый источник. Менеджер открывает заказ и сразу видит откуда пришёл клиент.

Пишем только в пустые поля. Если вы или сайт уже положили значение — мы его не трогаем. Включается/выключается в виджете → Настройки → «Авто-обогащение заказов в МойСклад».

Четыре пути связки заказа с визитом

#СпособТочностьУсловия
1 Сайт прокидывает yandex_client_id в форму заказа МС ~100% для онлайн-заказов JS-снипет на сайте (см. п. 7.1) + интеграция формы с МС
2 Сопоставление по purchase_id цели «покупка» 80–95% для онлайн-заказов На сайте срабатывает E-commerce purchase с тем же ID что и номер заказа в МС
3 По MD5 телефона/email — даже если посетитель не оформлял заказ на сайте 40–70% для оффлайн-обзвонов В Метрике включены «Дополнительные настройки отслеживания» + «Запоминать маскированные данные» либо на сайте вызывается ym(N, 'firstPartyParams', {phone_number, email}) при отправке формы
4 Через Яндекс.Крипта — межустройственное связывание 20–50% для оффлайн-заказов У клиента есть аккаунт Яндекс (по поведенческим факторам — почта, поиск, карты, такси)
Что такое Крипта? Это технология Яндекса, которая определяет один и тот же пользователь по разным устройствам/браузерам через сходство поведения в сети (поисковые запросы, посещаемые сайты, время активности, домохозяйство по IP). При загрузке в CDP MD5-хешей телефона и email мы фактически просим Метрику: «свяжи этого клиента с его cross-device-профилем». Если у клиента есть Яндекс-аккаунт — связка построится, даже если на ваш сайт он никогда не заходил. Это уникальная возможность экосистемы Яндекс, которой нет у независимых аналитик.
Скорость и полнота связки зависят от настройки сайта и активности клиента в Яндекс-экосистеме. Гарантии 100% покрытия нет — это вероятностные модели. На практике совокупно с (1)–(4) получается 50–90% заказов с известным источником.

7.8 Сопоставление по purchase_id из e-commerce

Предварительно включите E-commerce в счётчике Метрики (если ещё не сделали): Счётчик → Настройки → «Отслеживание» → включите «Электронная коммерция». Без этого цель purchase не записывается в Метрику и сопоставление не работает.

Альтернативный путь сопоставления — через purchaseID цели «покупка» в Метрике. Если на сайте срабатывает цель E-commerce purchase с уникальным идентификатором заказа, и этот же ID есть в номере заказа МС — мы сопоставим автоматически.

На сайте при подтверждении заказа — рекомендованный способ через E-commerce dataLayer (официальная дока Яндекса):

window.dataLayer = window.dataLayer || [];
dataLayer.push({
  ecommerce: {
    purchase: {
      actionField: {
        id: '12345',            // ← это попадёт в purchase_id Метрики
        revenue: 5400,
        // currency, coupon, shipping — опционально
      },
      products: [/* ... */],
    },
  },
});

Альтернатива через reachGoal (legacy, если e-commerce dataLayer недоступен):

ym(COUNTER_ID, 'reachGoal', 'purchase', {
  order_id: '12345',           // ← попадёт в purchase_id
  order_price: 5400,           // ← поле называется order_price, не order_revenue
});

В виджете в «Настройки → Расширенные → Сопоставление заказов с purchaseID» выберите режим:

7.9 RetailCRM — нативная связка с Метрикой

RetailCRM из коробки сохраняет _ym_uid посетителя в кастомное поле сделки/клиента, если на сайте установлен Tracker RetailCRM. Также штатно интегрируется с Roistat и коллтрекинг-сервисами. Перенос в МС — настраивается в разделе «Интеграции → МойСклад» вашей RetailCRM.

  1. В RetailCRM откройте «Настройки → Дополнительные поля → Заказы». Найдите поле, где сохраняется _ym_uid (обычно ya_client_id или yandex_client_id). Если поле не создано — создайте «Короткий текст» с именем yandex_client_id.
  2. Убедитесь что RetailCRM Tracker подключён на сайте — он сам ловит ClientID Метрики и пишет в это поле при создании заказа.
  3. В интеграции «RetailCRM ↔ МойСклад» (раздел «Интеграции» в RetailCRM) включите трансфер этого кастомного поля в атрибут заказа МС с именем yandex_client_id или ClientID Метрики.
  4. Готово — все заказы, синхронизированные в МС, будут содержать ClientID; виджет подхватит его автоматически.
В RetailCRM также можно вытащить ClientID через REST API: GET /api/v5/orders/{externalId} → поле customFields.ya_client_id. Используйте, если работаете через свой промежуточный слой.

7.10 Мессенджеры — WhatsApp, Telegram, MAX

Если значимая часть заказов приходит через мессенджеры, ClientID нужно прокинуть при первом контакте через параметризованную прямую ссылку (deep-link) с вашего сайта. После этого все сообщения и заказы клиента в этом мессенджере будут привязаны к ClientID.

Без настройки мессенджер-заказы атрибутируются через Яндекс.Крипту (если клиент когда-то был на сайте с того же устройства / Яндекс-аккаунта) или через MD5 телефона (если клиент уже оставлял свой телефон на сайте). Это даёт 20–60% покрытия «бесплатно». Прямая ссылка с параметром доводит до 90%+.

WhatsApp

Если вы используете Wazzup24, Chat2Desk, Wassenger, Texterra или другой WABA-сервис — они принимают первое сообщение через wa.me-ссылку и сохраняют UTM/параметры на карточке клиента. Передавайте ClientID в utm_content или в тексте первого сообщения:

<a id="wa-link" href="https://wa.me/79991234567?text=Здравствуйте">Написать в WhatsApp</a>

<script>
ym(COUNTER_ID, 'getClientID', function(cid) {
  var a = document.getElementById('wa-link');
  if (a) a.href += encodeURIComponent(' (cid:' + cid + ')');
});
</script>

В Wazzup24/RetailCRM/Bitrix24 этот текст сохраняется на сделке. В интеграции с МС перенесите его в кастомный атрибут заказа с именем yandex_client_id. Холодные WhatsApp-обращения (звонок без визита на сайт) матчатся только через Крипту или phone_md5.

Telegram

Telegram-бот (и платформы BotHelp, TextBack, ManyChat, Salebot) поддерживает ?start=PARAM в прямой ссылке. Бот получает параметр в первом сообщении и сохраняет на пользователе.

<a id="tg-link" href="https://t.me/yourbot?start=ANON">Написать в Telegram</a>

<script>
ym(COUNTER_ID, 'getClientID', function(cid) {
  var a = document.getElementById('tg-link');
  if (a) a.href = a.href.replace('?start=ANON', '?start=ym_' + cid);
});
</script>

В BotHelp/TextBack/ManyChat значение из ?start= сохраняется как параметр пользователя — точное имя переменной зависит от платформы (BotHelp использует start_param; в ManyChat это «User Refs»; уточните в текущей документации вашего сервиса). При оформлении заказа в МС из бота — пишите его в кастомное поле заказа.

MAX (мессенджер VK)

MAX поддерживает аналогичную прямую ссылку: https://max.ru/your_bot?start=ym_<cid>. Принцип и реализация — как у Telegram (см. фрагмент выше, замените домен).

Для MAX Mini Apps (мини-приложения внутри мессенджера): используйте JS SDK МАХ, получите идентификатор пользователя и передайте на сервер вместе с ClientID, который вы прокидываете в параметре запуска.

Все три мессенджера работают по одному принципу: при первом контакте передайте клиенту ссылку с ClientID в параметре. После этого все его сообщения и заказы будут привязаны к этому ID — виджет автоматически подхватит его через атрибут заказа МС.

7.11 Как проверить что % сопоставления растёт

  1. После настройки создайте тестовый заказ на сайте
  2. Через 1–2 минуты в МС найдите этот заказ — в атрибуте «ClientID Метрики» должно быть число вроде 1748503210892
  3. Через 30 минут в Метрике → «Посетители → Управление заказами» найдите этот заказ по purchase_id или uniq_id клиента
  4. В карточке заказа должен быть привязан visit_id — это значит ClientID сматчился
Метрика-овский отчёт «Источники / Сводка» с применённым CDP-сегментом «[МС] Оплачено» — показывает реальный охват: если число «Посетителей» равно числу заказов — % сопоставления близок к 100%. Если в 5 раз меньше — мы не находим ClientID для 80% заказов, нужно настраивать.

7.12 Measurement Protocol — server-side обогащение визитов (продвинутый)

Если у вас есть кейсы где веб-счётчик не видит данные (блокировщики рекламы, эквайринг без redirect назад на «спасибо за заказ», server-side events) — Метрика поддерживает Measurement Protocol: отправка событий напрямую с вашего сервера в mc.yandex.ru/collect по HTTP.

Что можно отправить:

Как включить:

  1. В Метрике → Настройки → Безопасность и использование данных → включите опцию «Measurement Protocol». Будет сгенерирован OAuth-токен (до 5 токенов на счётчик).
  2. На своём сервере запомните ClientID пользователя (берётся через ym(N, 'getClientID', cb) во время визита и сохраняется в БД для последующей отправки).
  3. Отправляйте POST/GET-запросы на https://mc.yandex.ru/collect?tid=<counter_id>&cid=<clientID>&... с авторизационным токеном. Данные появятся в Метрике через ~20 минут.
Ограничения:

Подробности — официальная документация Yandex Metrika Measurement Protocol. Наш сервис эту фичу не использует (мы шлём CDP-данные через `/data/contacts/json` и `/data/orders/json`), но если у вас есть собственный backend для специфических кейсов — это альтернативный канал.

8. Расширенные настройки

8.1 Модель атрибуции

По какой модели Метрика связывает заказы с источниками трафика и считает окупаемость и прибыль на рубль. Выбирается в «Настройки → Расширенные → Модель атрибуции».

МодельОкноКогда использовать
Последний значимый (рекомендуется)
lastsign
90 дн. Default Stat API Метрики. Игнорирует прямые заходы и закладки — credit идёт последнему значимому источнику (рекламе, поисковику, соцсетям). Понятная для маркетолога, минимум искажений в окупаемости. Используйте для большинства e-com задач.
Последний переход
last
180 дн. Засчитывает любой последний переход, включая прямые заходы. Полезен для технической сверки расхождений с другими отчётами. Завышает credit Direct/закладкам, недооценивает рекламные кампании.
Первый переход
first
180 дн. Первый visit клиента в окне. Для оценки top-of-funnel каналов — какие источники впервые приводят клиента (полезно для брендинга, контент-маркетинга).
Последний клик из Директа
last_yandex_direct_click
180 дн. Приоритет Яндекс.Директу: если был хоть один клик по Direct в окне — credit идёт Direct, иначе fallback на «Последний значимый». Полезно если вы оптимизируете именно Direct-кампании.
Автоматическая
automatic
180 дн. ⚠️ Не «автовыбор модели Метрикой», а отдельный алгоритм = «Последний клик из Директа» + Crypta-домохозяйства + cross-device. Системно завышает credit Директу (+10% сигналов). Полезно только при работе с auto-стратегиями Яндекс.Директа (PFC, ROI-стратегии).
Кросс-девайс модели
cross_device_*
как у базовой ⚠️ Объединение визитов с разных устройств одного юзера через технологию Crypta. Работает только если на сайте есть авторизация через Яндекс или похожий device-fingerprint. Без Yandex-auth — околонулевой эффект, но создаёт сложные несостыковки в окупаемости. Не включайте без понимания зачем.
Важно — это не окно для backfill: модель атрибуции даёт окно истории визитов (90 или 180 дней). А окно офлайн-данных Метрики — отдельное, 21 день: заказ из МС привяжется к визиту только если визит был не более 21 дня назад (см. секцию 7. ClientID). Это разные сущности.

8.2 Прочие расширенные настройки

НастройкаКогда использовать
Шаблон purchaseIDЕсли номер заказа в МС нестандартного формата (например, Gri_55321) — задайте шаблон вручную.
Валюта: from_order / fixed / convertПо умолчанию валюта берётся из заказа МС. Если у вас всегда одна валюта — переключите на «fixed». Для конвертации — «convert» + таблица курсов.
Нормализация GmailСклеивание дубликатов вида user.name+tag@gmail.com с username@gmail.com.
Передача комментариев заказаЕсли включено — поле description заказа МС попадает в attribute_values заказа в CDP.

9. Решение проблем

Заказы не передаются в Метрику

  1. Проверьте раздел «Аналитика» → «Журнал выгрузок». Если статусы «PASSED» — данные передаются, ищите в Метрике через сутки (агрегаты обновляются с задержкой).
  2. Если статусы «FAILED» — обычно причина в неподтверждённой OAuth-сессии Метрики. В разделе «Настройки» нажмите «Переподключить».
  3. Если журнал пустой — проверьте что webhook-и зарегистрированы (это происходит автоматически при установке).

Окупаемость = 0 (нет данных)

  1. Подождите 1 час после подключения рекламного кабинета — нужна первая синхронизация расходов.
  2. Проверьте что в Метрике есть UTM-метки заказов — без них невозможно сопоставить заказ с кампанией.
  3. Убедитесь что номера заказов в МС попадают в Метрику как purchaseID при срабатывании цели «покупка» на сайте.
Если часть заказов приходит с маркетплейсов (Wildberries, Ozon, Яндекс Маркет): окупаемость по ним всегда будет 0 — покупатель был на странице маркетплейса, а не на вашем сайте, поэтому ClientID Метрики для таких заказов нет в принципе. Это ожидаемое поведение. Решение корректно работает только с заказами, где клиент взаимодействовал с вашим сайтом. Отфильтруйте маркетплейс-канал продаж в МС (Настройки → Фильтры по каналам), чтобы исключить их из расчёта окупаемости.

Маржа меньше ожидаемой или «нет данных» у части заказов

Заказы, у которых себестоимость определить не удалось, не входят в маржу и прибыль (в выручке они остаются) — поэтому маржа может быть ниже, чем «выручка минус то, что вы ожидали». Плашка «Себестоимость: …» в разделах «Аналитика» и «Источники» показывает, сколько таких заказов. Что сделать в МС, чтобы данные появились (любой пункт):

  1. Проведите отгрузку по заказу — себестоимость возьмётся из неё (самый точный вариант).
  2. Укажите склад в заказе — МойСклад посчитает себестоимость по остаткам этого склада.
  3. Проведите приёмки с закупочными ценами — появится оценка по отчёту остатков (средняя по всем складам или по складу, выбранному в Настройках → «Себестоимость»).
  4. Заполните «Закупочную цену» в карточке товара — она используется как последняя оценка, если товара нет на остатках.

Решение ничего из этого не делает за вас: склад, отгрузки и цены в вашем МойСклад мы не меняем (см. 2.1). Цепочка источников — в разделе 6.1.

Почему количество товара в Метрике целое, а у меня весовой товар?

CDP API Яндекс.Метрики принимает только целые количества товара. Дробные значения (килограммы, литры, метры) при выгрузке округляются до ближайшего целого, минимум — 1. Это ограничение Яндекса, а не ошибка передачи: суммы заказа передаются точно, округляется только поле «количество». Точные дробные количества всегда остаются в заказе МойСклад и в аналитике виджета — она считает напрямую из данных МС, без округления.

Почему у части заказов «Источник не определён»?

Источник заказа определяется по визиту на сайте: Метрика связывает заказ с визитом через purchase_id в e-commerce-разметке. Заказы, созданные вручную или по телефону, визита на сайте не имеют — для них «Источник не определён» это нормально, а не ошибка. Если же источник не определяется у заказов с сайта — проверьте, что сайт передаёт purchase_id, совпадающий с номером заказа из МойСклад (подробно — в разделе 7.8), или настройте «Формат на сайте» в разделе «Настройки» → «Сопоставление заказов».

Хочу отключить решение

  1. Сначала — откат записей, если он нужен. Виджет → Настройки → Аккаунт → «Изменения решения в МойСклад» → «Отменить изменения…». Решение покажет, что именно вернёт (свои дополнительные поля; исторические записи склада, если они были), и вернёт прежние значения. После удаления приложения доступа к вашему МС у нас уже не будет, и откат станет невозможен.
  2. Остановить передачу в Метрику, не удаляя приложение: «Настройки» → раскройте карточку Яндекс-аккаунта → удалите подключение Метрики (или отключите Промостраницы внутри блока «Расходы рекламы»). Webhook-и в МС остановятся автоматически.
  3. Удалить приложение — в интерфейсе МойСклад (Приложения → Метрика+ CDP → Удалить). Дополнительные поля решения в МС при этом не удаляются — уберите их вручную, если они не нужны. Данные в нашей базе удаляются по политике хранения; удалить их сразу можно в «Опасной зоне» раздела «Аккаунт».

10. Тарифы и оплата

Решение предоставляется по подписке через биллинг МойСклад. После 7-дневного пробного периода оплата производится ежемесячно. Скидки за длительные периоды — на странице решения в каталоге МойСклад.

ТарифЦена/месСчётчиковЧто главное
Старт2 990 ₽1Обогащение МС-карточек в реальном времени + 5 целей + мультивалютность (RU/KZ/AE/BY/UZ) + окупаемость рекламы (выручка ÷ расход) + детализация источников + история 90 дней.
Бизнес5 990 ₽до 3Полная аналитика + окупаемость с учётом маржи (прибыль на рубль рекламы) + кастомные B2B-цели + Аудитории ретаргетинга + Промостраницы + история 365 дней.
Премиум24 990 ₽до 10API на чтение + кастомные доработки (через support@etokruto.ru) + история 720 дней (2 года) + приоритетная Email-поддержка. Для холдингов.

Подробное описание и оплата — на странице решения в каталоге МойСклад.

11. Поддержка

Время ответа на запросы: до 48 часов в рабочие дни (для тарифов «Старт» и «Бизнес»), до 24 часов («Премиум»).