Инициализация SDK
Booking Renderer SDK (@seatmap.pro/renderer) — это встраиваемый выбор мест, который работает на вашей странице продаж. Он подключается к Booking API, отрисовывает схему площадки с помощью WebGL и вызывает колбэки, когда покупатели выбирают или снимают выбор с мест.
Предварительные требования
- Node.js 18+ (рекомендуется LTS)
- Менеджер пакетов npm, yarn или pnpm
- Опубликованная схема и событие, созданные согласно руководству Getting Started
- Ваш Public API Key из панели Editor Admin (Organization Settings)
Шаг 1: Установите пакет
npm install @seatmap.pro/renderer
yarn add @seatmap.pro/renderer
pnpm add @seatmap.pro/renderer
Подробности о пакете: @seatmap.pro/renderer on npm
Шаг 2: Добавьте элемент-контейнер
Renderer монтируется в DOM-элемент на вашей странице. Задайте ему явные размеры:
<div id="seatmap-root" style="width: 100%; height: 600px;"></div>
Renderer полностью заполняет контейнер. Используйте CSS для управления размером схемы в рамках макета вашей страницы.
Шаг 3: Инициализируйте renderer
import { SeatmapBookingRenderer } from '@seatmap.pro/renderer';
const container = document.getElementById('seatmap-root')!;
const renderer = new SeatmapBookingRenderer(container, {
publicKey: 'YOUR_PUBLIC_API_KEY',
onSeatSelect: (seat) => {
console.log('selected', seat);
},
onSeatDeselect: (seat) => {
console.log('deselected', seat);
},
});
await renderer.loadEvent('YOUR_EVENT_ID');
Обязательные значения:
publicKey– из Organization Settings в панели Editor AdmineventId– возвращается при создании события через Booking API v2 или интерфейс Events Hub
Шаг 4: Обработайте выбор места
Колбэк onSeatSelect срабатывает каждый раз, когда покупатель нажимает на доступное место. Используйте его для синхронизации выбора с вашей корзиной или бэкендом.
Для продакшн-тикетинга рекомендуется паттерн «блокировка по клику»: блокируйте место в вашем бэкенде сразу при выборе и снимайте блокировку при снятии выбора.
const renderer = new SeatmapBookingRenderer(container, {
publicKey: 'YOUR_PUBLIC_API_KEY',
onSeatSelect: async (seat) => {
await fetch('/api/cart/lock', {
method: 'POST',
body: JSON.stringify({ seatId: seat.compositeKey }),
});
},
onSeatDeselect: async (seat) => {
await fetch('/api/cart/unlock', {
method: 'POST',
body: JSON.stringify({ seatId: seat.compositeKey }),
});
},
});
Полную справку по колбэкам и настройкам см. в Renderer Spec.
Попробуйте вживую
Откройте Renderer Playground, чтобы поэкспериментировать с SDK в интерактивном режиме – без какой-либо настройки.
Полный рабочий пример также доступен на CodePen.
Устранение неполадок
Контейнер не виден – renderer нуждается в контейнере с ненулевой шириной и высотой. Если ничего не появляется, убедитесь, что у элемента-контейнера заданы явные CSS-размеры.
Ошибки CORS – renderer получает данные с booking.seatmap.pro. Если вы используете прокси или собственный домен, убедитесь, что ваш сервер пересылает запросы в Booking API с корректным заголовком Origin.
Места не отображаются – проверьте, что событию назначены цены на места. Renderer показывает только места, у которых есть хотя бы одна назначенная цена.
Узнать больше
- Seating Plan Rendering – как устроен пайплайн рендеринга под капотом (SVG, Canvas, WebGL)
- 2D and 3D seat maps: a practical evolution – выбор между режимами 2D- и 3D-рендеринга
- Руководство Getting Started – сквозное руководство по интеграции от создания схемы до оформления заказа