Коротко о проекте
- Для кого
- Продукт, который продаётся через 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-профилей ботов.