Полки с посылками на складе интернет-магазина
← Все проекты

E-commerce · Разработка · в продакшене

Платформа для продавцов Avito: AI-ассистент и CRM

Покупатель на Avito получает ответ сразу и только про то, что есть в наличии. Продавец подключается к сервису сам и ведёт все свои магазины из одного кабинета.

1кабинет на все магазины продавца
7дней пробного периода

Задача

Покупатели на Avito спрашивают одно и то же: есть ли размер, сколько стоит, из чего сделано, как доставят. Особенно в одежде. Пока продавец отвечает вручную, падает конверсия и объявление теряет место в выдаче.

Если магазинов несколько, добавляется вторая проблема: нет одного места, где вести каталог, смотреть продажи и синхронизировать карточки с Avito.

Что сделали

Подключение без менеджера

Регистрация с подтверждением по почте, пробная неделя для новых аккаунтов, биллинг, который переводит расход токенов модели в рубли. У команды платформы своя админка с блокировкой клиентов и инбоксом поддержки.

Покупатель получает ответ про свой товар

Бот получает сообщения через вебхуки Avito Messenger API. Перед каждым ответом в системный промпт подставляется карточка товара: цена, наличие, ссылка.

Сделка не уходит с площадки

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

Все магазины в одном кабинете

Бот отвечает от имени каждого подключённого магазина его собственными учётными данными. У каждого свой тумблер «бот отвечает» и свой промпт: имя продавца, стиль, ассортимент. Магазин можно передать другому аккаунту, передачу одобряет администратор платформы.

Каталог не нужно заводить заново

CRM забирает объявления с Avito и публикует их обратно через XML-фид автозагрузки. У товара варианты по размеру и цвету, фотографии и свои поля, которые остаются в CRM и не уходят в фид.

Видно, какие товары перестали продаваться

Путь от просмотров через сообщения до заказов, статистика по каждому товару по часам и дням, выручка и отчёт по позициям, которые остывают.

Почему этому можно верить

Остатки
На каждое входящее сообщение бот заново спрашивает остаток у Avito через Stock Management API и не берёт его из кэша с таймаутом. Лишний запрос дешевле, чем пообещать размер, которого уже нет.
Политика
На правила написан отдельный набор состязательных тестов: в нём собраны попытки вытянуть из бота то, что он говорить не должен.
Тест-чат
Промпт магазина можно прогнать в тест-чате. Такие диалоги не попадают в боевые данные.
Фид
XML-фид закрыт golden-тестами: сгенерированный файл должен совпадать с эталоном байт в байт.
Выкладка
Автодеплой на сервер запускается только после зелёного пайплайна: ruff, mypy в строгом режиме и тесты всех трёх модулей.
Прод
Контейнеры read-only, без root, со снятыми capabilities и лимитом процессов. Мониторинг на Prometheus, Grafana и Alertmanager.

Как устроено

Состав
Два приложения под одним доменом: бот и мультитенантная CRM с админкой платформы.
Бэкенд
Python 3.12, FastAPI, SQLAlchemy 2 с Alembic, Pydantic v2. Пароли в Argon2, сессии в JWT с httpOnly-cookie, CSRF-токены на мутациях.
Модель
GigaChat через langchain-gigachat. Второй движок диалога на LangGraph в проде выключен и сверен с основным parity-тестами.
Данные
PostgreSQL 16 с отдельными базами бота и CRM. Redis: кэш остатков и сессий, дедупликация вебхуков, очередь исходящих сообщений.
Фронтенд
Next.js 15, React 19, TypeScript, Tailwind CSS 4, shadcn/ui.
Инфраструктура
Docker Compose, Caddy 2, GitHub Actions с автодеплоем по SSH.

Метод

Один разработчик на всё, от архитектуры до эксплуатации. Код писался в паре с Claude Code, архитектурные решения и ревью оставались за человеком.

Похожая задача?

Опишите её — пришлём состав работ и смету за 24 часа.

Состав работ и смету пришлём за 24 часа.

Следующий проект