Fragment Radar: мониторинг Telegram Collectibles

Кейс · Fragment · Telegram Collectibles · Laravel · 2026

В микросервис GRAM добавлен Fragment Radar — read-only контур наблюдения за Telegram usernames и анонимными номерами +888. Он собирает публичные данные Fragment, классифицирует активы, сохраняет историю аукционов и помогает быстро находить интересные лоты по прозрачному Radar Score.

2 630активов в первичной базе
1 500Telegram usernames
1 130анонимных номеров
7 событийжизненного цикла лота

Коротко: Fragment Radar превращает просмотр маркетплейса в воспроизводимый исследовательский процесс. Вместо ручного перебора страниц — единая база, фильтры, история изменений, признаки паттернов и объяснимый рейтинг от 0 до 100.

Зачем понадобился отдельный Radar

На Fragment одновременно появляются новые usernames и номера, меняются цены, ставки и сроки аукционов. Интерфейс маркетплейса хорошо подходит для отдельной покупки, но не отвечает на исследовательские вопросы: какие паттерны встречаются чаще, как меняется цена, что появилось за сутки и какие аукционы скоро закончатся.

Поэтому в GRAM появился отдельный аналитический слой. Он регулярно читает открытые страницы, нормализует найденные лоты и хранит их изменения во времени. Это продолжение уже реализованного blockchain-контура: кошельки и платежные операции GRAM описаны в проекте P2P-платформы, а выпуск NFT — в кейсе TON NFT.

Главная граница: только чтение

Radar не авторизуется в Fragment, не подключает Telegram-аккаунт и не получает доступ к кошельку. В провайдере нет методов для ставки, покупки или перевода актива. Он выполняет только публичные запросы, которые нужны для поиска и чтения карточки лота.

Что модуль делает

  • находит usernames и номера
  • обновляет состояние аукционов
  • фиксирует цену, ставки и дедлайн
  • сохраняет snapshots и события
  • рассчитывает структурный score

Чего модуль не делает

  • не выставляет ставки
  • не покупает активы
  • не подписывает TON-транзакции
  • не хранит сессии пользователя
  • не обещает доходность

Это разделение важно и с точки зрения безопасности, и для качества данных: аналитика не должна незаметно превращаться в торгового бота.

Как устроен сбор публичных данных

Fragment использует короткоживущий hash и cookie сессии. Поэтому провайдер сначала открывает публичную страницу, извлекает актуальные параметры, а затем обращается к тому же JSON endpoint поиска, который использует web-интерфейс. Детальная карточка загружается отдельно и разбирается HTML-парсером.

  1. Discovery

    Поисковые запросы находят usernames и номера. Каждый результат получает стабильный тип, значение, slug и публичный URL.

    public search · normalize
  2. Classification

    Отдельные классификаторы вычисляют признаки: длину, цифры, повторы, последовательности, симметрию и словарные совпадения.

    features · tags · categories
  3. Refresh

    Фоновые задания обновляют цену, следующий шаг ставки, число ставок, статус и время завершения аукциона.

    queue · staggered jobs
  4. History

    Новый snapshot создаётся только при реальном изменении состояния. Сравнение порождает одноразовые доменные события.

    snapshots · events
  5. Research

    Админка объединяет фильтры, сортировку, карточку актива, историю и расшифровку score.

    filters · score breakdown

Первичный набор: 2 630 активов

На момент фиксации кейса первичное сканирование собрало 2 630 уникальных активов: 1 500 usernames и 1 130 номеров. Среди них зафиксированы лоты в состояниях auction, resale, sale и sold. Этот набор уже позволяет проверять классификацию и интерфейс, но ещё не является достаточной историей для рыночных выводов.

Панель Fragment Radar в административной части GRAM
Панель Fragment Radar: сводные показатели, поиск, фильтры по типу, статусу, цене, score и времени завершения.

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

Два классификатора для разных типов активов

Username и номер нельзя оценивать одной формулой. Для короткого слова важны длина, состав символов и словарное совпадение. Для номера — повторяющиеся цифры, последовательности, зеркальность, палиндром и круглое окончание.

Telegram usernames

  • длина и число цифр
  • буквенный, цифровой или смешанный состав
  • наличие подчёркивания
  • повторы и палиндром
  • опциональное совпадение со словарём

Anonymous numbers

  • количество разных цифр
  • максимальная серия повторов
  • возрастающие и убывающие последовательности
  • зеркальность и палиндром
  • одинаковое или круглое окончание

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

Radar Score: рейтинг, который можно объяснить

Каждый актив получает score от 0 до 100. Для номеров взвешиваются редкость цифр, повторы, последовательности, симметрия и длина. Для usernames — длина, словарное совпадение, состав символов, количество цифр и заметный паттерн.

В базе сохраняется не только итог, но и breakdown: значение каждого фактора, его вес и вклад. Формула имеет версию, поэтому после корректировки весов можно пересчитать весь набор командой fragment:score:recalculate и сохранить понятную методологию.

Важно: Radar Score — не оценка будущей цены и не финансовая рекомендация. Это эвристический показатель структурной выразительности, предназначенный для сортировки и первичного отбора.

Snapshots и события вместо перезаписи строки

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

Жизненный цикл

  • NEW — актив впервые найден
  • SOLD — зафиксирована продажа
  • EXPIRED — аукцион завершён без продажи
  • REMOVED — лот исчез из выдачи

Динамика аукциона

  • PRICE_CHANGED — изменилась цена
  • BID_CHANGED — появилась новая ставка
  • ENDING_SOON — дедлайн вошёл в заданное окно

Одноразовые события защищены от повторного создания. Это делает будущие уведомления и отчёты предсказуемыми: один переход состояния соответствует одному событию.

Фильтры и карточка актива в админке

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

Карточка актива показывает ссылку на Fragment, цену в TON, приблизительный эквивалент в USD, следующий шаг, историю snapshots и событий, признаки классификатора и полный breakdown Radar Score. Пересчёт TON/USD выполняется редко и используется только для ориентировочного отображения.

Публичный список аукционов Telegram usernames на Fragment
Публичная выдача Fragment остаётся первоисточником; Radar добавляет к ней историю, классификацию и исследовательские фильтры.

Очереди, лимиты и восстановление после ошибок

Discovery и refresh работают через Redis Queue. Обновления распределяются во времени, чтобы несколько заданий не создавали всплеск запросов. Между обращениями выдерживается минимальный интервал, а при ответе 429 включается cooldown.

Каждый запрос провайдера попадает в технический журнал: HTTP-статус, задержка, количество элементов, признак rate limit или блокировки и текст ошибки. Благодаря этому можно отличить изменение разметки Fragment от сетевого сбоя и от срабатывания ограничений.

Планировщик поддерживает отдельные интервалы: discovery — обычно раз в 15 минут, refresh аукционов — раз в 5 минут, обновление ориентировочного курса TON/USD — раз в 3 часа. Задания защищены от наложения и выполняются одним scheduler-узлом.

От накопления данных к аналитике

Команда fragment:dataset:report формирует воспроизводимый отчёт: число уникальных активов, новые и завершённые лоты, продажи, диапазон наблюдаемых цен, изменение цены, частоту паттернов, среднюю продолжительность аукциона и распределение score.

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

Результат

Fragment Radar добавил в GRAM самостоятельный read-only модуль исследования Telegram Collectibles. Публичные данные проходят путь от discovery до нормализации, классификации, версионированного score, snapshots и событий, а затем становятся доступными в удобной административной панели.

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

Открыть Fragment →

Laravel · PHP · Fragment · Telegram Collectibles · TON · Redis Queue · Docker · Data Pipeline