landing · Сайты 24 26.1700.0 Ломающее

Landing 26.1700.0: markup-генерация за флагом и четыре несовместимости

5 мин чтения
Узнавайте о ломающих изменениях Битрикса раньше, чем они доедут до прода: свежие разборы — в канале @bxmax_updates

Ломающее обновление

Удалены или изменены публичные API — прикладной код может перестать работать.

Landing 26.1700.0 добавляет генерацию AI-сайтов из markup-пакетов. Её выбирает выключенный по умолчанию AiSitesMarkupFlag; доставка и отображение уже существующих markup-страниц работают независимо от флага. Четыре несовместимых изменения тоже от него не зависят.

Новое

Markup-пакеты и AI-сценарии

Публичный namespace Bitrix\Landing\Markup описывает пакет и манифест, буфер загрузки, проверку, импорт, экспорт, формы, изображения, repair и подписанную доставку. Block получил методы getMarkupManifest() и saveMarkupManifest(), а File — привязку и удаление файлов из буфера. Для интеграций также появились Domain::toUnicode(), Rights::getUserOperationsForSite(), Security\RemoteFile::download() и Connector\Disk::readFileForUser().

REST-методы landing.markup.putfile и landing.markup.getfile загружают и читают файлы пакета. Они работают только с авторизацией aiassistant_signed_user и проверяют режим продукта. Для create требуется право создавать сайты, для update и чтения — право редактировать целевую страницу. AI Assistant получил пять инструментов: загрузку файла, отправку пакета, получение статуса, чтение пакета и отмену задания. Для них добавлены отдельные DTO, схемы запросов и обработчики загрузки и запуска.

Copilot\Manager выбирает режим legacy или markup. Generation умеет отменять операцию, замечать внешнюю отмену и не запускать две операции одновременно. CreateMarkupSite проводит пакет через проверку, repair, модерацию темы, генерацию изображений и подготовку CRM-форм, затем создаёт сайт и custom-блок. ChangeMarkupSite применяет пакет к существующему блоку без создания нового сайта.

Пользователь публикует результат из редактора. Автопубликации нет.

При изменении страницы старая версия хранится до успешного применения новой. Undo и redo переключают манифесты без повторной загрузки файлов. Валидатор ограничивает пакет 15 МБ, отдельный файл 5 МБ, entry 1 МБ и общее число файлов 50; видео может быть только одно.

Sandbox custom code и доставка

Новый subtype CustomCode выводит код в iframe с sandbox="allow-scripts", без allow-same-origin. Код приходит через srcdoc, переходы фильтруются. Cookie, localStorage и sessionStorage работают через in-memory реализации, а indexedDB заменён отказной заглушкой. pushState() и replaceState() вызывают оригинал и подавляют исключение. Мост iframe передаёт сообщения редактору и не открывает доступ к origin портала.

Файлы custom-блока отдаются по подписанным ссылкам.

Опубликованные бинарные файлы получают immutable-кеш, для черновиков подпись живёт ограниченное время. В коробочной редакции installFiles() создаёт .htaccess с deny-правилом в /upload/landing_markup, только если файла ещё нет. Облако закрывает каталог отдельно. Готового правила для nginx обновление не содержит.

Handoff и чат

Одноразовая handoff-ссылка переносит prompt в /sites/ai/ или редактор. Она действует час, ограничена 30 выдачами на пользователя в час, а в БД хранится только SHA-256 токена.

После использования prompt удаляется из строки БД.

Виджет показывает состояние привязки чата и возвращает пользователя к нему.

При удалении AI-сайта связанные чаты получают уведомление. Права проверяются от имени владельца привязки, но ошибка уведомления не отменяет удаление сайта. Фоновые агенты чистят буферы загрузки, зависшие резервации и старые AI-черновики, а также повторяют регистрацию чат-триггера до появления модуля aiassistant.

Редактор и CRM-документы

Markup-страница не принимает обычные блоки. Вместо кнопки добавления редактор предлагает изменить страницу в чате. Пока идёт inline-редактирование или открыта панель, iframe не перезагружается, сколько бы это ни длилось. После последнего изменения подтверждение сохранения ждут не дольше 10 секунд. Общий EscapeCoordinator учитывает popup, подсказки и inline-редактирование, поэтому Escape закрывает только верхнюю панель.

Пакет может объявлять CRM-формы. Система переиспользует существующие привязки или создаёт форму из feedback preset; отсутствие CRM и тарифные ограничения дают предупреждение, но не прерывают генерацию. Поле соглашений теперь работает с каталогом юридических документов CRM: доступны версия, поиск, пагинация и карточка документа в слайдере.

Что сломается

  • AiSiteGenerationHelper::isModerationBlockStepId() теперь принимает Generation первым аргументом. Старый вызов с одним int завершится TypeError.
  • Landing::copyBlock() и Landing::moveBlock() сверяют block.type исходного блока с типом целевого сайта. Несовместимый перенос возвращает null и ошибку BLOCK_INCOMPATIBLE_SITE_TYPE.
  • Landing::getPublicUrl() и Site::getPublicUrl() возвращают Unicode-хост для IDN-домена вместо сохранённого punycode. Код, который сравнивает точную строку URL, получит другой результат.
  • В Bitrix24.Mobile старые базы знаний недоступны на облачных порталах, созданных 1 октября 2026 года или позже: меню скрывается, просмотр и редирект отвечают 403. Обычные браузерные запросы не затронуты.

БД

В b_landing_block появилась колонка MARKUP_MANIFEST типа MEDIUMTEXT; ORM-карта описывает её как Entity\StringField. Буферы загрузки хранятся в новой таблице b_landing_markup_upload с UNIQUE-индексом по UID и индексами очистки, а одноразовые handoff-ссылки — в b_landing_ai_prompt_handoff; туда записывается хеш токена, владелец, цель, prompt и сроки действия и использования. Если интеграция читает таблицы модуля напрямую или зеркалирует их, схему придётся обновить.

Для выборок добавлены индексы по автору и дате сайта, автору и сценарию генерации, а также SITE_ID привязки AI-чата.

Мелочи и находки

  • Провайдер годовой сводки intranet относит к AI только сценарий CreateAiSite. CreateMarkupSite учитывается regular-запросом вместе с обычными сайтами.
  • Updater страницы чат-магазина меняет параметры только одного компонентного вызова. При неоднозначном PHP исходный контент остаётся без изменений, а причина попадает в журнал.

Новая версия вышла — разбор уже в Telegram

В канале @bxmax_updates публикуем каждый свежий разбор: что сломается, что устарело и что появилось в API. Узнаете до того, как обновите прод.

Подписаться

Читайте дальше

landing 26.1600.0 Безопасность Свежее

Landing 26.1300.200–26.1600.0: закрыты дыры с PHP и правами групп, поля редактора стали ES-классами

С прошлого разбора вышли четыре версии landing: 26.1300.200, 26.1400.0, 26.1500.0 и 26.1600.0. В каждой закрыты дыры, от сборки PHP-тега при импорте сайта до лишних прав у участников групп соцсети. Попутно в режиме Битрикс24 превью черновика переехало на маршрут раздела «Сайты», а поля редактора ста…

7 мин
landing 26.1300.50 Безопасность Свежее

Landing 26.1300.0–26.1300.50: публикация больше не склеит PHP-тег, сайт по описанию через REST, а note меняет ответы REST v3

Вышли landing 26.1300.0 и 26.1300.50, вместе с первой пришёл note 26.500.0. Note на БУС нет, его смотрели на коробочном Битрикс24. В landing закрыли дыру в публикации блоков и добавили REST-методы, которые собирают сайт из текстового описания. Note научился забирать к себе Базу знаний 1.0 и поменял…

2 мин
landing 26.1100.0 Безопасность

Landing 26.1100.0: закрыта цепочка уязвимостей, заодно ужесточены repo.register, savePicture и проверка ссылок предпросмотра

`landing` 26.1100.0 (сборка от 06.08.2026) почти целиком про безопасность. Закрыты исполнение кода через манифест repo-блока и импорт архива сайта, инъекция в `eval()` через CODE страницы, SSRF через обработчик виджета, XSS в выводе ассетов, предсказуемый в облаке md5-хеш предпросмотра. В комментари…

14 мин
landing 26.1200.0 Безопасность

Landing 26.1200.0: подписанный предпросмотр ушёл в CSP-песочницу, а импорт с заменой сайта помечает старые страницы удалёнными

Landing 26.1200.0 трогает 690 файлов, но основная масса там картинки, переводы и пересобранные бандлы. Релиз закрывает дыры в подписанной ссылке предпросмотра, чинит импорт с заменой сайта и размечает для скринридеров интерфейсы прав, настроек и редактора. Если вы вызываете `AiSiteChatAvailabilitySe…

2 мин
Мы используем файлы cookie для улучшения работы сайта. Продолжая использовать сайт, вы соглашаетесь с нашей политикой конфиденциальности.
AI Домовой

AI Домовой История

на связи

пишет…

Можно закрыть чат и перейти на другую страницу. Когда ответ будет готов, на кнопке Домового появится отметка.

Нет истории чатов
AI Домовой

Нужна авторизация

Войдите, чтобы задавать вопросы AI Домовому.

Войти