Pull to refresh

Как я разрабатываю свой analytics-фреймворк для Telegram-каналов

Привет, Хабр! Многие из нас используют Telegram не только для общения, но и как серьезный канал для маркетинга, продаж и взаимодействия с аудиторией. Компании вкладывают ресурсы в привлечение подписчиков извне – через рекламу, контент-маркетинг, SMM. Но возникает проблема: как достоверно измерить эффективность этих вложений? Стандартные инструменты Telegram и веб-аналитики дают очень ограниченное представление об источниках внешнего трафика. Я столкнулся с этим и решил создать свой инструмент - Tggo.me. Хочу поделиться опытом и техническими решениями.

Проблема и существующие подходы

Основная сложность – Telegram не передает информацию о внешнем реферере при переходе в приложение. Попытки решить это стандартными методами имеют недостатки :

  • Внутренняя статистика Telegram: Непригодна для анализа внешних кампаний.

  • Сторонние сервисы: Фокусируются на внутренней активности, а не на источниках привлечения.

  • URL Shorteners: Скрывают конечный t.me адрес, снижая доверие, и дают базовую веб-аналитику.

  • Сайты-прокладки с редиректом: Требуют разработки, хостинга, поддержки, и не всегда удобны.

Мне эти варианты показались не удобными и не подходящими для детального анализа рекламных компаний.

Мой подход

Я создал промежуточные целевые страницы на домене tggo.me. Ссылка вида tggo.me/username ведет на страницу, которая стилистически и структурно напоминает публичную страницу канала/профиля на t.me, но с важными доработками.

Ключевой элемент – JavaScript-трекер, который подключается на этой странице.

Как работает трекинг:

  1. Пользователь переходит по ссылке:

    tggo.me/mychannel?utm_source=habr&utm_campaign=article

  2. Загружается страница канала/профиля на tggo.me.

  3. Асинхронно загружается и выполняется JS-трекер.

  4. Идентификация пользователя: Трекер проверяет наличие first-party cookies:

    • visitor_id (хранится 2 года): Позволяет узнать, новый это пользователь или вернувшийся.

    • session_id (хранится до закрытия браузера): Определяет текущую сессию пользователя.

    • Если cookies нет, они генерируются и устанавливаются.

  5. Сбор данных: Трекер собирает информацию:

    • URL страницы, включая все GET-параметры (UTM-метки, utm_referrer и т.д.).

    • Referrer (если передан браузером).

    • User-Agent (тип браузера, ОС, устройство).

    • IP-адрес (для GeoIP).

    • Временные метки.

    • Уникальные ID (visitor, session).

  6. Отправка на бэкенд: Собранные данные отправляются асинхронным AJAX-запросом на бэкенд (PHP).

  7. Бэкенд-обработка: PHP-скрипт парсит полученные данные, валидирует их и записывает "сырой" лог визита в базу данных (MySQL).

  8. Взаимодействие пользователя: Трекер также отслеживает взаимодействие пользователя со страницей (клики по ссылкам, время ухода).

  9. Переход в Telegram: На страницах есть кнопка и ссылки для перехода непосредственно в Telegram (tg://...). При клике на нее пользователь покидает страницу и открывает приложение Telegram. Этот клик также фиксируется.

Но у трекинга есть свои ограничения: Стандартные для cookie-based подхода. Открытие в режиме инкогнито, в другом браузере или после очистки cookies приведет к созданию нового visitor_id. Cross-device трекинг не реализуем этим методом.

Обработка данных и GeoIP

Собранные "сырые" логи визитов хранятся в MySQL. На данный момент сложной системы пре-агрегации нет (она в разработке), отчеты строятся "на лету" по запросу из бота, что пока приемлемо при текущих объемах.

Для определения географии по IP используется каскадный подход: сначала проверяется наличие IP в локальном кэше (MySQL), если нет – обращаемся к нескольким внешним GeoIP-сервисам. Если результат подтверждается несколькими источниками, он кэшируется локально для будущих запросов.

Cтраницы каналов

Страницы tggo.me/username и страницы отдельных постов tggo.me/username/post_id строятся на основе данных из Telegram.

  • При первом заходе PHP-скрипт проверяет наличие данных в локальной БД.

  • Если данных нет, скрипт обращается к Telegram API (используем библиотеку для PHP) для получения информации о канале (описание, аватар) или посте (текст, медиа-метаданные, реакции, комментарии).

  • Полученные данные сохраняются в MySQL базе.

  • Формируется HTML-страница с заполненными meta-тегами (title, description) для SEO.

  • Данные периодически обновляются фоновым процессом или при последующих визитах для поддержания актуальности (с некоторой задержкой).

Индексация происходит стандартно – страницы открыты для краулеров, и их видимость в поисковиках зависит от количества внешних ссылок на них.

Интеграция с GA и Я.Метрикой

На страницах tggo.me могут подключатся скрипты Google Analytics и/или Яндекс.Метрики, если пользователь указал их ID в настройках через бота. При клике на кнопку или ссылку ведущую в Telegram, происходит отправка события viewInTelegram. Для отправки используются стандартные методы: gtag('event', 'viewInTelegram', { ... }) для GA4 и ym(XXXXXX, 'reachGoal', 'viewInTelegram') для Метрики. Возможности кастомизации этих событий не предусмотрено.

Роль Telegram-бота и права доступа

Для управления сбором статистики, а целом всеми данными на страницах канала предусмотрен бот @tggomebot. Бот нужен:

  1. Верификации владения каналом: При добавлении бота в админы с правом на управление ссылками владелец может "подключить" канал в интерфейсе бота. Это подтверждает его права на управление настройками статистики для данного канала.

  2. Предоставления интерфейса для отчетов: Пользователи взаимодействуют с ботом для просмотра агрегированной статистики.

  3. Управления настройками: Владелец через бот может менять настройки (например, подключать счетчики GA/Metrica).

При добавлении бота в канал, он получает список админов через Telegram API. Любой из этих админов, запустив бота, сможет просматривать статистику, но менять настройки сможет только тот, кто изначально подключил канал через бота (владелец). Это позволяет разделить роли владельца и маркетолога/аналитика.

Планы на будущее

Сервис сейчас активно развивается и находится в бесплатной бете. Идет накапливание данных об индексируемых каналах и постах, и в планах – запуск собственной поисковой системы по Telegram-каналам. Уже сейчас в базе несколько тысяч каналов. Также планируем выход на международный рынок (пока основная сложность – прием платежей).

И неизбежно введение платных тарифов (ориентировочно летом 2025), которые откроют доступ к продвинутым отчетам и настройкам. Базовый функционал и основные метрики останутся доступными бесплатно.


Я постарался создать инструмент, который решает конкретную боль маркетологов и владельцев Telegram-каналов – непонимание эффективности внешнего трафика. Такой подход показался мне оптимальным решением с точки зрения сбора данных и пользовательского опыта.

Буду рад, если вы попробуете Tggo.me и поделитесь обратной связью, особенно с технической точки зрения. Возможно, вы увидите узкие места или у вас будут идеи по развитию?

Спасибо за внимание! Готов ответить на вопросы в комментариях.

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.