Документация ·Вебхук
Вебхук событий
Склад сам отправляет события на ваш адрес — опрашивать API не нужно. Вебхук подключается как канал обмена: у него своя периодичность и свои строки в журнале обменов.
Подключение
«Настройки → Каналы → Вебхук»: адрес, куда слать, и секрет подписи. Секрет хранится шифрованным и в кабинете больше не показывается. Кнопка проверки шлёт на адрес пустой пакет — { warehouseId, events: [], ping: true }, подписанный так же, как настоящие, но без заголовка X-Zantor-Events, — так адрес проверяют до первого настоящего события.
Подпись
Каждый запрос подписан: заголовок X-Zantor-Signature содержит sha256=<HMAC-SHA256 тела запроса вашим секретом>. Считайте подпись по сырому телу до разбора JSON и сравнивайте её постоянным по времени сравнением. Запрос с неверной подписью отклоняйте.
В заголовке X-Zantor-Events — сколько событий в пакете. Тело — { warehouseId, events }, где каждое событие несёт id, type и его название словами — title, время at, кто сделал — actor, предмет события subject и содержимое payload. У события документа — ещё document: вид kind кодом — receipt, order, trip, move, count, wave, kit или service, — уточнение source (return, replen, supplier, owner, unkit; у обычного документа null), номер no и для работ — что делали, service. Товар назван артикулом; рядом идёт наш внутренний itemId — опираться на него не нужно.
Какие события приходят
- Документы: запущен и закрыт, акт расхождения при приёмке, рейс погружен.
- Комплектация и работы: набор собран или разобран, работа с товаром сделана — артикул и сколько; спецификация набора изменена.
- Приёмка: принят товар с незнакомым штрихкодом — штрихкод, количество и документ.
- Заказ площадки отменён.
- Решения старшего смены: вопрос задан и ответ дан.
- Остаток: списание, применённый пересчёт, место выведено из работы.
События до подключения не приходят: отсчёт идёт с момента, когда канал подключили. В пакете события идут по возрастанию id, и следующий пакет продолжает с того места, где остановился прошлый. Событие долгой операции может прийти в следующем пакете с id меньше уже полученных: записано раньше, завершилось позже. Сортируйте по id у себя, если порядок важен.
Ответ и повтор
Ответьте кодом 2xx — пакет считается принятым. Любой другой код или молчание дольше пятнадцати секунд — ошибка: отметка о принятом не сдвигается, и те же события придут снова. Поэтому обработчик должен быть идемпотентным: тот же id события — та же запись у вас.
Отказ виден в кабинете: что ответил адрес и когда.