Как 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 часа паузы, не один час
- Вывод: лучшая автоматизация — имитация лени