Loyalty Platform — руководство пользователя

Журнал запросов

Содержание раздела
  1. Зачем это бизнесу
  2. Список запросов
  3. Фильтры
  4. Карточка запроса
  5. Как найти ошибку интеграции по Correlation ID
  6. Что скрыто в записи
  7. Каких запросов нет в журнале
  8. Кто что может

← Оглавление

Раздел «Журнал запросов» показывает обращения к API вашей организации: что прислала касса, сайт или другая подключённая система, что ответила платформа и сколько заняла обработка. Сюда же попадают действия сотрудников в админ-панели. Журнал нужен, когда интеграция «не работает»: вместо переписки с подрядчиком в духе «мы отправили, а у вас ошибка» вы открываете конкретный запрос и видите его целиком — что пришло, что платформа ответила и с каким кодом ошибки. Раздел виден только роли Администратор организации (TENANT_ADMIN).

Если раздел «Интеграции» выдаёт внешним системам пропуска, то журнал запросов — запись на проходной: кто, когда и с чем приходил.

Зачем это бизнесу#

  • Ошибки интеграции разбираются за минуты. Интегратор называет Correlation ID из ответа платформы, вы находите запрос и видите, что именно отправила касса и почему платформа отказала.
  • Без обращения к администратору платформы. Запросы своей организации вы смотрите сами, в своей админ-панели.
  • Видно, кто сделал запрос. У каждого запроса подписан источник: интеграция и ключ кассы или имя сотрудника.
  • Секреты не утекают. Пароли, API-ключи, токены и секреты вебхуков в журнал не записываются: вместо них стоит ***.

Список запросов#

Журнал запросов организации
Журнал запросов организации

Заголовок страницы — «Журнал запросов», подзаголовок — «HTTP-запросы к API вашей организации: кассы и интеграции по API-ключу, сотрудники в админке». Новые запросы — сверху. Под таблицей — счётчик «Всего N записей» и переключение страниц.

Колонка Что показывает
Время Дата и время запроса с точностью до секунды, в часовом поясе организации
Статус Код ответа платформы. Цвет зависит от класса: 2xx (успех) — зелёный, 4xx (ошибка в запросе) — оранжевый, 5xx (ошибка платформы) — красный
Запрос Метод и путь, например POST /v1/api/orders/calculate. Длинный путь обрезан, полностью он виден в подсказке
Длительность Сколько платформа обрабатывала запрос, в миллисекундах
Субъект Кто выполнил запрос. Касса или другая система — «интеграция / ключ», например «Demo POS / Demo POS Key». Сотрудник — полное имя, а если оно не заполнено, email. Если подписать не удалось (например, ключ удалён), показан серым технический идентификатор
Авторизация «Касса (API-ключ)» — запрос внешней системы по ключу интеграции; «Админка (JWT)» — действие сотрудника в админ-панели; «—» — запрос без авторизации
Correlation ID Первые 8 символов идентификатора запроса; значок рядом копирует его целиком

Клик по строке открывает карточку запроса.

Фильтры#

Над таблицей, отдельной строкой, — период. Если его не выбирать, журнал показывает последние 24 часа (в границах поля написано «Последние 24 ч» и «сейчас»). В календаре есть быстрые периоды «1 ч», «24 ч» и «7 дней», границы можно задать и вручную, с точностью до секунды. Один период — не длиннее 31 дня: дальше календарь выбрать не даст. Более ранние запросы ищите, сдвинув период на нужные даты.

Под периодом — остальные фильтры. Они складываются: в списке остаются запросы, которые подходят под все условия сразу. Кнопка сброса снимает все фильтры, включая период.

Фильтр Как работает
Метод GET, POST, PATCH, PUT или DELETE
Путь начинается с Начало пути запроса. Например, /v1/api/ оставит только запросы касс и других систем, /v1/api/orders — только запросы заказов
Класс статуса «2xx — успех», «3xx — перенаправление», «4xx — ошибка клиента», «5xx — ошибка сервера»
Код ответа Точный код, например 404. Класс статуса и точный код взаимоисключающие: выбор одного очищает другой
Авторизация «Касса (API-ключ)» или «Админка (JWT)». Самый быстрый способ убрать из списка действия сотрудников и оставить только интеграции
Correlation ID Точное совпадение с идентификатором запроса (см. ниже)
Поиск по телам, от 3 символов Ищет текст в теле запроса или ответа без учёта регистра: номер чека, телефон гостя, код промокода. Поиск просматривает все записи периода подряд, поэтому на длинном периоде он медленный — сначала сузьте период

Фильтры сохраняются в адресной строке: ссылку на отфильтрованный список можно отправить коллеге с тем же доступом.

Карточка запроса#

Карточка запроса кассы с ошибкой
Карточка запроса кассы с ошибкой

Заголовок карточки — метод и путь, например «Запрос GET /v1/api/orders/by-external-id/CHK-000123». Слева — два блока, «Запрос» и «Ответ». В каждом есть «Заголовки» (по алфавиту) и «Тело». JSON-тело показано с отступами, значок рядом со словом «Тело» копирует его целиком. Если тела нет, написано «Тела нет».

Справа — сведения о запросе:

Строка Что показывает
Время Дата и время с секундами
Метод и путь Полный путь запроса
Query-параметры Параметры после ? в адресе, если они были; значок копирует строку
Статус Код ответа
Длительность Время обработки, мс
IP клиента Адрес, с которого пришёл запрос
User-Agent Программа, которая отправила запрос: кассовое ПО, браузер
Авторизация Касса (API-ключ) или админка (JWT)
Субъект Интеграция и ключ или имя сотрудника, ниже — технический идентификатор
Correlation ID Полный идентификатор запроса со значком копирования

Как найти ошибку интеграции по Correlation ID#

Correlation ID — уникальный идентификатор, который платформа присваивает каждому запросу. Он есть в каждом ответе платформы, в том числе в ответе с ошибкой: в заголовке X-Correlation-Id и в поле meta.correlationId тела ответа. Если касса сама передаёт свой X-Correlation-Id, платформа использует его. По этому идентификатору запрос находится в журнале однозначно.

Поиск запроса по Correlation ID
Поиск запроса по Correlation ID
  1. Попросите у интегратора Correlation ID проблемного запроса. Он берёт его из ответа платформы, сохранённого в логах кассы или сайта.
  2. Откройте «Журнал запросов» и вставьте значение в фильтр «Correlation ID». Поиск идёт по точному совпадению.
  3. Если запрос был раньше чем 24 часа назад, выберите период, на который он пришёлся: фильтр ищет только внутри периода.
  4. Откройте найденную строку. В блоке «Запрос» видно, что прислала касса, в блоке «Ответ» — что ответила платформа. У ответа с ошибкой в теле есть код (error.code), описание (error.message, на английском) и, для ошибок проверки, список полей с причинами (error.details).

Если Correlation ID нет, сузьте список фильтрами: «Авторизация» → «Касса (API-ключ)», «Класс статуса» → «4xx — ошибка клиента» и период, когда гость стоял на кассе. Можно поискать и по телам: номер чека или телефон гостя.

Что обычно означает код ответа:

Код Что произошло Что делать
400 Касса прислала неверные данные В error.details указаны поле и причина, например items[0].name. Передайте интегратору
403 У API-ключа нет нужного права (API_KEY_SCOPE_REQUIRED) Добавьте право ключу в разделе «Интеграции» или выпустите ключ с нужными правами
404 Не найден клиент, заказ или точка продаж. Например, LOCATION_NOT_FOUND — касса передала неизвестный код точки Проверьте данные в запросе и справочник «Филиалы»
409 Конфликт: суммы изменились между расчётом и подтверждением (ORDER_CALCULATION_DRIFT) или внешний ID заказа уже занят другим заказом (ORDER_EXTERNAL_ID_CONFLICT) При расхождении сумм касса показывает гостю новую сумму и подтверждает заказ повторно. При занятом ID — проверьте, не проведён ли этот заказ раньше
422 Бизнес-отказ: не хватает бонусов, промокод истёк Это не сбой интеграции, а правило программы
5xx Ошибка на стороне платформы Передайте Correlation ID в поддержку платформы

Что скрыто в записи#

Пароли, ключи и токены скрываются ещё до записи в журнал. Восстановить скрытое нельзя — ни вам, ни администратору платформы.

  • Заголовки с ключами и токенами — authorization, x-api-key, cookie, set-cookie, proxy-authorization, x-refresh-token: вместо значения *** с пометкой «скрыто».
  • Поля с паролями, токенами и секретами в любом JSON-теле — password, newPassword, currentPassword, token, accessToken, refreshToken, secret, webhookSecret, rawKey — заменены на ***, остальное тело видно.
  • Тело целиком заменено на *** с пометкой «скрыто» у запросов, где секретом или персональными данными является всё содержимое: вход, обновление сеанса и восстановление пароля; запросы к API-ключам интеграций (создание, показ ключа, отзыв); подписки на вебхуки (секрет подписи); список акций для гостя (/v1/api/promotions/available — в нём телефон гостя); выгрузка номеров тиража карт лояльности; просмотр самого журнала. У скрытого тела нет кнопки копирования.
Тело запроса скрыто целиком
Тело запроса скрыто целиком

Остальное — телефоны и имена клиентов, суммы, состав чеков — записано как есть. Поэтому журнал и доступен только администратору организации.

Тело длиннее 64 КБ обрезается. Вместо файлов (PDF, выгрузки Excel) записано [binary content].

Каких запросов нет в журнале#

Журнал показывает только запросы, сделанные от имени вашей организации: запросы касс и других систем по ключам ваших интеграций и действия сотрудников в админ-панели вашей организации. В нём нет:

  • запросов других организаций — даже если у сотрудника есть доступ в несколько организаций;
  • запросов, не привязанных к организации: вход в систему, восстановление пароля, запросы без авторизации. Сюда же относятся запросы, которые платформа отклонила ещё при проверке API-ключа: ключ не передан, неверный или больше не действует, либо у ключа нет права на этот запрос. Касса в этих случаях получает ответ 401 или 403 с причиной («Invalid API key», «Insufficient scope»), и разбирать такую ошибку нужно по этому ответу;
  • личных и платформенных запросов сотрудников: профиль и смена пароля, список организаций сотрудника, работа администратора платформы в платформенной части панели. Такие запросы могут быть выполнены, пока сотрудник находится в вашей организации, но относятся они к самому человеку, а не к организации, и содержат данные других организаций. Поэтому журнал организации их не показывает. Администратор платформы видит все запросы в отдельном журнале платформы.

Ваши собственные просмотры журнала в нём тоже видны: это строки GET /v1/tenant-admin/request-logs, их тела скрыты. Чтобы они не мешали, поставьте фильтр «Авторизация» → «Касса (API-ключ)».

Кто что может#

Роль Доступ к разделу
Администратор организации (TENANT_ADMIN) Просмотр списка и карточек запросов своей организации
Остальные роли, в том числе Администратор платформы без роли администратора в организации Раздел не виден

Журнал только для чтения: записи нельзя изменить или удалить. Права администратора платформа проверяет при каждом открытии журнала. Если у сотрудника отозвали роль администратора, журнал перестаёт у него открываться сразу, не дожидаясь окончания сеанса.


← Оглавление

Loyalty Platform — руководство пользователя