Мониторинг объявлений Vinted с Telegram-ботом и защитой от блокировки
Кейс · мониторинг маркетплейса и Telegram-бот · 2026
Разработал сервис, который круглосуточно следит за поисковыми ссылками Vinted на нескольких доменах и присылает карточку в Telegram, как только появляется новое объявление — без единой строчки кода со стороны пользователя: ссылки, аккаунты и паузы между проверками управляются прямо из меню бота.
Задача
Вручную обновлять поиск на Vinted несколько раз в день, чтобы не пропустить нужный лот — занятие муторное и ненадёжное: интересные объявления разбирают за минуты. Нужен был бот, который сам проверяет несколько сохранённых запросов, присылает карточку сразу при появлении нового товара и не требует переключаться между сайтом и Telegram.
Отдельное условие — не превращать мониторинг в агрессивный скрапинг. Vinted ограничивает частые запросы, и сервис должен вести себя предсказуемо: соблюдать паузы, самостоятельно восстанавливаться после временных ограничений и не блокировать аккаунты, которыми реально пользуется владелец.
Как сервис не попадает под блокировку
-
Пауза на уровне identity, а не запроса
Все ссылки одного Vinted-аккаунта — включая разные домены вроде vinted.pl и vinted.de — делят один таймер: у аккаунта один IP и одна сессия на всё, поэтому и пауза общая. Только гостевые запросы без аккаунта группируются отдельно, по домену.
45–75 с по умолчанию · переопределяется индивидуально на аккаунт -
Экспоненциальный cooldown после ошибок
После 401, 403 или 429 пауза для этой identity увеличивается экспоненциально, а не сбрасывается на дефолт. Первый успешный ответ обнуляет счётчик.
401 / 403 / 429 · exponential backoff -
Заморозка и отчёт на любой не-200
Любой ответ, отличный от 200, замораживает identity целиком минимум на 10 минут и дописывает строку в отдельный markdown-отчёт: время, ссылка, аккаунт, домен, статус, предпринятое действие. Ни cookies, ни пароли прокси в отчёт не попадают.
report_not_200.md · только факты, без секретов -
Резервный прокси только после повторных ограничений
Прямое подключение остаётся основным маршрутом. Общий резервный прокси включается для аккаунта только после повторных ограничений — это временная мера, а не постоянный режим работы.
failover, не default route -
Персональный прокси с fail-closed поведением
Для отдельного аккаунта можно задать постоянный SOCKS5-прокси. Если у этого прокси любая ошибка — неверный пароль, недоступный порт, таймаут — запрос завершается ошибкой без отката на прямое подключение. Аккаунт физически не может "засветиться" с IP сервера.
socks5h · DNS через прокси · fail-closed -
Автоматическое обновление сессии
Бот проверяет действующую авторизацию, обновляет токены по официальному refresh-flow до истечения срока действия или при 401 и атомарно сохраняет обновлённые cookie — без ручного повторного входа на сайт.
JWT refresh · atomic cookie save
Точность: без дублей и без ложных уведомлений
- Один лот — одно уведомление. Одно и то же объявление видно на нескольких доменах Vinted под общим числовым id; заявка на отправку резервируется в отдельной таблице по этому id, так что вторая ссылка, нашедшая тот же лот, молча помечает его доставленным.
- Новое — не то же самое, что неизвестное. После добавления ссылки бот сохраняет текущую выдачу без рассылки и запоминает максимальный id как границу. Старое объявление, вернувшееся в нестабильную выдачу с меньшим id, не уведомляется повторно — уведомляются только действительно новые лоты.
- Проблемная ссылка не блокирует остальные. Если конкретная ссылка получает 403 подряд несколько раз, приостанавливается только она — на 10 минут, независимо от общего cooldown аккаунта.
Что получает пользователь в Telegram
Карточка объявления
Новый лот приходит сообщением сразу после обнаружения — без необходимости заходить на сайт и проверять вручную.
Управление без кода
Ссылки, аккаунты и настройки добавляются и меняются через меню бота: раздел «Ссылки», привязка аккаунта, включение/выключение рассылки.
Прозрачная диагностика
Отдельные разделы меню показывают загрузку аккаунтов и историю пауз по 403 — видно, что происходит, не читая логи на сервере.
Архитектура
Telegram-бот
Фреймворкaiogram 3, полностью асинхронный, без блокирующих вызовов в обработчиках.
МенюУправление ссылками, аккаунтами и паузами прямо в чате, без доступа к серверу.
РассылкаПоддержка личных чатов и групп с проверкой прав на отправку.
Vinted-клиент
HTTPhttpx с поддержкой SOCKS5 (socksio), устойчивые к сети повторные попытки.
АккаунтыИзолированный cookie jar на каждое сочетание аккаунт/домен/маршрут.
ДанныеSQLite через aiosqlite: ссылки, найденные позиции, история пауз.
Эксплуатация
Сервис работает как systemd-юнит с автоперезапуском при сбое. Резервное копирование запускается по таймеру раз в сутки: консистентный снапшот SQLite снимается прямо во время работы бота (через штатный backup API базы, без остановки процесса), упаковывается вместе с конфигурацией и cookie-сессиями и уходит по SSH на доверенное хранилище — семь последних версий хранится всегда под рукой.
Перед каждым релизом прогоняется набор из 100 автотестов и проверка синтаксиса всех модулей — правки логики цен, дедупликации и лимитера запросов не уходят в продакшен без проверки.
Безопасность
- пароли, токены, cookies и заголовки авторизации никогда не попадают в логи — ни в обычном режиме, ни при ошибках;
- в отчёт о не-200 ответах и в лог прокси пишутся только технические поля: аккаунт, домен, статус, длительность запроса — без credentials;
- файлы cookie-сессий и секретов хранятся с правами 600/700, доступны только процессу бота;
- персональный прокси аккаунта работает в режиме fail-closed — ошибка прокси не приводит к скрытому переключению на прямое подключение;
- бэкапы не шифруются на диске, но передаются только по SSH и хранятся на доверенном NAS, а не в каталоге сайта.
Результат
Владелец получает мгновенное уведомление о новом объявлении на нескольких сохранённых запросах Vinted, полностью управляет ссылками и аккаунтами из Telegram и не думает о блокировках: сервис сам выдерживает паузы, откатывается на резервный маршрут при необходимости и восстанавливает сессию без ручного вмешательства.

Продублированные объявления с разных доменов не создают лишних уведомлений, а старые лоты, вернувшиеся в нестабильную выдачу, не путаются с действительно новыми — итоговая лента в Telegram остаётся короткой и точной.
Python · aiogram · httpx · SOCKS5 · aiosqlite · SQLite · Telegram Bot API · systemd · Rate limiting · Anti-ban
