<!-- Canonical: https://docs.shopstory.live/docs/resources/faq -->

# Вопросы интеграторов

Для последовательной проверки по симптому используйте [диагностику интеграции](<https://docs.shopstory.live/docs/operations/troubleshooting>). Определения показателей и сверка двух отчётов: [события и метрики](<https://docs.shopstory.live/docs/reference/events-metrics>).

## Доступ и конфигурация

### Как начать интеграцию?

Передайте команде ShopStory источник товарных данных — фид или API магазина, единый `feedProductId`, целевые страницы и нужное поведение кнопки «Купить». Для web-интеграции добавьте production- и test-домены. ShopStory подготовит `applicationId`, зарегистрирует нужные origins и настроит компоненты. Затем выберите [Web SDK, Public API или Mobile SDK](<https://docs.shopstory.live/docs/guide/integration-methods>).

### `applicationId` нужно хранить как секрет?

Нет. Это идентификатор проекта, который виден в браузерных запросах и выбирает нужную конфигурацию. Он не заменяет авторизацию и не должен давать доступ к заказам, профилю, корзине или другим чувствительным операциям. Пароли, session cookies и реальные access tokens остаются секретами.

### Почему запрос работает из терминала, но не из браузера?

Для браузерного доступа ShopStory регистрирует точный origin клиента. Сверьте протокол, hostname и порт страницы с переданными при подключении значениями. Не обходите проблему открытым CORS relay. Подробнее: [Quickstart](<https://docs.shopstory.live/docs/guide/quickstart>).

### Почему Web SDK загрузился, но показал пустую или неверную конфигурацию?

Для основного SDK проверьте `config.clientId` в вызове `show()`. PiP bundle использует конфигурацию зарегистрированного hostname. В обоих случаях передайте текущий URL и `applicationId` менеджеру интеграции и проверьте, что test- и production-домены не перепутаны.

## Контент и товары

### Можно открыть плеер в модальном окне или внутри страницы?

Стандартный полный плеер открывается поверх страницы: как модальное окно на desktop и на весь экран на mobile. Внутри блока страницы `show()` размещает каталог. Для полного inline-плеера или собственного модального окна заранее согласуйте отдельный способ монтажа; `showPlayer()` не принимает контейнер. Сравнение вариантов: [размещение Web SDK](<https://docs.shopstory.live/docs/guide/web-sdk#player-placement>).

### Что означает `no_active_stream`?

Для указанного товара нет подходящего опубликованного live или записи либо ID на странице не совпадает с `feedProductId` из конфигурации проекта. Это штатное пустое состояние, а не сбой сервиса. Проверьте связку в [Mini-player API](<https://docs.shopstory.live/docs/guide/mini-player>).

### Почему API возвращает `active`, а mini-player на PDP не появляется?

Ответ подтверждает наличие видео для товара и предоставляет поддерживаемый `body.stream.playerUrl` как непрозрачный URL плеера. Появление виджета зависит от настройки ShopStory под конкретный PDP-шаблон: нужно определить товарный ID, место вставки и исключённые страницы. Передайте URL проблемной карточки и название шаблона.

### Насколько свежие данные о товаре и доступности?

В режиме фида каталог, названия, изображения и цены берутся из последней успешно обработанной выгрузки; частота синхронизации согласуется для проекта. Товарный API возвращает описание и актуальные условия через обработчик магазина: [Интеграция с интернет-магазином](<https://docs.shopstory.live/docs/guide/custom-commerce-integrations>). При сочетании источников фид передаёт описание, а API — условия покупателя. Штатный обработчик наличия Web SDK запрашивает остаток выбранного магазина при открытии эфира и при смене магазина. Окончательное подтверждение остаётся за cart-командой ритейлера: [Наличие товара и остатки](<https://docs.shopstory.live/docs/guide/product-availability>).

### Фид нужно обновлять каждые четыре часа?

Интервал зависит от роли фида и допустимого возраста его данных. Если мастер-фид передаёт каталог/SKU, а расширенный commerce API — актуальные условия покупателя, частоту выбирают по изменениям каталога. Персональные цены и остатки сами по себе не требуют нового импорта. В стандартном режиме цена берётся из фида. Boolean-обработчик не меняет цену и не снимает установленный фидом запрет покупки. Правило выбора и проверка свежести: [частота обновления фида](<https://docs.shopstory.live/docs/guide/feed-requirements#feed-refresh-frequency>).

### Как подключить разные страны и валюты?

Согласуйте по каждому рынку каталог, валюту и назначенную конфигурацию проекта/applicationId. Геопозиция зрителя не переключает фид автоматически. Проверяйте сохранение валюты и дробной цены в карточке, кабинете и отчётах; денежные итоги разных валют не складываются без отдельного правила конвертации. Подробнее: [страны и валюты](<https://docs.shopstory.live/docs/guide/feed-requirements#countries-and-currencies>).

### Какой идентификатор товара использовать?

Используйте один строковый `feedProductId` в товарных данных, на web- и native-PDP и в product action. Сохраняйте ведущие нули и регистр. Если commerce API принимает другой внутренний SKU, преобразуйте идентификатор на границе системы ритейлера, а не вводите второй ID для ShopStory.

### Можно проверять остаток через API ритейлера перед покупкой?

Да. Web SDK передаёт список товаров эфира в обработчик наличия на сайте ритейлера, тот обращается к своему stock API с выбранным магазином и возвращает карту наличия. SDK обновляет карточки до клика по кнопке. Запрос выполняется кодом сайта с его сессией, поэтому открывать stock API для ShopStory не нужно.

Если stock API недоступен из браузера покупателя, используйте серверного посредника магазина. Персональные цены и выбор SKU подключаются через [расширенный commerce-контракт](<https://docs.shopstory.live/docs/guide/custom-commerce-integrations>). Boolean-контракт наличия, тайм-ауты и приоритет источников: [Наличие товара и остатки](<https://docs.shopstory.live/docs/guide/product-availability>).

### Можно передавать товары через API и выбирать цвет или размер в плеере?

Это отдельная проектная commerce-интеграция. До оценки разработки подтвердите с ShopStory версию SDK, целевые платформы и способ регистрации обработчиков; параметры стандартного `show()` не включают эти возможности автоматически.

В согласованной поставке источником товаров и вариантов может быть фид или API магазина. Опции соответствуют реальным SKU, а магазин возвращает актуальные условия и подтверждает добавление выбранного варианта. Контракт и prerequisites: [Интеграция с интернет-магазином](<https://docs.shopstory.live/docs/guide/custom-commerce-integrations>).

### Где регистрировать getProductConditions и startCommerceAction?

В commerce v1 обработчики регистрируются до открытия плеера: на Web — через `ShopStorySDK.registerCommerceAdapter`, на native и Flutter — через API соответствующего пакета. [Порядок регистрации и Web-фрагмент](<https://docs.shopstory.live/docs/guide/custom-commerce-integrations#commerce-registration>) описаны в commerce-руководстве. Перед подключением получите [совместимые версии и полный пример](<https://docs.shopstory.live/docs/guide/custom-commerce-integrations#commerce-sdk-delivery>). Эти обработчики не являются HTTP endpoints Public API.

### Мы обязаны подключать проверку остатков?

В стандартном Web-подключении обработчик наличия необязателен: без него используется снимок фида. Его подключают, когда наличие зависит от выбранного магазина или меняется чаще, чем синхронизируется фид. В расширенном commerce v1 актуальные условия, включая наличие, возвращает `getProductConditions`; это отдельный контракт.

## API

### Почему `/v2/` использует `application=`, а `/v3/` — `applicationId=`?

У разных семейств endpoint исторически разные имена query-параметра. Используйте параметр из схемы конкретного endpoint и не меняйте версию URL механически. Подробнее: [Формат запросов и ответов](<https://docs.shopstory.live/docs/guide/architecture>).

### Как обрабатывать HTTP `200` с `status: 400` внутри JSON?

Проверяйте оба уровня независимо. Сначала обработайте HTTP-код или сетевую ошибку, затем верхнеуровневый `status` и после него состояние внутри `body`, если оно есть. HTTP `200` сам по себе не подтверждает успех операции.

### Можно ли полагаться на поля, которых нет в OpenAPI?

Нет. Клиент должен игнорировать незнакомые необязательные поля и использовать документированную схему. Случайно присутствующее поле может быть внутренним или нестабильным.

### Как тестировать без активного live?

Используйте опубликованную запись, переданную ShopStory для приёмки. Для live-состояния нужна отдельная сессия тестового эфира; статичный mock не подтверждает поведение в реальном времени.

## Mobile

### Mobile SDK — это библиотека или WebView?

SDK — библиотека с нативным API; внутри неё полный плеер работает в управляемом WebView. SDK отвечает за media lifecycle и bridge, приложение — за свои экраны, навигацию, авторизацию и корзину. Собирать собственный WebView-плеер не требуется. [Объяснение и схема архитектуры](<https://docs.shopstory.live/docs/guide/mobile-sdk#sdk-and-webview>).

### Какие mobile-платформы входят в текущий маршрут?

Опубликованные инструкции и starters относятся к указанным в них версиям native iOS и Flutter на iOS. Для выбранной платформы ShopStory передаёт точную версию SDK, совместимый Web runtime и, при использовании Flutter, adapter/native пакеты. Требования к toolchain фиксируются в integration handoff.

Android SDK и Flutter на Android согласуются отдельно. [Платформенная поставка](<https://docs.shopstory.live/docs/guide/mobile-sdk#%D0%BF%D0%BB%D0%B0%D1%82%D1%84%D0%BE%D1%80%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F-%D0%BF%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B0>) помогает выбрать маршрут, а [Android-контракт](<https://docs.shopstory.live/docs/guide/mobile-sdk-releases#android-delivery>) задаёт состав пакета, карту переходов и приёмку. Flutter на iOS не подтверждает поддержку Android.

### Как подключить Mobile SDK?

Начните с руководства [Mobile SDK](<https://docs.shopstory.live/docs/guide/mobile-sdk>). Оно описывает пользовательский сценарий, единый `feedProductId`, границу ответственности, product actions, lifecycle, безопасность и приёмку.

Для опубликованных поставок [native iOS](<https://docs.shopstory.live/docs/guide/mobile-sdk-ios>) и [Flutter на iOS](<https://docs.shopstory.live/docs/guide/mobile-sdk-flutter>) скачайте starter и проверьте [пару версий](<https://docs.shopstory.live/docs/guide/mobile-sdk-releases>). Для Android получите [пакет и пример своей версии](<https://docs.shopstory.live/docs/guide/mobile-sdk-releases#android-delivery>). Доступы и тестовые товары выдаёт ShopStory. Расширенный commerce подключается отдельно по контракту поставки.

### Где проходит граница white-label?

SDK работает внутри приложения ритейлера: каталог, PDP, навигация, авторизация, корзина и native analytics остаются частью приложения. Визуальная конфигурация web-плеера согласуется для проекта. Изменение элементов, которых нет в поставленной документации, не входит в публичный контракт и фиксируется отдельно до приёмки.

### Что проверить для чата перед выпуском в App Store или Google Play?

Включите в приёмку правила, фильтрацию сообщений, жалобы, персональную блокировку и действия модератора. Зафиксируйте, кто обрабатывает обращения. Проверяются механизмы конкретной поставки и итоговая сборка приложения; одно наличие правил чата не подтверждает готовность. Ответственность описана в разделе [модерации чата](<https://docs.shopstory.live/docs/operations/security#chat-moderation>); проверяемые результаты — в [матрице готовности](<https://docs.shopstory.live/docs/operations/security#chat-readiness>).

## Поддержка

### Что приложить к техническому обращению?

- URL страницы и `applicationId`;
- время запроса с часовым поясом;
- браузер, ОС или mobile-платформу;
- endpoint и безопасный фрагмент запроса и ответа;
- шаги воспроизведения и ожидаемый результат.

Не отправляйте пароли, cookies, access tokens и персональные данные. Канал: [support@shopstory.live](<mailto:support@shopstory.live>). Порядок реакции и SLA определяются договором проекта.

## Аналитика

### Почему в ShopStory и счётчике магазина разные числа?

Buy intent фиксирует клик, а E-commerce add — подтверждённое добавление. Переход на PDP, заказ и оплата измеряются отдельно. Сверяйте также период, consent и покрытие страниц: [смысл метрик](<https://docs.shopstory.live/docs/guide/analytics>).

### Достаточно включить E-commerce в Яндекс Метрике?

Нет. Нужны согласованный data container и подтверждённая отправка из SDK для проекта. Проверяются событие в container, запрос аналитики и отчёт: [Web tracking](<https://docs.shopstory.live/docs/guide/analytics-web>).

### Можно перенести старую AppMetrica-инструкцию в Mobile SDK?

Принцип отправки после успеха Cart API сохраняется. Старый WebView bridge и классы YMM не являются текущим host contract: используйте [mobile tracking](<https://docs.shopstory.live/docs/guide/analytics-mobile>) и API установленной AppMetrica.
