Как поддерживать план трекинга, когда события меняются
Команда добавила рассрочку. Имя события и типы параметров сохранились, а отчёт начал считать покупкой другое действие. Как описать и проверить такое изменение до выпуска?
6 минут чтенияОбновлено 6 сентября 2026
План трекинга можно вести в таблице. Проблемы начинаются, когда по записи в ней нельзя решить, правильно ли приложение отправляет событие. Имя, типы параметров и фамилия владельца ещё не описывают, какое действие произошло и при каких условиях его нужно записать.
Разберём учебный пример: команда добавляет оплату в рассрочку. Событие покупки сохраняет прежнее имя, но момент его отправки меняется. На этом примере видно, чего не хватает в плане, как принять изменение и когда ручное ведение документа начинает мешать работе.
Схема может остаться прежней, хотя событие уже означает другое
В старом сценарии приложение отправляет purchase_completed, когда сервер подтверждает оплату. В новом сценарии рассрочки разработчик использует то же событие после одобрения заявки. Деньги в этот момент ещё могут не поступить, а заказ позже может быть отменён.
Обе реализации передают order_id, amount иpayment_method с нужными типами. Проверка структуры пройдёт. Но отчёт, который считает по этому событию оплаченные заказы, начнёт складывать покупки и одобренные заявки.
| Что записано в плане | Какой вопрос остаётся |
|---|---|
| Событие означает успешную покупку. | Что считается успехом: одобрение заявки, списание денег или подтверждение заказа? |
| order_id обязателен и имеет тип string. | Может ли один заказ отправить событие повторно после повторного открытия экрана? |
| amount имеет тип number. | Это сумма заказа, первого взноса или уже списанных денег? В каких единицах? |
| payment_method принимает значение installment. | Должна ли рассрочка входить в ту же метрику и в тот же момент, что оплата картой? |
Исправлять нужно описание действия и реализацию. Простое добавление нового значения в список способов оплаты эту проблему не решит.
Описание события должно позволять воспроизвести его отправку
Для нашего примера команда выбирает такое правило: покупка завершена, когда сервер подтвердил полную оплату заказа. Одобрение рассрочки получает отдельное событие. Это решение для учебного сценария; в другом продукте границу покупки нужно согласовать отдельно.
{
"event": "purchase_completed",
"trigger": "Сервер подтвердил полную оплату заказа",
"must_not_fire": [
"Заявка на рассрочку одобрена, но заказ не оплачен",
"Пользователь повторно открыл экран результата"
],
"deduplication_key": "order_id",
"parameters": {
"order_id": "Обязательная строка; ID заказа на сервере",
"amount": "Обязательное целое; полная сумма заказа в копейках",
"payment_method": "Обязательная строка: card или installment"
}
}Рядом с записью нужны владелец решения, затронутые отчёты и версии приложения, для которых действует правило. Версию описания и версию приложения лучше хранить отдельно: один документ может применяться к нескольким сборкам.
Фраза о запрете повторной отправки задаёт требование к приложению. Ключ устранения повторов нужен и в аналитике: он позволяет не посчитать один заказ дважды, если повтор всё же появился. Это две отдельные проверки, и одна не отменяет другую.
Старое и новое поведение могут действовать одновременно
После выпуска приложения часть людей продолжает пользоваться старой версией. Если переписать одну строку плана и считать её обязательной для всех, корректные события старой версии станут выглядеть ошибочными. Если принять всё, что приходит, проверка пропустит ошибки новой версии.
Поэтому изменение принимают вместе с правилами перехода. В нашем примере возможны два разных решения.
| Что меняется | Как сохранить сопоставимость |
|---|---|
| Момент покупки остаётся прежним; добавляется ещё один способ оплаты. | Сохраняем имя события. Указываем, в каких версиях допустимо новое значение payment_method, и проверяем оба сценария. |
| Команда хочет считать покупкой уже одобрение заявки. | Это новое определение метрики. Разделяем события или явно версионируем смысл; фиксируем дату перехода в отчёте. Простое переименование не делает историю сопоставимой. |
Само наличие двух имён не позволяет установить, что произошло переименование. Нужно проверить действие, параметры и область применения. Иначе можно объединить события, которые обозначают разные шаги, и получить правдоподобную, но неверную историю покупок.
Приёмка проверяет действие, повторную отправку и связь с заказом
Запись из примера позволяет составить проверку до написания кода. Аналитик согласует её с разработчиком и тестировщиком: каждый понимает, какое наблюдение подтвердит правильную работу.
- Заказ оплачен картой. Событие приходит после подтверждения сервера; его
order_idсовпадает с заказом, а сумма соответствует согласованному определению. - Рассрочка одобрена, но оплаты ещё нет. Событие покупки не приходит. При последующей полной оплате оно появляется.
- Экран результата открыт повторно. Приложение не создаёт новую покупку с тем же
order_id. - Сеть пропала перед отправкой. После восстановления соединения проверяют доставку события и повторные записи. Ожидаемое поведение зависит от используемого SDK.
Проверка на устройстве подтверждает эти сценарии в конкретной сборке. После выпуска нужна проверка потока: какие версии отправляют событие, есть ли повторы по заказу и какая доля оплаченных заказов находится в аналитике. Перед сравнением нужно уравнять состав заказов и учесть задержку доставки событий.
Здесь также проявляется предел автоматической проверки схемы. Она может найти отсутствующий order_id или неверный тип суммы. Чтобы обнаружить отправку до оплаты, нужно сопоставление с состоянием заказа либо воспроизведение сценария. Одного каталога параметров для такого вывода недостаточно.
Таблица подходит, пока команда успевает поддерживать договорённости
Если несколько человек меняют небольшой план, а результаты проверки прикладывают к задачам, таблица может справляться. Её можно выгружать в базу и проверять скриптом. Причиной смены инструмента должно быть конкретное затруднение в работе.
| Что происходит в команде | Что стоит автоматизировать |
|---|---|
| Две команды меняют одно событие и теряют правки друг друга. | Согласование изменений и историю версий. |
| Один и тот же поиск пропавших событий повторяется после каждого релиза. | Сверку плана с потоком по расписанию. |
| Уведомление приходит, но никто не понимает, какие отчёты затронуты. | Связь события с владельцем, метриками и отчётами. |
| Проверки считают ошибки старых версий ошибками нового релиза. | Правила применимости описания по платформам и версиям. |
Отдельный сервис не устранит разногласие о том, что считать покупкой. Но после согласования он может избавить команду от повторной ручной сверки. Эти задачи стоит разделять и при выборе инструмента, и при оценке результата внедрения.
Первую проверку стоит провести на событии из ближайшего релиза
Выберите событие, которое команда сейчас меняет и по которому уже строится отчёт. Допишите условия отправки, исключения и правило устранения повторов. Затем попросите разработчика и аналитика независимо объяснить, в какой момент оно должно прийти.
Если ответы различаются, вы нашли проблему до выпуска. Если совпадают, проверьте сценарии на устройстве и сохраните результат рядом с версией описания. После релиза сравните ожидание с поступившими событиями. Для AppMetrica этот шаг разобран в отдельной инструкции.
Я разрабатываю Tarn и веду этот блог. Пишу о проверке событийных данных: как согласовать разметку, найти расхождение и установить, какие отчёты оно затронуло.
Tarn хранит план трекинга и каждый час сравнивает с ним события из вашей аналитики. Если возникает расхождение, разбор показывает, что изменилось, когда и в каком срезе, и помогает проверить возможные причины. Открыть демо можно без регистрации.