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

# Инструменты и примеры

Справочники: [события и метрики](<https://docs.shopstory.live/docs/reference/events-metrics>), [iOS SDK](<https://docs.shopstory.live/docs/reference/mobile-sdk-ios>), [Flutter SDK](<https://docs.shopstory.live/docs/reference/mobile-sdk-flutter>). Практический пример: [подтверждённая корзина и GA4](<https://docs.shopstory.live/docs/guide/confirmed-cart-analytics>). Проверка по симптому: [диагностика интеграции](<https://docs.shopstory.live/docs/operations/troubleshooting>).

## Готовые примеры

| Пример | Что проверяется | Инструкция |
| --- | --- | --- |
| [Web SDK ZIP](<https://docs.shopstory.live/downloads/shopstory-web-starter.zip>) | Реальный bundle, каталог и player на зарегистрированном origin | [Web SDK](<https://docs.shopstory.live/docs/guide/web-sdk>) |
| [API ZIP](<https://docs.shopstory.live/downloads/shopstory-api-starter.zip>) | Непустой fixture, запрос к API, карточка эфира и открытие Web SDK player на реальных данных | [API Quickstart](<https://docs.shopstory.live/docs/guide/quickstart>) |
| [iOS ZIP](<https://docs.shopstory.live/downloads/shopstory-ios-starter.zip>) | Сборка app, entrypoint и player с выданным SDK | [Native iOS](<https://docs.shopstory.live/docs/guide/mobile-sdk-ios>) |
| [Flutter ZIP](<https://docs.shopstory.live/downloads/shopstory-flutter-starter.zip>) | iOS host, native preview и product actions | [Flutter на iOS](<https://docs.shopstory.live/docs/guide/mobile-sdk-flutter>) |

iOS и Flutter ZIP относятся к опубликованным iOS-версиям. 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>). Для расширенного commerce-сценария получите [комплект SDK с регистрацией и примером](<https://docs.shopstory.live/docs/guide/custom-commerce-integrations#commerce-sdk-delivery>); фрагмент адаптера не заменяет этот комплект.

Архивы содержат код приложения или страницы и README. Приватные SDK, credentials и клиентские данные в них не входят. Для SDK-примеров нужен доступ к указанной версии пакета; для реального контента — параметры проекта. API fixture явно отделён от реального запроса.

## Файлы для интеграции

- [OpenAPI YAML](<https://docs.shopstory.live/downloads/public-openapi.yaml>) — машиночитаемая схема публичных API-методов.
- [OpenAPI viewer](<https://docs.shopstory.live/swagger/>) — чтение схемы в браузере.
- [Postman collection](<https://docs.shopstory.live/examples/postman/ShopStory%20Public%20API.postman_collection.json>) — запросы со служебными значениями вместо данных production-клиентов.
- [CSS-пример бейджа](<https://docs.shopstory.live/examples/stream-badge.css>) — необязательный вариант оформления для собственного интерфейса.

OpenAPI определяет публичные поля и обязательные параметры. Руководства описывают порядок интеграции и смысл ответов API.

## Быстрая локальная проверка

Скачайте [API starter](<https://docs.shopstory.live/downloads/shopstory-api-starter.zip>), распакуйте его и проверьте синтетический ответ с Node.js 22+:

```bash
node request-streams.mjs --fixture streams.fixture.json
```

Ожидается запись `stream-vod-1` со строковым товарным ID `0001001`. Fixture проверяет обработку данных, не сеть или playback. Реальный cURL/Node.js-запрос с timeout и отдельной проверкой HTTP/envelope приведён в [Quickstart](<https://docs.shopstory.live/docs/guide/quickstart#%D0%BF%D0%B5%D1%80%D0%B2%D1%8B%D0%B9-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81>). Повторы с общим deadline — в [rate limiting](<https://docs.shopstory.live/docs/operations/rate-limits#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-%D0%B4%D0%BB%D1%8F-get>). Browser origin регистрируется до сетевой проверки в браузере.

## Postman

После импорта создайте локальное окружение:

| Переменная | Значение |
| --- | --- |
| `baseUrl` | `https://app.shopstory.live` |
| `applicationId` | Значение, выданное для вашего проекта |
| `feedProductId` | Тестовый ID из принятого фида |
| `translationId` | ID тестовой трансляции из `/v3/streams` |

Не публикуйте environment-файл и не записывайте в коллекцию cookies, пароли или access tokens. `applicationId` не является секретом. Реальные клиентские идентификаторы в общедоступном примере не нужны.

## Автоматическая проверка клиента

Автоматический contract test должен проверять:

1. Тело ответа содержит JSON с числовым полем `status` верхнего уровня.
2. Клиент различает транспортную HTTP-ошибку и бизнес-ошибку внутри конверта.
3. `availableStreams` и `plannedStreams` обрабатываются как массивы.
4. Пустая выдача отображается как отдельное состояние интерфейса.
5. Идентификаторы сохраняются строками.
6. Незнакомое необязательное поле не ломает десериализацию.
7. Timeout или недоступность ShopStory не блокируют основной интерфейс клиента.

В тестах используйте выданный тестовый контур или локальные fixtures. Не связывайте CI с конкретным production-эфиром или фиксированным количеством записей.

## Проверка Mobile SDK

Postman и OpenAPI проверяют HTTP-контракт. Нативную интеграцию проверяйте отдельно для версии пакета из integration handoff:

1. `feedProductId` остаётся строкой между каталогом мобильного приложения, SDK и commerce-системой.
2. SDK передаёт приложению типизированное product action с идентификатором выбранного товара.
3. Выбранное действие открывает native PDP либо, для прямой корзины, приложение проверяет актуальный остаток и изменяет корзину в системе ритейлера.
4. Состояние плеера и событие аналитики не определяют результат операции.
5. Ошибка SDK или commerce API не блокирует PDP, navigation и checkout.

Web `callback(boolean)` относится только к Web SDK. Mobile host получает типизированное действие. Его обработка описана в руководстве для соответствующей версии пакета. Доступ к пакету и клиентские routes выдаются отдельно; [документированные версии](<https://docs.shopstory.live/docs/guide/mobile-sdk-releases>) опубликованы. Публичный контракт: [Mobile SDK](<https://docs.shopstory.live/docs/guide/mobile-sdk>).

## Проверка OpenAPI

Подключите спецификацию к линтеру и генератору типов. После генерации клиента отдельно проверяйте `body.status`, `no_active_stream` и пустые массивы.

Подходящие инструменты:

- [Redocly CLI](<https://redocly.com/docs/cli>) — проверка и сборка OpenAPI;
- [Spectral](<https://github.com/stoplightio/spectral>) — правила схемы;
- [Schemathesis](<https://schemathesis.readthedocs.io/>) — contract-based tests.

Закрепите версию генератора и проверяйте diff сгенерированного клиента при code review.

## Данные для обращения

В обращении на [support@shopstory.live](<mailto:support@shopstory.live>) укажите:

- endpoint и очищенные query-параметры;
- HTTP-код и `status` из JSON;
- время с часовым поясом;
- URL страницы и origin для CORS-проблемы;
- браузер, ОС и короткие шаги воспроизведения.

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