# Сценарии

Сценарий — это то, что школа делает без вас: письмо после регистрации,
напоминание тем, кто не открыл первый урок, серия для брошенной корзины,
тег тем, кто досмотрел вебинар.

## Шаблоны

**Список сценариев начинается с того, с чего начать:** шаблоны плитками, свои
шаблоны школы — в том же ряду с меткой «свой», «Начать с пустого» — последней плиткой.
Ниже — «Ваши сценарии»: запуск словами, **в работе** (сколько людей внутри сейчас),
**прошли за месяц** и состояние — «Работает», «Пауза», «Черновик». Вкладки раздела:
«Сценарии», «Запущенные» с числом живых прогонов и «Мои шаблоны».

**Новый сценарий начинается с шаблона.** Шаблон описан задачей и числом
шагов: «Дожим неоплаченного заказа — три касания за двое суток,
останавливается при оплате». Выбрали, ответили на вопросы — какой курс,
какой тариф, куда пишем, — нажали «Развернуть в шаги», и появился обычный
сценарий-черновик, который правится как любой другой. Связи с шаблоном
не остаётся.

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

**Тексты писем в шаблоне — заготовки с пометкой «[заполните]».** Пока
пометка стоит в теме или тексте, сценарий не включится, и отказ назовёт шаг:
заготовка не уходит людям.

### Начать с пустого — последней плиткой

Пустой холст стоит **последней плиткой среди шаблонов**, а не кнопкой в углу:
это такой же способ начать, как готовый сценарий, и выбирается он там же,
где остальные. Плитка с пунктирной рамкой — отличие в том, что внутри ничего
нет, а не в том, что это служебное действие.

### Свои шаблоны

Любой свой сценарий сохраняется шаблоном — кнопкой **«Сохранить как шаблон»**
в строке сценария: название и задача словами. Шаблон — **снимок шагов на эту
минуту**: условия, паузы, тексты школы. Дальнейшие правки сценария его
не меняют, удаление сценария его не уносит. Правки, сделанные на экране,
сначала записываются в сценарий — не записавшийся шаг шаблоном не станет.

Свои шаблоны стоят **в той же сетке «Новый сценарий»**, перед пустым холстом,
с подписью «свой шаблон». Выбрали — «Развернуть шаблон»: появляется новый
сценарий-черновик с теми же шагами, и связи с шаблоном у него нет. Включается
он руками, после проверки. Ненужный шаблон удаляется там же; сценарии,
развёрнутые из него, остаются.

«Прогрев к запуску» и «Напоминание о вебинаре» готовыми шаблонами пока
не собраны. Шаг «Дождаться даты» уже есть: соберите такой сценарий с пустого
холста и сохраните его своим шаблоном.

По API: `POST /api/scenarios/{id}/template`, `GET /api/scenario-templates`,
`POST /api/scenario-templates/{id}/unfold`, `DELETE /api/scenario-templates/{id}`.
**Агент школы свои шаблоны не сохраняет и не удаляет** — это действие человека
на экране сценария.

## Это графический редактор, а не список шагов

**На телефоне** сценарий показан списком шагов в порядке пути — от входа по стрелкам:
номер и вид шага, что он делает, у развилки и вопроса — куда ведут «да» и «нет», у входа —
сколько вошло, и «Здесь сейчас N человек» у шага, где стоят люди. Схему правят с компьютера;
с телефона сценарий можно смотреть, останавливать и запускать, а «⋯» открывает его прогоны.

Узлы возят мышью, связи тянут от порта одного узла к другому. Блок
добавляется меню прямо на поле. Есть «Разложить» — расставит сам, если
схема расползлась.

**Пауза ставится прямо на стрелку.** Посередине стрелки — кнопка 🕐:
нажали, и между двумя шагами встала пауза на час. На схеме это не карточка,
а пилюля на линии — «🕐 3 дн.», «🕐 до 10:00», — поэтому схема из пяти писем
с паузами между ними читается как пять писем. Срок меняется в списке, как
у любого шага.

Список тоже есть — он удобнее, когда шагов немного и надо просто прочитать
порядок. Вид переключается, схема одна.

### Схема целиком видна

Развилка ставит ветки веером вокруг родителя, и первая ветка оказывалась левее
начала холста — за его краем, куда не доехать ни полосой прокрутки, ни колесом.
Теперь раскладка сдвигается целиком в видимую область: взаимные расстояния
те же, меняется только начало отсчёта. Узел, уведённый влево рукой, тоже
не прячется — холст дорастает под него.

### Настройки шага — двойным нажатием

Двойное нажатие по блоку на схеме открывает **окно настроек этого шага**:
условия, задержки, действие. Это те же поля, что в списке шагов, а не вторая
форма: два набора полей разошлись бы на первой правке, и человек получил бы
два разных ответа на вопрос «какое условие у этого шага».

Окно само ничего не сохраняет — правка ложится в черновик, а сценарий
сохраняет кнопка наверху, как и из списка.

## Из чего собирается

### Действия со школой

Кроме тегов, потоков, доступа к курсу и сообщений, шаг «Действие» умеет:

- **«Создать заказ»** по тарифу — неоплаченный заказ по этому тарифу уже есть, второй
  не заводится;
- **«Отправить ссылку на оплату»** — в Telegram, MAX, ВКонтакте или письмом, со своим
  текстом перед ссылкой. Ссылка ведёт на страницу оплаты тарифа: она открывается без
  входа и заводит заказ сама;
- **«Выдать сертификат»** по курсу — номер по порядку, уходит письмом;
- **«Изменить поле»** — своё поле человека; пустое значение очищает поле;
- **«Отписать от категории рассылок»** — подписать обратно сценарий не может: согласие
  на рекламу даёт человек, а не шаг;
- **«Уведомить школу»** — письмо на почту поддержки с именем человека и ссылкой на его
  карточку. Это только шаг сценария: массовым действием над сегментом оно не запускается.
- **«Задача менеджеру»** — ставит задачу в раздел «Задачи» по схеме РОПа: кому, график
  недозвонов, касания, причины отмены. Тоже только шагом сценария; подробно — в разделе
  [«Продажи»](/guide/sales/), «Задачи менеджеров».
- **«Открыть урок (пропустить стоп-урок)»** — урок открывается этому человеку, даже если его держит
  расписание или условие; **«Закрыть урок»** — закрывается, даже если по правилам открыт. Нужен доступ
  к курсу: без него шаг отказывает словами и курс не выдаёт. Каждое исключение — в журнале, а видно и
  снимается оно в карточке человека — подробно в [«Доступах»](/guide/access/);
- **«Назначить персонального менеджера»** — или снять; задачи человека после этого уходят его менеджеру.
  Назначают того, кто работает с задачами: менеджера, администратора, владельца;
- **«Начислить на баланс»** — бонус в рублях с причиной: деньги ложатся на баланс человека, он платит
  ими при следующей покупке и получает письмо о начислении;
- **«Выдать личный промокод»** — скидка в процентах или рублях, срок числом дней, при желании — на какие
  тарифы. Код работает только у этого человека и один раз. Чтобы отправить его, шаг кладёт код в своё поле
  человека, а сообщение следующим шагом пишет `{{field.ключ}}`;
- **«Вызвать URL»** — POST с JSON на адрес школы: номер, имя, почта и телефон человека, по галочке — его
  поля. Только `https://` и только в интернет: адреса внутри сети сервера (`localhost`, `10.…`, `192.168.…`,
  внутренние имена) не принимаются. Ответ не 2xx — шаг отмечается «не вышло» с причиной, сценарий идёт
  дальше. Это только шаг сценария: массовым действием данные людей за пределы школы не отправляются.

«Сообщение» уходит не только письмом и в Telegram, но и в MAX и ВКонтакте — с вложениями,
как у рассылки: картинка, галерея, видео, голосовое, кружочек или файл, до 10 штук над текстом;
письму — файлами. Подстановки вида `{{first_name}}` работают так же, как в рассылке. Сообщение
живёт в шаге: в разделе «Рассылки» его нет, правится оно только в сценарии.
**Тег создаётся там же, где выбирается** — в шаге сценария, условии сегмента, массовом
действии: набрали имя, которого нет, — «Создать тег «…»» последней строкой списка.

### Спросить в мессенджере и записать ответ в поле

Шаг **«Спросить и записать»** задаёт вопрос в мессенджер человека — Telegram, MAX или
ВКонтакте (по умолчанию в первый привязанный) — и ждёт ответа. В одном окне шага:

- **вопрос** — с подстановками, как у сообщений: `{{first_name}}`;
- **куда записать ответ** — имя, почта, телефон или любое своё поле человека;
- **проверка ответа** — для почты и телефона проверяется вид, для имени и своего поля —
  длина («не короче 3 знаков»);
- **если ответ не подошёл** — переспросить 1–3 раза: «Не похоже на почту. …вопрос…»,
  в тот же мессенджер, куда ушёл вопрос;
- **ждать ответа** — числом и единицей; не ответил за срок — ветка «нет».

У шага два выхода, как у развилки: **«да»** — ответ записан, **«нет»** — не ответил,
ответ не подошёл после всех повторов или спросить было негде (мессенджер не привязан).
Ответ живёт в сценарии: в «Обращения» он не попадает, а в карточке прогона стоит пузырём.
**Почту, телефон и имя сценарий пишет только в пустое** — вход человека ответом из чата
не меняется, и чужая почта не забирается; что не записано, сказано в ленте прогона.

**Вход** — с чего начинается. **По правилу:** все, кто подходит под
условия, как у сегмента; проверка идёт раз в пять минут. **По событию:**
оплата заказа, выдача доступа, запись на курс, открытие и прохождение урока,
отправка и принятие задания, сданный тест, выданный сертификат, пройденный
курс, ответ на сообщение, **нажатие кнопки в сообщении** — любой или
конкретной кнопки рассылки, **заявка с формы** страницы или виджета
и **«Старт» в боте** — Telegram, MAX или ВКонтакте. У «Старта» можно задать
метку: сценарий заведётся только от ссылки с ней — `t.me/имя_бота?start=метка`,
`max.ru/имя_бота?start=метка` или `vk.me/сообщество?ref=метка`; без метки —
от любого старта. «Старт» засчитывается тем, кого бот узнаёт: у человека есть
привязка к аккаунту. Как попадают, выбирается у входа в редакторе: «по правилу»
или «по событию»; у события условия отбора необязательны. Регистрации среди
событий входа пока нет.

**Операция** — что делает: письмо, сообщение в Telegram, тег, доступ,
перенос в группу, заметка в карточке, сделать партнёром.

**Условие** — развилка: два выхода, «да» и «нет». Проверяет то же, что
и сегменты: теги, покупки, прогресс, активность, суммы.

**Пауза** — три способа ждать, и заготовок среди них нет:

- **подождать** — число вписывается руками и к нему единица: секунды,
  минуты, часы, дни. «4 часа», «45 минут», «10 дней» — ровно как нужно школе;
- **дождаться времени** — ближайшие «10:00» по часам школы;
- **дождаться даты** — день из календаря и, если включить «со временем»,
  время, которое вписывается руками. Если дата уже прошла, человек идёт
  дальше сразу, а не висит в сценарии.
На схеме — пилюля на стрелке.

**Ждать события** — стоит, пока не случится событие: оплата, ответ,
прохождение урока, нажатие кнопки — у кнопки можно выбрать, какой именно.
Срок ожидания можно ограничить — «не дольше» и те же
число с единицей: «не дольше 20 часов», «не дольше 3 дней».
**Когда срок вышел, человек идёт дальше по той же стрелке, что
и дождавшийся:** отдельного выхода «не дождались» пока нет. Если дальше
по пути важно, случилось ли событие, поставьте после ожидания развилку —
например, «оплатил ли».

**Конец** — выходов нет.

## Шаги с числами

Вкладки сценария: **Шаги**, **Схема**, **Кто внутри**, **Отладка**, **Факт**.
На «Шагах» у каждого шага числа за 30 дней: сколько вошло или дошло, у развилки —
сколько ушло в «да» и в «нет», и отдельно — сколько **ждут** на шаге прямо
сейчас, сколько **в очереди** и сколько **сорвались**. Справа — где застревают:
ждущие, очередь и сорвавшиеся забеги с шагом, на котором это случилось.

**Ждущий паузы стоит на паузе.** Забег хранит шаг, который выполнится
следующим, поэтому «где ждёт» считается по последней записи его пути.

**Что будет с идущими, если сценарий поправить.** Люди стоят на своих шагах
и дальше идут по сохранённой версии: правка шага действует на тех, кто до него
ещё не дошёл. Убранный шаг останавливает тех, кто на нём стоит, — забег
сорвётся с причиной «узел удалён». Остановка сценария людей не выводит: они
стоят и продолжат, когда сценарий включат.

## Схема проверяется до запуска, а не в работе

Связь, которая всё сломает, не принимается **в момент рисования**:

- узел на себя;
- цикл — забег, который никогда не кончится;
- вторая связь из того же выхода;
- связь, входящая в триггер.

Плюс список проблем на самой схеме: нет входа, стрелка в никуда, узел,
до которого нельзя дойти от входа, развилка без одной из веток. А при
включении сценарий проверяется ещё раз, по каждому шагу: действие без
настроек, вход без условий, развилка без условий, ожидание события,
которого продукт не публикует, заготовка текста «[заполните]». Пока это
не доделано, сценарий
не включится — и отказ назовёт, что именно.

> **Почему проверка при рисовании, а не при сохранении.** Схема на двадцать
> узлов, которую отвергают целиком в конце, — это полчаса работы и никакой
> подсказки, где именно ошибка.

## Как это исполняется

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

**Ошибка одного забега не останавливает остальные.** Один человек без адреса
почты не должен вешать воронку для тысячи: его забег помечается неудачным
с причиной и виден в списке.

**Отписка проверяется в момент отправки, а не при входе в сценарий.**
Человек, отписавшийся вчера, не получит сегодняшнее письмо, даже если
в сценарий он попал позавчера.

## Тестовый прогон

Вкладка «Отладка» — прогон по одному человеку с показом пути: где он прошёл,
где свернул, где остановился и почему.

Это дешевле, чем узнавать про ошибку по тысяче ушедших писем.

## Путь конкретного человека

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

### «Запущенные» и карточка прогона

Вкладка **«Запущенные»** раздела сценариев — прогоны всех сценариев одной таблицей:
номер прогона, человек, сценарий, **где сейчас** («Подождать 2 дн.», «Ждёт ответа
на сообщение», «Шаг не выполнился») и **с какого времени** — «18 ч», «1 д 4 ч».
Число живых прогонов стоит на самой вкладке.

Нажатие на строку открывает **карточку прогона** справа (на телефоне — во весь экран,
«‹» назад): лента шагов по порядку — что выполнилось, куда ушла развилка, текст
отправленного сообщения, ответ человека, если сценарий его записал, — и строка
«Сейчас · …» у живого прогона. Внизу две кнопки:

- **«Вывести из сценария»** — прогон останавливается там, где стоит. Сделанное
  шагами не откатывается: письмо ушло, тег стоит. В журнал школы пишется, кто вывел;
- **«Перевести на шаг»** — прогон продолжится с выбранного шага этого же сценария.
  Законченный прогон можно вернуть; если у человека уже идёт другой прогон этого
  сценария, продукт откажет словами и назовёт его номер.

Имя человека во вкладке «Кто внутри» сценария ведёт в ту же карточку.

Это то, чем поддержка отвечает на «почему мне пришло это письмо» —
за минуту, а не за день.

## Правила приёма

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

Перед включением показывается, сколько человек попадёт под правило прямо
сейчас. Число «1» и число «1 200» — разные решения.
