Зачем селлеру бот для слотов поставок
У каждой поставки FBO на Озоне есть таймслот: дата и интервал времени, когда склад примет товар. Свободные слоты на популярных складах разбирают быстро, особенно в сезон, и продавцу приходится по нескольку раз в день обновлять кабинет, чтобы поймать освободившееся окно.
На Wildberries похожая история с коэффициентом приёмки. От него зависит, сколько стоит сдать товар на склад, а бесплатная приёмка появляется ненадолго и на разных складах в разное время.
Задача была снять это ручное дежурство. Продавец один раз говорит боту, что ему нужно, а дальше бот следит сам и пишет, когда получилось.
Как бот бронирует таймслоты Озон
- Продавец добавляет кабинет по Client ID и API-ключу. Кабинетов может быть несколько.
- Бот подтягивает список поставок: номер, город, склад, количество товаров, статус. Список обновляется каждые 5 минут, отменённые поставки из него убираются.
- Продавец выбирает поставку и отмечает в календаре подходящие даты и интервалы: ночь, утро, день или вечер, можно несколько сразу.
- Каждые 30 секунд бот запрашивает свободные таймслоты через Ozon Seller API и бронирует первый подходящий.
- После брони приходит уведомление, а запись попадает в историю. Если на одну поставку создано несколько задач, бот предупредит о дубле.
Озон отдаёт время слотов в UTC, поэтому бот переводит его в московское: в сообщениях всегда привычное время.
Коэффициенты приёмки Wildberries: как бот ловит бесплатную приёмку
У Wildberries нет метода, который позволял бы забронировать поставку через API. Поэтому здесь бот работает как сторож: он не бронирует, а находит подходящий слот и сразу сообщает о нём.
Продавец выбирает кабинет, склад, допустимый коэффициент, тип поставки и даты. Складов у Wildberries около 170, поэтому список в боте листается страницами. Раз в 5 минут бот проверяет коэффициенты приёмки: 0 означает бесплатную приёмку, 1 и выше платную, -1 недоступную. Как только на складе открывается приёмка с нужным коэффициентом, бот присылает уведомление и закрывает задачу, а продавец бронирует слот в кабинете.
У API Wildberries строгий лимит на такие запросы, 6 в минуту. Поэтому бот не опрашивает склады по отдельности, а собирает все склады задачи в один запрос на кабинет.
Один бот в Telegram и MAX
Бот работает в двух мессенджерах на общей логике. Аккаунты связываются шестизначным кодом, после этого баланс, кабинеты и команда общие, а уведомления приходят туда, где удобнее.
Для MAX сообщения пришлось подстраивать отдельно. Ширина пузыря там равна самой длинной строке, и короткие строки переносятся по буквам. Кроме того, в клавиатуре помещается не больше 25 рядов кнопок, поэтому длинные списки разбиты на страницы.
Команда и оплата
- Владелец приглашает сотрудников ссылкой, которая действует 24 часа. Уведомления о бронях получает вся команда.
- Автоброни покупаются пакетами по 1, 3, 5 или 10 штук, оплата через ЮKassa.
- Реферальная программа: пригласивший и приглашённый получают по 2 автоброни.
- Кнопка поддержки сразу передаёт владельцу бота имя и ID пользователя.
Как устроено
Node.js 20 и Express, база SQLite в режиме WAL, Telegram-бот на grammY, клиент для MAX написан отдельно на long polling. API-ключи селлеров хранятся в зашифрованном виде (AES-256). Фоновые задачи: автобронь Озон каждые 30 секунд, обновление поставок и проверка коэффициентов Wildberries каждые 5 минут. Бот работает на собственном VPS под PM2.
Скриншоты


Частые вопросы
Может ли бот сам забронировать поставку на Wildberries?
Нет. Wildberries не даёт метода бронирования через API, поэтому бот следит за коэффициентами приёмки и присылает уведомление, а бронирует продавец в кабинете.
Что нужно, чтобы подключить кабинет Озон?
Client ID и API-ключ из кабинета продавца. Ключ хранится в зашифрованном виде.
Можно подключить несколько кабинетов и сотрудников?
Да. Кабинетов может быть несколько, а сотрудников владелец добавляет по ссылке-приглашению. Уведомления о бронях приходят всей команде.
Как часто бот проверяет слоты?
Таймслоты Озон каждые 30 секунд, коэффициенты приёмки Wildberries каждые 5 минут.
Чем версия в MAX отличается от Telegram?
Функции одинаковые, логика общая. Если связать аккаунты, баланс, кабинеты и команда будут общими.


