Ответ на вопрос / Голосование¶
Единый экран выбора варианта. Используется в двух контекстах:
- Викторина — ответ на вопрос (появляется, когда на LED-экране показан вопрос)
- Профессии в действии — голосование за вариант продолжения видеосценария (появляется в точке выбора)
Для участника это одно и то же: видит варианты → выбирает → отправляет. Различие появляется в командной игре: участники команды голосуют, а капитан видит их выборы и отправляет итоговый ответ.
Элементы¶
| Элемент | Описание |
|---|---|
| Номер вопроса | «Вопрос 3 из 5» (только викторина) |
| Тип раунда | Название типа текущего раунда (только викторина) |
| Текст вопроса / ситуации | Дублируется с LED-экрана (из поля prompt текущей ветки видеосценария) |
| Варианты | Кнопки для выбора (2–4 варианта) |
| Поле ввода | Текстовое поле (только викторина, если вопрос с открытым ответом) |
| Таймер | Обратный отсчёт, синхронизирован с LED |
| Кнопка подтверждения | Подтверждение выбора |
Сценарии¶
Индивидуальная викторина¶
Участник выбирает вариант (или вводит ответ) и отправляет его напрямую.
Командная игра¶
Участник команды:
- Видит вопрос
- Голосует за вариант (или вводит свой ответ)
- Ожидает, пока капитан отправит итоговый ответ
Капитан:
- Видит вопрос
- Голосует сам
- Видит, как проголосовали участники команды
- Выбирает итоговый вариант и отправляет ответ команды
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) |
Типы вопросов¶
Интерфейс адаптируется под тип вопроса:
| Тип | Элемент управления |
|---|---|
| Одиночный выбор | Радиокнопки |
| Множественный выбор | Чекбоксы |
| Открытый ответ | Текстовое поле |
| Порядок / ранжирование | Перетаскивание элементов |
Связанные разделы¶
- LED-экран: Викторина, Профессии в действии
- Панель оператора: Управление раундом, Профессии в действии