# General Translation Integrations: Запись сценариев
URL: https://generaltranslation.com/ru/docs/integrations/rrweb/guides/recording-walkthroughs.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: Как записать продуктовый поток с помощью gt-rrweb, просмотреть сессию и сохранить её бандл записи.

Запишите повторяемый продуктовый поток один раз — и сохраните его как бандл, который можно просмотреть, опубликовать и воспроизвести.

Это руководство посвящено тому, как провести полноценную сессию записи. Сначала пройдите [Quickstart](/docs/integrations/rrweb/quickstart).

## Перед началом [#before-start]

Перед записью:

* [Настройте рекордер](/docs/integrations/rrweb/guides/configuring-recordings) под нужный регион продукта и кадр захвата при воспроизведении.
* Откройте сценарий в исходной локали и приведите его к предсказуемому начальному состоянию.
* Решите, какие опубликованные локали включить. (См. [Настройка локализованного воспроизведения](/docs/integrations/rrweb/guides/configuring-recordings#localized-replay)).

## Начало и остановка захвата [#capture]

Сначала вызовите [`start()`](/docs/integrations/rrweb/reference/recorder#use-recorder) с исходной локалью, а затем — с каждой целевой локалью, для которой нужно выполнить сбор. Рекордер хранит сессию в состоянии модуля, поэтому смена маршрута, приводящая к повторному монтированию компонентов, не завершает активную запись.

```tsx title="src/RecordButton.tsx"
const { start, stop, status } = useRecorder();

await start({ locales: ['en', 'de', 'ja'] });
const bundle = await stop();
```

`status` переходит из `preparing` в `recording`, возвращается в `preparing` на время сбора переводов и завершается значением `idle`. Сбой загрузчика каталога затрагивает только соответствующую локаль; более широкий сбой сбора не является фатальным, и `stop()` всё равно разрешится с бандлом только с исходным контентом.

Уход со страницы прерывает активную сессию без сбора переводов и без вызова `onComplete`. Останавливайте запись перед переходом, который выгружает приложение.

## Захват продуктового потока [#product-flow]

После того как `start()` завершится, пройдите сценарий в том же порядке, в каком его должен увидеть зритель. Клики, переходы, изменения DOM, позиция прокрутки и видимое содержимое страницы попадают в поток событий.

Не отвлекайтесь от сути сессии:

* Начинайте со стабильной страницы и стабильного состояния приложения.
* Выдерживайте паузу, достаточную для отрисовки асинхронного содержимого, прежде чем взаимодействовать с ним.
* Завершайте запись после того, как зритель дойдёт до очевидного успешного результата.
* Не раскрывайте конфиденциальное состояние приложения.

Значения, введённые в формы, маскируются, а телеметрия движений мыши не сохраняется. Просмотрите готовую запись перед публикацией: остальной видимый текст и состояние остаются в потоке событий.

Добавляйте класс `rr-block` из rrweb к элементам управления оператора и другим элементам, которые не должны попадать в запись:

```tsx
<div className="rr-block">
  <RecordingControls />
</div>
```

## Управление записями из автоматизации [#automation]

Чтобы управлять записью из end-to-end теста, настройте параметр `expose` рекордера. Полученный объект `window[name]` предоставляет те же функции `start` и `stop`.

```tsx title="src/RecordingTools.tsx"
<GTRecorder expose="gtRecorder" />
```

```js title="record.spec.js"
await page.evaluate(() => window.gtRecorder.start({ locales: ['en', 'es'] }));
// ... проходим сценарий
const bundle = await page.evaluate(() => window.gtRecorder.stop());
```

## Сохранение бандла [#store-bundle]

Сериализуйте возвращённый [`RecorderBundle`](/docs/integrations/rrweb/reference/recorder#recorder-bundle) в JSON и храните его вместе с ресурсами приложения или в собственном хранилище. Пакет никуда не выгружает записи.

Вы можете сохранить весь бандл или только `bundle.events`. Метаданные локали и оверлея встроены в поток событий, поэтому проигрыватель сможет восстановить локализованное воспроизведение, если экспорт, содержащий только события, впоследствии будет обёрнут как `{ events }`.

<Callout type="warn">
  Просмотрите запись перед публикацией. Введённые значения маскируются, но поток событий по-прежнему содержит видимый текст страницы и состояние приложения во время сессии.
</Callout>

## Next steps

- /docs/integrations/rrweb/guides/configuring-recordings
- /docs/integrations/rrweb/guides/replaying-recordings

## Sitemap

See the full [sitemap](https://generaltranslation.com/sitemap.md) for all pages.
