Сделал бота для автоматизации поиска лидов. aiogram.. aiogram. GPT-5.1.. aiogram. GPT-5.1. llm.. aiogram. GPT-5.1. llm. python.. aiogram. GPT-5.1. llm. python. telegram.. aiogram. GPT-5.1. llm. python. telegram. telethon.. aiogram. GPT-5.1. llm. python. telegram. telethon. автоматизация.. aiogram. GPT-5.1. llm. python. telegram. telethon. автоматизация. лидогенерация.. aiogram. GPT-5.1. llm. python. telegram. telethon. автоматизация. лидогенерация. Мессенджеры.. aiogram. GPT-5.1. llm. python. telegram. telethon. автоматизация. лидогенерация. Мессенджеры. парсинг.. aiogram. GPT-5.1. llm. python. telegram. telethon. автоматизация. лидогенерация. Мессенджеры. парсинг. Поисковая оптимизация.. aiogram. GPT-5.1. llm. python. telegram. telethon. автоматизация. лидогенерация. Мессенджеры. парсинг. Поисковая оптимизация. Поисковые технологии.. aiogram. GPT-5.1. llm. python. telegram. telethon. автоматизация. лидогенерация. Мессенджеры. парсинг. Поисковая оптимизация. Поисковые технологии. социальные сети.. aiogram. GPT-5.1. llm. python. telegram. telethon. автоматизация. лидогенерация. Мессенджеры. парсинг. Поисковая оптимизация. Поисковые технологии. социальные сети. Управление продажами.. aiogram. GPT-5.1. llm. python. telegram. telethon. автоматизация. лидогенерация. Мессенджеры. парсинг. Поисковая оптимизация. Поисковые технологии. социальные сети. Управление продажами. Фриланс.

Первая моя первая прикладная статья с конкретным опытом по проекту.

TL;DR: Собрал систему на Python + LLM, которая парсит Telegram-чаты, находит людей с конкретными болями и генерирует персонализированные сообщения для аутрича. 7 чатов по 1000 сообщений — стоимость анализа $0.11.

1. Проблема одного канал продаж

Два года я зарабатываю на фрилансе — делаю Telegram-ботов, Mini Apps и автоматизации для бизнеса. За это время вырос с 40 до 270 тысяч в месяц. Неплохо, но была проблема, которая не давала масштабироваться.

Все заказы приходили с одной фриланс площадки.

Это работало, пока работало. Но возникали независящие от меня проблемы – у клиентов замораживались счета или откладывались проекты — я оставался без денег и без понимания, где брать новых заказчиков. Конечно, тут есть мои ошибки – например не защитил себя от подобных рисков договорами/контрактами. Классическая зависимость от одного канала.

Я пробовал диверсифицироваться:

  • Fiverr — 4 gig, ноль откликов за полгода (только мошенники писали). Хотя даже заграничную симку приобрел для регистрации. Там неадекватная конкуренция с индусами и пакистанцами.

  • Telegram-канал — 9 подписчиков (привет, мама. а не, мамы даже там нет)

Проблема была системной: мне нужен стабильный поток лидов, которых можно обрабатывать, передавать стажёрам, масштабировать. Конечно можно начать руками искать по чатам и каналам народ с болью, однако – ручной поиск в чатах — не масштабируется.

2. Идея: автоматизировать то, что делаю руками

Я и раньше находил клиентов в Telegram-чатах. Заходил в чаты селлеров, логистов, инфобиз. Искал сообщения типа “посоветуйте бота для…” или “как автоматизировать…”.
Но это занимало часы, это реально нужно анализировать, думать, вчитываться, смотреть что за пользователь – было непредсказуемо и не масштабировалось.

Я играл в Factorio – и оттуда вновь вдохновился ��деей тотальной автоматизации. В игре ты не таскаешь руду руками – строишь конвейеры, которые делают это за тебя. Потом автоматизируешь производство конвейеров. Потом – производство фабрик, которые производят уже сами конвейеры)

В разработке я стараюсь делать то же самое. Автоматизирую документацию, скиллы для LLM, пайплайны контейнеров, деплой. Поэтому – каждый повторяющийся шаг – отличный кандидат на автоматизицию!

И тогда пришла такая мысль: а почему бы не автоматизировать основной входящий ресурс – потенциальных заказчиков?
Нужен был конвейер.

Так родилась концепция Lead Finder.

3. Архитектура v1: Web Search (спойлер: не сработало)

Первая идея была очевидной (ну для меня…):

[Описание ниши: "селлеры wildberries"]
↓
[GPT + Web Search ищет Telegram-каналы]
↓
[Telethon парсит найденные каналы]
↓
[GPT квалифицирует: это владелец бизнеса? активен? есть боли?]
↓
[Карточка лида с контактом и готовым сообщением]

Посидел, помыслил как я это хочу видеть – ТЗ на 442 строчки. Расписал каждый модуль. Закинул в Claude Code, и спустя день итераций получил кое какой MVP.

Результат первого запуска

Входная ниша: "селлеры wildberries"
Сгенерировано запросов: 5
Найдено каналов: 2
Успешно распарсено: 1
Квалифицировано: 0

Ноль лидов.

Почему не сработало

Web Search находил статьи ПРО каналы (“Топ-10 каналов для селлеров”), а не сами каналы. Google плохо индексирует Telegram и весь его контент. Ну а личные каналы мелких предпринимателей вообще не в поиске – у них там 500 подписчиков…
Можно было бы интегрировать TGStat API, но это усложнение, траты на стадии MVP. Да и главно: даже если найти канал, это ещё не лид с болью. Это просто канал. Поэтому нуно было придумать альтернативу такому поиску.

4. Архитектура v2: Парсинг участников чатов

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

Короче, мысль: один чат = сотни потенциальных лидов.
Поэтому решил переписать архитектуру:

[Список seed-чатов: @marketplace_pro, @wb_sellers, ...]
↓
[Парсинг 1000 сообщений → кто что писал]
↓
[Фильтрация по времени: только последние 10 дней]
↓
[LLM ищет болевые сообщения в пачке]
↓
[Квалификация авторов болевых сообщений]
↓
[Карточки лидов со ссылками на оригинальные сообщения]

Что изменилось концептуально

v1

v2

Ищем каналы через интернет

Парсим людей из известных чатов

Надеемся найти владельца бизнеса

Видим реальные сообщения с болями

Холодный контакт в личку

Можем ответить на конкретное сообщение в чате

Масштаб: единицы каналов

Масштаб: сотни участников

Результат

7 чатов по 1000 сообщений. Стоимость анализа — $0.11. На выходе — список людей с конкретными болями, которые они сами написали за последние 10 дней.

5. Как выглядит результат

Карточка лида в Markdown-отчёте:

## Лид #1 — Оценка: 4/5

**Контакт:** @maxsmek
**Канал:** @max_seller_wb (1,240 подписчиков)

### Бизнес

Селлер Wildberries, ниша — товары для дома.
Судя по каналу, оборот 2-5 млн/мес. Ведёт канал сам, делится опытом.

### 💬 Болевые сообщения

🔥 **[2 дня назад]** в @marketplace_pro:

"Подскажите тг бота чтобы отслеживать остатки фактические
по складам... хоть как-нибудь, даже косвенно, чтобы успевать"

[Открыть сообщение →](https://t.me/marketplace_pro/8934)

**[5 дней назад]** в @wb_sellers:

"Кто автоматизировал ответы на отзывы? Трачу по 2 часа в день"

[Открыть сообщение →](https://t.me/wb_sellers/12847)

### Что предложить

Telegram-бот для мониторинга остатков по складам WB
с алертами при падении ниже порога.

### Готовое сообщение

"Макс, привет! Видел твой вопрос в чате про отслеживание
остатков по складам. Делаем как раз такие боты — мониторинг
в реальном времени + уведомления. Показать как работает?"

Ключевая фича — ссылки на сообщения

По итогу можно кликнуть на ссылку, перейти в чат и ответить прямо на вопрос человека. Это уже не холодный спам, а релевантный ответ на его публичный запрос. Так намного безопаснее, можно не так париться за блок аккаунта. Хотя все равно я создал отдельный для данного дела.
Конверсия второго варианта выше на порядок. Ну, по идее — на практике пока только 1 из 6 ответил нормально, остальные просто проигнорили. Но хотя бы не пожаловались)

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

Стек

  • Python 3.11 — основа

  • Telethon — Telegram API для парсинга

  • gpt-5.1 — для квалификации (через CometAPI — прокси-площадка, доступная в России)

  • Docker — для изоляции и Telegram-сессий

  • Claude Code — для разработки (раньше сидел на Cursor, но понял что каждый раз в восторге когда выбираю Claude – поэтому переехал полностью)

Как основная IDE — NeoVim, привык со времён Arch (сейчас на Mac переехал). Cursor иногда использую, но только для быстрого чтения и редактирования файлов.

Почему gpt-5.1 через CometAPI

Для квалификации использую gpt-5.1 через CometAPI — это прокси для OpenAI API, доступный в России. Оптимально по соотношению цена/качество. Сначала ехал на gpt-4.1 – но посмотрел что input у обеих моделей одинаковый, output у 5.1 дороже – но он меня не интересует – мне надо именно загружать в него большое количество сообщений для анализа. Пробовал Claude Sonnet — дороже при сопоставимом качестве для этой задачи. Экономия на масштабе ощутимая.
ЭТО НЕ РЕКЛАМА!

Telethon и авторизация

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

Логика обработки сообщений

  1. Берём 1000 сообщений из чата

  2. Отсекаем всё старше 10 дней

  3. Отправляем пачку в LLM для поиска болевых сообщений

  4. Запоминаем авторов болевых сообщений

  5. Квалифицируем каждого автора отдельно

Люди без личного канала тоже анализируются – просто у них ниже оценка, меньше гарантий что это реально владелец бизнеса. Не отсекаю сразу.

Система оценок

Изначально делал 0-10, потом упростил до 0-5. Где 1 — уже потенциальный лид, но я работаю с оценкой от 2. Так проще фильтровать и меньше шума.

Web Search для обогащения

Изначально добавил поиск упоминаний в сети — username + ниша, имя + “отзывы”. Но честно — пока не заметил конкретного буста в качестве квалификации. Траты есть, а выхлопа особого нет. Держу отключённым, может потом докручу.

Защита от бана

Telegram банит за агрессивный парсинг. Реализовал три режима:

Режим

Задержка между чатами

Между запросами

fast

15-30 сек

1-2 сек

normal

30-60 сек

2-3 сек

careful

60-120 сек

3-5 сек

Плюс:

  • Рандомизация всех интервалов (не ровно 3 сек, а 2.3-3.7)

  • Лимит чатов за сессию

  • Обработка FloodWaitError — ждём сколько сказали + буфер

За месяц использования — ни одного бана.

Структура проекта (v2)

lead_finder/
├── config.py # Конфигурация и режимы безопасности
├── modules/ # Core-логика (используется и CLI, и ботом)
│ ├── input_handler.py # Валидация входных данных
│ ├── members_parser.py # Парсинг участников чатов
│ ├── qualifier.py # LLM квалификация
│ ├── output.py # Форматирование результатов
│ └── enrichment/
│ ├── telegram.py # Парсинг каналов лидов
│ └── web_search.py # Обогащение через поиск
├── bot/ # Telegram-бот (v3, добавлен позже)
│ ├── main.py # Точк�� входа бота
│ ├── handlers/ # Обработчики команд и кнопок
│ ├── models/ # SQLAlchemy модели
│ ├── services/ # Бизнес-логика (runner, scheduler)
│ └── ui/ # Форматирование сообщений
├── generate_session.py # Создание Telethon сессии
└── docker-compose.yml

7. Грабли и факапы

v1 с Web Search — главный провал

Потратил день на начальную архитектуру, которая не взлетела. Но это нормально – быстрые итерации важнее идеального плана. Переделал за день.

Claude Code уходит не туда

Конечно, это происходит постоянно. Самая частая проблема – забываешь прописать в инструкции, что нельзя трогать старый функционал. Начинает улучшать старые функции, которые работали. Откатываю через git, добавляю ограничение в промпт, еду дальше.

Ложноположительные

Система дала 4/5, а человек оказался не тем – конечно бывает. Поэтому читаю карточки внимательно, а не спамлю всем подряд. LLM квалифицирует, но финальное решение — моё.

Авторизация через бота

Хотел красиво — чтобы пользователь авторизовывался прямо в боте. Telegram такое не пропустил. Пришлось откатиться к ручному вводу кода в терминале. Не масштабируется, но работает для личного использования.

8. Честные цифры

v2 (CLI)

Метрика

Значение

Время разработки v2

~8 часов чистого времени

Строк кода (core модули)

~1000 сток мы выдал Claude

Стоимость анализа 7 чатов

$0.11

v3 (Telegram-бот)

Метрика

Значение

Время разработки v3

~1 неделя (поверх v2)

Строк кода (бот + БД)

~1500 дополнительно

Стек

aiogram 3.x, SQLAlchemy, APScheduler, PostgreSQL

Использование

Метрика

Значение

Seed-чатов в базе

~30 (5 категорий по 4-8 чатов)

Активных программ в боте

3 (селлеры, edtech, smm)

Написал лидам

6

Ответили

1 (сказал “если потребуется — напишет”)

Конверсия в заказ

пока 0, но и выборка маленькая

Категории чатов: маркетплейсы, предприниматели, edtech, smm, риэлторы.
Честно — конверсия пока не впечатляет. Но система работает меньше месяца, выборка маленькая. Главное — процесс автоматизирован, я трачу минуты вместо часов на поиск.

9. v3: Telegram-бот (реализовано после CLI)

После того как CLI-версия заработала, захотелось полной автоматизации. Тратить время на ручные запуски — не масштабируется.
За следующие несколько дней собрал полноценный Telegram-бот на aiogram 3.x.

Что получилось

Программы поиска — сохранённые конфигурации:

  • Название + ниша (“Селлеры WB”, “Инфобизнес”)

  • Список чатов для парсинга

  • Настройки (min_score, max_leads, обогащение)

  • Расписание автозапуска

Автозапуск по расписанию:

  • APScheduler интегрирован в бота

  • Каждая программа запускается в своё время

  • После завершения — бот присылает уведомление с результатами

Дедупликация:

  • SQLAlchemy + PostgreSQL

  • Лиды с одним username не дублируются

  • История сохраняется, можно вернуться к старым

Интерфейс через inline-кнопки:

  • Никаких команд — только кнопки

  • Создание программы — пошаговый диалог (FSM)

  • Карточки лидов приходят прямо в бот

Пример работы

Утром в 09:00:

🔔 Автозапуск завершён

📁 Селлеры WB
⏰ Запуск в 09:00

📊 Результаты:

• Новых лидов: 5

[👀 Посмотреть лидов]

Нажимаю кнопку — получаю карточки:

🎯 Лид #1 из 5

Программа: Селлеры WB

━━━━━━━━━━━━━

👤 @username

⭐ Оценка: 4/5

  
💼 Бизнес: Селлер на WB...

😤 Боли: Теряет заявки между Excel и мессенджерами

💡 Что предложить: Бот для сбора заявок...


📝 ��ообщение для @username:

━━━━━━━━━━━━━

Привет! Видел твой вопрос про потерю заявок.
У нас есть готовое решение...

[⏭ Следующий лид]

Стек бота

  • aiogram 3.5 — асинхронный фреймворк для Telegram

  • SQLAlchemy 2.0 — ORM для БД

  • PostgreSQL — основная база (на продакшене), SQLite для локальной разработки

  • APScheduler — планировщик задач

  • Docker — всё работает в контейнере

Что изменилось архитектурно

CLI-модули (members_parser, qualifier, enrichment) стали библиотекой — бот их импортирует и использует как есть. Не пришлось переписывать логику.
Разделение на CLI и бот позволило оставить оба интерфейса:

  • CLI — для отладки, тестов, ручных прогонов

  • Бот — для ежедневного использования

Грабли с ботом

APScheduler и asyncio:

Scheduler хотел синхронные job-функции, а весь код — async. Решение: обернул async-функции в asyncio.create_task().

База заблокирована (SQLite):

Несколько одновременных запусов программ — database locked. Перешёл на PostgreSQL для проды, проблема ушла.

FSM состояния терялись:

Использовал MemoryStorage — при перезапуске бота состояния сбрасывались. Для продакшена можно RedisStorage, но пока живу с этим.

Ошибка .get() на None:

LLM иногда возвращал product_idea: None вместо {}. Код падал с AttributeError. Исправил все места на .get(key) or {} вместо .get(key, {}).

10. Что дальше

v3 работает, но есть что улучшить:

Следующие шаги:

  • Парсинг комментариев в каналах (сейчас только чаты)

  • Мониторинг новых сообщений в чатах в реальном времени

  • Скраппинг фриланс-площадок – Kwork, FL.ru

  • A/B тестирование сообщений аутрича

Про сервис для других:

Хотелось бы открыть как сервис. Проблема – авторизация Telethon. Каждому пользователю нужна своя сессия, а Telegram не пропускает автоматизацию через ботов. Варианты:

  1. Генерировать сессию вручную для каждого (не масштабируется)

  2. Использовать Telegram Login Widget (пока не разобрался как подружить с Telethon)

  3. Ограничиться self-hosted версией с инструкцией

Пока использую только для себя. Если у кого есть идеи — пишите

Реальный пример сообщений

🎯 Лид #14 из ??

Программа: Маркетплейсы

👤 @скроююзернейм
⭐ Оценка: 2/5

💭 С высокой вероятностью владелец или самостоятельно управляющий продавец на 
маркетплейсах. Есть явный запрос: отслеживать отзывы по кластерам на Ozon и WB.
Боль формулируется как вопрос, без деталей объёма и последствий, 
поэтому глубина боли и формат решения пока неочевидны. Потенциально можно 
закрыть задачей по сбору и структурированию отзывов через парсер и дашборд
но нужно уточнение, что именно она хочет видеть под «кластерами».

💼 Бизнес:

Селлер на маркетплейсах Ozon и Wildberries (Малый бизнес)

😤 Боли:

• «Подскажите, можно ли через какие либо программы отследить отзывы по 
кластерам ? На озон и вб»

💡 Что предложить:

Сервис/скрипт-парсер отзывов с Ozon и Wildberries с кластеризацией по темам и 
визуализацией в дашборде

✅ Решает: Автоматический сбор и группировка отзывов по темам вместо ручного 
просмотра, что позволяет быстрее видеть типовые проблемы и запросы покупателей

💰 Ценность: Экономия времени на ручной разбор отзывов, возможность оперативно 
видеть повторяющиеся проблемы и улучшать карточки/продукт по данным


📝 Сообщение для @тутимяпользователя:

ИМЯ, вы спрашивали в чате, можно ли отслеживать отзывы по кластерам на Ozon и 
WB. Это как раз можно сделать через парсер + небольшой дашборд: отзывы 
автоматически подтягиваются и группируются по темам (качество, доставка, 
размер и т.п.). Если интересно, могу показать, как это технически реализуется 
и что вы сможете видеть в отчётах, а вы поймёте, подходит ли это под ваши 
задачи.

11. Выводы

1. Автоматизируй свои процессы, а не только клиентские.

Вместо очередного бота для заказчика потратил 15 часов (8 на CLI + 7 на бот) на инструмент, который приносит заказчиков. ROI потенциально бесконечный.

2. LLM-first разработка работает.

Я не написал ни строчки кода руками – всё через Claude Code. От идеи до работающего MVP за 8 часов. От CLI до полноценног бота с БД и работы п расписанию – ещё неделя. Всем рекомендую! Кто читал мои прошлые статьи — знает методологию.

3. Провалы — часть процесса.

v1 с Web Search не сработала. Вместо того чтобы упираться, переделал архитектуру. v2 взлетела. Быстрые итерации важнее идеального плана. Провал — это информация, не приговор.

4. Документация — это контекст.

Каждую версию начинал с детального ТЗ. Это позволяло передавать контекст между сессиями Claude и не терять фокус. ТЗ – это не бюрократия, это инструмент мышления. Особенно критично когда разрабатываешь с LLM. Фиксирую все ошибки, в отдельные ISSUES.md, каждая новая фича – новая документация, которая не должна конфликтовать с текущей реализаций. Каждый успешный запуск нового этапа – RESULT.md в котоом задокументирован пруф успеха.

5. Модульная архитектура окупается.

CLI-модули стали библиотекой для бота без переписывания. Разделение интерфейса (CLI/bot) и логики (парсинг/квалификация) позволило эволюционировать систему без заметных проблем (на возможно есть незаметные).

Если интересна методология LLM-разработки — в прошлой статье подробно разобрал работу с документацией, TDD и управление контекстом. А еще нагло тут прицеплю ссылку на канал нашей команды.

Готов к гнилым помидорам. Как показывает практика — это только добавляет просмотров)

Автор: okoloboga

Источник

Rambler's Top100