Представьте: ваш чат или маркетплейс атакуют боты. Они регистрируются тысячами, публикуют дублирующиеся объявления, засоряют ленту фишинговыми ссылками. Обычные блэклисты слов не помогают — Unicode-гомоглифы, paste-спам, капчи обходятся. Мы создаём многослойную систему AI-детекции спама: часть классификации выполняется на устройстве без задержек, часть — на сервере с использованием поведенческих и NLP-сигналов. По данным исследования Google о спаме в мобильных приложениях, более 60% фиктивных аккаунтов приходят с эмуляторов. За 5–7 дней вы получаете базовый прототип с автоопределением ботов и текстового спама. Оценим проект бесплатно — просто напишите.
Почему блэклисты не работают
Самый распространённый антипаттерн — фильтрация по списку слов на клиенте. Такой подход легко обойти: «купи» → «к-у-п-и», «кup и», Unicode-гомоглифы. Кроме того, логика на клиенте видна через декомпиляцию. Второй антипаттерн — синхронная отправка каждого сообщения на сервер для классификации. При 50 сообщениях в секунду в активном чате это либо деградирует UX (задержка отправки), либо роняет бэкенд. Наше решение в 10 раз быстрее реагирует на спам и снижает нагрузку на сервер.
Как on-device предфильтр снижает нагрузку на сервер?
Для текстовых полей в форумах и маркетплейсах устанавливаем лёгкую TensorFlow Lite модель (~1.5 МБ). Она отсекает 70–80% очевидного спама без сетевого запроса:
// Android: TFLite inference перед отправкой
class SpamPrefilter(context: Context) {
private val interpreter: Interpreter
private val tokenizer: BertTokenizer
init {
val model = FileUtil.loadMappedFile(context, "spam_lite.tflite")
interpreter = Interpreter(model)
tokenizer = BertTokenizer.createFromAsset(context, "vocab.txt")
}
fun isLikelySpam(text: String): Boolean {
val inputIds = tokenizer.tokenize(text).toIntArray()
val output = Array(1) { FloatArray(2) }
interpreter.run(arrayOf(inputIds), output)
return output[0][1] > 0.85f // spam confidence threshold
}
}
Пограничные случаи (confidence 0.6–0.85) отправляются на серверную модель. Явный спам блокируется немедленно. Это снижает количество API-запросов втрое.
Поведенческие сигналы и текстовая классификация
Эффективная детекция строится на двух уровнях. Первый — поведенческие паттерны: частота действий, интервалы между событиями, device fingerprint, IP/ASN аномалии. Эти сигналы собираются на клиенте и отправляются батчами.
Второй уровень — NLP-классификация текста на базе DistilBERT в ONNX (~265 МБ) на сервере. MobileBERT (~95 МБ) в TFLite — для on-device inference. На практике серверный вариант предпочтительнее: модель обновляется без релиза приложения.
// iOS: отправка сообщения с поведенческими метаданными
struct MessagePayload: Encodable {
let text: String
let userId: String
let sessionDuration: TimeInterval
let messageIndexInSession: Int
let typingDurationMs: Int // <300ms — подозрительно
let pasteDetected: Bool
}
func sendMessage(_ text: String) {
let payload = MessagePayload(
text: text,
userId: currentUser.id,
sessionDuration: sessionTimer.elapsed,
messageIndexInSession: messageCount,
typingDurationMs: typingTracker.duration,
pasteDetected: typingTracker.wasPasted
)
api.postMessage(payload) { result in
switch result {
case .success(let msg): self.appendMessage(msg)
case .failure(let error) where error == .spamDetected:
self.showSpamWarning()
}
}
}
Скорость набора typingDurationMs < 300 при длине сообщения > 50 символов — почти наверняка paste-спам или бот. Этот сигнал работает даже без ML.
Что даёт защита регистрации через Play Integrity и DeviceCheck?
Для флоу создания аккаунта интегрируем Google Play Integrity API (Android) и DeviceCheck (iOS). Оба дают токен, верифицируемый на сервере — он подтверждает, что запрос пришёл с реального устройства, а не с эмулятора или Appium-скрипта. Это не панацея, но поднимает стоимость спам-регистрации для атакующего.
Сравнение подходов к классификации
| Параметр | On-device (TFLite) | Серверная (ONNX) |
|---|---|---|
| Задержка | <5 мс | ~50 мс + сеть |
| Нагрузка на бэкенд | Нет | Высокая (запросы) |
| Обновление модели | Через релиз приложения | Без релиза |
| Процент обработанных запросов | 70–80% | 20–30% (пограничные) |
| Размер модели | 1.5 МБ | 265 МБ |
Процесс внедрения
- Аудит типов спама в вашем приложении: текстовый флуд, фиктивные аккаунты, накрутка, дублирование контента.
- Проектирование сигналов — поведенческие метаданные, которые клиент собирает и передаёт.
- Разработка on-device предфильтра и серверной классификации.
- Настройка порогов confidence: автоблокировка vs очереди human review.
- Мониторинг false positive rate через Grafana/Datadog — первую неделю в теневом режиме.
- Документация, доступы к дашборду, обучение команды и неделя поддержки после запуска.
Подробнее о метриках мониторинга
Мы отслеживаем количество заблокированных сообщений, долю ручных проверок, динамику спам-атак и показатели false positive/negative. Все данные агрегируются в дашборде с алертами при отклонении от нормы.
Что входит в работу
| Компонент | Время внедрения | Нагрузка на клиент | Требуемые данные |
|---|---|---|---|
| Серверная классификация + поведенческие сигналы | 5–7 дней | Низкая (батчи) | История сообщений (опционально) |
| On-device TFLite предфильтр | 3–4 дня | +1.5 МБ в APK | Размеченный датасет (10k+) |
| Play Integrity / DeviceCheck | 2–3 дня | Минимальная | Документация Google/Apple |
| Полная система с дашбордом и feedback loop | 3–5 недель | Средняя | Логи, жалобы пользователей |
Ориентиры по срокам
Базовая серверная классификация с поведенческими сигналами — 5–7 дней. On-device предфильтр на TFLite + Play Integrity / DeviceCheck — ещё 3–4 дня. Полная система с дашбордом модерации и feedback loop для переобучения модели — 3–5 недель. Готовый антиспам SDK интегрируется за несколько дней. Решение окупается за счёт снижения нагрузки на сервер: экономия на инфраструктуре достигает 30–50%, а сокращение расходов на модерацию — до 40%. Опираясь на опыт более 10 внедрений, гарантируем стабильную работу даже при пиковых нагрузках.
Получите консультацию по детекции спама в вашем приложении — просто напишите нам. Закажите аудит безопасности вашего приложения бесплатно — выявим уязвимости и предложим оптимальную архитектуру.







