Никита Бойко
Все кейсы
Автоматизация Telegram104 729 сообщений за один запуск — ~$1 в сутки

104 729 сообщений за ~21 час: как я автоматизировал рекламу в чат-ботах

Рекламные диалоги с пула до 1 019 аккаунтов; поддержание всей системы — около 1$ в сутки

104 729 сообщений за ~21 час: как я автоматизировал рекламу в чат-ботах

Коротко о проекте

Для кого
Продукт, который продаётся через Telegram. Ему нужен был постоянный поток людей, узнающих о продукте, без платной рекламы.
Моя роль
Переписал прежний скрипт на 1 448 строк в модульную программу (версия 4.0) и довёл её на суточных боевых прогонах.
Задача
Автоматизировать ручную рекламную рутину в анонимных чат-ботах на сотнях аккаунтов: без присмотра, круглосуточно и с честными цифрами о том, куда на самом деле ушли сообщения.
Что сделал
Консольное приложение на Python: скользящий пул Telegram-аккаунтов проходит по списку чат-ботов, находит собеседников и отправляет им сообщение заказчика, а живое табло и журналы по каждому аккаунту показывают, что происходит.
Сроки
Модульное ядро — май 2026. Доводка на суточных боевых прогонах — с сентября по ноябрь 2026.
Масштаб
Прогоны до 1 019 аккаунтов, 38 профилей ботов. Рекорд: 104 729 сообщений примерно за 21 час. Прогон 3–4 ноября: 72 862 сообщения за 24 ч 45 мин с 346 аккаунтов, по 70 одновременно.
Расходы на работу
~1$ в сутки на поддержание всей системы. Не входят аккаунты и сетевая инфраструктура, которые даёт заказчик, и компьютер, на котором работает программа.
Статус
В работе на 4 ноября 2026 года. Прогон, описанный в кейсе, шёл 3–4 ноября.

Идея

В Telegram есть десятки популярных анонимных чат-ботов: нажимаете «Найти собеседника» — и бот соединяет вас со случайным человеком. Аудитория там большая. Только за прогон 3–4 ноября аккаунты нашли 99 180 собеседников в 14 ботах.

Заказчик продаёт свой продукт через Telegram и хотел, чтобы эти люди узнавали о нём в разговоре. Вручную это бесконечный круг: зайти в бота, зарегистрироваться, решить капчу, подписаться на каналы-спонсоры, дождаться собеседника, поздороваться, рассказать о продукте — и к следующему. Anon Outreach крутит тот же круг сотнями аккаунтов параллельно, днём и ночью.

Чтобы было понятно, что это такое: автоматическая рекламная рассылка незнакомым людям в чужих ботах. Приветствия и сообщение отправляет программа с аккаунтов заказчика, так что люди на той стороне переписываются с программой, и согласия у них никто не спрашивает. Такое продвижение может нарушать правила отдельных ботов и самого Telegram, и аккаунты действительно получают баны: некоторые боты банят уже после одного-двух сообщений. Программа записывает каждый бан, и дальше этот аккаунт пропускает забанивший его бот.

Заказчик хотел максимальный охват при минимальных затратах и без платной рекламы, работу сутками без присмотра, лёгкую подстройку под боты, которые устроены по-разному и постоянно меняются, бережный расход аккаунтов и честные цифры: куда сообщения ушли на самом деле, а не только сколько их ушло.

Что умеет программа

Что делает один аккаунт в одном боте

Каждый аккаунт из пула по очереди проходит боты из своего списка. В каждом боте он сначала «заходит»: запускает бота, проверяет, что не забанен, регистрируется и подписывается на каналы-спонсоры, которых требует бот. Это делается один раз. Потом идут диалоги: поиск собеседника, короткое приветствие, сообщение заказчика, следующий собеседник. После заданного числа сообщений аккаунт переходит в следующий бот, а пройдя последний, встаёт в конец очереди, и его слот сразу занимает следующий аккаунт.

Что программа делает сама:

  • Регистрация кнопками или текстом: пол, возраст, страна, город, «комната» или геолокация, в том числе когда бот задаёт вопросы по одному.
  • Спонсорские подписки: публичные и приватные каналы, заявки на вступление, папки чатов и боты-рефералы. Спонсор на внешнем сайте делает бот непригодным (таково правило заказчика).
  • Свои аккаунты: если собеседником оказался другой аккаунт заказчика, программа это распознаёт и не тратит на него сообщение.
  • Паузы по требованию бота: бот отвечает «сейчас искать нельзя» — аккаунт сразу уходит в следующий бот.

Живое табло

Пока идёт прогон, консоль каждые пять секунд перерисовывает табло: что делает каждый аккаунт и в каком боте, а внизу — сколько сообщений отправлено, сколько ушло своим же аккаунтам, сколько отменено, сколько «дошло до людей» и сколько потрачено на работу системы.

Живое табло в консоли

Как этим пользуются

  • Запуск: оператор отвечает на несколько вопросов (какие боты, какое сообщение, сколько сообщений на бота и сколько циклов, где 0 — бесконечно) и может сохранить ответы в файл, чтобы прогон стартовал одной командой.
  • Масштаб: сколько аккаунтов работает одновременно, задаётся одной цифрой в файле настроек, в прогоне 3–4 ноября — 70.
  • Новый бот: оператор заполняет файл с правилами этого бота и запускает проверку, которая сама тестирует бота и выносит вердикт. Если бот использует уже знакомые программе виды шагов, это минуты и никаких правок кода; новый вид шага — уже доработка.

Цифры

Программа в цифрах
Показатель Значение
Рекордный прогон (7–8 сентября) 104 729 сообщений примерно за 21 час: 1 006 аккаунтов, 18 ботов
Стабильный темп примерно на 1 000 аккаунтов 4 700–5 200 сообщений в час
Прогон 3–4 ноября 72 862 сообщения за 24 ч 45 мин: 346 аккаунтов, 70 одновременно, 14 ботов
Темп прогона 3–4 ноября ~2 950 в час в среднем за весь прогон; 3 100–3 500 в час большую часть времени
Найдено собеседников (3–4 ноября) 99 180
Сообщений собеседникам, которые не были аккаунтами заказчика 45 092, или 62% отправленных (на табло — «дошло до людей»)
Пройдено экранов спонсорских подписок (3–4 ноября) 4 236, подписок — 11 166

Эти цифры описывают объём сообщений и работу программы, а не продажи. Сколько подписок принесли сообщения, они не показывают: таких данных в кейсе нет.

Во что обходится работа. Сервисы распознавания капч — единственное, за что программа платит сама: прогон 3–4 ноября обошёлся примерно в 0,47$, а с запасом выходит ~1$ в сутки. Аккаунты и сетевую инфраструктуру даёт заказчик и считает расходником, компьютер тоже его — это в доллар не входит.

До доводки распознавание выходило дорого: за два дня улетало 10–15$😅 После оптимизации эти расходы упали в 10–30 раз. Когда баланс сервиса заканчивается, программа перестаёт к нему обращаться и переводит аккаунты на другие боты, а не крутится вхолостую.

Для масштаба: по моей грубой оценке, человек вручную успевает 40–60 собеседников в час, а программа в стабильном темпе отправляла ~3 300 сообщений в час. Это сравнение пропускной способности, а не измеренная экономия на сотрудниках.

Отправлено — не значит дошло

Отправлено и дошло

Считать отправленные сообщения легко, и эта цифра льстит. В небольших ботах аккаунты заказчика иногда попадают друг на друга, а сообщение своему же аккаунту ни до кого не доходит.

Поэтому табло вычитает такие встречи: сообщения, ушедшие другому аккаунту заказчика (12 330 за прогон 3–4 ноября), и встречи со своими, которые программа распознала заранее и отменила (15 440). Арифметика видна прямо на табло: 72 862 − 12 330 − 15 440 = 45 092, или 62%. Заказчик видит эту долю во время прогона, а не узнаёт её задним числом.

На табло эти 45 092 называются «дошло до людей», но это рабочий счётчик: он показывает, что сообщение ушло собеседнику, который не является аккаунтом заказчика. Прочитал ли его кто-нибудь и сколько разных людей получили сообщения, он не показывает.

По логам видны и цифры по каждому боту: за прогон 3–4 ноября пять ботов из 14 дали ~80% сообщений, а боты, которые часто банят аккаунты за рекламу, — гораздо меньше. Так что решение добавить или убрать бота опирается на данные. Кстати, доставку тоже проверяли: в сентябрьском тестовом проходе 17 аккаунтов отправили 540 сообщений в 14 ботах за 1 час 20 минут, и по логам доставлены все 540.

Доводка на реальных прогонах

Доводка на реальных прогонах

До боевого состояния программу доводил не «на глаз», а суточными прогонами. Тестовые прогоны 2–4 сентября проверили 34 бота: 17 работали без проблем, 4 банили аккаунт после одного-двух сообщений, ещё 4 оказались непригодны. Первый суточный прогон 4–5 сентября — 1 019 аккаунтов, 22 бота, 49 443 сообщения — выявил 14 дефектов.

После каждого прогона я разбирал все логи (до 1 019 файлов и 374 МБ за прогон), построчно читал журналы выборочных аккаунтов и вживую перепроверял находки в ботах. Каждое исправление из живого прогона получало регресс-тест, чтобы снизить риск возвращения той же ошибки. За осень набралось больше 60 исправлений, а тестов стало 429 вместо 354.

Три примера того, что поймал этот цикл:

  • Ложный бан. Рекламу Telegram Premium программа приняла за бан, и в одном прогоне это стоило ~1 550 сессий.
  • Тихий сбой. Упал весь пул прокси, а программа этого не заметила и продолжала молотить очередь вхолостую. Теперь она поднимает тревогу и выдерживает растущие паузы.
  • Медленное приветствие. От «собеседник найден» до сообщения проходило 36,8 секунды, и десятки тысяч собеседников уходили, не дождавшись. Короткое приветствие сократило это окно примерно до 12 секунд.

Кому это подойдёт

  • Продуктам, которые продаются через Telegram, если нужен автоматический канал для своего сообщения и важно видеть, куда сообщения ушли на самом деле.
  • Командам, которые уже работают со многими аккаунтами Telegram вручную или на хрупких скриптах и хотят, чтобы всё сутками работало без присмотра и честно отчитывалось.
  • Сценариям во множестве чужих ботов, которые устроены по-разному и постоянно меняются, где новый бот или шаг должен быть настройкой, а не правкой кода.

Эту же основу можно приспособить и под другие долгие сценарии в Telegram — например, под большие тестовые прогоны ваших собственных ботов.

Технические подробности

Технические детали

Как устроен код

Новый бот — это файл, а не код

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

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

Скользящий пул, один сторож и шина событий

Все аккаунты пула работают одновременно на asyncio. Оркестратор держит фиксированное число слотов на семафоре (70 в прогоне 3–4 ноября), и когда аккаунт проходит свой список ботов, его слот сразу занимает следующий из очереди. Никакая «пачка» не ждёт самого медленного участника.

Чат-бот может прислать капчу, сообщение о бане или «вы уже в очереди» почти в любой момент. В старой версии проверки капчи, бана, регистрации и очереди вызывались по три-четыре раза в разных местах сценария. В 4.0 перед каждым важным шагом стоит один «сторож» (middleware), который обрабатывает каждый случай в одном месте, и ошибка в одной проверке не ломает остальные.

Сервисы публикуют события в шину (сменился статус, отправлено сообщение, бан в боте, встретились два аккаунта заказчика), а табло, журналы и база банов на них подписаны; веб-панель стала бы просто ещё одним подписчиком. Аккаунты, прокси и профили читаются через интерфейсы-репозитории, готовые к переезду из файлов в базу данных.

Надёжность и тесты

  • Состояние аккаунта: фатальные состояния (блокировка, заморозка, мёртвая сессия, отозванный токен) ведут каждое к своему действию, а не к бесконечным повторам. Аккаунты, заблокированные Telegram, переносятся в отдельную папку ban/, а bans.db хранит, какой аккаунт в каком боте забанен.
  • Бюджет: балансы сервисов капч видны на табло, и к сервису с закончившимся балансом программа больше не обращается.
  • 429 автотестов (pytest): около 7 700 строк тестов на примерно 9 000 строк кода, линтер ruff, регресс-тест на каждое исправление из живого прогона и суточные прогоны в боевом масштабе как финальная проверка.

Данные и конфиденциальность

  • Аккаунты, прокси, профили ботов и сообщение принадлежат заказчику и загружаются из локальных файлов. Приветствия и сообщение подготовлены заранее, ИИ их не пишет, а внешние сервисы получают только сами капчи.
  • Журналы содержат и входящие сообщения от ботов и собеседников; ни один такой текст в кейс не попал. bans.db хранит только то, какой аккаунт в каком боте забанен.
  • На всех картинках в кейсе имена ботов скрыты, номера аккаунтов и адреса прокси замаскированы, тексты сообщений не показаны.

Стек

Слой Технологии
Среда выполнения Python 3.11, asyncio
Telegram Telethon (MTProto)
Модели и конфигурация Pydantic v2; YAML: app.yaml и 38 профилей ботов поверх общих настроек
Хранение Файлы за протоколами-репозиториями; SQLite для учёта банов
Сеть и изображения aiohttp, Pillow
Капчи Внешние сервисы распознавания; стоимость каждой капчи пишется в журнал, балансы видны на табло
Качество pytest (429 тестов), ruff
Интерфейс Консольный запуск и ASCII-табло

Около 9 000 строк кода, 7 700 строк тестов и 38 YAML-профилей ботов.

Хотите что-то похожее?

Расскажите о своей задаче, и я вернусь с планом: что сделаем, за какой срок и как поймём, что сработало.

Обсудить проект
Связаться