Мониторинг объявлений Vinted с Telegram-ботом и защитой от блокировки

Кейс · мониторинг маркетплейса и Telegram-бот · 2026

Разработал сервис, который круглосуточно следит за поисковыми ссылками Vinted на нескольких доменах и присылает карточку в Telegram, как только появляется новое объявление — без единой строчки кода со стороны пользователя: ссылки, аккаунты и паузы между проверками управляются прямо из меню бота.

5авторизованных аккаунтов
45–75 спауза между запросами
100позиций в каждой проверке
10 минзаморозка после ошибки
100автотестов

Задача

Вручную обновлять поиск на Vinted несколько раз в день, чтобы не пропустить нужный лот — занятие муторное и ненадёжное: интересные объявления разбирают за минуты. Нужен был бот, который сам проверяет несколько сохранённых запросов, присылает карточку сразу при появлении нового товара и не требует переключаться между сайтом и Telegram.

Отдельное условие — не превращать мониторинг в агрессивный скрапинг. Vinted ограничивает частые запросы, и сервис должен вести себя предсказуемо: соблюдать паузы, самостоятельно восстанавливаться после временных ограничений и не блокировать аккаунты, которыми реально пользуется владелец.

Как сервис не попадает под блокировку

  1. Пауза на уровне identity, а не запроса

    Все ссылки одного Vinted-аккаунта — включая разные домены вроде vinted.pl и vinted.de — делят один таймер: у аккаунта один IP и одна сессия на всё, поэтому и пауза общая. Только гостевые запросы без аккаунта группируются отдельно, по домену.

    45–75 с по умолчанию · переопределяется индивидуально на аккаунт
  2. Экспоненциальный cooldown после ошибок

    После 401, 403 или 429 пауза для этой identity увеличивается экспоненциально, а не сбрасывается на дефолт. Первый успешный ответ обнуляет счётчик.

    401 / 403 / 429 · exponential backoff
  3. Заморозка и отчёт на любой не-200

    Любой ответ, отличный от 200, замораживает identity целиком минимум на 10 минут и дописывает строку в отдельный markdown-отчёт: время, ссылка, аккаунт, домен, статус, предпринятое действие. Ни cookies, ни пароли прокси в отчёт не попадают.

    report_not_200.md · только факты, без секретов
  4. Резервный прокси только после повторных ограничений

    Прямое подключение остаётся основным маршрутом. Общий резервный прокси включается для аккаунта только после повторных ограничений — это временная мера, а не постоянный режим работы.

    failover, не default route
  5. Персональный прокси с fail-closed поведением

    Для отдельного аккаунта можно задать постоянный SOCKS5-прокси. Если у этого прокси любая ошибка — неверный пароль, недоступный порт, таймаут — запрос завершается ошибкой без отката на прямое подключение. Аккаунт физически не может "засветиться" с IP сервера.

    socks5h · DNS через прокси · fail-closed
  6. Автоматическое обновление сессии

    Бот проверяет действующую авторизацию, обновляет токены по официальному 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