Как Telegram считает Views: разбор MTProto и исходников клиента

Рекламодатели платят за каждый просмотр в Telegram Ads, но что технически считается просмотром? Разбираем MTProto, TDLib и исходники Telegram Desktop, чтобы понять, когда объявление действительно засчитывается как View и что остаётся за закрытой серверной логикой.

Как Telegram считает Views: разбор MTProto и исходников клиента

Telegram Ads — один из самых быстрорастущих рекламных каналов, где рекламодатель платит за каждый просмотр. Но что должно технически произойти, чтобы в статистике появился ещё один View? Я решил разобраться в этом вопросе, изучив MTProto, TDLib и исходники Telegram Desktop. Оказалось, что получение объявления от сервера ещё не является просмотром: клиент отдельно регистрирует событие, когда выполняется условие видимости. Причём весь текст должен оказаться на экране, а CTA-кнопка — необязательно. Дальше начинается самое интересное: дедупликация, антифрод, frequency и точная связь этого события с биллингом уже находятся за закрытой серверной границей Telegram. Я попробовал восстановить весь путь и чётко отделить то, что можно доказать по коду, от того, чего мы на самом деле не знаем.

Как Telegram определяет просмотр: условие видимости в коде клиента

В Telegram Ads рекламодатель платит за Views, но что именно считается просмотром? Ответ кроется в клиентской логике: когда пользователь листает ленту и видит рекламное объявление, клиент отправляет на сервер специальное событие. Однако это происходит не автоматически при получении данных, а только после того, как выполняется условие видимости. В исходниках Telegram Desktop (я использовал версию 4.14) и TDLib можно найти функцию, которая проверяет, находится ли объявление в видимой области экрана. Судя по коду, условие следующее: весь текст объявления должен быть полностью видимым, то есть не обрезанным верхней или нижней границей окна. При этом CTA-кнопка (кнопка призыва к действию) не обязана быть видимой — она может находиться за пределами экрана, и просмотр всё равно засчитается.

Это важное уточнение, потому что многие рекламодатели ошибочно полагают, что для засчитывания просмотра нужно, чтобы пользователь увидел кнопку или даже нажал на неё. На самом деле достаточно, чтобы текст объявления полностью поместился в видимой области. Проверить это можно, открыв исходники Telegram Desktop на GitHub и найдя функцию, которая обрабатывает событие видимости рекламного блока. В TDLib (Telegram Database Library) аналогичная логика реализована в модуле, отвечающем за рекламные объявления.

Предыстория и контекст: как устроен Telegram Ads и почему это важно

Telegram Ads был запущен в 2021 году и быстро стал популярным среди рекламодателей благодаря низкой стоимости за просмотр и высокой вовлечённости аудитории. В отличие от традиционных рекламных сетей, где показ и просмотр часто путаются, Telegram ввёл чёткое различие: показ (impression) — это когда объявление было отправлено на устройство, а просмотр (view) — когда пользователь реально увидел его на экране. Это различие критически важно для рекламодателей, так как они платят только за просмотры, а не за показы.

Однако до сих пор оставалось неясным, какие именно технические условия должны выполняться, чтобы просмотр был засчитан. Мой анализ исходников показывает, что Telegram подошёл к этому вопросу довольно строго: недостаточно просто получить объявление, нужно, чтобы оно было видимо. Это снижает количество «пустых» просмотров, которые могли бы возникнуть из-за быстрой прокрутки ленты. Но при этом остаётся вопрос: как сервер обрабатывает эти события, как борется с накруткой и как учитывает частоту показов? Эти детали скрыты за закрытой серверной логикой, и мы можем только строить предположения.

Как это работает: технические детали регистрации просмотра

Когда пользователь открывает Telegram и начинает просматривать ленту, клиент получает от сервера пакет данных, содержащий рекламное объявление. Это происходит в рамках обычного обмена сообщениями по протоколу MTProto. Однако само по себе получение данных не означает, что объявление было показано. Клиент должен сначала отрисовать объявление в интерфейсе, а затем проверить его видимость. В Telegram Desktop это делается с помощью специального механизма, который отслеживает положение элементов на экране. Если объявление полностью попадает в видимую область, клиент отправляет на сервер запрос с типом view (просмотр). Этот запрос содержит идентификатор объявления и, возможно, другие метаданные, такие как время показа.

В TDLib, который используется для создания сторонних клиентов, логика аналогична: существует метод, который вызывается при изменении видимости рекламного блока. При этом важно отметить, что отправка запроса происходит не мгновенно, а с некоторой задержкой, чтобы избежать ложных срабатываний при быстрой прокрутке. Эта задержка, вероятно, составляет несколько сотен миллисекунд, но точное значение не раскрывается. После отправки события сервер обрабатывает его и, если всё в порядке, увеличивает счётчик просмотров для данного объявления.

Кого затронет и как: рекламодатели, разработчики и пользователи

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

Для пользователей это не меняет ничего в повседневном использовании, но стоит понимать, что их действия (прокрутка, чтение) напрямую влияют на то, как рекламодатели оценивают эффективность своих кампаний. В контексте СНГ, где Telegram особенно популярен, рекламодатели активно используют Telegram Ads, поэтому понимание механики просмотров может помочь им оптимизировать свои кампании.

Что будет дальше: возможные изменения и прогнозы

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

Итог

Таким образом, просмотр в Telegram Ads — это не просто факт получения объявления, а строгое событие, которое регистрируется только при полной видимости текста объявления на экране. Это подтверждается анализом исходников клиента, но серверная логика остаётся загадкой. Для рекламодателей это означает, что нужно учитывать особенности видимости при создании объявлений, чтобы максимизировать количество засчитанных просмотров. Следите за обновлениями Telegram, чтобы быть в курсе изменений в правилах учёта просмотров.