---
## Перезапись цены приложения Ozon в InSales
Руководство по корректировке цен товаров из Ozon для отображения реальной стоимости с учетом наценок маркетплейса в магазине на платформе InSales.
---
### Описание проблемы
При интеграции с маркетплейсом Ozon возникает расхождение между ценой товара в вашем магазине InSales и финальной ценой на Ozon. Это связано с комиссиями и наценками маркетплейса.
**Последствия:**
- Некорректное отображение цены заказа в InSales
- Расхождения в бухгалтерском учете
- Сложности с анализом реальной прибыльности
- Проблемы с отчетностью
> **Important:** Корректировка цен необходима для точного учета реальной выручки от заказов с Ozon.
---
### Варианты решения
Техподдержка InSales предлагает два основных подхода к решению проблемы синхронизации цен.
---
### Вариант 1. Создание купона на скидку
#### Описание метода
Автоматическое применение купона на разницу между ценой в InSales и реальной ценой заказа с Ozon.
Шаг 1. Создание купона
**Путь в админ-панели:**
```
Личный кабинет InSales → Маркетинг → Скидки и купоны → Создать купон
```
**Параметры купона:**
| Параметр | Значение | Описание |
|:---------|:---------|:---------|
| Тип скидки | Процент | Скидка в процентах от суммы |
| Применение | Ко всему заказу | Скидка на весь заказ целиком |
| Код купона | `OZON_CORRECTION` | Уникальный код для идентификации |
| Активность | Активен | Купон должен быть активным |
> **Note:** Можно создать несколько купонов с разными процентами для разных категорий товаров.
Шаг 2. Расчет разницы цен
**Формула расчета:**
```javascript
// Пример расчета процента скидки
const insalesPrice = 1000; // Цена в InSales
const ozonPrice = 850; // Реальная цена с Ozon после комиссий
const difference = insalesPrice - ozonPrice;
const discountPercent = (difference / insalesPrice) * 100;
console.log(`Процент скидки: ${discountPercent.toFixed(2)}%`);
// Результат: Процент скидки: 15.00%
```
**Учет комиссий Ozon:**
| Категория | Типичная комиссия |
|:----------|:------------------|
| Электроника | 10-15% |
| Одежда и обувь | 15-20% |
| Товары для дома | 12-18% |
| Косметика | 15-25% |
Шаг 3. Применение купона к заказу
**Автоматическое применение через webhook:**
```javascript
// Пример обработчика webhook на создание заказа
function handleOzonOrder(orderData) {
// Получаем данные заказа
const insalesPrice = orderData.total_price;
const ozonPrice = orderData.custom_fields.ozon_final_price;
// Рассчитываем процент скидки
const discountPercent = ((insalesPrice - ozonPrice) / insalesPrice) * 100;
// Создаем или обновляем купон
const couponCode = `OZON_${orderData.id}`;
createCoupon(couponCode, discountPercent);
// Применяем купон к заказу
applyDiscountToOrder(orderData.id, couponCode);
}
```
#### Преимущества метода
- ✅ Простота реализации
- ✅ Нативная функциональность InSales
- ✅ Прозрачность для оператора магазина
- ✅ Сохранение истории скидок
#### Недостатки метода
- ❌ Требуется создание купона для каждого заказа
- ❌ Ручной расчет при изменении заказа
- ❌ Купоны могут накапливаться в системе
---
### Вариант 2. Применение внешней скидки по API
#### Описание метода
Использование API InSales для программного применения скидки к заказу без создания купона.
Шаг 1. Настройка внешней скидки
**Создание внешней скидки через API:**
```javascript
// POST /admin/orders/{order_id}/discounts.json
const applyExternalDiscount = async (orderId, discountAmount) => {
const response = await fetch(`https://your-store.myinsales.ru/admin/orders/${orderId}/discounts.json`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic ' + btoa('your_api_key:your_api_password')
},
body: JSON.stringify({
discount: {
type_id: 4, // Внешняя скидка
amount: discountAmount,
description: 'Корректировка цены Ozon'
}
})
});
return await response.json();
};
```
**Типы скидок:**
| type_id | Тип скидки | Применение |
|:--------|:-----------|:-----------|
| 1 | Скидка по акции | Автоматические акции |
| 2 | Скидка по купону | Промокоды |
| 3 | Персональная скидка | Скидка клиента |
| 4 | Внешняя скидка | **Используем для Ozon** |
Шаг 2. Настройка webhook
**Создание webhook на события заказа:**
```
Админ-панель InSales → Настройки → API и веб-хуки → Создать веб-хук
```
**Параметры webhook:**
| Параметр | Значение |
|:---------|:---------|
| События | `order/create`, `order/update` |
| URL | `https://your-server.com/webhook/ozon-price-correction` |
| Формат | JSON |
| Активен | Да |
**Пример обработчика webhook:**
```javascript
// Обработчик на вашем сервере
app.post('/webhook/ozon-price-correction', async (req, res) => {
const order = req.body;
// Проверяем, что заказ с Ozon
if (order.custom_status?.name !== 'Заказ Ozon') {
return res.status(200).send('OK');
}
try {
// Получаем реальную цену с Ozon
const ozonPrice = await getOzonOrderPrice(order.number);
// Рассчитываем разницу
const discountAmount = order.total_price - ozonPrice;
if (discountAmount > 0) {
// Применяем внешнюю скидку
await applyExternalDiscount(order.id, discountAmount);
}
res.status(200).send('OK');
} catch (error) {
console.error('Ошибка применения скидки:', error);
res.status(500).send('Error');
}
});
```
Шаг 3. Интеграция с API Ozon
**Получение реальной цены заказа:**
```javascript
const getOzonOrderPrice = async (orderNumber) => {
const response = await fetch('https://api-seller.ozon.ru/v2/posting/fbs/list', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Client-Id': 'your_ozon_client_id',
'Api-Key': 'your_ozon_api_key'
},
body: JSON.stringify({
filter: {
order_id: orderNumber
}
})
});
const data = await response.json();
const posting = data.result[0];
// Получаем финальную цену с учетом всех комиссий
return posting.financial_data.posting_services.marketplace_service_item_return_after_deliv_to_customer;
};
```
> **Important:** Для работы с API Ozon необходимы Client-Id и Api-Key из личного кабинета продавца Ozon.
#### Преимущества метода
- ✅ Автоматическая корректировка цен
- ✅ Не создает лишних купонов
- ✅ Гибкость настройки логики
- ✅ Актуальные данные напрямую от Ozon
#### Недостатки метода
- ❌ Требуется разработка серверной части
- ❌ Необходим отдельный сервер для обработки webhook
- ❌ Возможна нестабильность при изменениях в API Ozon
- ❌ Требуется мониторинг работоспособности
---
### Сравнение методов
| Критерий | Купоны | Внешняя скидка по API |
|:---------|:-------|:---------------------|
| Сложность реализации | Низкая | Высокая |
| Автоматизация | Частичная | Полная |
| Гибкость | Средняя | Высокая |
| Надежность | Высокая | Средняя |
| Требуется сервер | Нет | Да |
| Масштабируемость | Средняя | Высокая |
| Стоимость внедрения | Низкая | Средняя/Высокая |
---
### Рекомендации по выбору метода
Когда использовать купоны
**Подходит для:**
- Небольших магазинов с низким объемом заказов из Ozon (< 100 в месяц)
- Ситуаций, когда нет возможности разработать серверное решение
- Магазинов, где важна простота и прозрачность процесса
- Тестирования работы с Ozon перед полной интеграцией
**Пример кейса:**
```
Магазин получает 20-30 заказов с Ozon в месяц.
Оператор может вручную рассчитывать и применять купоны.
Время обработки: ~2-3 минуты на заказ.
```
Когда использовать API
**Подходит для:**
- Магазинов с большим потоком заказов из Ozon (> 100 в месяц)
- Ситуаций, когда есть техническая возможность разработки
- Необходимости полной автоматизации процесса
- Интеграции с другими системами (CRM, 1C, складской учет)
**Пример кейса:**
```
Магазин получает 500+ заказов с Ozon в месяц.
Автоматическая корректировка цен в реальном времени.
Время обработки: автоматически, < 1 секунды.
```
---
### Пошаговая инструкция внедрения
#### Для метода с купонами
**Чек-лист внедрения:**
- [ ] Создан базовый купон для корректировки цен Ozon
- [ ] Разработана формула расчета процента скидки
- [ ] Настроен процесс обработки заказов с Ozon
- [ ] Обучены операторы работе с купонами
- [ ] Создана инструкция для операторов
- [ ] Проведено тестирование на реальных заказах
- [ ] Настроена отчетность по скидкам
**Шаблон инструкции для оператора:**
```markdown
1. Получить уведомление о новом заказе с Ozon
2. Открыть заказ в InSales
3. Проверить сумму заказа в личном кабинете Ozon
4. Рассчитать разницу: (Цена InSales - Цена Ozon) / Цена InSales * 100
5. Создать купон с рассчитанным процентом скидки
6. Применить купон к заказу
7. Проверить итоговую сумму заказа
```
#### Для метода с API
**Чек-лист внедрения:**
- [ ] Настроен сервер для обработки webhook
- [ ] Получены API ключи InSales и Ozon
- [ ] Разработан обработчик webhook
- [ ] Реализована логика получения данных от Ozon
- [ ] Настроены webhook в InSales
- [ ] Реализована обработка ошибок и логирование
- [ ] Настроен мониторинг работоспособности
- [ ] Проведено нагрузочное тестирование
- [ ] Создан план действий при сбоях
**Архитектура решения:**
```
┌─────────────┐
│ Ozon │
└──────┬──────┘
│ 1. Заказ создан
▼
┌─────────────┐
│ InSales │
└──────┬──────┘
│ 2. Webhook: order/create
▼
┌─────────────┐
│ Ваш сервер │
│ (webhook) │
└──────┬──────┘
│ 3. Запрос реальной цены
▼
┌─────────────┐
│ Ozon API │
└──────┬──────┘
│ 4. Возврат данных
▼
┌─────────────┐
│ Ваш сервер │
└──────┬──────┘
│ 5. Расчет скидки
│ 6. Применение через API
▼
┌─────────────┐
│ InSales │
│ (обновлен) │
└─────────────┘
```
---
### Тестирование решения
#### Сценарии тестирования
Тест 1. Базовая корректировка цены
**Условия:**
- Заказ с одним товаром
- Цена в InSales: 1000₽
- Реальная цена Ozon: 850₽
**Ожидаемый результат:**
- Применена скидка 15%
- Итоговая сумма заказа: 850₽
**Проверка:**
```sql
-- Проверка в базе данных InSales
SELECT
id,
number,
total_price,
discount_amount,
final_total_price
FROM orders
WHERE number = 'OZON-12345';
```
Тест 2. Заказ с несколькими товарами
**Условия:**
- Заказ с 3 товарами
- Суммарная цена в InSales: 5000₽
- Реальная цена Ozon: 4250₽
**Ожидаемый результат:**
- Применена скидка 15%
- Итоговая сумма заказа: 4250₽
- Скидка распределена пропорционально
Тест 3. Изменение заказа
**Условия:**
- Оператор добавил товар в существующий заказ
- Требуется пересчет скидки
**Ожидаемый результат:**
- Webhook отработал
- Скидка пересчитана
- Применена новая корректировка
> **Important:** При методе с купонами потребуется удалить старый купон и создать новый.
---
### Мониторинг и отладка
#### Логирование событий
**Рекомендуемая структура логов:**
```json
{
"timestamp": "2024-01-15T10:30:00Z",
"event": "price_correction",
"order_id": 12345,
"order_number": "OZON-67890",
"insales_price": 1000,
"ozon_price": 850,
"discount_applied": 150,
"discount_percent": 15,
"method": "external_discount",
"status": "success"
}
```
#### Метрики для отслеживания
| Метрика | Описание | Цель |
|:--------|:---------|:-----|
| Успешность применения | % заказов с корректно примененной скидкой | > 99% |
| Время обработки | Среднее время от создания заказа до применения скидки | < 5 сек |
| Ошибки API | Количество неуспешных запросов к API | < 1% |
| Расхождение цен | Средний процент корректировки | Мониторинг тренда |
---
### Устранение типичных проблем
| Проблема | Причина | Решение |
|:---------|:--------|:--------|
| Скидка не применяется | Webhook не настроен | Проверьте настройки webhook в InSales |
| Неверный процент скидки | Ошибка в формуле расчета | Проверьте логику расчета комиссий Ozon |
| Дублирование скидок | Повторная обработка webhook | Добавьте проверку на существующую скидку |
| API возвращает ошибку 401 | Неверные credentials | Проверьте API ключи InSales/Ozon |
| Таймаут запроса | Медленный ответ от Ozon API | Увеличьте timeout, добавьте retry логику |
| Несоответствие сумм | Изменение цены между получением данных | Добавьте механизм пересчета при расхождении |
---
### Расширенные возможности
#### Дополнительные улучшения
**Рекомендуемые доработки:**
- [ ] Автоматическое создание отчетов по корректировкам
- [ ] Уведомления в Telegram при ошибках
- [ ] Dashboard для мониторинга скидок
- [ ] Интеграция с 1C для синхронизации данных
- [ ] A/B тестирование разных стратегий корректировки
- [ ] Предиктивная аналитика комиссий Ozon
- [ ] Автоматическая корректировка базовых цен в InSales
---
### Техническая поддержка
> **Important:** Оба метода требуют понимания бизнес-процессов и технической экспертизы.
**Когда обращаться за помощью:**
- Сложности с настройкой webhook
- Ошибки при работе с API InSales или Ozon
- Необходимость разработки кастомной логики
- Проблемы с производительностью решения
- Интеграция с дополнительными системами
**Ресурсы для помощи:**
- [Документация API InSales](https://www.insales.ru/collection/api)
- [Документация API Ozon](https://docs.ozon.ru/api/seller/)
- [Справочный центр InSales](https://www.insales.ru/help)
- Техническая поддержка **WS24.pro** для профессиональной настройки API интеграций
---
> **Note:** Рекомендуется начать с метода купонов для тестирования процесса, затем при необходимости масштабировать решение до полной автоматизации через API. При больших объемах заказов (>200 в месяц) автоматизация через API окупается за 2-3 месяца за счет экономии времени операторов.