Коротко о проекте
- Для кого
- Агентство Telegram-маркетинга, которое ведёт рассылки по чатам, собирает аудиторию и оставляет комментарии под постами для десятков клиентов.
- Моя роль
- Проектировал и писал все инструменты, от первой утилиты в июне 2024-го до последней в июле 2026-го, плюс общие правила, по которым они работают как один комплект.
- Задача
- Убрать из работы агентства ручную рутину — от проверки баз чатов до отчётов клиентам.
- Что сделал
- 16 программ: пять приложений, которые работают сразу с пачками Telegram-аккаунтов, и одиннадцать небольших утилит для баз, AI-шагов и отчётов. Один формат аккаунтов, одинаковые входные и выходные файлы, прогресс сохраняется по ходу работы.
- Сроки
- Июнь 2024 – июль 2026: по одному инструменту, по мере того как они требовались агентству.
- Масштаб
- До 872 аккаунтов в одном прогоне. 74 644 ссылки на чаты и каналы прошли через три проверки. 286 отчётов клиентам: 379 105 успешных отправок по 102 973 чатам.
- Ограничители
- Каждому получателю — одно сообщение: обработанные убираются из списка. Аккаунт останавливается при первом же спам-предупреждении. В приватные каналы, куда вступают по заявке, инструмент не вступает, а только помечает их.
- Статус
- Рабочие инструменты с реальными прогонами 2024–2026 годов: отдельные программы, а не одно приложение.
С чего всё началось
Подготовка каждой кампании в агентстве выглядела одинаково: одни и те же задачи по кругу. Я снимал их программами одну за другой — пока рутина не кончилась.
Приходит база на 20 000 чатов, купленная или спарсенная, и две трети в ней оказываются неактивными. Список из 33 000 каналов нужно сузить до тех, где открыты комментарии и ещё выходят посты. Пачке из 365 аккаунтов нужны новые описания профиля, почти у тысячи надо открепить канал от профиля, а после каждой рассылки клиент ждёт аккуратный отчёт, а не сырую выгрузку.
Вручную каждая такая задача — это дни или недели открывания ссылок по одной😅
Инструменты я писал по одному, каждый под свою задачу. За два года они сложились в цепочку: базы → проверки → аудитория → подготовка аккаунтов → рассылка → отчёт. И все они работают на тех же аккаунтах, что и другие инструменты агентства, без конвертаций.
Что умеет комплект

Общего приложения нет: каждый инструмент запускается из консоли или через простое окно выбора файлов, берёт файл на вход и отдаёт файл на выходе. Ниже вся цепочка по этапам, с графиками по реальным прогонам.
1. Базы: собрать, отсортировать, отфильтровать
Сырые списки чатов, собранные пачкой, — это хаос: десятки файлов, каналы вперемешку с чатами, дубли, чаты, куда никто не может писать.
Сборщик баз склеивает десятки файлов с базами, убирает каналы, чаты, где писать нельзя, и чаты меньше 10 участников, удаляет дубли по ID и сохраняет чистый Excel. Дальше включается один из трёх профилей сортировки:
- жёсткий, для рассылок по чатам: только чаты, куда можно писать, отсортированные по размеру и прогнанные через ~500 стоп-слов в 16 категориях (другие регионы, крипта, ставки, 18+, знакомства, школьники и т. д.);
- мягкий: только чаты на нужном языке;
- позитивный: только чаты по теме ниши, например про недвижимость.
Прогнать десятки тысяч названий через 500 стоп-слов вручную нереально. Скрипт делает это за секунды.
AI-фильтр каналов. Небольшая AI-модель читает 10 постов канала и отвечает «подходит» или «не подходит», с причиной в одном предложении. Шок-контент, ставки, игры для школьников и 18+ отсекаются, а бизнес, маркетинг, саморазвитие, образование, блоги и путешествия остаются. Человеку на канал нужна минута-две, модели — секунды и доли цента.
2. Проверки: что ещё живо
Проверка «живой ли чат» берёт 10 последних сообщений чата и решает: живой (не меньше 10 сообщений за последние 3 дня) или мёртвый.
10 ноября 2025 года она прошла базу из 20 512 чатов и проверила 20 000 из них за 2 часа 50 минут — ~7 000 в час, без участия человека. Порог прошли 6 453 чата (32,3%), остальные 13 547 (67,7%) помечены как мёртвые: две трети базы отсеялись до того, как на неё потратили хоть один аккаунт.
Спам-детектор, вторая версия того же движка, ищет пиар-чаты: очень активные (10 сообщений за последние 30 минут), где ссылки и @-упоминания публикует много разных людей. Агентство может взять их как площадки для рекламы или убрать из базы перед сбором аудитории.
13 декабря 2025 года спам-детектор взял базу из 20 776 ссылок и обработал 20 759 чатов за 50 минут на 148 аккаунтах. Такой активностью отличались 2 104 чата, из них 682 оказались пиар-чатами.

Аудит каналов по каждой ссылке записывает название, число подписчиков, открыты ли комментарии и дату последнего поста. Приватные каналы он читает по инвайт-ссылкам без вступления, когда это возможно, а если канал принимает только по заявкам — помечает его «заявка» и не вступает.
10 июня 2026 года аудит прошёл 33 356 ссылок, половина из которых — приватные инвайты, на 872 аккаунтах за 1 час 2 минуты и записал 26 287 каналов. Из 23 442 каналов с полными данными комментарии были открыты у 10 300 (43,9%), а пост за последние 30 дней был у 14 237 (60,7%). Для продвижения комментариями подошли 7 094 канала: комментарии открыты, и канал живой.

3. Аудитория: чистые списки
Чистка аудитории склеивает спарсенные списки пользователей и оставляет только тех, кто недавно был в сети и у кого есть юзернейм, без дублей. Сравнение списков — маленькое окно: вставляете два списка и сразу видите строки, которые есть только в одном из них. Так понятно, кого уже обработали.
4. Подготовка аккаунтов
- Массовое обновление профилей ставит описания сразу всей пачке и сортирует результат: установлено, бан, заморозка, прочее. По логам установлено 2 006 описаний; самый длинный прогон охватил 365 аккаунтов.
- Открепление каналов снимает личный канал с профиля у всей пачки параллельно: 956 аккаунтов за 32 секунды против ~24 часов вручную по оценке.
- AI-аватарки генерирует аватарки под нишу через Stability AI: 100 штук за прогон, по 8 одновременно.
- AI-тексты пишет по одному промпту 1 000 текстов пачками по 20 для описаний профиля и ответов.
5. Рассылка: одно сообщение каждому
Скажу сразу: сообщения людям, которые об этом не просили, ограничены правилами Telegram, а во многих странах ещё и законами о персональных данных и рекламе. Поэтому комплект пишет каждому человеку один раз, без цепочек повторных касаний, а новое внедрение начинается с проверки того, что разрешено для рынка и задачи клиента.
ЛС-рассылка отправляет текст или пересланный пост из канала с пула до 200 аккаунтов, а ход рассылки виден на табло во весь экран. Обработанные получатели убираются из списка, даже если прогон остановили через Ctrl+C, так что повторный запуск не вернётся к тем, кому уже написали.
Аккаунт, получивший спам-предупреждение, останавливается сам, а не «добивается» до блокировки. Это снижает риск, но ничего не гарантирует.
6. Отчёты клиентам
Генератор отчётов склеивает статистику рассылок агентства, оставляет только успешные отправки, убирает служебные колонки и сохраняет аккуратный Excel: время отправки, ссылка на чат, статус, сообщение. Через него прошло 286 отчётов клиентам — 379 105 успешных отправок по 102 973 уникальным чатам в данных рассылок с мая 2024 по июнь 2025 года. Каждый отчёт собирается одним запуском, а не вручную.
Как этим пользуются каждый день
Каждый инструмент — отдельная программа, которую запускают под задачу. Схема везде одна: выбрать входной файл (Excel или текстовый файл со ссылками), ответить на пару вопросов, если инструмент их задаёт, и получить аккуратный Excel или базу с понятными колонками.
Пока инструмент работает, в консоли видны шкала прогресса с оставшимся временем, строка состояния раз в пять секунд или табло на весь экран, а в конце — сводка. Результаты сохраняются по ходу, поэтому прерывание обходится дёшево, а ошибку в настройках инструмент объяснит понятными словами, а не простынёй технических ошибок.

Цифры

Сэкономленное время, по оценке. Для шести замеренных прогонов я сравнил записанное время работы программ с оценкой той же работы вручную: 30–40 секунд на чат или канал и 1,5–3 минуты на аккаунт. Вручную выходит ~770 часов, примерно 96 рабочих дней. Инструментам понадобилось меньше 7 часов🚀 На трёх проверках баз записанное время прогона оказалось в 60–300 раз короче ручной оценки.

Расходы на работу комплекта отдельно не считались. Платные AI-шаги небольшие: AI-фильтр каналов на GPT-4o-mini стоит доли цента за канал, а AI-тексты и аватарки оплачиваются поштучно у AI-провайдеров. Аккаунты принадлежат агентству и общие с другими его инструментами.
Кому это подойдёт
- Агентствам Telegram-маркетинга, которые перед каждой кампанией проверяют и сортируют базы чатов и каналов, а после каждой рассылки отчитываются перед клиентами.
- Командам, которые покупают или парсят базы и хотят знать, что в них живо, до того как тратить аккаунты.
- Командам с большими выгрузками Excel или SQLite, которые надо склеить, почистить от дублей и отфильтровать, или которым нужен AI-шаг (классификация каналов, тексты, картинки) внутри уже работающего процесса.
Технические подробности
Технические детали
Как разовые скрипты стали комплектом

Честно, единым комплектом это никто не проектировал😅 Каждый инструмент писался под одну задачу, и каждый новый брал то, что сработало в предыдущем. Вместе их держат три вещи:
- Единый формат аккаунтов: пара файлов
.sessionи.jsonна аккаунт. Поставщики называют поля JSON по-разному; загрузчик понимает оба варианта и пропускает битую пару, а не падает. - Общее ядро для аккаунтов, подключений и обработки ошибок, взятое из боевых проектов агентства, поэтому каждый новый инструмент с первого запуска ведёт себя как остальные.
- Одинаковые правила для файлов: на входе Excel или текст, на выходе Excel или SQLite с понятными колонками, так что выход одного этапа становится входом следующего.
В новых инструментах настройки переехали из констант в коде в YAML с проверкой через Pydantic, хранение — из Excel в SQLite, а один большой файл стал пакетом модулей со слоями и шиной событий; аккаунты подключаются параллельно, у повторов есть лимиты. Одно исправление, которым я не горжусь: старый код массового BIO переподключался гораздо чаще, чем нужно, — около 272 000 подключений за прогон. Текущая версия открывает одно подключение на аккаунт.
Сотни аккаунтов как один пул воркеров
Проверки не раздают аккаунтам фиксированные куски списка. Все ссылки лежат в общей очереди, и каждый аккаунт — воркер, который берёт следующую ссылку, как только освободился, так что быстрые аккаунты просто делают больше. Новые инструменты держат в работе заданное число аккаунтов на семафоре и по очереди меняют их на остальные из пула.
Всё это работает на asyncio, поэтому сотням аккаунтов не нужны сотни потоков ОС. Когда Telegram просит один аккаунт подождать, этот аккаунт делает паузу, а очередь продолжает двигаться. На самом большом прогоне, аудите 33 356 ссылок на 872 аккаунтах, Telegram попросил о паузе один раз за весь час.
Сохранение прогресса и ограниченные сбои
- Старые инструменты сохраняют Excel каждые 1 000 строк. Новые пишут в SQLite с коммитом каждой записи сразу после обработки, с первичным ключом против дублей и файлом ещё не пройденных ссылок для повторного запуска.
- У повторов есть лимит, а подключения быстро сдаются на мёртвом маршруте, поэтому битая ссылка не может бесконечно ходить по очереди или задерживать итоговый файл.
- Сводки сходятся: аудит каналов записал 26 287 каналов и пропустил 7 069 — ровно все 33 356 ссылок, и ни у одного аккаунта не было ошибки подключения.
Ответы платформы отдельно от сбоев
- Просьба подождать: аккаунт делает паузу, очередь продолжает двигаться.
- Спам-предупреждение: аккаунт останавливается до конца прогона.
- Бан или заморозка: сессия переносится в отдельную папку.
- Человеку нельзя написать (настройки приватности, сообщения только для Premium или платные, удалённый аккаунт): пропуск и запись в журнал.
- Сетевая ошибка: проблема подключения, а не вина аккаунта.
Такие события пишутся в базу и в журнал на каждый аккаунт, так что любой прогон потом легко разобрать.
Данные и приватность
- Инструменты читают то, что видит любой аккаунт Telegram: названия чатов и каналов, число участников и подписчиков, настройки комментариев, последние сообщения с датами. Для списков аудитории — юзернеймы и статус «был в сети» из спарсенных баз пользователей.
- Результаты остаются в локальных файлах Excel и SQLite. AI-фильтр отправляет посты каналов в OpenAI API для классификации.
- В этом кейсе только сводные цифры: названий чатов и каналов и имён пользователей нет ни в тексте, ни на картинках.
- Совет для любого внедрения: файлы сессий так же чувствительны, как пароли, поэтому доступ к ним стоит держать закрытым. А проверка того, что разрешено на рынке клиента, идёт первой.
Стек
| Слой | Технологии |
|---|---|
| Язык и среда | Python, asyncio |
| Клиент Telegram | Telethon |
| Данные | pandas, openpyxl, SQLite |
| Настройки | PyYAML, Pydantic v2 |
| Интерфейс | Консольные прогресс-бары и табло; окна Tkinter |
| AI | OpenAI API (GPT-4o-mini для фильтра каналов); Stability AI для аватарок |
Около 6 400 строк Python: пять многоаккаунтных приложений (≈5 400 строк) и одиннадцать скриптов (≈1 000).