Вот подробно расписанное **Техническое задание (ТЗ)** для разработки Telegram Mini App с викторинами, QR-сканированием и внутренней валютой: --- ## 1. 🎯 Общее описание проекта Необходимо разработать **Telegram Mini App** — веб-приложение, встроенное в Telegram, где пользователи могут: - Проходить викторины и получать за них внутреннюю валюту. - Сканировать QR-коды (вне приложения и внутри) для получения валюты. - Тратить накопленную валюту в магазине на призы. - Быстро открывать конкретные викторины по QR-коду. Приложение должно быть **быстрым**, **интуитивно понятным**, **мобильным** и **интегрированным с Telegram Web App API**. --- ## 2. 🧩 Основные функциональные требования ### 2.1. 🎓 Викторины - Пользователь может просматривать список доступных викторин. - Каждая викторина имеет: - Название - Описание - Количество вопросов - Награду в валюте за прохождение (фиксированная или по количеству правильных ответов) - Статус (доступна / уже пройдена / скоро доступна) - Прохождение викторины: - По одному вопросу на экране - Варианты ответов (один или несколько — уточнить по типу вопроса) - Таймер на вопрос (опционально, если требуется) - По завершению — показ результатов и начисление валюты - Повторное прохождение викторины — **запрещено** (или с ограничением, например, раз в N дней — уточнить). - История пройденных викторин с датой и полученной наградой. ### 2.2. 💰 Внутренняя валюта - Единая валюта для всей системы (например, “Коины”, “Звезды”, “Баллы” — название уточняется). - Баланс отображается в шапке приложения. - Начисляется: - За прохождение викторин - За сканирование QR-кодов - Не сгорает, накапливается. - История транзакций (начисления и траты). ### 2.3. 🛒 Магазин призов - Раздел с товарами/призами, которые можно купить за валюту. - Каждый приз имеет: - Название - Описание - Изображение - Стоимость в валюте - Статус (доступен / закончился / скоро появится) - При покупке: - Списание валюты - Уведомление об успешной покупке - Инструкция по получению приза (например, код, ссылка, инструкция “забрать в университете” и т.п.) - История покупок. ### 2.4. 📷 QR-сканирование #### 2.4.1. Сканирование через приложение - В приложении есть кнопка “Сканировать QR-код”. - При нажатии открывается камера телефона (с разрешения пользователя). - Поддержка сканирования QR-кодов, содержащих: - Просто награду (например, `reward:50`) - Ссылку на открытие конкретной викторины (например, `quiz:id=123`) - После сканирования: - Если это награда — начисляется валюта, показывается уведомление. - Если это викторина — открывается страница этой викторины с возможностью сразу начать прохождение. - Логирование всех сканирований (дата, тип, ID пользователя, результат). #### 2.4.2. Сканирование вне приложения (через камеру телефона) - QR-коды должны содержать ссылку вида: `https://t.me/your_bot?startapp=reward_50` или `https://t.me/your_bot?startapp=quiz_123` - При открытии такой ссылки через камеру или другой сканер — открывается Telegram Mini App с параметром. - Приложение должно обработать параметр: - Если `reward_X` — начислить X валюты. - Если `quiz_Y` — открыть викторину с ID=Y. - Показать пользователю уведомление о результате (например: “+50 монет получено!” или “Викторина ‘Знаешь ли ты бренд?’ готова к прохождению!”). ### 2.5. 🔗 Глубокие ссылки (Deep Links) - Поддержка параметров `startapp=...` для: - Начисления валюты - Открытия викторины - Перехода в магазин - Перехода к конкретному призу - Все ссылки должны работать как из QR, так и из сообщений, постов, рекламы и т.п. --- ## 3. 🖥️ Технические требования ### 3.1. Платформа - Telegram Mini App (веб-приложение на React / Vue / Svelte / чистом JS — на выбор команды). - Работает внутри Telegram на iOS, Android, Desktop. - Адаптивный дизайн (мобильный first). ### 3.2. Интеграции - Telegram Web App SDK (для получения данных пользователя, закрытия приложения, отправки данных и т.п.) - Хранение данных: Firebase / Supabase / собственный бэкенд (уточнить). - Аутентификация: через Telegram User ID (никаких логинов/паролей). ### 3.3. QR-сканер - Использовать библиотеку типа `zxing-js/library` или `html5-qrcode` для встроенного сканирования. - Запрос разрешения на камеру. - Обработка ошибок (камера недоступна, QR не распознан и т.п.). ### 3.4. Безопасность - Все действия пользователя привязаны к его `Telegram User ID`. - Проверка на сервере при начислении валюты (чтобы нельзя было подделать запросы). - Валидация QR-данных на стороне сервера (если QR генерируется динамически). ### 3.5. Производительность - Быстрая загрузка приложения (< 2 сек). - Минимизация размера бандла. - Кэширование статики. - Lazy loading для изображений и неосновных экранов. --- ## 4. 🎨 UI/UX требования - Чистый, современный дизайн, адаптированный под Telegram. - Минимум анимаций, но с приятными микро-интеракциями. - Интуитивная навигация (вкладки: Викторины, Магазин, Профиль, Сканер). - Уведомления о начислениях и действиях (всплывающие тосты). - Темная/светлая тема — по системным настройкам пользователя. --- ## 5. 📊 Административная часть (опционально, но желательно) - Панель администратора (отдельная или встроенная) для: - Создания/редактирования викторин - Настройки наград - Генерации QR-кодов с наградами/викторинами - Просмотра статистики (пользователи, активность, сканирования, покупки) - Управления товарами в магазине --- ## 6. 📅 Этапы разработки (ориентировочно) | Этап | Описание | Срок | | ----------------------- | --------------------------------------------------- | -------- | | 1. Прототип и дизайн | Создание wireframe, дизайн-макетов, согласование | 3–5 дней | | 2. Ядро приложения | Настройка Telegram Mini App, авторизация, навигация | 3 дня | | 3. Викторины | Создание, прохождение, начисление валюты | 5 дней | | 4. QR-сканирование | Встроенное + обработка deep links | 4 дня | | 5. Магазин и валюта | Баланс, покупки, история | 4 дня | | 6. Админка (если нужно) | CRUD для контента | 5 дней | | 7. Тестирование и фиксы | QA, оптимизация, багфиксы | 3–5 дней | | 8. Деплой и запуск | Публикация, настройка бота, генерация QR | 2 дня | --- ## 7. ✅ Ожидаемый результат - Работающее Telegram Mini App, доступное по ссылке через бота. - Возможность проходить викторины и получать валюту. - Возможность сканировать QR-коды как внутри приложения, так и через камеру телефона — с начислением валюты или открытием викторины. - Магазин с обменом валюты на призы. - Адаптивный интерфейс, быстрая работа, интуитивная навигация. - Документация по генерации QR-кодов и deep links. --- ## 8. 📌 Дополнительно (уточнить заказчику) - Название валюты? - Будут ли викторины с таймером? - Можно ли повторно проходить викторины? С каким интервалом? - Типы вопросов: только один правильный ответ, или множественный выбор? - Как пользователь получает призы из магазина? (физически, цифровой код, купон и т.п.) - Нужна ли аналитика (Google Analytics, Яндекс.Метрика)? - Нужна ли панель администратора? Если да — какие права доступа? --- ## 9. 📬 Контакты и поддержка - После сдачи — техническая поддержка на 14–30 дней. - Возможность доработок по отдельному соглашению. --- ✅ **Готово к передаче команде разработки.** Если нужно — могу подготовить дизайн-макеты, структуру API, примеры QR-ссылок или спецификацию для бэкенда. --- # 🧩 ДОПОЛНЕННОЕ ТЕХНИЧЕСКОЕ ЗАДАНИЕ (v2.0) --- ## 🔁 Обновления по ответам заказчика | Пункт | Ответ | Влияние на ТЗ | |-------|-------|----------------| | 1. Название валюты | **Звезды** ✨ | Все упоминания “валюты” → “Звёзды”. UI: иконка звезды, анимация при начислении. | | 2. Таймер в викторинах | **Да, может быть** | Добавить в модель викторины поле `hasTimer: boolean`, `timerPerQuestion: number (сек)`. | | 3. Повторное прохождение | **Да, с интервалом** | Добавить в модель викторины: `canRepeat: boolean`, `repeatCooldownHours: number`. Хранить дату последнего прохождения у пользователя. | | 4. Типы вопросов | **Один или несколько ответов** | Вопросы имеют поле `type: "single" | "multiple"`. В UI — чекбоксы или радиокнопки. | | 5. Получение призов | **Физически + цифровые инструкции** | В модели приза — поле `deliveryType: "physical" | "digital"` + `instructions: string`. | | 6. Аналитика | **Не нужна** | Исключить GA/YM. Можно добавить внутреннюю аналитику в админку. | | 7. Админка | **Да, с ролями: Админ → Операторы** | Добавить систему ролей. Админ может управлять операторами и балансами. Оператор — только контент. | --- ## 🖼️ 1. ДИЗАЙН-СТРУКТУРА (Wireframe + Навигация) ### 📱 Основные экраны: #### 1. Главная (Викторины) - Шапка: аватарка пользователя, баланс ⭐ (например: “1250 ⭐”) - Список викторин (карточки): - Название - Превью-картинка - Награда (⭐) - Таймер (если есть) - Кнопка “Начать” / “Повторить через 3ч” / “Пройдено” - Кнопка “Сканировать QR” внизу или в шапке #### 2. Экран викторины (вопрос) - Прогресс: 3/10 - Таймер (если включен): обратный отсчет - Текст вопроса - Варианты ответов (радио / чекбоксы) - Кнопка “Далее” (активна после выбора) - Кнопка “Назад” (если не первый вопрос) #### 3. Результаты викторины - “Вы набрали 8/10!” - “+250 ⭐ начислено!” (анимация звезды) - Кнопка “В магазин” / “К викторинам” #### 4. Магазин - Список призов (карточки): - Название - Изображение - Цена в ⭐ - Кнопка “Купить” (если хватает звезд) / “Недостаточно ⭐” - При покупке — модалка с инструкцией получения приза #### 5. Профиль - Имя, ID, аватар - Баланс ⭐ - История: - Начисления (викторины, QR) - Покупки - Кнопка “Сканировать QR” #### 6. QR-сканер (встроенный) - Fullscreen камера - Оверлей с рамкой - Кнопка “Отмена” - При успешном сканировании — модалка с результатом #### 7. Админка (отдельный вход / скрытый URL) - Авторизация по Telegram ID (белый список админов/операторов) - Вкладки: - Управление викторинами (CRUD) - Управление призами (CRUD) - Управление пользователями (поиск, ручное начисление/списание ⭐ — только для админа) - Управление операторами (назначение/удаление — только для админа) - Статистика (количество прохождений, сканирований, покупок) --- ## 🌐 2. СПЕЦИФИКАЦИЯ API (если используется бэкенд) > Предполагаем, что бэкенд на Node.js / Python / Go, с REST API. ### 🧑‍💻 Авторизация - Все запросы — с `user_id` из Telegram WebApp initData (проверяется на бэкенде) ### 🎯 Викторины ``` GET /quizzes — список всех активных викторин GET /quizzes/{id} — детали викторины + вопросы POST /quizzes/{id}/submit — отправка ответов → возвращает результат + начисленные ⭐ GET /quizzes/{id}/can-repeat — проверка, можно ли повторить (возвращает { canRepeat: true, nextAvailableAt: timestamp }) ``` ### 🛍️ Магазин ``` GET /rewards — список призов POST /rewards/{id}/purchase — списание ⭐, создание записи о покупке GET /user/purchases — история покупок пользователя ``` ### ⭐ Баланс и транзакции ``` GET /user/balance — текущий баланс GET /user/transactions — история (сортировка по дате) POST /admin/grant-stars — (только админ) ручное начисление/списание (тело: { user_id, amount, reason }) ``` ### 📷 QR и Deep Links ``` POST /qr/validate — принимает payload (например, “reward:50” или “quiz:123”), возвращает действие + данные ``` ### 👨‍💼 Админка (требуется роль) ``` POST /admin/quizzes — создание викторины PUT /admin/quizzes/{id} — редактирование DELETE /admin/quizzes/{id} POST /admin/rewards — создание приза POST /admin/operators — назначение оператора (тело: { telegram_id, name }) DELETE /admin/operators/{id} GET /admin/analytics — статистика (кол-во пользователей, прохождений, сканирований, выданных ⭐ и т.п.) ``` --- ## 🔗 3. ПРИМЕРЫ QR-ССЫЛОК И DEEP LINKS Все ссылки ведут на одного Telegram-бота (например, `@MyQuizBot`). ### 🎁 Начисление звезд: ``` https://t.me/MyQuizBot?startapp=reward_50 https://t.me/MyQuizBot?startapp=reward_100 ``` ### 🧠 Открытие викторины: ``` https://t.me/MyQuizBot?startapp=quiz_123 https://t.me/MyQuizBot?startapp=quiz_456 ``` ### 🛒 Переход в магазин / к призу: ``` https://t.me/MyQuizBot?startapp=shop https://t.me/MyQuizBot?startapp=reward_789 // ID приза ``` > При открытии приложение парсит `startapp`, определяет тип и выполняет действие. --- ## 👮 4. СТРУКТУРА АДМИНКИ + РОЛИ ### 🧑‍💼 Роли: | Роль | Права | |------|-------| | **Администратор** | Полный доступ: CRUD викторин и призов, управление операторами, ручное изменение балансов пользователей, просмотр аналитики | | **Оператор** | Только CRUD викторин и призов. Без доступа к финансам и пользователям. | ### 🔐 Авторизация в админке: - Только по белому списку Telegram ID (хранится в БД или .env). - При открытии админки — проверка: если user.id есть в списке админов/операторов → показать соответствующий интерфейс. ### 📊 Аналитика в админке (внутренняя, без GA): - Графики: - Активные пользователи (день/неделя/месяц) - Количество прохождений викторин - Количество сканирований QR - Выдано ⭐ всего / потрачено в магазине - ТОП-3 популярных викторин / призов --- ## 🗃️ 5. СТРУКТУРА БАЗЫ ДАННЫХ (основные сущности) ### 👤 Пользователи (`users`) - `telegram_id` (PK) - `username` - `first_name`, `last_name` - `stars_balance` - `created_at` ### 📚 Викторины (`quizzes`) - `id` (PK) - `title` - `description` - `image_url` - `reward_stars` - `has_timer`: boolean - `timer_per_question`: int (сек) - `can_repeat`: boolean - `repeat_cooldown_hours`: int - `is_active`: boolean - `created_by` (operator_id) - `created_at` ### ❓ Вопросы (`questions`) - `id` - `quiz_id` - `text` - `type`: “single” | “multiple” - `options`: JSON [{id, text, is_correct}] - `order_index` ### 📊 Попытки прохождения (`quiz_attempts`) - `id` - `user_id` - `quiz_id` - `score` - `stars_earned` - `completed_at` - `answers`: JSON (лог выбранных вариантов) ### 🎁 Призы (`rewards`) - `id` - `title` - `description` - `image_url` - `price_stars` - `delivery_type`: “physical” | “digital” - `instructions`: text - `stock`: int (0 = бесконечно) - `is_active` - `created_by` - `created_at` ### 🛒 Покупки (`purchases`) - `id` - `user_id` - `reward_id` - `stars_spent` - `purchased_at` - `status`: “pending” | “delivered” | “cancelled” ### 📷 Сканирования QR (`qr_scans`) - `id` - `user_id` - `type`: “reward” | “quiz” | “shop” - `value`: “50”, “123”, etc. - `scanned_at` - `source`: “in_app” | “external” ### 👮 Админы и операторы (`admins`) - `telegram_id` (PK) - `role`: “admin” | “operator” - `name` - `added_by` (admin who added) - `added_at` Ниже — **детальное текстовое описание Figma-макетов** для вашего Telegram Mini App, которое вы (или дизайнер) сможете легко перенести в Figma. Я опишу **все экраны, компоненты, состояния, цвета, типографику и поведение** — как будто вы открываете готовый Figma-файл. --- # 🎨 FIGMA-МАКЕТЫ: Telegram Mini App “Звёздные Викторины” > 📱 Формат: Mobile (375x812 — iPhone 13/14), адаптивный под Telegram Web App > 🎨 Стиль: Telegram-совместимый, минималистичный, с акцентами на звёзды и геймификацию --- ## 🌈 Глобальные стили ### Цвета: | Назначение | HEX | Применение | |------------|-----|------------| | Primary (Звёзды) | `#FFD700` | Иконки валюты, кнопки, акценты | | Background | `#F5F5F5` (светлая) / `#1E1E1E` (тёмная) | Автоматически по системной теме | | Text Primary | `#000000` / `#FFFFFF` | Основной текст | | Text Secondary | `#757575` / `#B0B0B0` | Подписи, описания | | Success | `#4CAF50` | Успешные действия | | Error | `#F44336` | Ошибки, недостаточно звёзд | | Border / Divider | `#E0E0E0` / `#333333` | Разделители | ### Типографика: - **Основной шрифт**: `SF Pro Display` (iOS) / `Roboto` (Android) — системные - Заголовки: SemiBold 20–24px - Текст: Regular 16px - Мелкий текст: Regular 12–14px ### Иконки: - Использовать [Telegram UI Icons](https://core.telegram.org/bots/webapps#icons) или [Material Icons](https://fonts.google.com/icons) - Кастомные иконки: звезда ⭐, QR-сканер, таймер, магазин, профиль --- ## 📱 ЭКРАНЫ --- ### 🖼️ ЭКРАН 1: Главная — Список викторин **Статус-бар**: - Telegram-стиль: имя бота + кнопка “Назад” (если не корень) **Шапка**: - Аватар пользователя (слева, круглый, 32x32) - Приветствие: “Привет, [Имя]!” - Баланс: “1250 ⭐” — большая жёлтая звезда рядом, крупный шрифт 20px SemiBold **Кнопка “Сканировать QR”**: - Фиксированная внизу экрана - Иконка сканера + текст “Сканировать QR” - Цвет: Primary (жёлтый), закруглённые углы **Список карточек викторин**: Каждая карточка: - Обложка (16:9, закруглённые углы) - Наложение: градиент тёмный → прозрачный снизу - Название (белый, SemiBold, поверх градиента) - Награда: “+250 ⭐” (жёлтая звезда + текст, справа внизу) - Таймер (если есть): иконка часов + “30 сек/вопрос” (серый текст) - Статус-бейдж: - “Начать” — зелёная кнопка - “Повторить через 3ч” — серая кнопка с иконкой часов - “Пройдено ✅” — зелёная галочка **Поведение**: - При нажатии “Начать” → переход на экран первого вопроса - При нажатии “Повторить через...” → тост: “Доступно через 3 часа” --- ### 🖼️ ЭКРАН 2: Вопрос викторины **Прогресс-бар**: - Сверху: “Вопрос 3 из 10” + ProgressBar (10 сегментов, текущий — жёлтый) **Таймер (если включен)**: - Круговой таймер вокруг номера вопроса или отдельно сверху - Обратный отсчёт: “00:25” — крупно, жёлтым, если <10 сек — мигает красным **Текст вопроса**: - Центрирован, крупный шрифт 18px SemiBold, отступы по бокам **Варианты ответов**: - Кнопки-карточки (по 1 на строку) - Одиночный выбор: радиокнопка слева + текст - Множественный: чекбокс + текст - При выборе — подсветка рамки Primary-цветом - Неактивные — серые **Кнопка “Далее”**: - Снизу, активна только если выбран хотя бы один ответ - При нажатии — переход к следующему вопросу / результатам **Кнопка “Назад”**: - Только если вопрос не первый — в шапке слева --- ### 🖼️ ЭКРАН 3: Результаты викторины **Фон**: - Градиентный (жёлтый → оранжевый) или анимированная звёздная анимация **Текст**: - “🎉 Поздравляем!” — крупно, 28px - “Вы набрали 8 из 10!” — 20px SemiBold - “+250 ⭐ начислено!” — с анимацией “всплывающей звезды” (можно сделать через CSS/JS позже) **Кнопки**: - “К викторинам” — Outline-стиль - “В магазин” — Solid Primary (жёлтая) **Анимация**: - При открытии — звёзды “падают” сверху (визуальный эффект праздника) --- ### 🖼️ ЭКРАН 4: Магазин призов **Шапка**: - “Магазин призов” + иконка 🛒 **Сетка карточек (2 колонки)**: Каждая карточка: - Изображение товара (1:1, закруглённые углы) - Название (SemiBold 16px) - Цена: “500 ⭐” (жёлтая звезда + крупный текст) - Статус: “В наличии” / “Закончился” (серый/красный бейдж) - Кнопка: “Купить” (активна, Primary) / “Недостаточно ⭐” (серая, неактивна) **При нажатии “Купить”**: → Открывается модалка: > **Подтверждение покупки** > “Вы уверены, что хотите купить ‘Футболку бренда’ за 500 ⭐?” > Кнопки: “Отмена” / “Купить” (красная) > → При подтверждении: списание ⭐, переход на экран инструкции --- ### 🖼️ ЭКРАН 5: Инструкция получения приза **Заголовок**: “Как получить приз?” **Текст**: - “Приходите в наш офис по адресу: ул. Ленина, 10 с 10:00 до 18:00 и назовите код: **STAR-7B2F**” - (или для цифрового: “Ваш промокод: **DIGI-9X8A**. Используйте его на сайте example.com”) **Кнопка**: “Скопировать код” + иконка буфера обмена **Кнопка**: “Назад в магазин” --- ### 🖼️ ЭКРАН 6: Профиль **Шапка**: - Большой аватар (80x80) - Имя + username - “ID: 123456789” **Блок “Баланс”**: - Крупно: “1250 ⭐” - Кнопка “История” справа **История (вкладка)**: - Вкладки: “Начисления” / “Покупки” - Список: - “Викторина ‘Бренды’ — +250 ⭐ — 12 мая 14:30” - “QR-сканирование — +50 ⭐ — 12 мая 10:15” - “Покупка: Футболка — -500 ⭐ — 11 мая 16:00” **Кнопка “Сканировать QR”** — внизу --- ### 🖼️ ЭКРАН 7: QR-сканер (встроенный) **Фон**: - Полноэкранный поток с камеры (черный, если камера не готова) **Оверлей**: - Центральная рамка (квадрат, 240x240, с анимированными углами) - Подсказка: “Наведите на QR-код” - Кнопка “Отмена” — в шапке **При сканировании**: → Звук + вибрация → переход на модалку: > **Успех!** > “+50 ⭐ получено!” > (или “Открыта викторина ‘Знаешь ли ты бренд?’ — нажмите ‘Начать’”) > Кнопки: “ОК” / “Начать” --- ### 🖼️ ЭКРАН 8: Админка — Вход (скрытый) **Защищённый URL**: `/admin` — открывается только если Telegram ID в белом списке **Экран входа**: - Логотип приложения - “Добро пожаловать, [Имя]!” - “Ваша роль: Администратор / Оператор” - Кнопка “Перейти в панель” --- ### 🖼️ ЭКРАН 9: Админка — Главная **Меню (слева или вкладки сверху)**: - Викторины - Призы - Пользователи (только админ) - Операторы (только админ) - Аналитика **Главная статистика (дашборд)**: - 4 карточки: - Пользователей: 1 250 - Пройдено викторин: 3 842 - Выдано ⭐: 250 000 - Куплено призов: 1 024 **Графики**: - Линейный график: активность по дням (прохождения, сканирования, покупки) --- ### 🖼️ ЭКРАН 10: Админка — Создание викторины (форма) **Поля**: - Название (текстовое поле) - Описание (textarea) - Обложка (загрузка изображения) - Награда (число, ⭐) - Таймер: чекбокс “Включить таймер” → поле “сек/вопрос” - Повтор: чекбокс “Разрешить повтор” → поле “часов до повтора” - Вопросы (динамический список — кнопка “+ Добавить вопрос”) **Вопрос**: - Текст вопроса - Тип: селект “Один ответ” / “Несколько ответов” - Варианты: текст + чекбокс “Правильный” - Кнопка “Удалить вопрос” **Кнопка**: “Сохранить викторину” --- ## 🧩 Компоненты для переиспользования (в Figma — Components) 1. **Карточка викторины** 2. **Карточка приза** 3. **Кнопка Primary / Secondary / Disabled** 4. **Модальное окно** 5. **Строка истории транзакции** 6. **Прогресс-бар вопросов** 7. **Таймер (круговой и линейный)** 8. **Бейдж статуса (Пройдено / Недоступно / В наличии)** --- ## 📲 Адаптивность - Все экраны должны масштабироваться под разные размеры экранов (от 320px до 430px шириной) - Отступы: 16px по бокам, 12–24px между элементами - Шрифты: не менее 14px для читаемости --- ## 🎁 Бонус: Анимации (опционально, для delight) - При начислении ⭐ — анимация “+50 ⭐” всплывает и исчезает - При открытии викторины — плавный переход - При сканировании QR — эффект “затухания” + звук