# Сценарии (/ru/docs/flows)

Сценарий — это небольшая программа, которую вы рисуете: блоки, соединённые связями. Каждый блок делает одно дело:
отправляет сохранённый запрос, достаёт значение из ответа, ветвится, повторяется в цикле, о чём-то спрашивает вас,
сохраняет переменную или записывает файл. Сценарии нужны для задач, которые иначе приходится делать вручную в несколько
шагов: войти по коду устройства, обойти результаты постранично, создать и убрать тестовые данные, проверять API каждое
утро или дать ИИ-агенту один инструмент, который выполняет пять запросов.

Сценарии живут в рабочем пространстве, по одному файлу на сценарий в папке `flows`, поэтому их можно ревьюить и
передавать через Git, как запросы. Каждый запрос, который отправляет сценарий, идёт тем же путём, что и отправка со
страницы запроса: действуют переменные, авторизация, скрипты, проверки, прокси и [история](/docs/workspaces/history).

## Страница «Сценарии» [#the-flows-page]

Выберите **Сценарии** в переключателе модулей вверху боковой панели или нажмите <kbd>⌘</kbd><kbd>5</kbd>. Боковая
панель перечисляет сценарии рабочего пространства. Под каждым именем видно, как он запускается: `manual`, `agent tool`,
`every hour`, `scheduled` или `webhook`. Знак предупреждения рядом со сценарием означает, что в нём есть проблемы,
которые нужно исправить, прежде чем его можно запустить.

<Shot id="flows-canvas" alt="Страница «Сценарии» с открытым сценарием Place a test order: сценарии на боковой панели, холст с блоком «Старт», двумя блоками «Запрос», блоком «Одобрить», блоком «Журнал» и блоком Cancel order, справа настройки сценария" />

На странице три части:

- **Панель инструментов** над холстом: имя сценария (с пометкой **Изменён**, пока изменение не сохранено), число проблем,
  **Упорядочить**, **По размеру**, масштаб, **Дублировать**, **Запуски**, **Журнал запусков**, **Блок**, **Замечание** и
  **Запустить**.
- **Холст** посередине, а в его левом нижнем углу — небольшая карта всего сценария. Нажмите на карту, чтобы перейти
  туда.
- **Инспектор** справа. Если ничего не выбрано, он показывает сам сценарий: **Имя**, **Описание** и **Входы**. Если
  выбран один блок, он показывает настройки этого блока.

Пока сценарий открыт, на боковой панели также перечислены **Запуски** сценария (запуски этого окна, новые сверху) и
**Запросы** рабочего пространства, которые можно перетащить на холст.

### Создание сценария [#create-a-flow]

1. На боковой панели нажмите **+** рядом с **Сценарии**.
2. Выберите **Пустой сценарий**, чтобы получить блок «Старт», соединённый с блоком «Результат», или выберите один из
   вариантов в **Из шаблона** (см. [шаблоны](/docs/flows/templates)).
3. Новый сценарий открывается на холсте. Переименуйте его в инспекторе в поле **Имя**.

Если в рабочем пространстве ещё нет сценариев, страница предлагает кнопку **Новый сценарий**.

Чтобы удалить сценарий, выберите его и нажмите **−** рядом с **Сценарии** либо щёлкните его, удерживая Control, и
выберите **Удалить…**. Echolot спросит и переместит файл в Корзину. Сценарии, которые запускают удалённый, перестанут
работать.

## Построение на холсте [#build-on-the-canvas]

### Добавление блоков [#add-blocks]

- Нажмите **Блок** на панели инструментов или <kbd>⇧</kbd><kbd>⌘</kbd><kbd>B</kbd>. Открывается список блоков: вводите
  текст для поиска, затем нажмите на вид блока. Нажмите <kbd>↩</kbd>, чтобы добавить первое совпадение. Новый блок
  попадает в середину видимой области и выбирается.
- В списке также перечислены сохранённые запросы рабочего пространства в разделе **Запросы**. Если выбрать запрос,
  добавляется блок «Запрос», который уже отправляет его.
- Перетащите запрос из **Запросы** на боковой панели на холст. Он станет блоком «Запрос» там, где вы отпустите. Щёлкните
  запрос, удерживая Control, и выберите **Добавить в сценарий**, чтобы поместить его блок справа от сценария.

Все виды блоков с их настройками и портами описаны на странице [«Блоки»](/docs/flows/blocks).

<Shot id="flows-block-picker" alt="Список блоков поверх холста: поле поиска, виды блоков по группам «Триггеры», «Действия», «Люди», «Логика», «Циклы», «Данные» и «Результат», в конце сохранённые запросы" />

### Соединение портов [#link-ports]

Входы находятся на левом краю блока, выходы — на правом. Значение выходит из выхода, идёт по связи и приходит на вход;
блок выполняется, когда у каждого связанного входа есть значение.

- Перетащите с выхода на вход, чтобы соединить их. Порт под указателем подсвечивается, когда связь сюда присоединится.
  Можно и начать со входа и перетащить на выход.
- У входа может быть одна связь. Если подключить к нему другой выход, старая связь заменяется. Один выход может питать
  много входов.
- Если отпустить новую связь над пустым холстом, на этом месте открывается список блоков. В нём только блоки, которые
  могут принять связь, а выбранный блок появляется уже соединённым.
- Чтобы переместить связь, оттащите её от входа, в котором она заканчивается, и бросьте на другой вход. Бросьте над
  пустым холстом, чтобы разорвать.
- Наведите указатель на связь, чтобы посередине появилась кнопка, разрывающая её.

### Выбор, перемещение и расстановка [#select-move-and-arrange]

- Нажмите на блок, чтобы выбрать его. <kbd>⇧</kbd>-щелчок или <kbd>⌘</kbd>-щелчок добавляет блоки к выбору или убирает
  их.
- Удерживая <kbd>⇧</kbd> или <kbd>⌘</kbd>, тяните по пустому холсту, чтобы нарисовать рамку выбора. Блоки, которых она
  касается, входят в выбор.
- Перетащите блок, чтобы переместить его. Нажмите <kbd>Esc</kbd>, чтобы снять выбор.
- Клавиши со стрелками выбирают ближайший блок в этом направлении, и вид следует за ним. Если ничего не выбрано, они
  начинают со «Старта».
- **Упорядочить** расставляет блоки по столбцам в порядке выполнения.
- **Дублировать** (<kbd>⌘</kbd><kbd>D</kbd>) копирует выбранные блоки вместе со связями между ними.
- <kbd>⌫</kbd> удаляет выбранные блоки вместе с их связями или выбранную связь.

В инспекторе выбранного блока есть **Удалить блок**. Если выбрано несколько блоков, он показывает их число и
**Удалить блоки**. В сценарии ровно один блок «Старт»: он никогда не копируется и не дублируется, его нельзя
приостановить, и в его инспекторе нет **Удалить блок**.

### Прокрутка и масштаб [#pan-and-zoom]

- Тяните по пустому холсту или прокручивайте двумя пальцами или колесом мыши, чтобы сдвинуть вид.
- Сведите или разведите пальцы либо удерживайте <kbd>⌘</kbd> и прокручивайте, чтобы изменить масштаб. Масштаб меняется
  от 20 % до 250 %, а панель инструментов показывает текущий.
- **По размеру** (<kbd>⌥</kbd><kbd>⌘</kbd><kbd>0</kbd>) показывает весь сценарий. Масштаб никогда не уменьшается меньше
  50 %, чтобы текст оставался читаемым; более крупный сценарий начинается с левого края.

### Копирование и вставка [#copy-and-paste]

**Правка › Скопировать** (<kbd>⌘</kbd><kbd>C</kbd>), **Вырезать** (<kbd>⌘</kbd><kbd>X</kbd>) и **Вставить**
(<kbd>⌘</kbd><kbd>V</kbd>) работают с выбранными блоками и связями между ними. Вставленные блоки получают новые ID и
становятся выбором. В том же сценарии они попадают рядом с оригиналами, в другом — в середину вида. Вставлять можно и в
сценарий другого рабочего пространства. Скопированные блоки — это текст JSON, поэтому их можно вставить и в сообщение
или issue.

### Заметки [#notes]

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

- Перетащите заметку, чтобы переместить её, и потяните за уголок в правом нижнем углу, чтобы изменить размер.
- Дважды щёлкните заметку или щёлкните её, удерживая Control, и выберите **Изменить заметку…**, чтобы поменять текст.
- Щёлкните, удерживая Control, и выберите **Удалить заметку**, чтобы убрать её.

Шаблоны используют заметки, чтобы подсказать, какие запросы выбрать.

### Отмена и сохранение [#undo-and-saving]

Любое изменение на холсте и в инспекторе можно отменить командой **Правка › Отменить** (<kbd>⌘</kbd><kbd>Z</kbd>) и
**Повторить** (<kbd>⇧</kbd><kbd>⌘</kbd><kbd>Z</kbd>): добавление, перемещение, соединение, удаление, настройки, заметки
и «Упорядочить».

Сохранять сценарии самому не нужно. Echolot записывает файл через мгновение после вашего последнего изменения; до этого
рядом с именем стоит **Изменён**. Если сохранить не удалось, Echolot сообщает причину и предлагает **Повторить**,
**Отменить изменения** (вернуться к файлу на диске) и **Продолжить правку**. Ваши правки остаются на холсте, пока их не
сохранят.

### Проблемы [#problems]

Echolot проверяет сценарий по мере правки. Панель инструментов показывает число проблем; нажмите на него, чтобы увидеть
список, и нажмите на проблему, чтобы выбрать её блок. У блока с проблемой есть знак предупреждения, а его инспектор
перечисляет проблемы.

Ошибки не дают сценарию запуститься: нет блока «Старт», пуста обязательная настройка (например, у блока «Запрос» нет
запроса), запрос или сценарий не существует или связи идут по кругу. Предупреждения не мешают, например блок, в который
ничто не ведёт и который поэтому никогда не выполняется. Чтобы сделать что-то ещё раз, используйте [«Повторить», «Для
каждого» или «Опрос»](/docs/flows/blocks#loops) вместо круга из связей.

## Входы и результат [#inputs-and-outputs]

**Входы** — это значения, с которыми начинается запуск. Добавьте их в инспекторе при пустом выборе: нажмите **+** рядом
с **Входы**, введите имя и выберите тип (`any`, `text`, `number`, `bool`, `object`, `list` или `secret`). У блока
«Старт» появляется по одному выходу на каждый вход, а также `run`, который отправляет все входы одним объектом.

Входы приходят из листа **Запустить**, параметра `--input` команды `echolot flow run`, вызова инструмента агентом или из
запроса вебхука и JSON-тела. Текст преобразуется к типу входа: `3` в число, `true` или `yes` в bool, текст JSON в объект
или список. Вход типа `secret` скрыт в журнале запуска и в том, что видят агенты.

Значение по умолчанию, описание и признак обязательности входа задаются в файле сценария (таблица `[[inputs]]`:
`default`, `description`, `required`; см. [файлы рабочего пространства](/docs/reference/workspace-files)). Лист
«Запустить» показывает описание как подсказку поля и подставляет значение по умолчанию.

Блок **Результат** хранит то, что возвращает запуск: агенту, вызвавшему сценарий, команде `echolot flow run`, вызывающему
вебхук или блоку «Сценарий» родительского сценария. В сценарии не больше одного блока «Результат».

## Запуск сценария и наблюдение за ним [#run-a-flow-and-watch-it]

Нажмите **Запустить** или <kbd>⌘</kbd><kbd>R</kbd>. Если у сценария есть входы, сначала открывается лист, где их нужно
заполнить; пустые поля используют значение входа по умолчанию. Сценарий сохраняется, затем выполняется с активным
окружением окна. **Запустить** недоступна, пока в сценарии есть ошибки.

Во время запуска:

- Рамка каждого блока показывает его состояние: выполняется или ждёт вас, пройден (зелёная) или с ошибкой (красная).
- Под холстом открывается журнал запуска. В нём перечислены блоки по мере завершения: время, строки журнала,
  результаты тестов (**Тесты** 3/3 в заголовке) и чем закончился запуск. Нажмите на строку, чтобы выбрать её блок.
- Блоки, которые о чём-то спрашивают вас («Спросить», «Показать и ждать», «Одобрить»), открывают лист. См.
  [блоки «Люди»](/docs/flows/blocks#people).
- **Остановить** (<kbd>⌘</kbd><kbd>.</kbd>) заменяет **Запустить** и завершает запуск. Вопрос на экране исчезает.

После запуска выберите блок, чтобы увидеть его **Последний запуск** в инспекторе: сколько он занял и, в разделе
**Показать**, его значения **Входные данные** и **Результат** по портам. Так можно найти путь к значению для блока
«Выбрать» или шаблона.

<Shot id="flows-run-log" alt="Холст после запуска Place a test order: блоки с зелёными рамками, журнал запуска под холстом, а в инспекторе — результат последнего запуска блока Create order" />

Прежние запуски остаются в окне: нажмите на один из них в **Запуски** на боковой панели или выберите его в меню
**Запуски** на панели инструментов, чтобы снова показать его на холсте. **Очистить холст** в этом меню или **Очистить** в
журнале запуска убирают состояния запуска. Если запуск завершился с ошибкой и доступна встроенная модель Mac, кнопка в
заголовке журнала запуска объясняет сбой.

Когда активно [защищённое окружение](/docs/workspaces/protected-environments), кнопка называется
**Запустить (Production)…**, и Echolot один раз спрашивает подтверждение перед запуском.

Подробнее о запуске, расписаниях, вебхуках, агентах и командной строке: [Запуск и триггеры](/docs/flows/running-and-triggers).
Пошаговый пример: [Автоматизация сценариями](/docs/tutorials/automate-with-flows).

## Сочетания клавиш [#keyboard-shortcuts]

| Сочетание | Действие |
| --- | --- |
| <kbd>⌘</kbd><kbd>5</kbd> | Показать модуль «Сценарии» |
| <kbd>⌘</kbd><kbd>R</kbd> | Запустить сценарий |
| <kbd>⌘</kbd><kbd>.</kbd> | Остановить запуск |
| <kbd>⇧</kbd><kbd>⌘</kbd><kbd>B</kbd> | Добавить блок |
| <kbd>⌘</kbd><kbd>D</kbd> | Дублировать выбранные блоки |
| <kbd>⌥</kbd><kbd>⌘</kbd><kbd>0</kbd> | Показать весь сценарий |
| <kbd>⌘</kbd><kbd>C</kbd>, <kbd>⌘</kbd><kbd>X</kbd>, <kbd>⌘</kbd><kbd>V</kbd> | Скопировать, вырезать, вставить блоки |
| <kbd>⌫</kbd> | Удалить выбранное |
| <kbd>⌘</kbd><kbd>Z</kbd>, <kbd>⇧</kbd><kbd>⌘</kbd><kbd>Z</kbd> | Отменить, повторить |
| Клавиши со стрелками | Выбрать ближайший блок в этом направлении |
| <kbd>Esc</kbd> | Снять выбор |
