Как поддерживать план трекинга, когда события меняются

Команда добавила рассрочку. Имя события и типы параметров сохранились, а отчёт начал считать покупкой другое действие. Как описать и проверить такое изменение до выпуска?

6 минут чтенияОбновлено 6 сентября 2026

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

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

Схема может остаться прежней, хотя событие уже означает другое

В старом сценарии приложение отправляет purchase_completed, когда сервер подтверждает оплату. В новом сценарии рассрочки разработчик использует то же событие после одобрения заявки. Деньги в этот момент ещё могут не поступить, а заказ позже может быть отменён.

Обе реализации передают order_id, amount иpayment_method с нужными типами. Проверка структуры пройдёт. Но отчёт, который считает по этому событию оплаченные заказы, начнёт складывать покупки и одобренные заявки.

Что записано в планеКакой вопрос остаётся
Событие означает успешную покупку.Что считается успехом: одобрение заявки, списание денег или подтверждение заказа?
order_id обязателен и имеет тип string.Может ли один заказ отправить событие повторно после повторного открытия экрана?
amount имеет тип number.Это сумма заказа, первого взноса или уже списанных денег? В каких единицах?
payment_method принимает значение installment.Должна ли рассрочка входить в ту же метрику и в тот же момент, что оплата картой?
Имена и типы позволяют проверить структуру. Условия отправки позволяют проверить смысл.

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

Описание события должно позволять воспроизвести его отправку

Для нашего примера команда выбирает такое правило: покупка завершена, когда сервер подтвердил полную оплату заказа. Одобрение рассрочки получает отдельное событие. Это решение для учебного сценария; в другом продукте границу покупки нужно согласовать отдельно.

JSON
{
  "event": "purchase_completed",
  "trigger": "Сервер подтвердил полную оплату заказа",
  "must_not_fire": [
    "Заявка на рассрочку одобрена, но заказ не оплачен",
    "Пользователь повторно открыл экран результата"
  ],
  "deduplication_key": "order_id",
  "parameters": {
    "order_id": "Обязательная строка; ID заказа на сервере",
    "amount": "Обязательное целое; полная сумма заказа в копейках",
    "payment_method": "Обязательная строка: card или installment"
  }
}
Это пример содержания записи в плане, а не формат импорта в Tarn. Здесь предполагается одна валюта и одна полная оплата на заказ.

Рядом с записью нужны владелец решения, затронутые отчёты и версии приложения, для которых действует правило. Версию описания и версию приложения лучше хранить отдельно: один документ может применяться к нескольким сборкам.

Фраза о запрете повторной отправки задаёт требование к приложению. Ключ устранения повторов нужен и в аналитике: он позволяет не посчитать один заказ дважды, если повтор всё же появился. Это две отдельные проверки, и одна не отменяет другую.

Старое и новое поведение могут действовать одновременно

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

Поэтому изменение принимают вместе с правилами перехода. В нашем примере возможны два разных решения.

Что меняетсяКак сохранить сопоставимость
Момент покупки остаётся прежним; добавляется ещё один способ оплаты.Сохраняем имя события. Указываем, в каких версиях допустимо новое значение payment_method, и проверяем оба сценария.
Команда хочет считать покупкой уже одобрение заявки.Это новое определение метрики. Разделяем события или явно версионируем смысл; фиксируем дату перехода в отчёте. Простое переименование не делает историю сопоставимой.

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

Приёмка проверяет действие, повторную отправку и связь с заказом

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

  1. Заказ оплачен картой. Событие приходит после подтверждения сервера; его order_id совпадает с заказом, а сумма соответствует согласованному определению.
  2. Рассрочка одобрена, но оплаты ещё нет. Событие покупки не приходит. При последующей полной оплате оно появляется.
  3. Экран результата открыт повторно. Приложение не создаёт новую покупку с тем же order_id.
  4. Сеть пропала перед отправкой. После восстановления соединения проверяют доставку события и повторные записи. Ожидаемое поведение зависит от используемого SDK.

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

Здесь также проявляется предел автоматической проверки схемы. Она может найти отсутствующий order_id или неверный тип суммы. Чтобы обнаружить отправку до оплаты, нужно сопоставление с состоянием заказа либо воспроизведение сценария. Одного каталога параметров для такого вывода недостаточно.

Таблица подходит, пока команда успевает поддерживать договорённости

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

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

Отдельный сервис не устранит разногласие о том, что считать покупкой. Но после согласования он может избавить команду от повторной ручной сверки. Эти задачи стоит разделять и при выборе инструмента, и при оценке результата внедрения.

Первую проверку стоит провести на событии из ближайшего релиза

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

Если ответы различаются, вы нашли проблему до выпуска. Если совпадают, проверьте сценарии на устройстве и сохраните результат рядом с версией описания. После релиза сравните ожидание с поступившими событиями. Для AppMetrica этот шаг разобран в отдельной инструкции.

Кто это пишет

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

Tarn хранит план трекинга и каждый час сравнивает с ним события из вашей аналитики. Если возникает расхождение, разбор показывает, что изменилось, когда и в каком срезе, и помогает проверить возможные причины. Открыть демо можно без регистрации.

Открыть демоНаписать нам