Интеграция Rozetka, KeyCRM и Новая почта Фулфилмент
Сервис на Python: заказ с Rozetka попадает на склад Новая почта Фулфилмент с ТТН и этикеткой по одному статусу в KeyCRM, плюс сообщения складу в Viber, предоплата по показателю выкупа и аналитика остатков.
Магазин продаёт на Rozetka, ведёт заказы в KeyCRM, а товар хранит на складах Новая почта Фулфилмент. Склад упаковывает заказ только по этикетке службы доставки, а встроенная интеграция KeyCRM передавала заказы на фулфилмент без неё. Поэтому ТТН для Rozetka Delivery и Meest менеджеры создавали вручную в кабинете Rozetka, а этикетки пересылали отдельно. Мы написали сервис, который делает это сам: менеджер меняет статус в KeyCRM, а заказ попадает на склад с ТТН и PDF-этикеткой. С 12 октября 2026 года сервис работает на сервере заказчика и за первые две с половиной недели передал на склад более 170 заказов.
Технический стек
Python 3.12 + FastAPI на сервере заказчика, вебхуки и триггеры KeyCRM, API продавца Rozetka (ТТН Rozetka Delivery, Meest и Новой почты, этикетки, статусы), SOAP-API склада Новая почта Фулфилмент и Green API для показателя выкупа. Аналитика остатков считается в SQLite по таймеру systemd.

Один статус вместо ручной работы
Менеджер ставит в KeyCRM статус «Передать на фулфилмент», и триггер KeyCRM отправляет вебхук в сервис. Сервис проверяет доставку, берёт имеющуюся ТТН или создаёт новую через API Rozetka, забирает PDF-этикетку и создаёт заказ на складе НП с этикеткой во вложении и номером заказа Rozetka. Склад выбирается тот, где есть весь товар. Артикул Rozetka переводится в артикул склада, а если нужен другой, менеджер вписывает замену в поле заказа или товара в KeyCRM. Заказ, который уже есть на складе, повторно не отправляется. Первая реальная отгрузка прошла 7 октября, и заказчик подтвердил, что этикетка дошла на склад правильно.

Статусы в Rozetka
От статусов на Rozetka зависит комиссия, а KeyCRM мог откатить статус и сбросить уже созданную ТТН. Мы разобрали переходы статусов Rozetka и согласовали с заказчиком, какие статусы KeyCRM и куда передаются. Правила настроили в KeyCRM, а статус передачи на фулфилмент на Rozetka не передаётся вовсе.
Товар со своего склада
Часть товара отгружается не с фулфилмента, а с собственного склада. Для этого в KeyCRM есть статус «Работник». Автоматические ТТН Новой почты в KeyCRM не создавались ни разу, потому что служба брала описанием полное название товара, а НП отклоняла его как слишком длинное. Теперь ТТН создаёт сервис через Rozetka с коротким описанием. Работник склада получает в Viber сообщение в том же формате, что раньше писали вручную: номер за день, ТТН, служба, получатель, артикул, примечание для склада, количество и ссылка на этикетку.

Предоплата для рискованных покупателей
Для неоплаченных заказов с оплатой при получении сервис берёт из Green API Rozetka показатель выкупа покупателя и записывает его в заказ. Если он ниже порога, заказ на Rozetka переходит в ожидание предоплаты. Порог владелец задаёт сам в условии триггера KeyCRM.

Аналитика остатков
Вторым этапом мы сделали аналитику остатков. Каждое утро в 7:00 сервис собирает продажи из KeyCRM, остатки и поступления складов НП и считает скорость продаж без дней, когда товара не было, сезонность, прогноз, точку заказа, количество к заказу с кратностью, упущенную выручку и ABC. Каждый артикул получает статус: критично, уточнить остаток, заказать, норма или застой. Результат — отчёт-таблица по всем артикулам.

Безопасность и персональные данные
Заказчик просил, чтобы у сервиса не было публичного доступа через браузер и чтобы персональные данные покупателей никуда не утекали. Сервис работает на его сервере от отдельного пользователя без входа в систему. Наружу открыты только вебхук с секретом и временные ссылки на этикетки, а на любой другой адрес сервер просто закрывает соединение.
Итог
На нас передача заказов с Rozetka на склад Новая почта Фулфилмент с ТТН и этикеткой по одному статусу, выбор склада и артикулов, настройка статусов KeyCRM ↔ Rozetka, ТТН и сообщения для собственного склада, предоплата по показателю выкупа, ежедневная аналитика остатков и запуск на сервере заказчика.
