← Назад к портфолио

AI-бот для автосинхронизации данных 3-х маркетплейсов + XML

⚡ Проблема

Продавец на WB, Ozon и Яндекс.Маркете тратил 12+ часов в неделю на ручное копирование данных между платформами. Разные форматы, единицы измерения, справочники — ошибки приводили к отклонению товаров.

✅ Решение

Telegram-бот с AI синхронизирует данные трёх маркетплейсов за 3 минуты. Поддерживает стандартный режим (3 МП) и МВМ-режим (3 МП + XML-каталог поставщика) с 5-уровневой валидацией каждого значения.

⚙️ Что сделано

🤖

AI-сопоставление столбцов

Двухпроходный AI-анализ заголовков: первый проход — все столбцы, второй — несопоставленные остатки. 95%+ точность на реальных файлах.

📦

МВМ-схемы (4 источника)

Расширенный режим: WB + Ozon + Яндекс + XML-каталог (YML-фид). 11 групп сопоставлений. Пустые ячейки МП заполняются из XML по vendorCode.

5-уровневая валидация

От точного совпадения до AI-запроса. Считывает выпадающие списки (data validation) прямо из Excel, включая именованные диапазоны типа =ЦветаСписок.

📐

Умная конвертация единиц

Автоматический перевод мм↔см, г↔кг. Обрабатывает составной формат «71/68/197» Яндекса и раздельные столбцы WB/Ozon.

Фоновая очередь задач

Redis-backed очередь с in-memory fallback. Семафор ограничивает 5 параллельных обработок. Пользователь не ждёт — бот работает асинхронно.

🔐

Многоуровневые права доступа

4 роли: Владелец → Администратор → Редактор → Пользователь. Белый список без лимитов, кэш TTL 60 сек. Middleware на уровне dispatcher.

🗄️

PostgreSQL + Redis

asyncpg с connection pool. Redis для FSM-состояний и сессий (TTL 30 мин). Идемпотентные миграции. При недоступности Redis — автоматический fallback.

📊

Excel-отчёты с AI-логами

Отдельный лист «AI_Логи»: маркетплейс, столбец, исходное значение, сопоставлено с, метод. Полная прозрачность каждого решения AI.

📋 Два типа схем

⚙️ Стандартная

3 маркетплейса

  • WB + Ozon + Яндекс.Маркет
  • 4 группы сопоставлений (тройные + парные)
  • Фильтрация по типу (тройные / парные WB+Ozon и др.)
  • Автоперемещение между группами при редактировании
  • Ввод NA — удаление столбца из тройного
📦 МВМ

3 МП + XML-каталог

  • WB + Ozon + Яндекс + YML-фид МВидео/xway
  • 11 групп: четверные, тройные с XML, парные с XML
  • Новые артикулы из XML автоматически добавляются в МП
  • Поля XML: [XML] vendor, [XML param] Цвет
  • Файлы XML > 20 МБ — приём по прямой HTTP-ссылке

🔄 Как это работает

Загрузка файлов
Пользователь отправляет 3 Excel-файла (WB, Ozon, Яндекс) через Telegram. Для МВМ — дополнительно XML-каталог или прямую ссылку (до 200 МБ).
Задача уходит в очередь
Хендлер немедленно ставит задачу в Redis-очередь и подтверждает приём. Обработка идёт в фоне — бот не блокируется для других пользователей.
AI-сопоставление столбцов
AIComparator читает заголовки, делает два прохода. Для МВМ — отдельный AI-запрос сопоставляет XML-поля с МП, затем четыре группы объединяются и дедублируются.
Синхронизация данных
Порядок: выравнивание артикулов → габариты → тройные/парные сопоставления → заполнение из XML (МВМ). CPU-тяжёлые шаги вынесены в asyncio.to_thread().
5-уровневая валидация каждого значения
AI-валидация только для ячеек, изменённых ботом (changes_log). Ячейки, заполненные пользователем, записываются без AI-запросов — сокращение с 500 000 до ~300 вызовов.
Результат пользователю
3 синхронизированных файла + Excel-отчёт с листом «AI_Логи». Воркер сам отправляет файлы через Bot.send_document без участия хендлеров.

🧠 Валидация значений: 5 уровней

01
Точное совпадение
«Закалённое стекло» = «Закалённое стекло» — без обработки, мгновенно
мгновенно
02
Нормализация
lowercase + ё→е: «закалённое стекло» → «Закаленное стекло»
мгновенно
03
Извлечение чисел
regex \d+: «Размер 42» → «42» из validation list
мгновенно
04
Subset matching
Совпадение по словам: «стекло закаленное прочное» = «Закаленное стекло»
быстро
05
AI-сопоставление
GPT анализирует контекст и находит ближайшее значение из справочника. Только если все предыдущие уровни не сработали.
AI-запрос
💡

Оптимизация v4.8: AI-валидация запускается только для ячеек, изменённых ботом при синхронизации. Ячейки, заполненные пользователем, пропускаются. Количество AI-вызовов при сохранении сократилось с потенциальных 500 000 до ~300.

📊 Результаты

12+ ч
Экономия времени в неделю
3 мин
Синхронизация 200+ товаров
95%+
Точность AI-сопоставления
50+
Полей сопоставляется автоматически
11
Групп сопоставлений в МВМ-схеме
20 дн
Срок разработки с тестированием

⚙️ Архитектурные особенности

🧱
SOLID + Facade-оркестратор
DataSynchronizer — чистый оркестратор. Логика разнесена по 7 компонентам подпакета services/sync/: AiValidator, ColumnSyncer, XmlSyncer, DimensionsSynchronizer, ArticleAligner, ValueConverter, ExcelFileManager.
Полностью асинхронная архитектура
CPU-тяжёлые операции (pandas, openpyxl) вынесены в asyncio.to_thread(). AI-запросы через AsyncOpenAI. Семафор Semaphore(5) — глобальный для всех задач, предотвращает перегрузку OpenRouter.
📋
FSM + Redis-сессии
RedisStorage для FSM-состояний (переживают перезапуск). SessionStorage с TTL 30 мин для временных данных загрузки. Полный in-memory fallback при недоступности Redis.
🗑️
Фоновая очистка файлов
_FileCleanupService в TaskWorker запускается раз в 24 ч, удаляет файлы старше FILE_MAX_AGE_DAYS из upload/download/output директорий. Обход FS в run_in_executor, не блокирует event loop.
🔐
Graceful shutdown
Строгий порядок: task_worker.stop() (ждёт активные задачи) → comparator.close() → task_queue.disconnect() → shutdown_storage(). Нет утечек соединений httpx.AsyncClient.
🔍

Работа с validation lists из Excel: Бот считывает выпадающие списки (data validation) прямо из файлов маркетплейсов, включая именованные диапазоны =ЦветаСписок. Загружает один раз при старте — O(1) dict-lookup при сохранении вместо повторного сканирования DV-правил на каждую ячейку.

🛠️ Технологии

Python 3.10+ aiogram 3.x PostgreSQL asyncpg Redis OpenRouter API AsyncOpenAI pandas openpyxl httpx FSM asyncio

✅ Подойдёт вам, если

  • Продаёте на нескольких маркетплейсах (WB, Ozon, Яндекс.Маркет и др.) и тратите часы на копирование данных между Excel-файлами разных форматов
  • Нужна синхронизация с XML-каталогом поставщика — автозаполнение МП-файлов из фида и добавление новых артикулов
  • Хотите автоматическую валидацию значений по справочникам маркетплейсов — с логом каждого AI-решения
  • Требуется масштабируемое решение с очередью задач для команды из нескольких операторов с разграничением доступа
  • Важна надёжность: фоновая обработка, fallback при недоступности Redis, автоочистка временных файлов

Раньше я тратил целый день на обновление каталога во всех трёх маркетплейсах. Бот делает это за 3 минуты, и я уверен что данные корректные — AI проверяет каждое значение по справочникам. Теперь могу обновлять товары хоть каждый день!

— Александр Владимирович, владелец интернет-магазина

Нужна автоматизация для вашего e-commerce?

Разработаю AI-систему синхронизации данных под ваши маркетплейсы, форматы файлов и каталоги поставщиков

Обсудить проект →