Никита Бойко
Все кейсы
Автоматизация Telegram~770 часов ручной работы сэкономлено

16 программ и два года работы: как я снял рутину с Telegram-агентства

Шесть замеренных прогонов: меньше 7 часов работы программ против ~770 часов вручную по оценке

16 программ и два года работы: как я снял рутину с Telegram-агентства

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

Для кого
Агентство 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).

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

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

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