Новость на модерации
Содержание статьи
<p>Нотификации (webhooks) — это POST-запросы, которые Lamoda отправляет на ваш URL при изменении статуса заказа или товара.</p><br />
<br />
<h2>Чек-лист подключения</h2><br />
<br />
<table style="border-collapse: collapse; width: 100%;"><br />
<tbody><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;"><b>№</b></td><br />
<td style="border: 1px solid #ddd; padding: 8px;"><b>Действие</b></td><br />
<td style="border: 1px solid #ddd; padding: 8px;"><b>Кто делает</b></td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;">1</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Реализовать endpoint для приёма POST-запросов</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Вы</td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;">2</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Предоставить URL для получения нотификаций</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Вы → KAM</td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;">3</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Добавить IP Lamoda в whitelist (получить у KAM)</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Вы</td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;">4</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Предоставить логин/пароль для Basic Auth (опционально)</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Вы → KAM</td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;">5</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Настроить отправку нотификаций</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">KAM</td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;">6</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Протестировать на Demo-окружении</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Вы</td><br />
</tr><br />
</tbody><br />
</table><br />
<br />
<h2>Требования к endpoint</h2><br />
<br />
<h3>URL</h3><br />
<br />
<p>Ваш endpoint должен:</p><br />
<ul><br />
<li>Принимать POST-запросы</li><br />
<li>Быть доступен 24/7</li><br />
<li>Работать по HTTPS</li><br />
<li>Отвечать быстро (желательно < 5 сек)</li><br />
</ul><br />
<br />
<h3>Коды ответа</h3><br />
<br />
<table style="border-collapse: collapse; width: 100%;"><br />
<tbody><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;"><b>Код</b></td><br />
<td style="border: 1px solid #ddd; padding: 8px;"><b>Поведение Lamoda</b></td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;"><code>2xx</code></td><br />
<td style="border: 1px solid #ddd; padding: 8px;"> Нотификация успешно доставлена</td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;"><code>3xx</code></td><br />
<td style="border: 1px solid #ddd; padding: 8px;">↪ Редирект (максимум 5 редиректов)</td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;"><code>4xx</code></td><br />
<td style="border: 1px solid #ddd; padding: 8px;"> Ошибка, повторная отправка НЕ будет</td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;"><code>5xx</code></td><br />
<td style="border: 1px solid #ddd; padding: 8px;"> Повторная отправка по алгоритму</td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;">Timeout</td><br />
<td style="border: 1px solid #ddd; padding: 8px;"> Повторная отправка по алгоритму</td><br />
</tr><br />
</tbody><br />
</table><br />
<br />
<h3>Алгоритм повторной отправки</h3><br />
<br />
<p>При ошибке 5xx или timeout Lamoda повторяет отправку с увеличивающимся интервалом:</p><br />
<br />
<table style="border-collapse: collapse; width: 100%;"><br />
<tbody><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;"><b>Попытка</b></td><br />
<td style="border: 1px solid #ddd; padding: 8px;"><b>Интервал</b></td><br />
<td style="border: 1px solid #ddd; padding: 8px;"><b>Пример времени</b></td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;">1</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">—</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">10:00:00</td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;">2</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">80 сек</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">10:01:20</td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;">3</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">240 сек (80×3)</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">10:05:20</td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;">4</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">720 сек (80×3×3)</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">10:17:20</td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;">5</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">2160 сек (80×3×3×3)</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">10:53:20</td><br />
</tr><br />
</tbody><br />
</table><br />
<br />
<p>Формула: <code>80 × 3^(N-1)</code> секунд, где N — номер попытки. Максимум 5 попыток.</p><br />
<br />
<b> После 5 неудачных попыток нотификация теряется!</b><br><br><br />
Обеспечьте высокую доступность вашего endpoint. Если нотификации были потеряны, используйте метод переотправки.<br />
<h2>Типы нотификаций</h2><br />
<br />
<table style="border-collapse: collapse; width: 100%;"><br />
<tbody><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;"><b>Тип (<code>type</code>)</b></td><br />
<td style="border: 1px solid #ddd; padding: 8px;"><b>Описание</b></td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;"><code>statusChanged</code></td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Изменился статус заказа</td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;"><code>itemStatusChanged</code></td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Изменился статус товара в заказе</td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;"><code>fulfilmentShipmentStatusChanged</code></td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Изменился статус FBO-поставки</td><br />
</tr><br />
</tbody><br />
</table><br />
<br />
<h2>Пример нотификации</h2><br />
<br />
<pre><code>{<br />
"type": "statusChanged",<br />
"trackingId": "117391950",<br />
"data": {<br />
"id": "CZ117391950",<br />
"status": "Delivered",<br />
"paymentMethod": "COD",<br />
"fullSum": "12000",<br />
"deliveryPrice": "250.00",<br />
"createdAt": "2025-12-01",<br />
"updatedAt": "2025-12-03 17:48:00",<br />
"currency": "rub",<br />
"items": [<br />
{<br />
"id": 7598,<br />
"status": "Delivered",<br />
"sku": "SELLER-SKU-001",<br />
"paidPrice": 12000,<br />
"size": "42",<br />
"datamatrix": null<br />
}<br />
],<br />
"shippingAddress": {<br />
"city": "Москва",<br />
"street": "Летниковская",<br />
"houseNum": "д.2 с1",<br />
"apartment": "909"<br />
},<br />
"deliveryMethod": {<br />
"deliveryDate": "2025-12-03",<br />
"deliveryIntervalFrom": "15:00",<br />
"deliveryIntervalTo": "18:00",<br />
"shippingMethodName": "Курьерская доставка Lamoda Express"<br />
},<br />
"customer": {<br />
"firstName": "Иван",<br />
"lastName": "Петров",<br />
"phone": "+79001234567"<br />
}<br />
},<br />
"date": "2025-12-03 17:48:00",<br />
"sequenceNumber": 5<br />
}</code></pre><br />
<br />
<h2>Пример обработчика (Python)</h2><br />
<br />
<pre><code>from flask import Flask, request, jsonify<br />
<br />
app = Flask(__name__)<br />
<br />
@app.route('/lamoda/webhook', methods=['POST'])<br />
def handle_webhook():<br />
data = request.json<br />
<br />
notification_type = data.get('type')<br />
order_id = data['data']['id']<br />
status = data['data']['status']<br />
<br />
print(f"Received: {notification_type}, Order: {order_id}, Status: {status}")<br />
<br />
# Обработка по типу нотификации<br />
if notification_type == 'statusChanged':<br />
process_order_status(data['data'])<br />
elif notification_type == 'itemStatusChanged':<br />
process_item_status(data['data'])<br />
<br />
# Важно: вернуть 200 быстро!<br />
return jsonify({"status": "ok"}), 200<br />
<br />
def process_order_status(order_data):<br />
# Ваша бизнес-логика<br />
pass<br />
<br />
def process_item_status(order_data):<br />
# Ваша бизнес-логика<br />
pass</code></pre><br />
<br />
<h2>Переотправка нотификаций</h2><br />
<br />
<p>Если вы пропустили нотификации, можно запросить их повторно:</p><br />
<br />
<pre><code><a href="<a class="txttohtmllink" href="https://academy.lamoda.ru/articles/api/apispec/lamoda-b2b-platform-api/#/%;D0%A3%D0%B2%D0%B5%D0%B4%D0%BE%D0%BC%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F/post_api_1_resend_order_notifications">https://academy.lamoda.ru/articles/api/apispec/lamoda-b2b-platform-api/#/%;D0%A3%D0%B2%D0%B5%D0%B4%D0%BE%D0%BC%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F/post_api_1_resend_order_notifications</a>" target="_blank">POST /api/v1/notifications/resend</a><br />
<br />
{<br />
"trackingIds": ["CZ117391950", "CZ117391951", "CZ117391952"]<br />
}</code></pre><br />
<br />
<p><b> Ограничения переотправки</b></p><br />
<ul><br />
<li>Максимум 100 заказов в одном запросе</li><br />
<li>Один заказ можно запросить не чаще 1 раза в 15 минут</li><br />
<li>Переотправляются ВСЕ нотификации по заказу</li><br />
</ul><br />
<h2>Тестирование на Demo</h2><br />
<br />
<p>На Demo-окружении можно протестировать получение нотификаций по сценариям:</p><br />
<br />
<pre><code>POST /api/v1/orders/{orderNr}/status<br />
<br />
{<br />
"scenario": "delivered"<br />
}</code></pre><br />
<br />
<h3>Доступные сценарии</h3><br />
<br />
<table style="border-collapse: collapse; width: 100%;"><br />
<tbody><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;"><b>Сценарий</b></td><br />
<td style="border: 1px solid #ddd; padding: 8px;"><b>Описание</b></td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;"><code>delivered</code></td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Заказ доставлен клиенту</td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;"><code>notDelivered</code></td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Адрес вне зоны доставки</td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;"><code>notBought</code></td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Клиент отказался от товара</td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;"><code>partialBought</code></td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Частичный выкуп (1 из 2 товаров)</td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;"><code>postponed</code></td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Доставка перенесена</td><br />
</tr><br />
</tbody><br />
</table><br />
<br />
<h2>Best Practices</h2><br />
<br />
<p><b> Рекомендации</b></p><br />
<ul><br />
<li><b>Отвечайте быстро</b> — вернуть 200 и обработать асинхронно</li><br />
<li><b>Идемпотентность</b> — обрабатывайте дубли корректно (по sequenceNumber)</li><br />
<li><b>Не валидируйте количество полей</b> — новые поля могут добавляться</li><br />
<li><b>Логируйте всё</b> — тело запроса, время, результат обработки</li><br />
<li><b>Мониторинг</b> — отслеживайте количество ошибок</li><br />
</ul><br />
<h2>Обратная совместимость</h2><br />
<br />
<p>Lamoda гарантирует:</p><br />
<ul><br />
<li>Существующие поля не удаляются</li><br />
<li>Тип существующих полей не изменяется</li><br />
<li>Новые поля могут добавляться</li><br />
</ul><br />
<br />
<b> Не делайте strict validation по полям!</b><br><br><br />
Не отклоняйте нотификацию, если в ней появилось новое поле. Игнорируйте неизвестные поля.<br />
<h2>См. также</h2><br />
<br />
<ul><br />
<li><a href="6_4_order_statuses.html">Статусы заказов</a></li><br />
<li><a href="10_2_notification_types.html">Типы нотификаций (подробно)</a></li><br />
<li><a href="17_2_error_codes.html">Коды ошибок</a></li><br />
</ul>
<br />
<h2>Чек-лист подключения</h2><br />
<br />
<table style="border-collapse: collapse; width: 100%;"><br />
<tbody><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;"><b>№</b></td><br />
<td style="border: 1px solid #ddd; padding: 8px;"><b>Действие</b></td><br />
<td style="border: 1px solid #ddd; padding: 8px;"><b>Кто делает</b></td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;">1</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Реализовать endpoint для приёма POST-запросов</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Вы</td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;">2</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Предоставить URL для получения нотификаций</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Вы → KAM</td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;">3</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Добавить IP Lamoda в whitelist (получить у KAM)</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Вы</td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;">4</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Предоставить логин/пароль для Basic Auth (опционально)</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Вы → KAM</td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;">5</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Настроить отправку нотификаций</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">KAM</td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;">6</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Протестировать на Demo-окружении</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Вы</td><br />
</tr><br />
</tbody><br />
</table><br />
<br />
<h2>Требования к endpoint</h2><br />
<br />
<h3>URL</h3><br />
<br />
<p>Ваш endpoint должен:</p><br />
<ul><br />
<li>Принимать POST-запросы</li><br />
<li>Быть доступен 24/7</li><br />
<li>Работать по HTTPS</li><br />
<li>Отвечать быстро (желательно < 5 сек)</li><br />
</ul><br />
<br />
<h3>Коды ответа</h3><br />
<br />
<table style="border-collapse: collapse; width: 100%;"><br />
<tbody><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;"><b>Код</b></td><br />
<td style="border: 1px solid #ddd; padding: 8px;"><b>Поведение Lamoda</b></td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;"><code>2xx</code></td><br />
<td style="border: 1px solid #ddd; padding: 8px;"> Нотификация успешно доставлена</td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;"><code>3xx</code></td><br />
<td style="border: 1px solid #ddd; padding: 8px;">↪ Редирект (максимум 5 редиректов)</td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;"><code>4xx</code></td><br />
<td style="border: 1px solid #ddd; padding: 8px;"> Ошибка, повторная отправка НЕ будет</td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;"><code>5xx</code></td><br />
<td style="border: 1px solid #ddd; padding: 8px;"> Повторная отправка по алгоритму</td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;">Timeout</td><br />
<td style="border: 1px solid #ddd; padding: 8px;"> Повторная отправка по алгоритму</td><br />
</tr><br />
</tbody><br />
</table><br />
<br />
<h3>Алгоритм повторной отправки</h3><br />
<br />
<p>При ошибке 5xx или timeout Lamoda повторяет отправку с увеличивающимся интервалом:</p><br />
<br />
<table style="border-collapse: collapse; width: 100%;"><br />
<tbody><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;"><b>Попытка</b></td><br />
<td style="border: 1px solid #ddd; padding: 8px;"><b>Интервал</b></td><br />
<td style="border: 1px solid #ddd; padding: 8px;"><b>Пример времени</b></td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;">1</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">—</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">10:00:00</td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;">2</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">80 сек</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">10:01:20</td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;">3</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">240 сек (80×3)</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">10:05:20</td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;">4</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">720 сек (80×3×3)</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">10:17:20</td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;">5</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">2160 сек (80×3×3×3)</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">10:53:20</td><br />
</tr><br />
</tbody><br />
</table><br />
<br />
<p>Формула: <code>80 × 3^(N-1)</code> секунд, где N — номер попытки. Максимум 5 попыток.</p><br />
<br />
<b> После 5 неудачных попыток нотификация теряется!</b><br><br><br />
Обеспечьте высокую доступность вашего endpoint. Если нотификации были потеряны, используйте метод переотправки.<br />
<h2>Типы нотификаций</h2><br />
<br />
<table style="border-collapse: collapse; width: 100%;"><br />
<tbody><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;"><b>Тип (<code>type</code>)</b></td><br />
<td style="border: 1px solid #ddd; padding: 8px;"><b>Описание</b></td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;"><code>statusChanged</code></td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Изменился статус заказа</td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;"><code>itemStatusChanged</code></td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Изменился статус товара в заказе</td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;"><code>fulfilmentShipmentStatusChanged</code></td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Изменился статус FBO-поставки</td><br />
</tr><br />
</tbody><br />
</table><br />
<br />
<h2>Пример нотификации</h2><br />
<br />
<pre><code>{<br />
"type": "statusChanged",<br />
"trackingId": "117391950",<br />
"data": {<br />
"id": "CZ117391950",<br />
"status": "Delivered",<br />
"paymentMethod": "COD",<br />
"fullSum": "12000",<br />
"deliveryPrice": "250.00",<br />
"createdAt": "2025-12-01",<br />
"updatedAt": "2025-12-03 17:48:00",<br />
"currency": "rub",<br />
"items": [<br />
{<br />
"id": 7598,<br />
"status": "Delivered",<br />
"sku": "SELLER-SKU-001",<br />
"paidPrice": 12000,<br />
"size": "42",<br />
"datamatrix": null<br />
}<br />
],<br />
"shippingAddress": {<br />
"city": "Москва",<br />
"street": "Летниковская",<br />
"houseNum": "д.2 с1",<br />
"apartment": "909"<br />
},<br />
"deliveryMethod": {<br />
"deliveryDate": "2025-12-03",<br />
"deliveryIntervalFrom": "15:00",<br />
"deliveryIntervalTo": "18:00",<br />
"shippingMethodName": "Курьерская доставка Lamoda Express"<br />
},<br />
"customer": {<br />
"firstName": "Иван",<br />
"lastName": "Петров",<br />
"phone": "+79001234567"<br />
}<br />
},<br />
"date": "2025-12-03 17:48:00",<br />
"sequenceNumber": 5<br />
}</code></pre><br />
<br />
<h2>Пример обработчика (Python)</h2><br />
<br />
<pre><code>from flask import Flask, request, jsonify<br />
<br />
app = Flask(__name__)<br />
<br />
@app.route('/lamoda/webhook', methods=['POST'])<br />
def handle_webhook():<br />
data = request.json<br />
<br />
notification_type = data.get('type')<br />
order_id = data['data']['id']<br />
status = data['data']['status']<br />
<br />
print(f"Received: {notification_type}, Order: {order_id}, Status: {status}")<br />
<br />
# Обработка по типу нотификации<br />
if notification_type == 'statusChanged':<br />
process_order_status(data['data'])<br />
elif notification_type == 'itemStatusChanged':<br />
process_item_status(data['data'])<br />
<br />
# Важно: вернуть 200 быстро!<br />
return jsonify({"status": "ok"}), 200<br />
<br />
def process_order_status(order_data):<br />
# Ваша бизнес-логика<br />
pass<br />
<br />
def process_item_status(order_data):<br />
# Ваша бизнес-логика<br />
pass</code></pre><br />
<br />
<h2>Переотправка нотификаций</h2><br />
<br />
<p>Если вы пропустили нотификации, можно запросить их повторно:</p><br />
<br />
<pre><code><a href="<a class="txttohtmllink" href="https://academy.lamoda.ru/articles/api/apispec/lamoda-b2b-platform-api/#/%;D0%A3%D0%B2%D0%B5%D0%B4%D0%BE%D0%BC%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F/post_api_1_resend_order_notifications">https://academy.lamoda.ru/articles/api/apispec/lamoda-b2b-platform-api/#/%;D0%A3%D0%B2%D0%B5%D0%B4%D0%BE%D0%BC%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F/post_api_1_resend_order_notifications</a>" target="_blank">POST /api/v1/notifications/resend</a><br />
<br />
{<br />
"trackingIds": ["CZ117391950", "CZ117391951", "CZ117391952"]<br />
}</code></pre><br />
<br />
<p><b> Ограничения переотправки</b></p><br />
<ul><br />
<li>Максимум 100 заказов в одном запросе</li><br />
<li>Один заказ можно запросить не чаще 1 раза в 15 минут</li><br />
<li>Переотправляются ВСЕ нотификации по заказу</li><br />
</ul><br />
<h2>Тестирование на Demo</h2><br />
<br />
<p>На Demo-окружении можно протестировать получение нотификаций по сценариям:</p><br />
<br />
<pre><code>POST /api/v1/orders/{orderNr}/status<br />
<br />
{<br />
"scenario": "delivered"<br />
}</code></pre><br />
<br />
<h3>Доступные сценарии</h3><br />
<br />
<table style="border-collapse: collapse; width: 100%;"><br />
<tbody><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;"><b>Сценарий</b></td><br />
<td style="border: 1px solid #ddd; padding: 8px;"><b>Описание</b></td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;"><code>delivered</code></td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Заказ доставлен клиенту</td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;"><code>notDelivered</code></td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Адрес вне зоны доставки</td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;"><code>notBought</code></td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Клиент отказался от товара</td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;"><code>partialBought</code></td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Частичный выкуп (1 из 2 товаров)</td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;"><code>postponed</code></td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Доставка перенесена</td><br />
</tr><br />
</tbody><br />
</table><br />
<br />
<h2>Best Practices</h2><br />
<br />
<p><b> Рекомендации</b></p><br />
<ul><br />
<li><b>Отвечайте быстро</b> — вернуть 200 и обработать асинхронно</li><br />
<li><b>Идемпотентность</b> — обрабатывайте дубли корректно (по sequenceNumber)</li><br />
<li><b>Не валидируйте количество полей</b> — новые поля могут добавляться</li><br />
<li><b>Логируйте всё</b> — тело запроса, время, результат обработки</li><br />
<li><b>Мониторинг</b> — отслеживайте количество ошибок</li><br />
</ul><br />
<h2>Обратная совместимость</h2><br />
<br />
<p>Lamoda гарантирует:</p><br />
<ul><br />
<li>Существующие поля не удаляются</li><br />
<li>Тип существующих полей не изменяется</li><br />
<li>Новые поля могут добавляться</li><br />
</ul><br />
<br />
<b> Не делайте strict validation по полям!</b><br><br><br />
Не отклоняйте нотификацию, если в ней появилось новое поле. Игнорируйте неизвестные поля.<br />
<h2>См. также</h2><br />
<br />
<ul><br />
<li><a href="6_4_order_statuses.html">Статусы заказов</a></li><br />
<li><a href="10_2_notification_types.html">Типы нотификаций (подробно)</a></li><br />
<li><a href="17_2_error_codes.html">Коды ошибок</a></li><br />
</ul>
Помогла эта информация?
Спасибо за отзыв