API и интеграции WMS-Bridge: быстрое подключение к 1С:Предприятие 8.3, МойСклад и кастомным WMS
Базовый адрес локального контура — http://127.0.0.1:8501. Идентификатор пространства в примерах — vash_sklad. Каталог этого пространства не смешивается с другими.
Интеграция с 1С через внешнюю обработку .epf
Внешний отчёт или обработка (.epf) подключается за 15 минут. Конфигурация не снимается с типовой поддержки, и обновление вендора не затирает модуль: файл лежит рядом с базой. Команда формы вызывает заполнение табличной части документа «Поступление товаров и услуг».
Шаг 1
Модуль объекта
Вставьте текст шаблона в модуль новой внешней обработки и сохраните её как .epf в Конфигураторе.
Шаг 2
Регистрация
Администрирование, затем «Печатные формы, отчеты и обработки», затем «Дополнительные отчеты и обработки». Добавьте файл и назначьте его документу поступления.
Шаг 3
Заполнение строк
Обработка ищет номенклатуру по штрихкоду или артикулу. Количество, цена и сумма строки документа остаются как в накладной.
Фрагмент ниже повторяет рабочий шаблон: JSON со списком наименований уходит на POST /api/preview-normalize. Рабочий контур с файлом .xls или .xlsx использует POST /api/orders/upload и затем GET /api/orders/items.
BSL 1C
// BSL 1C — внешняя обработка .epf для документа «Поступление товаров и услуг».// Количество, цена и сумма строк не меняются.// Полный модуль: /integrations/1c/wms_bridge_loader_template.epf.txtПроцедура ИнициализироватьПодключение()
АдресСервера = "127.0.0.1";
ПортСервера = 8501;
ИдентификаторСклада = "vash_sklad";
КонецПроцедурыФункция ЗаполнитьПоступление(ДокументОбъект) Экспорт
ИнициализироватьПодключение();
Ответ = ОтправитьСтрокиНаПроверку(ДокументОбъект.Товары);
// Применить items[].barcode и items[].article к строкам Товары.Возврат Ответ;
КонецФункцииФункция ОтправитьСтрокиНаПроверку(Товары)
Строки = Новый Массив;
ДляКаждого СтрокаТовара Из Товары ЦиклЕсли Строки.Количество() >= 10 ТогдаПрервать;
КонецЕсли;
Наименование = СокрЛП(Строка(СтрокаТовара.Номенклатура));
ЕслиНе ПустаяСтрока(Наименование) Тогда Строки.Добавить(Наименование);
КонецЕсли;
КонецЦикла;
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку();
Запись.ЗаписатьНачалоОбъекта();
Запись.ЗаписатьИмяСвойства("lines");
ЗаписатьJSON(Запись, Строки);
Запись.ЗаписатьИмяСвойства("domain");
Запись.ЗаписатьЗначение("furniture");
Запись.ЗаписатьКонецОбъекта();
Запрос = Новый HTTPЗапрос("/api/preview-normalize");
Запрос.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
Запрос.Заголовки.Вставить("X-Tenant-ID", ИдентификаторСклада);
Запрос.УстановитьТелоИзСтроки(Запись.Закрыть(), КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
Соединение = Новый HTTPСоединение(АдресСервера, ПортСервера, , , , 30);
Возврат Соединение.ВызватьHTTPМетод("POST", Запрос);
КонецФункции
Спецификация Headless REST API
POST
/api/orders/upload
Загрузка накладной в сессию
Один файл Excel: .xls или .xlsx, до 50 МБ. Заголовок X-Tenant-ID выбирает пространство. Нужна сессия оператора: Authorization: Bearer либо кука wms_session / session_token. Ответ — сводка total_rows, matched_auto, needs_llm, quarantined, is_anomaly, checksum_ok, tenant_id. CSV и XML этот метод не принимает. Несколько файлов отправляются отдельно на POST /api/orders/process-batch, потолок 50 файлов и 200 МБ.
POST
/api/preview-normalize
Синхронный предпросмотр
JSON {"lines": [...], "domain": "furniture"} либо multipart-поле file. До 10 строк и 2 МБ. Отрасли: furniture, auto, sanitary, electrical, general. Сессия не требуется. В ответе items (source_line, name_1c, article, barcode, level, confidence, cell, quarantined), elapsed_ms и telemetry.catalog = open_demo. Цен и остатков нет. Rate Limiter (P60): 3 запроса в минуту с одного IP.
GET
/api/ready
Зонд готовности ядра
Чистое чтение флага прогрева, без сборки каталога внутри запроса. 200 ready — каталог и векторный индекс построены. 503 warming_up — прогрев ещё идёт. 503 failed — прогрев завершился ошибкой, причина в detail. Поля ответа: status, detail, sku_count, vector_count, version, engine = onnx.
Коды ответов
401, 403, 429 и 503
Код
Имя
Когда приходит
401
Unauthorized
Действительная сессия отсутствует. Возвращается на POST /api/orders/upload без Bearer и без куки сессии. Заголовок WWW-Authenticate: Bearer.
403
Tenant Forbidden
BOLA Defense: пространство есть, но принадлежит другому оператору, либо клиент без прав запрашивает системный склад. Мутация каталога Челябинска закрыта тем же кодом.
429
Rate Limit Exceeded
Скользящее окно P60. Для предпросмотра — 3 запроса в минуту, заголовок Retry-After: 60. Повторять запрос до истечения окна не нужно.
503
Service Unavailable
GET /api/ready в состояниях warming_up и failed. Тот же код у загрузки, если каталог или векторный индекс ядра не подняты: файл накладной при этом не считается повреждённым.
Примеры cURL и Python
Отдельного установочного пакета SDK нет: вызов собирается средствами cURL и стандартной библиотеки Python. Подсветка синтаксиса встроена в разметку страницы.
Исходящего вебхука в этом контуре нет. Результат загрузки приходит синхронным телом POST /api/orders/upload. Строки документа читаются последующим GET /api/orders/items в той же сессии.
Тестовый доступ
Тестовый ключ и разбор вашей накладной выдаются через заявку на аудит. В примерах выше сессия обозначена как Bearer: боевой токен на страницу не выводится.