API: Упаковка /packing
1. Получение заказа на упаковку
/packing/order/{order_id}/start
Для получения заказа, необходимо выполнить запрос вида /packing/order/LT1234567890/start
{
"started_at": "2021-07-15T14:23:11"
}
В ответ возвращается
Успех
{
"success": true,
"access_code": "ABC123",
"order": {
"id": "LT123456",
"operationType": "PACKAGING_B2B",
"relabelingType": "BOXES",
"maxBoxesWithoutPallet": 10,
"date": "2021-07-15T14:23:11",
"packing_state": "awaiting_packing",
"require_place_weight": true,
"global_shipping_guidelines": "...общее описание отгрузки",
"order_shipping_comments": "...комментарий клиента к заказу",
"operativeComment": "...комментарий для оператора",
"preferred_barcode_type": "WILDBERRIES",
"ExtraSeat":true,
"supply": {
"id": "SP123456"
},
"merchant": {
"id": "some-id",
"title": "ООО Зингер",
"trade_title": "Zinger.com"
},
"shipping_form": [
{
"id": "shipping_num",
"title": "Номер поставки",
"value": "120721-001"
},
{
"id": "instruction",
"title": "Инструкция по сборке",
"value": "Текст инструкции в html c html-escape разметкой"
}
],
"delivery": {
"logo": "https://..russian_post.svg",
"title": "Почта России",
"contract_title": "Курьер Онлайн",
"sorting_center_acceptance_date": "2021-07-17",
"maximum_place_weight": 30000,
"maximum_pallet_weight": 30000,
"maximum_place_dimensions": {
"width": 10,
"height": 10,
"depth": 10
},
"maximum_pallet_dimensions": {
"width": 10,
"height": 10,
"depth": 10
},
"minimum_pallet_dimensions": {
"width": 10,
"height": 10,
"depth": 10
},
"maximum_places_count": 1
},
"items": [
{
"id": "some-item-id",
"article": "A0121202",
"title": "Норвежская лесная Эдалт 2 кг",
"quantity": 5,
"image": "https://..image.jpg",
"image_preview": "https://..image_preview.jpg",
"require_weight": true,
"require_dimensions": true,
"fragile": false,
"kit_id": 102012,
"kit_title": "Большой набор разных товаров",
"weight": 567,
"dimensions": {
"width": 10,
"height": 10,
"depth": 10
},
"barcodes": [
{
"type": "COMMON",
"barcode": "40010030040"
},
{
"type": "WILDBERRIES",
"barcode": "1122334455"
}
],
"scan_serial_numbers": [
{
"code": "imei",
"title": "IMEI код",
"template": "some-template"
},
{
"code": "chestniy_znak",
"title": "Честный знак",
"template": "some-template"
}
]
}
],
"ad_attachments": [
{
"name": "Салфетка",
"quantity": 1,
"note": "примечание"
}
],
"places": [
{
"id": "5646564",
"packaging_id": "4445566633211",
"sequence_num": 1,
"weight": 567,
"dimensions": {
"width": 10,
"height": 10,
"depth": 10
}
"items": [
{
"id": "some-item-id",
"barcode_used": "40010030040",
"quantity": 1,
"serial_numbers": [
{
"code": "imei",
"value": "821821291291929"
},
{
"code": "chestniy_znak",
"value": "010460370285702421"
}
]
}
]
}
],
"pallets": [
{
"pallet_id": "12345",
"pallet_num": "1",
"places": [
"placeId1",
"placeId2"
],
"packaging_id": "4445566633211",
"weight": 567,
"dimensions": {
"width": 10,
"height": 10,
"depth": 10
}
}
]
},
"packagings": [
{
"id": "some-id",
"title": "Коробка 50х30х20",
"require_dimensions": false,
"barcodes": [
"BX-503020",
"BX*503020"
]
},
{
"id": "some-id-2",
"title": "Коробка 50х30х10",
"require_dimensions": false,
"barcodes": [
"BX-503010"
]
}
]
}
Описание полей
Поле | Тип | Описание |
success | Boolean | true - заказ успешно получен, false - заказ получить не удалось, в массиве errors набор ошибок |
errors | Array | Массив объектов ошибок |
access_code | string |
Код доступа для упаковки заказа на нескольких рабочих местах Далее для доступа к методам упаковки заказа нужно передавать этот код в заголовке Access-Code |
order | Object | Объект заказа |
id | Text | Номер заказа |
operationType | enum |
Перечисление:
|
relabelingType | enum |
Перечисление:
|
maxBoxesWithoutPallet | integer |
Количество коробов, с которого обязательна палета. |
preferred_barcode_type | string |
Для FBO заказов - предпочтительный тип ШК товара. Если сосканирован не такой - запрос стикера. Значения - из ENUM Тип штрихкода |
date | Datetime | Дата и время заказа |
ExtraSeat | Boolean |
Флаг для добавления доп. места под документы |
packing_state | enum |
Статус упаковки заказа
|
require_place_weight | Boolean |
Требуется снятие веса места |
shipping_guidelines | string | Общее описание отгрузки (на весь аккаунт клиента)) |
shipping_comments | string | Пожелания клиента к отгрузке данного заказа |
shippingOptions
|
Object | Опции доставки |
monopackingsOnly
|
Boolean | Признак упаковки только монокоробами |
shipping_form | Array | Массив вопросов и ответов анкеты отгрузки |
id | string | Идентификатор вопроса |
title | string | Наименование вопроса |
value | string | Ответ клиента на вопрос |
delivery | Object | Информация о доставке |
logo | string | Ссылка на логотип. |
title | string | Наименование способа доставки, например "Почта России" |
contract_title | string | Наименование продукта, например "Курьер Онлайн" |
sorting_center_acceptance_date | Date | Планируемая дата приемки в сортировочном центре. В первую очередь, для Почты России. |
maximum_place_weight | integer | Максимальный вес одного места в граммах |
maximum_places_count | integer | Максимальное количество мест в заказе. Ограничение некоторых курьерских служб. |
items | Array | Массив объекта товаров |
id | string | Идентификатор |
title | string | Наименование товара |
article | string | Артикул |
quantity | integer | Количество товара к упаковке |
image | string | Ссылка на картинку товара в полном размере |
image_preview | string | Ссылка на картинку товара (с низким разрешением, уровня "иконка") |
require_weight | boolean | Для данной номенклатуры надо измерить вес |
require_dimensions | boolean | Для данной номенклатуры надо измерить габариты |
fragile | boolean | Определяет хрупкий товар |
barcodes | Array | Массив штрихкодов |
type | string | Тип штрихкода. COMMON - без специфики, общий шаблон. |
barcode | string | Значение штрихкода |
scan_serial_numbers | Array | Задания на сканирование серийных номеров, массив |
code | string | Код |
title | string | Наименование |
template | string | Шаблон для проверки (если есть) |
options | Object | Дополнительные опции упаковки для данной позиции |
label_with_barcode | string |
Если не пустое значение, задание наклеить этикетку с указанным штрихкодом, при условии, что товар при отгрузке имеет иной штрихкод, чем указано в данном параметре.
Этикетка и параметры передаются в отдельном блоке label. |
label_all_items | boolean | Если передан true, необходимо наклеить этикетку на каждую позицию. Этикетка и параметры передаются в отдельном блоке label. |
ad_attachments | Array | Массив дополнительных вложений |
name | string | Наименование |
quantity | integer | Количество |
note | string | Примечание |
places | Array | Массив упакованных мест заказа |
packagings | Array | Массив упаковочной тары |
id | string | Идентификатор |
title | string | Наименование упаковки |
barcodes | Array of string | Штрихкоды упаковки |
Ошибка:
{
"success": false,
"errors": [
{
"code": "ORDER_NOT_FOUND",
"message": "Заказ с номером LT1234567890 не найден",
"errorsticker":{"content":"base64 pdf","printer": "STICKER_6x6"}
}
]
}
Типовые ошибки:
Code | Message |
ORDER_NOT_FOUND | Заказ с номером LT1234567890 не найден |
ORDER_ON_PACKING | Упаковка заказа LT1234567890 уже начала на рабочем столе DM-13 |
ORDER_ALREADY_PACKED | Заказ LT1234567890 уже упакован (рабочее место DM-13, оператор Оператор 12) |
2. Получение заказа
/packing/order/{order_id}
/packing/order/barcode/{barcode}
Метод полностью аналогичен методу /packing/order/{order_id}/start по части возвращаемых полей, за следующим исключением:
- Метод не инициирует начало упаковки
- Получить заказ возможно в любом статусе
3. Получение последних упакованных заказов
/packing/orders/last
Пример вызова:
GET /packing/orders/last?limit=10
Параметр вызова limit отвечает за количество возвращаемых заказов. Если не передан, по умолчанию возвращается 10 заказов.
Сервер возвращает заказы, упакованные данным оператором.
{
"success": true,
"orders": [
{
"id": "LT123456",
"packing_state": "packed",
"packed_at": "2021-07-15T14:23:11"
}
]
}
4. Продолжение упаковки заказа
/packing/order/{order_id}/resume
Для продолжения упаковки заказа, необходимо выполнить запрос вида /packing/order/LT1234567890/resume
Метод требует расширенных прав. Данный метод вызывает на бэкенде следующие действия у заказа:
- обновляется оператор,
- обновляется текущий рабочий стол
Бэкенд возвращает текущее состояние заказа - включая уже упакованные места (places)
Успех
{
"success": true,
"order": {объект Упаковка заказа как в методе POST /start}
}
5. Сброс упаковки заказа
/packing/order/{order_id}/reset
Для сброса упаковки заказа, необходимо выполнить запрос вида /packing/order/LT1234567890/reset
На бэкенде метод:
- Очищает все места, присвойки, упакованные товары
- Очищает все места в DLV
- Удаляет информацию по видеонарезке
- Удаляет информацию по старте упаковки, рабочему месту старта упаковки и т.д.
6. Добавление/редактирование места к заказу
/packing/order/{order_id}/place
Метод создает или обновляет место к заказу.
Для создания нового места вызов: /packing/order/{order_id}/place
, для редактирования места к заказу: /packing/order/{order_id}/place/{place_id}
При создании нового места - возвращает стикер в формате pdf (base64).
Пример вызова
{
"place": {
"packaging_id": "some-id",
"sequence_num": 4,
"is_final": false,
"status": "PACKED", // PACKING, PACKED
"dlv_id": "38366fbd-74e3-4116-b1fd-e6a2ff98d7c6", // Для выгрузки упаковок из NEW WMS
"barcode": "123456789", // Для выгрузки упаковок из NEW WMS
"weight": 567,
"dimensions": {
"width": 10,
"height": 10,
"depth": 10
},
"items": [
{
"id": "some-item-id",
"packed_at": "2021-07-18T12:21:22",
"barcode_used": "40010030040",
"quantity": 1,
"status": "PACKED", // PACKING, PACKED
"expirationdate":"2021-07-18",
"serial_numbers": [
{
"code": "imei",
"value": "821821291291929"
},
{
"code": "chestniy_znak",
"value": "010460370285702421"
}
]
}
]
}
}
Описание
Таблица 6.1
Поле | Тип | Описание |
place | Object | Объект места |
packaging_id | string | ID упаковочной тары |
sequence_num | integer | Порядковый номер места (нумерация начинается с 1) |
is_final | boolean | Признак последнего места, устанавливается в true, когда отсканированы все позиции, и данное место - последнее |
weight | integer | Вес в граммах |
dimensions | Object | Размеры (габариты) места - передаются только в случае нестандартной упаковки (packaging_id: "oversize") |
items | Array | Массив отсканированных товаров для данного места. Описание объекта товара см. в таблице 6.2 |
Таблица 6.2 Объект в массиве items
Поле | Тип | Описание |
id | string | ID товара |
packaging_id | string | ID индивидуальной упаковки товара |
packed_at | datetime | Дата и время сканирования товара |
barcode_used | string | Использованный штрихкод (какой именно штрихкод был отсканирован для данного товара). |
serial_numbers | Array | Массив серийных номеров |
code | string | ID серийного номера |
value | string | Значение отсканированного серийного номера |
Успех
{
"success": true,
"place_id": "ID созданного или обновленного места",
"sticker": {
"content":"base64 pdf",
"printer": "STICKER_6x6"
}
}
Ошибка:
{
"success": false,
"errors": [
{
"code": "ERROR",
"message": "Описание ошибки",
"errorsticker": {"content":"base64 pdf","printer": "STICKER_6x6"}
}
]
}
Коды ошибок:
Code | Message |
INCORRECT_WEIGHT | Введенный вес места (5000 грамм) существенно отличается от планового |
OTHER_ERROR | Прочая ошибка |
7. Получение стикера места
/packing/order/{order_id}/place/{place_id}/sticker
Для получения стикера места, необходимо выполнить запрос вида: /packing/order/LT1234567890/place/43043403404/sticker
Опциональный параметр operationType - передается для печати стикера в операциях перемаркировки. Значение брать из operationType заказа.
В ответ возвращается стикер в pdf, закодированный в base64
Успех
{
"success": true,
"sticker": {
"content":"base64 pdf",
"printer": "STICKER_6x6"
}
}
Ошибка:
{
"success": false,
"errors": [
{
"code": "NOT_FOUND",
"message": "Стикера с указанным местом 4030004403040 не существует"
}
]
}
8. Количество палет по заказу
/packing/pallet/generalCount
Метод ввведен для ФБО Ozon и Wildberries , а также для других потенциальных способов доставки, где по одному заказу формируется несколько палет.
Заказ передается в параметрах json, так как потенциально данный метод может пригодиться в дальнейшем для информации по количеству палет в рамках процесса упаковки
Запрос
[{"palletCount":"4","orderId":"KK23423"}]
9. Добавление/редактирование палеты
/packing/pallet
Метод создает или обновляет палету.
Для создания новой палеты вызов: /packing/pallet
, для редактирования палеты: /packing/pallet/{pallet_id}
Пример вызова
{
"pallet": {
"pallet_num": 1,
"barcode": 4111444,
"packaging_id": "4445566633211",
"weight": 567,
"dimensions": {
"width": 10,
"height": 10,
"depth": 10
},
"places": [{"placeId":"978020137962","orderId":"KK23423"}, {"placeId":"978020137964","orderId":"KK23423"}]
}
}
barcode - уникальный штрихкод палеты
Если палета создается без мест (такая логика согласована по ФБО WB и Ozon, это происходит после упаковки всех мест в связке с запросом /packing/pallet/generalCount), запрос будет выглядеть следующим образом:
{
"pallet": {
"pallet_num": 1,
"places": [{"orderId":"KK23423"}]
}
}
Местами такая палета-пустышка будет наполняться только при перемаркировке командой редактирования палеты /packing/pallet/{pallet_id}
Успех
{
"success": true,
"pallet_id": "0000000008",
"pallet_num": 1,
"sticker": {
"content": "base64 pdf",
"printer": "STICKER_6x6"
}
}
Описание запроса
pallet | Object | Объект палеты |
pallet_num | Integer | Порядковый номер палеты в сценарии упаковки, определяется на стороне front-end |
weight | Integer | Все палеты в граммах |
dimensions | Object | Измерения палеты (см. описание объекта в п.8 Таблица 2) |
width | Integer | Ширина в мм |
height | Integer | Высота в мм |
depth | Integer | Глубина в мм |
places | Array | Массив объектов отсканированных мест в составе палеты |
placeId | String | Штрихкод отсканированного места |
orderId | String | Номер заказа (в случае наличия такой информации, это ускорит процесс поиска в back-end) |
Описание ответа
success | Boolean | Признак успешного выполнения операции |
pallet_id | String | Идентификатор (номер документа) палеты в back-end. По этому номеру можно вызывать команду редактирования палеты |
pallet_num | Integer | Порядковый номер палеты в сценарии упаковки, возвращается без изменений. |
sticker | Object | Объект для печати стикера |
content | String | Стикер в pdf в формате base64 |
printer | String | Формат печати этикетки |
10. Получение стикера палеты
/packing/pallet/{pallet_id}/sticker
Опциональный параметр operationType - передается для печати стикера в операциях перемаркировки. Значение брать из operationType заказа.
В ответ возвращается стикер в pdf, закодированный в base64
Успех
{
"success": true,
"sticker": {
"content":"base64 pdf",
"printer": "STICKER_6x6"
}
}
11. Перевод заказа в статус Упакован (packed) после перемаркировки
/packing/order/{order_id}/packed
Метод переводит заказ с номером {order_id} в статус Упакован.
12. Присвоение нового ШК места при перемаркировке
/packing/order/{order_id}/place/{place_id}/barcode/new
{
"new_barcode" : "ABCD1245"
}
Метод добавляет основной ШК месту при перемаркировке по FBO заказам
Успех
{
"success": true,
"place": {
"id": "ABCD1245"
"packaging_id": "fsdf",
"sequence_num": 1,
"weight": 567
}
}
13. Присвоение нового ШК паллеты при перемаркировке
/packing/pallet/{pallet_id}/barcode/new
{
"id": "123456", //id паллеты
"new_barcode" : "ABCD1245"
}
Метод добавляет основной ШК паллете при перемаркировке по FBO заказам
Успех
{
"success": true,
"pallet": {
"id": "ABCD1245",
"num": "1",
"places": [
"placeId1",
"placeId2"
],
"weight": 567,
"dimensions": {
"width": 10,
"height": 10,
"depth": 10
}
}
}
14. Получение палетного листа
/packing/pallet/{pallet_id}/form
В ответ возвращается печатная форма в pdf, закодированная в base64
Успех
{
"success": true,
"sticker": {
"content":"base64 pdf",
"printer": "STICKER_6x6"
}
}
15. Получение дополнительных документов для печати по заказу
/packing/order/{order_id}/docs_for_print
В ответ возвращается массив файлов, закодированных в base64.
Успех
{
"success": true,
"files": [
{
"id": "BL5333#Счёт__31_от_14.pdf",
"name": "Счёт__31_от_14.pdf",
"url": "static-eu.insales.ru/order_files/165623972/Счёт__31_от_14.04.2021.pdf"
},
{
"id": "BL5333#Накладная__131_от_17.10.2018.pdf",
"name": "Накладная__131_от_17.10.2018.pdf",
"url": "static-eu.insales.ru/order_files/165623972/Счёт__31_от_14.04.2021.pdf"
}
]
}
16. Получение конкретного доп.документа по идентификатору
/packing/order/{order_id}/docs_for_print/{doc_id}
В ответ возвращается файл, закодированный в base64.
Успех
{
"success": true,
"id":"BL5333#Счёт__31_от_14.pdf",
"content":"base64 pdf",
"printer": "PRINTER_A4"
}
17. Получение шк поставки для WB
/packing/order/{order_id}/fbo/sticker/shipment
В ответ возвращается стикер в pdf, закодированный в base64
Успех
{
"success": true,
"sticker": {
"content":"base64 pdf",
"printer": "STICKER_6x6"
}
}
18. Получение батча на упаковку
/packing/order-batch/{batch_id}/start
В ответ возвращается
Успех
{
"success": true,
"order_batch": {
"id":"some id",
"orders": [
// заказы в том же формате, что в ответе на /packing/order/{order_id}/start
]
}
}
Ошибка:
{
"success": false,
"errors": [
{
"code": "ORDER_BATCH_NOT_FOUND",
"message": "Батч с номером LT1234567890 не найден"
}
]
}
Типовые ошибки:
Code | Message |
ORDER_BATCH_NOT_FOUND | Батч с номером LT1234567890 не найден |
ORDER_BATCH_NOT_PICKED | Батч LT1234567890 не собран |
ORDER_BATCH_ALREADY_PACKED | Батч LT1234567890 уже упакован |
19. Получение батча
/packing/order-batch/{batch_id}
Метод полностью аналогичен методу /packing/order-batch/{batch_id}/start по части возвращаемых полей, за следующим исключением:
- Метод не инициирует начало упаковки
- Получить батч возможно в любом статусе
20. Проверка актуальности заказа
/packing/order/{order_id}/check-status
В ответ возвращается
Успех
{
"success": true
}
Ошибка:
{
"success": false,
"errors": [
{
"code": "CANCELED",
"message": "Заказ отменен"
}
]
}
Типовые ошибки:
Code | Message |
CANCELED | Заказ отменен |
21. Завершение сборки паллеты
/packing/pallet/{pallet_id}/complete
В ответ возвращается
Успех
{
"success": true
}
Ошибка:
{
"success": false,
"errors": [
{
"code": "...",
"message": "..."
}
]
}
22. Получение списка паллет
/packing/pallet?status=PACKING
Возможные фильтры:
- status - по статусу паллеты (PACKING, PACKED)
- processing_by - по логину оператора, взявшего паллету в работу
Параметры постраничной выдачи:
- page - номер страницы (начиная с 0)
- size - размер страницы (по-умолчанию 50)
Паллеты сортируются по убыванию времени создания
Успех
{
"success": true,
"pallets": [
{
"id": "12345",
"status": "PACKING",
"places": [
"placeId1"
],
"packaging_id": "4445566633211",
"weight": 567,
"dimensions": {
"width": 10,
"height": 10,
"depth": 10
}
}
],
"places": [
{
"id": "placeId1",
"order_id": "LT123456",
"packaging_id": "4445566633211",
"sequence_num": 1,
"weight": 567,
"items": [
{
"id": "some-item-id",
"barcode_used": "40010030040",
"quantity": 1,
"serial_numbers": [
{
"code": "imei",
"value": "821821291291929"
},
{
"code": "chestniy_znak",
"value": "010460370285702421"
}
]
}
]
}
],
"orders": [
{
"id": "LT123456",
"merchant": {
"id": "some-id",
"title": "ООО Зингер",
"trade_title": "Zinger.com"
}
}
],
"pagination" {
"page": 0,
"size": 50,
"total_pages": 2,
"total_elements": 70
}
}
Ошибка:
{
"success": false,
"errors": [
{
"code": "...",
"message": "..."
}
]
}
23. Получение данных о паллете
/packing/pallet/{pallet_id}
Успех
{
"success": true,
"pallet": {
"id": "12345",
"status": "PACKING",
"places": [
"placeId1"
],
"weight": 567,
"dimensions": {
"width": 10,
"height": 10,
"depth": 10
}
},
"places": [
{
"id": "placeId1",
"order_id": "LT123456",
"packaging_id": "4445566633211",
"sequence_num": 1,
"weight": 567,
"items": [
{
"id": "some-item-id",
"barcode_used": "40010030040",
"quantity": 1,
"serial_numbers": [
{
"code": "imei",
"value": "821821291291929"
},
{
"code": "chestniy_znak",
"value": "010460370285702421"
}
]
}
]
}
],
"orders": [
{
"id": "LT123456",
"merchant": {
"id": "some-id",
"title": "ООО Зингер",
"trade_title": "Zinger.com"
}
}
]
}
Ошибка:
{
"success": false,
"errors": [
{
"code": "...",
"message": "..."
}
]
}
24. Получение дополнительных стикеров на место
/packing/order/{order_id}/place/{place_id}/additional-stickers
В ответ возвращается список стикеров в pdf, закодированных в base64
Успех
{
"success": true,
"stickers": [
{
"content":"base64 pdf",
"printer": "STICKER_6x6"
}
]
}
25. Получение списка упаковочных материалов
/packing/packagins?merchant_id={some-id}
merchant_id - опциональный параметр. Если он указан, то в выдачу попадут и материалы, привязанные к конкретному мерчанту
Успех
{
"success": true,
"packagings": [
{
"id": "some-id",
"title": "Коробка 50х30х20",
"require_dimensions": false,
"barcodes": [
"BX-503020",
"BX*503020"
]
},
{
"id": "some-id-2",
"title": "Коробка 50х30х10",
"require_dimensions": false,
"barcodes": [
"BX-503010"
]
}
]
}