Перейти к содержанию

Ответ на вопрос / Голосование

Единый экран выбора варианта. Используется в двух контекстах:

  • Викторина — ответ на вопрос (появляется, когда на LED-экране показан вопрос)
  • Профессии в действии — голосование за вариант продолжения видеосценария (появляется в точке выбора)

Для участника это одно и то же: видит варианты → выбирает → отправляет. Различие появляется в командной игре: участники команды голосуют, а капитан видит их выборы и отправляет итоговый ответ.


Элементы

Элемент Описание
Номер вопроса «Вопрос 3 из 5» (только викторина)
Тип раунда Название типа текущего раунда (только викторина)
Текст вопроса / ситуации Дублируется с LED-экрана (из поля prompt текущей ветки видеосценария)
Варианты Кнопки для выбора (2–4 варианта)
Поле ввода Текстовое поле (только викторина, если вопрос с открытым ответом)
Таймер Обратный отсчёт, синхронизирован с LED
Кнопка подтверждения Подтверждение выбора

Сценарии

Индивидуальная викторина

Участник выбирает вариант (или вводит ответ) и отправляет его напрямую.

Командная игра

Участник команды:

  1. Видит вопрос
  2. Голосует за вариант (или вводит свой ответ)
  3. Ожидает, пока капитан отправит итоговый ответ

Капитан:

  1. Видит вопрос
  2. Голосует сам
  3. Видит, как проголосовали участники команды
  4. Выбирает итоговый вариант и отправляет ответ команды

API ответов

Викторина

Единый эндпоинт POST /quiz/sessions/{sessionId}/answer для всех типов ответов:

Роль Поведение бэкенда
Individual mode Ответ засчитывается
Team mode, участник Сохраняется как голос (для отображения капитану)
Team mode, капитан Засчитывается как ответ команды

Профессии в действии

Эндпоинт POST /interactive-video/sessions/{sessionId}/vote для голосования в точках выбора:

Параметр Описание
branch_id ID выбранной ветки (варианта продолжения)

Один участник может проголосовать только один раз за каждую точку голосования.


Подключение по QR-коду (Профессии в действии)

QR-код на LED-экране содержит ссылку:

https://app.example.com/join?session_id={sessionId}&device_id={deviceId}

Мобильный клиент: 1. Сканирует QR-код 2. Открывает ссылку 3. Извлекает session_id и device_id из URL 4. Подключается к сессии: POST /interactive-video/sessions/{sessionId}/join 5. Получает participant_id для дальнейших запросов


Восстановление сессии

При перезапуске приложения клиент вызывает GET /quiz/sessions/active (для викторины) или GET /interactive-video/sessions/active (для «Профессии в действии») для восстановления текущей сессии. Если активной сессии нет — возврат на главный экран.


Получение обновлений

Мобильный клиент подключается к WebSocket для получения уведомлений об изменениях: - Викторина: ws://host/api/v1/quiz/sessions/{id}/ws — обновление таймера, результаты - Профессии в действии: ws://host/api/v1/interactive-video/sessions/{id}/ws — смена фазы, обновление голосов

При получении события клиент загружает актуальное состояние через REST API: - Викторина: GET /quiz/sessions/{id} - Профессии в действии: GET /interactive-video/sessions/{id}/voting?participant_id=... — информация о голосовании + статус «вы уже проголосовали»


Состояния

Состояние Поведение
Ожидание начала (статус waiting) «Ожидайте начала игры». Доступны неактивны.
Показ вопроса / ситуации Варианты доступны, таймер запущен
Голос отправлен «Голос принят. Ожидайте ответ капитана» (командная игра) или «Голос принят. Ожидайте результат» (Профессии)
Ответ отправлен «Ответ принят. Ожидайте следующий вопрос» (викторина)
Результат Показ победившего варианта (Профессии, кратковременно)
Таймер истёк «Время вышло», переход к следующему вопросу (викторина) или голос не учитывается (Профессии)
Между вопросами «Ожидайте следующий вопрос»
Между раундами «Ожидайте следующий раунд» с обратным отсчётом (between_rounds_delay)

Типы вопросов

Интерфейс адаптируется под тип вопроса:

Тип Элемент управления
Одиночный выбор Радиокнопки
Множественный выбор Чекбоксы
Открытый ответ Текстовое поле
Порядок / ранжирование Перетаскивание элементов

Связанные разделы