⎯ TL;DR
  • SpamBot Telegram — не один bot, а несколько layer'ов защиты. Часть публично документирована, часть выведена через observation.
  • 6 главных сигналов: session.entropy, swipe.velocity, pause.entropy, typing.cadence, fingerprint.mask, + 6-й (proprietary).
  • Методика наблюдения: ~1 800 ban events в клиентской базе, correlation по features, A/B тесты на test-аккаунтах.
  • Ни один сигнал по отдельности не даёт бан — нужно 2-4 совпадения. Это осложняет detection bots, но и повышает важность «закрыть всё».
  • Если моделируешь <3 сигналов — в зоне риска. 4-5 — относительно безопасно. Все 6 — практически invisible.

Telegram не публикует механику своего anti-spam. Это разумно: публикация = roadmap для обхода. Но для нас, как вендора anti-ban решения, понимание механики критично. Невозможно эффективно обходить фильтр, который ты не понимаешь.

Эта статья — дистиллят 3 лет наблюдений. Не от Telegram-инженеров (их у нас нет), а от статистического анализа реальных ban events в нашей клиентской базе + контролируемые A/B тесты на test-аккаунтах.

01 · Methodology

Как мы выводим сигналы

Базовая methodology:

  1. Collect ban events — каждый раз, когда у клиента банится аккаунт, мы логируем полный контекст: сколько сообщений отправил, за какой период, с какими device fingerprints, через какие proxy, в какие группы.
  2. Correlation analysis — ищем features, которые коррелируют с бан-событиями. Например, «аккаунты с fingerprint из top-3 most common get banned 2.3× чаще, чем с rare fingerprints».
  3. A/B testing на test-аккаунтах — берём 50-100 тестовых аккаунтов, применяем разные стратегии, ждём 30-60 дней, сравниваем ban rate. Воспроизводимо.
  4. Elimination — убираем по одному фактору, смотрим, какой даёт падение ban rate. Isolated causality.

Результат — 6 сигналов ниже. Уверенность в каждом разная: первые 4 — высокая (воспроизводили многократно), 5-й — средняя, 6-й — гипотетический.

02 · Signal #1

session.entropy

Распределение длительностей сессий аккаунта. Живой юзер: логнормальное. Бот: обычно uniform или фиксированные.

Как детектит Telegram: у них есть история сессий на server-side. Посчитать entropy distribution — дело не вычислительно дорогое, можно делать для millions аккаунтов в batch.

# Наш probe: контролируемый аккаунт с известным session pattern # Вариант А: log-normal сессии sessions_A = [32, 450, 1200, 80, 3600, 120, 8, 900] # log-normal-ish # Вариант Б: uniform sessions_B = [300, 310, 280, 320, 295, 305, 290, 315] # near-uniform # Test: запускаем outreach после 2 недель такого паттерна # Результат: вариант Б триггерит PEER_FLOOD в 3.1× чаще при равной отправке
03 · Signal #2

swipe.velocity

Скорость прокрутки чат-листа + траектория. У живых — bezier с micro-jitter. У ботов — прямая.

Как детектит: клиенты Telegram (TDesktop, iOS/Android apps) отправляют telemetry scroll-событий. Это не явное API, но встроенная телеметрия в app's.

Мы не можем подделать scroll через self-written client (TDLib не scroll'ит). Но можем использовать official clients с automation (через адресное пространство memory + synthetic input events). Это сложно и фрагмитировано, используется только в premium anti-detect setups.

04 · Signal #3

pause.entropy(μ, σ)

Интервалы между действиями. Паузы зависят от контекста (читал длинное сообщение → долгая пауза перед ответом; увидел короткое → быстрая реакция).

Ключевое: у ботов паузы не коррелируют с контекстом. Scheduler просто ждёт фиксированный интервал. У живых — варьируется.

# Human pattern msg_len = len(incoming.text) pause = 3 + msg_len * 0.08 # ~чтение + обдумывание pause += np.random.normal(0, 2) # random jitter # Bot pattern (typical) pause = np.random.uniform(2, 5) # не зависит от сообщения

Проверка: если твой bot отвечает одинаковой паузой на «ок» и на «расскажите подробнее про Feature X, Y, Z» — это сигнал.

05 · Signal #4

typing.cadence

В Telegram есть «typing indicator» — показывает «печатает...» пока юзер печатает. API позволяет послать sendChatAction(typing) — и делать это правильно важно.

Живой юзер:

Бот обычно: либо не использует typing indicator вообще, либо посылает его на фиксированную длительность перед отправкой. Оба варианта — bot signatures.

06 · Signal #5

fingerprint.mask

Device fingerprint собирается при authentication и attached к session. Для MTProto: device_model, app_version, system_version, lang_code.

Анализ: Telegram может групировать session'ы по fingerprint-cluster'ам. Если 50 аккаунтов имеют identical fingerprint (что редкий случай для реальной популяции 950M users), это signal.

# Реалистичное распределение из 950M users fingerprint_distribution = { "iPhone 14/15 + iOS 16-17 + en": 0.12, "Samsung Galaxy S23/S24 + Android 13-14 + en": 0.08, "Xiaomi Redmi + Android 13 + zh": 0.05, # ... 200+ категорий } # Farm detection: если в твоей ферме >10% аккаунтов # имеют SAME fingerprint, тогда как в real-world # он составляет <1% — red flag
07 · Signal #6

Propritetary signal (скрыт)

Наблюдение: есть баны, которые происходят при, казалось бы, правильных 5 первых сигналах. Значит, есть 6-й, который мы не идентифицировали.

Гипотезы (не подтверждённые):

Мы не знаем точно. В TG:ON есть mitigation strategies, которые эмпирически снижают bans, но точная механика — spec'ы.

«Важно не знать все 6 сигналов идеально. Важно закрыть первые 5 без exception — тогда 6-й срабатывает в 3-5% случаев, не в 50%.»
08 · Implementation

Как применять

Реальный чек-лист по сигналам:

  1. Session entropy: log-normal distribution session durations (μ=10min, σ=0.9)
  2. Swipe velocity: если используешь automation (TDLib), не trigger'и bot-like events. Если используешь browser automation, моделируй bezier curves
  3. Pause entropy: context-aware delays, зависящие от content length
  4. Typing cadence: send typing_indicator + типировать со скоростью 4-8 CPS (chars per second)
  5. Fingerprint mask: sample из real-world distribution, stable per-account
  6. 6th signal: базовая гигиена (residential IP, normal warmup) обычно достаточна
⎯ скачать

TG:ON для macOS · Windows · Linux

Desktop-приложение, 160 MB. Работает локально, твои ключи остаются у тебя. 3 дня триала без карты.

Скачать бесплатно
⎯ анти-спам на уровне

5 сигналов моделируется.
6-й — мягкая мitigation.

В TG:ON весь стек anti-bot signals работает по умолчанию. 3 дня триала — наблюдай bouncetail на своих аккаунтах.

Начать триал