# Сценарии и блоки для MCP-агента

Source: <https://telegafirst.com/docs/mcp-playbooks>
Locale: ru
releaseGitSha: 45cdd4e19c6d3956d1bfa48c79fcb8dfec11fa9e
sourceContentDigest: 2cd471e767c2073168b1d15ecbba7fcf15d6b5d770141300f2b0717947b06966
Version: 1

Каталог типовых сценариев и блоков, из которых агент собирает систему. Тот же каталог отдают MCP-инструменты `list_playbooks`, `get_playbook`, `list_blocks` и `get_block`: они доступны на любом тарифе с MCP, а из данных бизнеса читают только его язык и только когда `locale` не передан. Сначала выберите сценарий, затем соберите его блоки в указанном порядке и сверьтесь с самопроверкой.

## Сценарии

### Вебинар или событие (`webinar`)

Регистрация на эфир → напоминания → эфир → предзаказ записи → для не купивших приглашение на консультацию.

**Порядок сборки:**

1. `bot_profile` — По просьбе владельца: приветствие в профиле бота.
2. `chain_step` — Входная цепочка (подарок, напоминание) и цепочки вокруг события: напоминания за сутки и за час, старт, после события.
3. `offer` — Предзаказ записи с окном и полная цена после эфира.
4. `event` — Событие: дата, часовой пояс, привязка цепочек, открытие регистрации.
5. `booking` — Онлайн-запись на консультацию для тех, кто не купил.
6. `kb_prepared` — Заготовки: ответы на вопросы про эфир и запись.
7. `site_page` — Страница регистрации с кнопкой на вход цепочки.

**Ветвления:**

* Купил предзаказ — выдача после эфира; не купил за окно — приглашение на консультацию.
* Не пришёл на эфир (`no_show`) — отдельная цепочка с записью.

**Чем заканчивается:**

* Регистрация на событие.
* Оплата (предзаказ или запись).
* Запись на консультацию.

**Типичные ошибки:**

* Не создавайте шаги из системных сообщений платформы («Оплата прошла», статусы заказа), реплик покупателя и ответов AI: платформа рисует их сама.
* Шаг без кнопки-перехода и без таймаута обрывает воронку. Назовите переход каждого шага явно; «сразу после предыдущего» после ветвления — тупик.
* Ссылки на сайт, товар, запись и событие берите готовыми из ответов тулов; `t.me/…?start=` и `?startapp=` руками не собирайте.
* Регистрацию открывайте `set_event_phase` только после привязки всех цепочек.

**Самопроверка:**

* Прочитайте шаги (`list_chain_steps`) и сверьте три оси на каждом: у шага есть путь дальше (кнопка-переход или таймаут `timeout_next_step_seq`) либо он финальный; у оффера есть `timeout_condition`; у шага с формой есть таймаут.
* Прочитайте событие (`get_event`): время, часовой пояс и все привязки цепочек на месте.

**Пример цепочки.** Пример проходит проверку схемы шагов; тексты и числа замените своими.

* `gift` · сообщение · вход — Подарок за регистрацию. кнопка «Занять место» → `presale`; таймаут 60 мин → `nudge`
* `nudge` · сообщение — Напоминание. кнопка «Занять место» → `presale`; таймаут 1440 мин → `presale`
* `presale` · оффер — Предзаказ записи. таймаут 30 мин (без покупки) → `invite`
* `invite` · сообщение — Бесплатная консультация. финал: запись на время

### Консультация (`consultation`)

Антивебинар → дожимы по таймаутам → квиз → ветки по сегментам → общее приглашение на консультацию → запись на время.

**Порядок сборки:**

1. `bot_profile` — По просьбе владельца: описание бота под тему консультации.
2. `chain_step` — Входная цепочка: антивебинар, дожимы, ветки и приглашение.
3. `crm_form` — Форма квиза: поля и ветки по ответам.
4. `quiz` — Выбор вида квиза и переходы веток в приглашение.
5. `booking` — Ресурс, расписание, услуга «Консультация» и напоминания записи.
6. `kb_prepared` — Заготовки: ответы на частые вопросы и возражения.
7. `site_page` — Лендинг с кнопкой на вход цепочки.

**Ветвления:**

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

**Чем заканчивается:**

* Запись на время консультации.

**Типичные ошибки:**

* Не создавайте шаги из системных сообщений платформы («Оплата прошла», статусы заказа), реплик покупателя и ответов AI: платформа рисует их сама.
* Шаг без кнопки-перехода и без таймаута обрывает воронку. Назовите переход каждого шага явно; «сразу после предыдущего» после ветвления — тупик.
* Ссылки на сайт, товар, запись и событие берите готовыми из ответов тулов; `t.me/…?start=` и `?startapp=` руками не собирайте.
* Ветки квиза без общего следующего шага: оффер или приглашение достанется только одной из них.

**Самопроверка:**

* Прочитайте шаги (`list_chain_steps`) и сверьте три оси на каждом: у шага есть путь дальше (кнопка-переход или таймаут `timeout_next_step_seq`) либо он финальный; у оффера есть `timeout_condition`; у шага с формой есть таймаут.
* Каждая ветка квиза в итоге ведёт в приглашение; `site_form_declare` читается обратно с `variants` и `defaultStepSeqNum`.

**Пример цепочки.** Пример проходит проверку схемы шагов; тексты и числа замените своими.

* `antiwebinar` · сообщение · вход — Антивебинар. таймаут 1440 мин → `nudge`
* `nudge` · сообщение — Дожим. кнопка «Пройти тест» → `quiz`; таймаут 1440 мин → `quiz`
* `quiz` · форма — Короткий тест. ответы формы: hot → `branch_hot`, warm → `branch_warm`; остальные → `branch_cold`; таймаут 1440 мин → `branch_cold`
* `branch_hot` · сообщение — Вам пора действовать. кнопка «Записаться» → `pitch`; таймаут 60 мин → `pitch`
* `branch_warm` · сообщение — Нужен понятный план. кнопка «Записаться» → `pitch`; таймаут 60 мин → `pitch`
* `branch_cold` · сообщение — Начнём с основ. кнопка «Разобрать вместе» → `pitch`; таймаут 1440 мин → `pitch`
* `pitch` · сообщение — Приглашение на консультацию. таймаут 1440 мин → `last_call`
* `last_call` · сообщение — Последнее напоминание. финал: запись на время

### Трипвайер (`tripwire`)

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

**Порядок сборки:**

1. `bot_profile` — По просьбе владельца: описание бота под оффер.
2. `chain_step` — Входная цепочка: материал, дожимы, ветки, оффер, приглашение.
3. `crm_form` — Форма квиза: поля и ветки.
4. `quiz` — Вид квиза и схождение веток в оффер.
5. `offer` — Недорогой цифровой товар с автовыдачей и шаг оффера с окном.
6. `booking` — Консультация для тех, кто не купил за окно.
7. `kb_prepared` — Заготовки: ответы про оффер и выдачу.
8. `site_page` — Страница с кнопкой на вход цепочки.

**Ветвления:**

* Три ветки квиза сходятся в один оффер; ветка «холодных» получает материал с базой перед оффером.
* Оффер: купил — выдача; не купил за окно — приглашение на консультацию.

**Чем заканчивается:**

* Оплата трипвайера.
* Запись на консультацию.

**Типичные ошибки:**

* Не создавайте шаги из системных сообщений платформы («Оплата прошла», статусы заказа), реплик покупателя и ответов AI: платформа рисует их сама.
* Шаг без кнопки-перехода и без таймаута обрывает воронку. Назовите переход каждого шага явно; «сразу после предыдущего» после ветвления — тупик.
* Ссылки на сайт, товар, запись и событие берите готовыми из ответов тулов; `t.me/…?start=` и `?startapp=` руками не собирайте.
* Оффер без `timeout_condition`: после окна юзер получит следующий шаг даже после покупки.

**Самопроверка:**

* Прочитайте шаги (`list_chain_steps`) и сверьте три оси на каждом: у шага есть путь дальше (кнопка-переход или таймаут `timeout_next_step_seq`) либо он финальный; у оффера есть `timeout_condition`; у шага с формой есть таймаут.
* Прочитайте товар (`get_catalog_item`): цена, валюта и выдача на месте.

**Пример цепочки.** Пример проходит проверку схемы шагов; тексты и числа замените своими.

* `magnet` · сообщение · вход — Полезный материал. таймаут 1440 мин → `nudge`
* `nudge` · сообщение — Дожим. кнопка «Пройти тест» → `quiz`; таймаут 1440 мин → `quiz`
* `quiz` · форма — Короткий тест. ответы формы: hot → `branch_hot`, warm → `branch_warm`; остальные → `branch_cold`; таймаут 1440 мин → `branch_cold`
* `branch_hot` · сообщение — Вам пора действовать. кнопка «Показать» → `offer`; таймаут 60 мин → `offer`
* `branch_warm` · сообщение — Нужен понятный план. кнопка «Показать» → `offer`; таймаут 60 мин → `offer`
* `branch_cold` · сообщение — Начнём с основ. кнопка «Дальше» → `offer`; таймаут 1440 мин → `offer`
* `offer` · оффер — Трипвайер. таймаут 30 мин (без покупки) → `consult`
* `consult` · сообщение — Бесплатная консультация. финал: запись на время

### Марафон (`marathon`)

Регистрация → предзаказ записи → несколько дней эфиров (по событию на день) → продажа записи → индивидуальный разбор.

**Порядок сборки:**

1. `bot_profile` — По просьбе владельца: описание бота под марафон.
2. `chain_step` — Входная цепочка и цепочки каждого дня: анонс, напоминания, после эфира.
3. `offer` — Предзаказ записи и полная цена записи после марафона.
4. `event` — Отдельное событие на каждый день со своими привязками.
5. `booking` — Индивидуальный разбор после марафона.
6. `kb_prepared` — Заготовки: расписание, доступ к записи, вопросы по дням.
7. `site_page` — Страница марафона с кнопкой на вход цепочки.

**Ветвления:**

* Купил предзаказ — выдача после эфира; не купил за окно — расписание марафона и приглашение на разбор.

**Чем заканчивается:**

* Оплата предзаказа или записи.
* Регистрация на события дней.
* Запись на индивидуальный разбор.

**Типичные ошибки:**

* Не создавайте шаги из системных сообщений платформы («Оплата прошла», статусы заказа), реплик покупателя и ответов AI: платформа рисует их сама.
* Шаг без кнопки-перехода и без таймаута обрывает воронку. Назовите переход каждого шага явно; «сразу после предыдущего» после ветвления — тупик.
* Ссылки на сайт, товар, запись и событие берите готовыми из ответов тулов; `t.me/…?start=` и `?startapp=` руками не собирайте.
* Один день — одно событие со своими моментами; не складывайте три эфира в одно событие.

**Самопроверка:**

* Прочитайте шаги (`list_chain_steps`) и сверьте три оси на каждом: у шага есть путь дальше (кнопка-переход или таймаут `timeout_next_step_seq`) либо он финальный; у оффера есть `timeout_condition`; у шага с формой есть таймаут.
* Для каждого дня прочитайте `get_event`: даты, часовой пояс и привязки цепочек.

**Пример цепочки.** Пример проходит проверку схемы шагов; тексты и числа замените своими.

* `gift` · сообщение · вход — Подарок за регистрацию. кнопка «Занять место» → `presale`; таймаут 60 мин → `presale`
* `presale` · оффер — Предзаказ записи. таймаут 30 мин (без покупки) → `schedule`
* `schedule` · сообщение — Расписание марафона. таймаут 1440 мин → `invite`
* `invite` · сообщение — Разбор после марафона. финал: запись на время

## Блоки

### Профиль бота (`bot_profile`)

Имя, About, Description («What can this bot do?») и картинка стартового экрана бота тенанта. Платформа сама профиль не меняет: только по вашему вызову и по просьбе владельца.

**Инструменты по порядку вызова:**

1. `get_bot_profile`. Сначала прочитайте, что уже стоит.
2. `update_bot_profile`. Передавайте только те поля, которые меняете.

**Нужно от предыдущих блоков:** `bot_ready`. **Оставляет следующим блокам:** ничего.

**Настройки:**

* Лимиты Telegram: имя 64, About 120, Description 512 символов. Превышение возвращается ошибкой с именем поля и лимитом.
* Тексты задаются отдельно для `ru` и `en`. Картинка и фото профиля идут через `mediaRef`; если метода нет, тул скажет, что поле меняется только в @BotFather.

### Товар и оффер (`offer`)

Товар в каталоге с выдачей после оплаты и шаг цепочки «оффер»: предложение с окном в N минут. Окно закрывается условием «без покупки», а не просто временем.

**Инструменты по порядку вызова:**

1. `get_catalog`. Не создавайте дубли: прочитайте каталог.
2. `get_payment_config`. Валюта цены — по умолчанию из настроек оплаты.
3. `publish_entity` — Поля: `items`. Элемент: `targetTopic: catalog`, `config.title`, `prices`, `item_type`.
4. `get_content_draft`. Дождитесь `published`, затем возьмите номер товара.
5. `get_catalog_item` — Поля: `seq_id`. Прочитайте товар и выдачу обратно.
6. `update_chain_step` — Поля: `chain_seq_num`, `step_seq_num`. Шаг оффера: `timeout_minutes`, `timeout_next_step_seq`, `timeout_condition`.

**Нужно от предыдущих блоков:** `steps`. **Оставляет следующим блокам:** `product`.

**Настройки:**

* Первая выдача товара без выдачи: элемент `publish_entity` с `intent: INITIALIZE_DELIVERY` и `initializeTarget: {seqId: номер товара}`; замена существующей — `intent: REPLACE` и `replaceTarget`.
* Ось 3 на шаге оффера: `timeout_condition: {kind: "no_paid_purchase_since_offer"}` вместе с `timeout_minutes` и `timeout_next_step_seq`. Платная покупка внутри окна гасит таймер; без покупки юзер идёт на следующий шаг (чаще всего — приглашение на консультацию).
* Кнопку «Купить» ведите на готовый `buy_url` товара, а не на собранную руками ссылку. Текст «Оплата прошла» и статусы заказа платформа рисует сама: шаги для них не создавайте.

### Шаг цепочки (`chain_step`)

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

**Инструменты по порядку вызова:**

1. `list_message_chains`. Прочитайте существующее, чтобы не плодить цепочки.
2. `create_message_chain` — Поля: `title`
3. `create_chain_step` — Поля: `chain_seq_num`, `content`. Сначала создайте все шаги с текстом, затем связывайте их.
4. `list_chain_steps` — Поля: `chain_seq_num`. Возьмите номера шагов для переходов.
5. `update_chain_step` — Поля: `chain_seq_num`, `step_seq_num`. Кнопки, таймауты, активность, TTL.
6. `get_chain_step` — Поля: `chain_seq_num`, `step_seq_num`. Проверка после сборки.

**Нужно от предыдущих блоков:** `bot_ready`. **Оставляет следующим блокам:** `chain`, `steps`, `entry_link`.

**Настройки:**

* Ось 1, кнопка-переход: `deeplink_buttons: [{title, target_seq_num}]`. После нажатия кнопки перехода гаснут: отправленная карточка не меняется.
* Ось 2, таймаут «не перешёл»: `timeout_minutes` и `timeout_next_step_seq`. Через M минут без перехода платформа сама ведёт юзера на указанный шаг.
* Ось 3, таймаут «без покупки»: `timeout_condition: {kind: "no_paid_purchase_since_offer"}` — для оффера и трипвайера (см. блок `offer`).
* Автоудаление и таймаут — два независимых таймера. `message_ttl_minutes`: если юзер ничего не сделал с сообщением, убрать его через N минут; нажал кнопку или перешёл дальше — сообщение остаётся. Удалить через 10 минут и дожать через 20 допустимо: ограничения `ttl >= timeout` нет. `delete_prev_if_unengaged` убирает предыдущую карточку в момент таймаута, если реакции не было.
* `delay_minutes` — задержка доставки шага после входа, а не таймаут. Шаг без кнопок и таймаута завершает цепочку.
* Кнопки на товар, запись и событие подключайте после соответствующих блоков: возьмите их готовые адреса и вернитесь к `update_chain_step`.
* Тестовый режим задержек: на проверке поставьте `timeout_minutes: 1` и малые `delay_minutes`, посмотрите прохождение глазами, после «да» владельца верните боевые значения. Флага «ускоренный прогон» в платформе нет.

### Квиз (`quiz`)

Вопросы, по ответам которых юзер попадает в одну из веток. Все ветки сходятся в следующий общий шаг (оффер или приглашение). Вид квиза выбирайте явно и согласуйте с владельцем.

**Инструменты по порядку вызова:**

1. `site_form_declare` — Поля: `zone`, `title`. Виды (а) и (б): форма с `variants` и `defaultStepSeqNum`.
2. `create_chain_step` — Поля: `chain_seq_num`, `content`. Шаги веток и вид (в): кнопки в боте.
3. `update_chain_step` — Поля: `chain_seq_num`, `step_seq_num`. Таймаут шага с квизом и переходы веток в общий шаг.

**Нужно от предыдущих блоков:** `steps`. **Оставляет следующим блокам:** `branches`.

**Настройки:**

* Вид (а): CRM-форма на штатной странице `/f/{code}`. Вид (б): своя страница или мини-приложение плюс официальный скрипт отправки, который возвращает `site_form_declare`. Вид (в): кнопки в боте — только для одного вопроса, подсчёт баллов кнопками не выражается.
* Для (а) и (б): `site_form_declare` с `variants` (по одному на ветку, каждый ведёт на шаг ветки), `defaultStepSeqNum` для остальных ответов, `funnelMode` `deterministic` или `ai_agent`, `managerFollowUp` выключен по умолчанию.
* Шаг с квизом получает ось 2 (`timeout_minutes` → шаг): тот, кто не прошёл тест, всё равно идёт дальше. Ветки обязаны сходиться; фраза «сразу после предыдущего» после ветвления не годится.

### CRM-форма (`crm_form`)

Форма заявки или анкеты: поля, куда уходят ответы и куда форма ведёт юзера. Форма — это переход: ответы двигают живой прогон на нужный шаг.

**Инструменты по порядку вызова:**

1. `site_form_declare` — Поля: `zone`, `title`. Единственный писатель форм; возвращает адрес и официальный скрипт отправки.
2. `pull_form_submissions`. Прочитать заявки; текст ответов — только по явной просьбе.
3. `get_form_submission`
4. `set_form_submission_handled`

**Нужно от предыдущих блоков:** `steps`. **Оставляет следующим блокам:** `form`.

**Настройки:**

* `submissionSchema` — поля; `variants` — ветки по ответам, каждая ведёт на шаг цепочки; `defaultStepSeqNum` — шаг для всех остальных ответов; `funnelMode`: `none`, `deterministic` (правила формы) или `ai_agent`.
* `managerFollowUp` по умолчанию выключен: включайте, только если владелец просит, чтобы менеджер связался с заполнившим.
* Форма двигает прогон, только если задан следующий шаг. Незаполнение ловит обычный таймаут шага с формой: отдельного «таймаута формы» нет.

### Заготовка базы знаний (`kb_prepared`)

Тема базы знаний менеджера (FAQ, возражения) и привязанные к ней заготовки: готовые карточки с видео, файлом или инструкцией, которые AI-менеджер отправляет вместо того, чтобы придумывать текст.

**Инструменты по порядку вызова:**

1. `create_chain_step` — Поля: `chain_seq_num`, `content`. Заготовка — это шаг цепочки с готовым контентом.
2. `list_chain_steps` — Поля: `chain_seq_num`. Возьмите номера шагов-заготовок.
3. `create_knowledge` — Поля: `kb_type`, `title`, `content`. Привяжите заготовки через `prepared_step_seq_nums`.
4. `list_knowledge`
5. `update_knowledge`

**Нужно от предыдущих блоков:** `steps`. **Оставляет следующим блокам:** `knowledge`.

**Настройки:**

* Два режима одной сущности. (а) Отдельное сообщение: шаг активен, контент жив, задержки нет — менеджер шлёт его одним сообщением. (б) Вход в цепочку: менеджер шлёт стартовое сообщение, и запускается вся цепочка.
* Не заводите «служебную цепочку» с `is_active: false`: неактивный шаг менеджер отправить не сможет.
* Для каждой темы: заголовок, ответ, теги. Тяжёлый файл загружайте один раз (`media_request_upload` → PUT → `media_finalize`) и переиспользуйте `mediaRef` во всех заготовках.

### Онлайн-запись (`booking`)

Ресурс (специалист, кабинет), расписание, услуга и цепочки напоминаний записи. Финал воронки «запись на время».

**Инструменты по порядку вызова:**

1. `booking_list_resources`
2. `booking_create_resource` — Поля: `name`, `idempotency_key`
3. `booking_create_resource_schedule`. Расписание на текущий и следующий месяц.
4. `booking_create_service` — Поля: `mode`, `duration_value`, `resource_seq_nums`, `idempotency_key`
5. `booking_update_resource` — Поля: `resource_seq_num`, `etag`, `idempotency_key`. `chain_bindings` — после создания цепочек.
6. `meeting_provider_connect`. Zoom или Телемост: подтверждение OAuth делает человек.

**Нужно от предыдущих блоков:** `chain`. **Оставляет следующим блокам:** `booking`.

**Настройки:**

* `chain_bindings`: `booking_confirmed`, `booking_reminder_24h`, `booking_reminder_1h`, `booking_attended`, `booking_no_show`, `booking_cancelled`. Каждая привязка: `chain_seq_num` и при необходимости `step_seq_num`; `null` отвязывает цепочку.
* Кнопка «Записаться» в шагах ведёт на готовый `publicUrl` ресурса. Часы приёма и длительность спросите у владельца.
* Длительность выбирает покупатель в границах `length` услуги: `length_mode` `fixed` — один блок, `list` — одно из `length_units`, `range` — от `min_units` до `max_units` (у почасовой — ещё окно выдачи и возврата `window_start_minute`/`window_end_minute`). Без `length` услуга — `range` с ценой, линейной от цены блока. Лестница `price_tiers` — пакеты: `{id, units, prices}` значит «пакет из `units` блоков стоит `prices`», по возрастанию `units`, нужна базовая цена услуги.
* Добавки услуги (`variants`) выбираются при записи в `selected_options`; цену считает расчёт заказа. Длину и добавки существующей записи не правят через строки заказа (`ORDER_BOUND_TO_BOOKING`) — запись переносят или создают заново.
* «Размножить ×N» (десять одинаковых домиков): `booking_create_resource` в цикле, у каждого свой `idempotency_key` и имя «Домик 1…N», затем одна `booking_create_service` со всеми `resource_seq_nums`.

### Событие (`event`)

Вебинар, эфир или день марафона: дата, формат и цепочки вокруг него (напоминания, старт, после события). Финал воронки «регистрация на событие».

**Инструменты по порядку вызова:**

1. `list_events`
2. `create_event` — Поля: `title`. `start_at`, `end_at`, `timezone` (IANA), `is_online`, `address` или `stream_url`.
3. `update_event` — Поля: `seq_num`. Привязка цепочек к моментам — после создания цепочек.
4. `set_event_phase` — Поля: `seq_num`, `phase`. `phase: registration` открывает регистрацию.
5. `get_event` — Поля: `seq_num`. Прочитайте событие обратно.
6. `complete_event` — Поля: `seq_num`

**Нужно от предыдущих блоков:** `chain`. **Оставляет следующим блокам:** `event`.

**Настройки:**

* Привязки через `update_event`: `reminder_24h_chain_seq_num`, `reminder_1h_chain_seq_num`, `start_event_chain_seq_num`, `post_event_chain_seq_num`, при необходимости `no_show_chain_seq_num`; конкретный входной шаг — парное поле `{момент}_chain_step_seq`.
* `reminder_24h_offset_minutes` и `reminder_1h_offset_minutes` — от 5 до 10080 минут ДО старта, первое строго раньше второго. Остальные сообщения вокруг события — задержанные шаги этих цепочек (ось 2).
* Перенос события и отмена сами участников не уведомляют. Регистрацию открывайте `set_event_phase` после настройки; начавшееся событие закрывает `complete_event`.

### Сайт и страница (`site_page`)

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

**Инструменты по порядку вызова:**

1. `get_storefront`
2. `create_quick_site`
3. `update_storefront`
4. `site_request_upload`. Свой сайт: загрузка, затем `site_publish`.
5. `site_publish` — Поля: `host`, `uploadId`
6. `site_list_pages`. Готовые ссылки «открыть мини-приложением» — в `mini_app_links`.
7. `site_page_preview`

**Нужно от предыдущих блоков:** `bot_ready`, `entry_link`. **Оставляет следующим блокам:** `site_url`.

**Настройки:**

* Кнопка входной цепочки берёт её готовый `entryUrl` из `list_message_chains` или `list_chain_steps`; товар — `public_url` и `buy_url`; запись и событие — `publicUrl`. Ссылку из slug, кода или номера, а также `t.me/…?start=` руками не собирайте.
* Ссылку «открыть мини-приложением» не выдумывайте (`?startapp=shop` не работает): берите её из `mini_app_links` ответа `site_list_pages`.
* Форма на своей странице отправляется официальным скриптом, который вернул `site_form_declare`; страница на другом домене требует разрешённого Origin формы.
