Как Facebook поймал моего бота за «слишком быструю работу» — и что пришлось сделать, чтобы научить его лениться

Facebook поймал моего бота и написал прямо: "Мы заподозрили автоматизированное поведение в вашем аккаунте." Честно, без обиняков. Что ж, они были правы. Бот заходил в группу, мгновенно публиковал объявление и уходил. Печатал текст со скоростью 5 миллисекунд на символ. Человек так не делает — даже самый быстрый копирайтер. Facebook это знает.

Пришлось переучивать. Итог оказался забавным: лучшая автоматизация — это имитация лени. Робот, который работает слишком хорошо, выглядит подозрительно. Робот, который тратит время впустую, выглядит как человек. Вот история о том, как я это исправил — и что конкретно помогло.

Контекст: зачем вообще нужен Facebook broadcaster

У меня 16 вилл на Бали. Чтобы они не простаивали, нужна постоянная реклама — в первую очередь в профильных группах Facebook, где сидит целевая аудитория: экспаты на Бали, туристы, люди, которые ищут жильё на месяц-два. Таких групп несколько сотен, и заходить в каждую вручную, чтобы опубликовать объявление, нереально.

Первая версия broadcaster была простой: Chrome с браузером без GUI, скрипт, который по очереди заходит в каждую группу и публикует объявление. Технически это работало. Проблема была в том, что оно слишком очевидно работало — для алгоритмов Facebook, которые умеют отличать человека от бота.

Основной признак, который их выдаёт — это время. Между действиями нет естественных задержек. Человек открыл страницу — подождал немного, пока всё загрузилось, прочитал, потом начал что-то делать. Бот открыл страницу — и сразу к следующему действию. Разница в сотни миллисекунд на каждом шаге, но в сумме паттерн становится очевидным.

Анализ: как Facebook определяет автоматизированное поведение

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

Скорость ввода текста. 5 миллисекунд на символ — это невозможно для человека. Нормальная скорость печати у среднего пользователя — от 50 до 200 миллисекунд между нажатиями. При этом скорость непостоянна: в начале фразы чуть медленнее, на знакомых словах быстрее, после запятой пауза. Бот давал идеально равномерный поток — красный флаг.

Движение мыши.** Люди не двигают мышью по прямой линии от точки А к точке Б. Траектория всегда немного кривая, с ускорением в начале и замедлением перед кликом. Бот двигал мышью по идеально прямым линиям с постоянной скоростью — ещё один флаг.

Отсутствие "бесполезной" активности. Люди листают ленту, открывают уведомления, иногда на что-то отвлекаются. Бот шёл прямо к цели: открыл группу — нашёл поле ввода — опубликовал — закрыл — следующая группа. Слишком целенаправленно для реального пользователя.

Точные интервалы между постами. Мой бот публиковал каждые 2-4 часа с минимальным отклонением. Человек не может поддерживать такой ритм: он иногда забывает, иногда публикует раньше, иногда делает длинные перерывы. Равномерность — признак автоматизации.

Нет реакции на контент. Люди иногда лайкают что-то, когда листают ленту. Бот никогда этого не делал — чистая публикация без каких-либо других взаимодействий с платформой.

Как научил бота лениться: конкретные изменения

После анализа я переписал логику поведения. Вот что изменилось — по каждому пункту конкретно.

Прогрев перед постом. Теперь перед тем как опубликовать что-либо в группе, бот 3-5 минут просто ведёт себя как обычный пользователь. Заходит на главную страницу. Листает ленту — вниз медленно, потом немного вверх, как будто что-то привлекло внимание. Заходит в уведомления. Иногда открывает маркетплейс, просто "посмотреть". Всё это с реалистичными задержками между действиями.

3-5 минут — это много по меркам автоматизации. Для одной группы это терпимо, но когда групп сотни, время складывается. Я принял это как цену за стабильность: лучше медленно публиковать в 100 групп без блокировок, чем быстро публиковать в 100 групп и потерять аккаунт через неделю.

Скроллинг в группе перед постом. Зайдя в группу, бот не сразу идёт к полю ввода. Он листает посты — вверх-вниз, с паузами, как будто читает. Останавливается на некоторых постах на 5-10 секунд. Иногда двигает мышь в сторону кнопки "лайк", но не нажимает. Потом начинает набирать текст.

Рандомизированная скорость печати. Вместо одинакового интервала между символами — случайное число от 50 до 150 миллисекунд. При этом после знаков препинания пауза чуть длиннее — 200-400 миллисекунд. После абзацев — пауза 1-2 секунды, как будто человек перечитывает написанное. Скорость меняется: в начале чуть медленнее, потом немного быстрее на коротких знакомых словах.

Человеческие траектории мыши. Добавил библиотеку, которая генерирует траектории мыши с лёгкой кривизной и непостоянной скоростью. Не идеальная кривая Безье — именно немного кривая, как когда рука чуть дрожит. Плюс случайные небольшие движения "в никуда" — как будто человек чуть промахнулся мимо кнопки и скорректировался.

Нерегулярные интервалы между публикациями. Вместо 2-4 часов с малым отклонением — более широкий диапазон с нарочитой нерегулярностью. Иногда 1.5 часа, иногда 6 часов, иногда пропуск целого окна. Не случайный генератор — именно паттерн, похожий на реального человека: активнее утром и вечером, тише в середине дня, иногда совсем тихо на несколько часов.

Лимит публикаций в день. Вместо максимально возможного количества — жёсткий лимит: 2 публикации в день во внешних группах вместо прежних 3. Реальный человек, который занимается другими делами, не публикует объявления чаще. Меньше публикаций — меньше поводов для анализа.

Система "охлаждения" при предупреждении. Если Facebook показывает любое предупреждение о подозрительной активности — бот полностью останавливается на 24 часа, а не на час как раньше. После паузы возобновляет с самого медленного режима. Это больнее по скорости, но защищает аккаунт от полного бана.

Прогрев нового аккаунта: почему первые недели решают всё

Отдельная история — прогрев. Свежий аккаунт с первого дня публикующий объявления — почти гарантированный бан. Facebook смотрит на историю аккаунта: как давно зарегистрирован, что делал в первые дни, с кем взаимодействовал.

Для новых аккаунтов я ввёл двухнедельный период прогрева. В первую неделю — только чтение. Листать ленту, заходить на страницы, иногда лайкать что-то. Никаких постов, никаких комментариев. Аккаунт "живёт" как наблюдатель.

Во вторую неделю — редкие комментарии в группах. Один-два в день, короткие, по теме поста. "Красивая вилла", "хороший район". Аккаунт начинает взаимодействовать с контентом.

Только на третьей неделе — первые публикации. Одна в неделю, потом постепенно наращивать. К концу месяца аккаунт выходит на рабочий режим. Это долго, но аккаунт с историей держится значительно дольше свежего.

Результаты: прогрев прошёл, первый пост — без проблем

После переработки я запустил бота с нуля — новый аккаунт, полный цикл прогрева. Через неделю первый пост в marketplace-группу ушёл без каких-либо предупреждений. Через месяц аккаунт работает в штатном режиме.

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

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

Парадокс эффективной автоматизации: иногда нужно быть менее эффективным

Главный вывод из этой истории меня немного удивил, хотя в ретроспективе он очевиден. Высокоэффективный бот — это подозрительный бот. Система, которая делает всё идеально, идеально быстро и без единой ошибки, выглядит как машина. Машину ловят.

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

Это применимо шире Facebook. Любая система, которая детектирует автоматизированное поведение — CAPTCHA, антифрод, рейт-лимиты API — настраивается под паттерны реального человеческого использования. Бот, который слишком точно попадает в паттерн, тоже выглядит подозрительно: реальные люди немного разные, немного непоследовательные, немного медленнее, чем теоретический максимум.

Хороший дизайн антидетект-поведения — это не "добавить случайные задержки". Это смоделировать, как выглядит реальный человек в данной ситуации, и воспроизвести именно этот паттерн — включая его несовершенства.

Техническая сторона: что именно реализовано

Для тех, кто строит похожие системы — конкретные технические решения, которые я использую.

Браузерная автоматизация: Selenium / Playwright с реальным браузерным профилем. Не headless — полноценный Chrome с сохранёнными cookies, историей, расширениями. Это само по себе делает аккаунт менее подозрительным: headless браузеры имеют свои паттерны, которые детектируются отдельно.

Рандомизация задержек: не простой random() в диапазоне, а взвешенное распределение. Большинство задержек попадают в "нормальный" диапазон, редкие бывают короткими или длинными. Это ближе к тому, как реально ведёт себя человек.

Имитация движения мыши: библиотека для генерации кривых траекторий с естественным ускорением и замедлением. Дополнительно — небольшие случайные "дрожания" при длинных перемещениях.

Расписание с "выходными": бот не работает круглосуточно. У него есть "рабочие часы" — с вариацией каждый день, как у живого человека. Иногда "выходной день" полностью.

Мониторинг предупреждений: бот регулярно проверяет, нет ли предупреждений от Facebook, и при их появлении немедленно останавливается и записывает событие в лог. О том, как я строю мониторинг для всей системы агентов, можно почитать в статье про мониторинг AI-агентов.

Что не решает антидетект и где человек всё равно нужен

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

Поэтому важно, чтобы сами объявления выглядели разнообразно: разный текст, разный порядок информации, разные акценты. Один и тот же шаблон, скопированный 100 раз, выдаёт автоматизацию даже без технических признаков.

Также нет универсального решения для всех платформ. Facebook имеет свои паттерны, Instagram — свои, Telegram — свои. То, что работает на одной платформе, может быть недостаточным или избыточным для другой. Нужно понимать конкретно, что детектирует конкретная платформа.

И наконец — это гонка. Алгоритмы Facebook обновляются. То, что работает сегодня, через полгода может перестать работать. Это не повод не автоматизировать — это повод следить за системой как наладчик, а не считать её настроенной раз и навсегда.

Ирония в итоге

Есть что-то забавное в том, что финальная версия бота специально тратит время впустую. Листает ленту, которую не читает. Открывает маркетплейс, ничего не ищет. Делает паузы, в которые ничего не происходит. В старом понимании "эффективности" — это провал. В реальности — это работа.

Может быть, это более широкий принцип автоматизации: не всегда нужно делать всё максимально быстро. Иногда нужно делать правильно — даже если "правильно" означает "медленнее". Устойчивая система, которая работает годами с умеренной скоростью, создаёт больше ценности, чем быстрая система, которую ломают через месяц.

У вас были случаи, когда автоматизация получала блокировку за "слишком хорошую работу"? Как решали?

  • Facebook поймал бота за скорость 5 мс/символ — невозможную для человека
  • 3-5 минут "прогрева" перед каждым постом: листание ленты, уведомления, маркетплейс
  • Скорость печати: 50-150 мс/символ с паузами после знаков препинания
  • Кривые траектории мыши с ускорением и "дрожанием"
  • 2 публикации в день вместо 3, интервалы 4-8 часов вместо 2-4
  • При предупреждении — 24 часа паузы, не один час
  • Вывод: лучшая автоматизация — имитация лени

Читайте также

Подписаться на блог в Telegram

Читайте свежие кейсы об AI-автоматизации, системной архитектуре и масштабировании бизнеса.

Подписаться