Бот, который сам находит мне заказчиков в Telegram — с граблями и кодом
Идея была простая: пусть робот сам читает чаты, где люди ищут исполнителя, и кидает мне в личку тех, кто реально хочет заказать. Звучит на один вечер. По факту — день на грабли. Рассказываю честно, как есть, с кодом и цифрами.
Грабля 1. Ключевые слова гребут мусор
Первая наивная версия ловила сообщения по словам вроде «нужен бот» или «сайт». Через день я перестал смотреть уведомления: из сотни «лидов» настоящих было три.
Почему так — в любом рабочем чате половина сообщений это НЕ клиенты:
- «Ищем менеджера на удалёнку, оплата еженедельно» — вакансия.
- «Делаю ботов под ключ, пишите в личку» — конкурент рекламируется.
- «Нужна подработка, справлюсь с чем угодно» — соискатель.
Список стоп-слов бесконечен, им проблему не закрыть. Решение — задать по каждому сообщению короткий вопрос нейросети: это человек, который хочет ЗАКАЗАТЬ и готов платить, или он сам предлагает услуги и ищет работу?
Модель отвечает is_buyer: true/false плюс оценка релевантности от 0 до 1. Пропускаю только тех, у кого «да» и оценка выше 0.6. Разница на живом примере из лога:
«нужен бот для приёма заявок с сайта, кто сделает?» → is_buyer=True, 0.95
«настраиваю чат-ботов и CRM, обращайтесь» → is_buyer=False, 0.10
Слово «бот» одно, а смысл противоположный. Стоп-слова этого не видят — нейросеть видит.
Грабля 2. Модель не влезла в сервер
Захотелось «по-взрослому»: своя модель на своём сервере. Полез считать. Нормальная модель хочет 8 ГБ памяти, а на дешёвом VPS у меня два. Не влезает даже впритык.
Первая мысль — докупить сервер. Посмотрел цены: в разы дороже за месяц, а на слабом процессоре без видеокарты модель думает над каждым сообщением по 20–30 секунд. Медленно и дорого.
Правильная мысль оказалась другой: зачем держать модель у себя? Есть облачные сервисы, где та же работа делается за секунду и в бесплатном лимите я укладываюсь. Сервер просто отправляет туда текст и получает вердикт. Ноль доплаты, ноль нового железа, и модель там мощнее, чем я бы поднял локально.
Мораль: «поставить у себя» звучит солидно, но часто это лишние деньги. Локально держать модель имеет смысл, только если данные секретные — а публичные сообщения из чатов таковыми не являются.
Грабля 3. Telegram банит за массовый вход
Чтобы бот ловил заказы, он должен состоять в нужных чатах. Я по наивности вступил разом в два десятка групп за пару минут. Telegram показал предупреждение и придержал аккаунт — ещё чуть-чуть, и бан. А это личный аккаунт, терять нельзя.
Массовое вступление за короткое время выглядит как поведение спам-бота: телега ловит это по скорости. Живой человек не заходит в 20 групп за минуту.
Починил «тихим» вступлением: по 3 новых чата в день, с паузами 3–7 минут между каждым, как будто человек не спеша листает. И бот НИКОГДА ничего не пишет от моего имени — только читает. Пишут — банят; читаешь — терпят.
# анти-бан: вступаем медленно, по-человечески
JOIN_PAUSE_MIN, JOIN_PAUSE_MAX = 180, 420 # 3–7 минут между вступлениями
DAILY_CAP = 3 # не больше 3 групп в день
Правило на любую автоматизацию в соцсетях: скорость важнее объёма. Делай мало, но по-человечески — и тебя не тронут.
Фишка: горячий клиент виден по пересечению
Обычный лид — человек один раз написал «нужен бот». А горячий — тот, кто ищет прямо сейчас и активно. Как его вычислить, не спрашивая? По простому сигналу: он пишет об одной и той же задаче в нескольких чатах разом.
Логика человеческая: если я закидываю «ищу, кто сделает» в три разных чата за пару дней — я тороплюсь и реально ищу исполнителя. Бот запоминает, в каких чатах засветился каждый автор, и как только один и тот же человек всплывает во втором-третьем чате — помечает его огоньком и поднимает наверх. Идею подсмотрел, когда разбирал по косточкам чужой платный парсер: там это называлось «пересечение аудиторий».
Заодно — дедупликация. Один человек в трёх чатах пишет почти одно и то же. Без защиты бот прислал бы три одинаковых уведомления. Поэтому сравниваю тексты на похожесть: тот же автор с тем же запросом показывается один раз, но с пометкой «в 3 чатах».
Грабля 4. «Работает» — это ещё не работает
Настроил автозапуск. Система отчиталась: «выполнено, код 0». Отлично. Через день смотрю — не отработало ни разу. Оказалось, запускалась обёртка, которая тихо падала, а «код 0» относился к ней, не к скрипту.
Потом облачная модель начала отдавать ошибку «слишком много запросов» на старте — бот прогонял сразу все чаты залпом и упирался в лимит. Добавил повтор с паузой (respect retry-after), и лиды перестали теряться.
Вывод, который экономит десятки часов: не верь, что работает — проверь, что работает. «Код 0», «процесс запущен», «в моём ящике дошло» — это сигналы, а не факты. Факт — это строка в логе с галочкой, ответ сервера 200, выросший счётчик.
Итог
За день бот из наивного «ловца по словам» превратился в рабочий инструмент: читает нужные чаты 24/7, отделяет заказчиков от шума нейросетью, растёт по чатам медленно и незаметно, помечает горячих и не долбит дублями. Никакого платного софта, никакого спама — робот просто читает открытые чаты и подсказывает, кому написать первым.
Главный принцип, который я вынес: автоматизация — это не «настроил и забыл», а «проверяй фактом на каждом шаге». Тогда она приносит деньги, а не иллюзию занятости.
Нужен такой же результат под вашу задачу?
Дообучу LLM на ваших данных, соберу AI-ассистента или проверю модель на безопасность. Локально и приватно.