Студия кампаний
Создавайте колесо, скретч-карту или коробку-сюрприз. Локальное демо или API магазина, без сервиса выдачи призов.
- Компонент: Колесо удачи / Скретч-карта / Коробки-сюрпризы
- Тема: Морской минимализм / Яркие сладости / Ретро-аркада / Ночное золото / Праздничная бумага / Садовый эскиз
Источник результата
Локальный розыгрыш можно изменить: это не защищённая выдача призов. Акции в коде видны всем. Нет контроля запасов, личности и повторных попыток.
Сервер отвечает за авторизацию, шансы, запасы, допуск и идемпотентность. Не вводите секретные ключи. Предпросмотр не вызывает API.
Подключение API магазина
Это контракт интерфейса, а не сервис розыгрышей Elysia. Реализуйте POST /api/draw на сервере с теми же ID кампании и призов, затем укажите адрес. Для реальных запросов скачайте файлы и разместите их на HTTPS; редактор только имитирует розыгрыш.
Запрос · POST application/json
Виджет отправляет только version, campaignId и случайный requestId из 32 шестнадцатеричных символов. ID клиента, шансы и API-ключи не отправляются. Сервер сам определяет участника; requestId не является авторизацией.
{
"version": 1,
"campaignId": "summer-boutique",
"requestId": "0123456789abcdef0123456789abcdef"
}
Успех · 200 application/json
Верните requestId без изменений. prizeId должен быть в списке, включая вариант без приза. Необязательны: receiptId (≤200 символов), claim.code (≤300), claim.url (HTTPS, ≤2048). Неиспользуемые поля пропускайте, не передавайте null. Без обёртки data/result, не более 16 KiB. Ошибка не означает проигрыш.
{
"requestId": "0123456789abcdef0123456789abcdef",
"prizeId": "p1",
"receiptId": "draw_2026_001",
"claim": {
"code": "SAMPLE-ONLY",
"url": "https://shop.example/redeem"
}
}
ID настроенных призов:
p1: Скидка 10%
p2: Бесплатная доставка
p3: Подарок-сюрприз
p4: В другой раз
Лучше разместить виджет и /api/draw на одном origin (схема, хост, порт), при необходимости через обратный прокси. Относительный путь считается от виджета, а не страницы магазина. credentials: same-origin отправляет только одноимённые по origin Cookie. Authorization и свои заголовки не настраиваются. Для другого origin нужны CORS для виджета и OPTIONS для POST + Content-Type; Cookie туда не отправляются. Статического HTML недостаточно для авторизованного розыгрыша; iframe может блокировать сторонние Cookie.
Сервер проверяет личность, Origin/CSRF, допуск, лимиты участия и частоту, использует свои вероятности и сохраняет результат с резервом товара в одной транзакции. Храните идемпотентность по участнику + campaignId + requestId и возвращайте прежний результат при повторе. Получение и сроки проверяйте на сервере. Данные браузера не доказывают право на приз; не публикуйте секреты.
Отклоняйте запросы кодом не 2xx (например, 401/403/409/429/503). Виджет показывает общее сообщение, не текст сервера. Тайм-аут 15 секунд; перенаправления, неверный JSON, requestId, призы и опасные ссылки отклоняются. Ручной повтор сохраняет ID лишь на этой странице; перезагрузка создаёт новый, поэтому лимиты должны храниться постоянно. Нет автоповтора или локального приза вместо ошибки.
Предпросмотр работает без готовых адресов API и хостинга. Заполните отмеченные поля для экспорта; при ошибке призов или стиля остаётся последний верный вид.
Экспорт и вставка
HTML / CSS / JavaScript / JSON. Разместите файлы на своём HTTPS-сайте и вставьте URL. Инструмент не публикует и не размещает кампании.
Необязательные изображения загружаются с HTTPS-сайтов в браузере. Редактор не хранит изображения или API-ключи.
Равные секторы — только оформление; демо использует указанные шансы. В режиме API решает сервер.