BRD Widget 8.2 Интеграция виджета партнером
Направление работ: Widget Код раздела: 8.2 Раздел: Общие работы > Интеграция виджета партнером Статус: черновик Ответственный: Панкова Л.А. Версия: 0.1 Обновлено: 11.08.26
1. Назначение
Раздел описывает встраивание виджета партнёром на свой сайт: через iframe по идентификатору виджета или через embed-скрипт, а также ограничение размещения по разрешённым доменам.
Партнёр получает готовые сниппеты для встраивания и размещает виджет на своём сайте. Настройка внешнего вида виджета — раздел 8.2.1.
Документ описывает механизм встраивания. Кастомизация виджета — раздел 8.2.1; открытие по диплинкам — раздел 8.7.3; настройка виджета партнёром в кабинете — WebLk 3.8.
2. Ключевые понятия
Embed-скрипт — скрипт embed.js, который создаёт iframe с виджетом в контейнере на странице партнёра.
iframe — способ встраивания виджета по URL с идентификатором виджета.
Идентификатор виджета (widgetId) — параметр, по которому открывается конкретный виджет партнёра.
Разрешённые домены — список доменов, на которых партнёру разрешено размещать виджет.
3. Scope
Входит
S1: Встраивание виджета через iframe или embed-скрипт
S2: Получение сниппетов встраивания по widgetId
S3: Ограничение размещения по разрешённым доменам
Не входит
- Widget: 8.2.1 Общие работы > Интеграция виджета партнером > Кастомизация виджета
- Widget: 8.7.3 Общие работы > Архитектура и инфраструктура > Поддержка диплинков
- WebLk: 3.8 Инструменты настройка виджета партнёром в кабинете
4. BR
Раздел технический; определяется способом встраивания виджета и связан с настройкой в WebLk: 3.8 Инструменты.
5. Функциональные требования (UC + FR)
FR — functional requirements, что интерфейс должен уметь делать по определенному UC.
| ID | Сценарий | Функциональное требование | BR | Вес | Статус |
|---|---|---|---|---|---|
| S1: #FR8.2-1 | Партнёр встраивает виджет | Виджет встраивается на сайт партнёра через iframe по URL с widgetId или через embed-скрипт embed.js, который создаёт iframe в указанном контейнере. | 1 | Реализовано | |
| S2: #FR8.2-2 | Партнёр получает код встраивания | Метод конфигурации встраивания (embed-config) по widgetId возвращает готовые сниппеты — iframe и скрипт — и параметры встраивания. | 2 | Реализовано | |
| S3: #FR8.2-3 | Виджет размещён на домене | Размещение ограничивается разрешёнными доменами: на неразрешённом домене виджет показывает сообщение о запрете размещения, а запросы с такого домена отклоняются на стороне сервера. | 1 | Частично реализовано — сообщение показывается, серверной блокировки нет, см. OQ8.2-1 | |
| S1: #FR8.2-4 | Страница партнёра взаимодействует с виджетом | Embed-скрипт поддерживает обмен сообщениями с родительской страницей, например изменение высоты iframe. | 3 | Реализовано |
6. Открытые вопросы
| ID | Источник | Вопрос | Кому | Статус |
|---|---|---|---|---|
| #OQ8.2-1 | Код | Ограничение по разрешённым доменам проверяется на клиенте (виджет сам определяет домен родителя и показывает запрет), серверной блокировки запросов от неразрешённого домена нет. Подтвердить, достаточно ли клиентской проверки. \ widgets/booking/composables/useLayout.ts:157-183 Уточнено 11.08.26: клиентская проверка не просто «слабее серверной», она обходится тривиально — ограничение применяется только когда виджет открыт в iframe (при !isEmbeddedInFrame() проверка возвращает пустой результат), поэтому прямое открытие URL виджета снимает его полностью. Решение: клиентской проверки недостаточно — требуется серверная проверка: запросы с неразрешённого домена блокируются на бэкенде по Origin/Referer. Клиентская проверка остаётся как способ показать партнёру понятное сообщение, но перестаёт быть единственным барьером. Задача вне репозитория виджета. | Разработка | Закрыт |