8 мин

Как создать приложение для билетов и чек-ина на входе

Пошаговый план создания приложения для продажи билетов и чек-ина: роли, флоу, QR-коды, офлайн-сканирование, безопасность, интеграции и тестирование.

Как создать приложение для билетов и чек-ина на входе

Цели приложения и сценарии использования

Приложение для билетов и чек-ина решает одну практическую задачу: быстро и точно провести человека от «получил билет» до «прошёл на площадку», а организатору — дать понятную картину продаж и фактической посещаемости.

Какие задачи закрывает система

На уровне продукта чаще всего нужны четыре блока:

  • Продажа или выдача билетов: платные (с оплатой) и бесплатные (по регистрации/приглашению), промокоды, лимиты.
  • Регистрация участников: сбор данных (например, имя, телефон, компания), согласия, категории (VIP, пресса, персонал).
  • Контроль доступа: проверка QR-кода, защита от повторного прохода, ручной поиск по имени/телефону, журнал действий.
  • Статистика: сколько продано, сколько пришло, пиковые часы, конверсия «купил → пришёл», отчёты для команды и площадки.

Сценарии для разных типов мероприятий

Подход должен одинаково хорошо работать и для конференций (много категорий и бейджи), и для концертов (максимальная скорость прохода), и для клубных встреч (часто есть списки гостей), и для бесплатных событий (важнее учёт и лимиты, чем оплата).

Роли и кто что делает

  • Посетитель: покупает/получает билет, хранит QR, при необходимости обновляет данные.
  • Организатор: настраивает событие, тарифы/квоты, тексты уведомлений, выгрузки.
  • Контролёр на входе: сканирует, видит статус, решает спорные случаи.
  • Администратор: управляет правами, устройствами, доступом к данным и аудитом.

Устройства на входе

Чаще всего используются смартфоны и планшеты с камерой; иногда — отдельные сканеры (если поток большой или нужен более надёжный считыватель). Важно заранее определить, сколько устройств будет работать параллельно и кто отвечает за зарядку и резерв.

Критерии успеха

Оцените продукт по измеримым метрикам: скорость прохода (например, среднее время на одного гостя), процент ошибок (ложные отказы/двойные проходы) и устойчивость при плохой связи (возможность продолжать чек-ин при нестабильной сети с последующей синхронизацией).

Архитектура продукта: участник, сканер и админ-панель

Удобнее всего думать о системе билетов как о трёх интерфейсах под разные задачи: участник, контролёр на входе и организатор. Их можно собрать в один продукт или развести на отдельные приложения/модули — выбор влияет на сроки, поддержку и безопасность.

Если вы хотите быстрее проверить гипотезу и собрать рабочий MVP без тяжёлого классического цикла разработки, часть команд в РФ сейчас собирают такие системы на vibe-coding платформах вроде TakProsto.AI: вы описываете сценарии и роли в чате, а платформа помогает собрать веб‑админку (React), бэкенд (Go + PostgreSQL) и мобильные клиенты (Flutter) с возможностью экспорта исходников и отката по снапшотам.

Приложение для участников

Здесь важны простота и доверие. Минимальный набор: покупка билета, «кошелёк» с билетами (QR и детали заказа), статусы (действителен/использован/возврат), уведомления (покупка, напоминание, изменения по событию) и быстрый доступ к помощи на месте (FAQ, контакты, карта входов).

Частая ошибка — перегрузить участника настройками. Пусть всё критичное будет «в один тап»: открыть билет, показать QR, найти поддержку.

Приложение для контролёров (сканер)

Сканер — рабочий инструмент, а не витрина. Нужны: максимально быстрый скан, крупная индикация результата (пускать/не пускать), офлайн-режим, журнал действий (кто, когда, какой билет проверил). Полезны фильтры по входам/зонам и режим «ручного поиска» по номеру билета на случай проблем с камерой.

Админ-панель организатора (веб)

В веб‑панели создают события и типы билетов, управляют продажами и промокодами, настраивают команды контролёров и права доступа, смотрят отчёты и выгрузки. Важно иметь понятный аудит действий и статус синхронизации устройств на площадке.

Один продукт или модульная система

Один «суперапп» проще развернуть и сопровождать, но сложнее разделять права и снижать риск ошибок на входе. Модульный подход (отдельный сканер + отдельная админка) обычно безопаснее и удобнее для операций на площадке.

MVP: что обязательно, а что подождёт

Для старта достаточно: кошелька билетов у участника, сканера с офлайном и базовой админки (события, продажи, список заказов, права, простые отчёты). Можно отложить: сложные схемы залов, продвинутую сегментацию уведомлений, автоматические интеграции с большим числом внешних систем и расширенную аналитику (оставив экспорт в CSV из /reports).

Модель данных: события, билеты, участники и статусы

Хорошая модель данных — способ заранее договориться, «что такое событие» и «что такое билет», чтобы покупки, проход на входе и отчёты работали без ручных правок. Ниже — практичная структура, которую удобно поддерживать и масштабировать.

Структура события

Событие лучше хранить не одним «постом», а набором сущностей:

  • Событие: название, описание, организатор, правила посещения (в виде текста), часовой пояс.
  • Даты/сессии: один день фестиваля, отдельный концерт или сеанс. Это упрощает билеты «на конкретную дату».
  • Локация: адрес, схема проезда.
  • Залы/секции: например, «Партер», «Балкон», «Сектор A». Если мест нет, секции можно использовать для потоков.
  • Таймслоты/окна входа (опционально): интервалы для распределения очереди (например, 18:00–18:30).

Такой разрез поддерживает и простые события «на один вечер», и многодневные форматы с несколькими площадками.

Типы билетов

Обычно выделяют:

  • Обычный (general admission)
  • VIP
  • Льготный (с возможной проверкой основания на входе)
  • По приглашению (промо/комплимент)
  • Абонемент (несколько дней или несколько проходов)

Технически «тип билета» — это продукт с ценой, правилами доступа и ограничениями. А конкретный билет — экземпляр, привязанный к заказу и участнику.

Ограничения и правила доступа

Важно хранить ограничения отдельно от текста на лендинге — чтобы сканер мог проверять их автоматически:

  • Лимит продаж (общий и по каждому типу)
  • Привязка к секции/месту (ряд/место или просто сектор)
  • Проход по дням (для абонемента: какие даты активны)
  • Окно входа (таймслот или допустимый диапазон времени)
  • Количество проходов (1 раз, 2 раза, безлимит в рамках дня)

Данные участника: минимум, который работает

Чем короче форма, тем выше конверсия. Базовый набор: имя, телефон или email, согласие на обработку данных. Дополнительные поля (дата рождения, компания, документ) включайте только если они реально нужны для льготы, бейджа или требований площадки — и делайте их условными по типу билета.

Статусы билетов (включая возвраты/обмены)

Чтобы предусмотреть возвраты/обмены и при этом не «зашить» бизнес-правила, удобно закладывать нейтральные статусы:

  • СозданОплаченВыдан (QR активен)
  • Аннулирован (например, по запросу поддержки)
  • Возврат инициированВозвращён (денежная часть вне модели — фиксируем факт)
  • Обмен инициированОбменён (старый билет закрыт, новый активен)
  • Использован (первый проход) / Частично использован (для абонемента)

Такие статусы дают прозрачные отчёты и предсказуемую логику для сканера, даже если процессы со временем меняются.

Пользовательский путь участника: от покупки до входа

Путь участника должен быть предсказуемым: минимум шагов, максимум уверенности, что «билет точно есть, вход пройду». Ниже — логика экранов и сообщений, которые помогают не потеряться до начала события.

1) Карточка события и выбор билета

В карточке события важно сразу показать ключевое: дата и время, адрес (с возможностью открыть маршрут), краткие правила входа и список типов билетов.

Для выбора билета лучше использовать простую таблицу: название тарифа, цена, что включено, условия возврата/обмена и ограничения (например, «вход до 20:00», «18+», «места свободные/нумерованные»). Если есть промокод — ввод на этом же экране, чтобы участник видел итоговую стоимость до оплаты.

2) Оплата и получение билета

После оплаты участник должен получить подтверждение сразу в трёх местах:

  • в приложении (раздел «Мои билеты» с текущим статусом);
  • на email (квитанция/подтверждение, без лишнего маркетинга);
  • опционально — добавление в «кошелёк билетов» устройства.

Ключевой момент — явный статус: «Оплачен», «Ожидает подтверждения», «Возврат оформлен». Это снижает нагрузку на поддержку в день события.

3) QR/штрихкод: где показывать и как защитить

На билете QR/штрихкод должен открываться одним нажатием и быть доступен офлайн. Чтобы снизить риск случайного скриншота и пересылки, можно:

  • показывать код только на отдельном экране с предупреждением «не делитесь билетом»;
  • добавлять динамический элемент (например, меняющуюся подпись/время обновления) и скрывать код до подтверждения по биометрии/пин-коду;
  • отображать имя участника и последние цифры заказа рядом с кодом, чтобы контролёру было проще заметить несоответствие.

4) Напоминания перед событием

Участнику полезны 2–3 уведомления: за день, за пару часов и при подходе ко времени входа. Внутри — адрес, время начала/допуска, правила (документы, дресс-код, запреты), подсказка «Откройте билет заранее».

5) Поддержка без лишних обещаний

В «Моём билете» разместите короткий FAQ (как найти билет, что делать при ошибке оплаты, как переоформить). Рядом — контакт организатора/службы поддержки с рабочими часами и ожидаемым временем ответа. Это лучше, чем общая форма «мы скоро ответим», особенно в день мероприятия.

Пользовательский путь контролёра: сканирование и проверка

Контролёр — человек, от которого зависит скорость очереди и впечатление гостей. Поэтому его путь должен быть предельно коротким: открыть сканер → навести камеру → получить результат и понятную инструкцию за секунды.

Экран сканирования: «один скан — один ответ»

Сканер запускается сразу в режиме камеры, без лишних экранов. Требование по скорости простое: один скан — один результат за 1–2 секунды, даже при слабом интернете.

После считывания QR-кода приложение показывает крупный статус и следующее действие:

  • Валидный билет — зелёный экран, имя/тип билета/зона, кнопка «Пропустить».
  • Уже использован — жёлтый/красный экран, когда и на каком входе был чек-ин (если доступно), рекомендация «Позвать старшего».
  • Неверный (не найден/повреждён код) — красный экран, предложение перейти к ручной проверке.
  • Отменён/возврат — красный экран с причиной, запрет на вход.
  • Не тот день/сеанс/зона — предупреждение с указанием, куда можно пройти или что билет на другое время.

Важно, чтобы контролёр не «расшифровывал» сообщение: статус должен читаться с первого взгляда и сопровождаться короткой подсказкой.

Запасной вариант: ручной поиск

На случай треснувшего экрана, распечатки плохого качества или забытого телефона нужен ручной поиск по:

  • имени и фамилии,
  • номеру заказа,
  • телефону/email (если вы храните эти данные).

Поиск должен вести на карточку участника/заказа с теми же статусами, что и в сканере.

Разделение потоков и ролей

Если входов несколько, в приложении задаются точка входа и права доступа: разные типы билетов, отдельные зоны (VIP/балкон), доступ персоналу. Тогда сканер проверяет билет «в контексте» — и реже требует разбирательств на месте.

Журнал действий и ответственность

Каждое действие фиксируется в журнале: кто сканировал, когда, какой был результат и на каком входе. Это помогает разбирать спорные случаи, находить узкие места на входе и дисциплинирует команду без лишнего контроля.

QR-коды и проверка подлинности билетов

Оставьте код у себя
Заберите полный исходный код и продолжайте разработку у себя в команде.

QR‑код — это лишь «упаковка» данных билета. Настоящая защита строится вокруг того, что именно зашито в код и как система принимает решение «пускать/не пускать».

Формат кода: что хранить внутри

Практичный вариант — QR содержит короткий токен (например, 16–32 символа), а не персональные данные. Токен указывает на билет на сервере и минимизирует риски утечки.

Чтобы усложнить подделку, добавляют подпись (HMAC/подпись приватным ключом) и срок действия:

  • Короткий токен: быстрый скан, компактный QR.
  • Подпись: проверяется приложением сканера; без знания ключа сгенерировать валидный QR нельзя.
  • Срок действия: полезно для временных проходов (например, «вход до 19:00») и уменьшения ценности украденного скрина.

Одноразовость и защита от копирования

Ключевое правило: билет должен иметь статус и «жить» в системе как сущность. При первом успешном проходе он помечается как использованный.

Есть два уровня проверок:

  • Серверная проверка: самый надёжный вариант — сканер отправляет токен, получает ответ (валиден/использован/возврат/не тот вход).
  • Локальные правила: в офлайне сканер проверяет подпись, срок и наличие токена в локальном списке разрешённых билетов.

Как выдавать коды

Обычно QR выдаётся:

  • после покупки (email/пуш + отображение в приложении участника),
  • после регистрации (для бесплатных событий),
  • по приглашению (уникальная ссылка, которая выпускает билет и токен при активации).

Важно: один билет — один токен. При возврате/замене токен должен инвалидироваться.

Плохой интернет: кэш и очереди

Для площадок с нестабильной связью сканер заранее загружает кэш «разрешённых билетов» на конкретное событие (или по зонам доступа). Все сканы пишутся в локальную очередь событий и синхронизируются при появлении сети.

Конфликты: два устройства просканировали один билет

Типичный кейс — дублирование: один и тот же QR показали дважды или два контролёра просканировали почти одновременно.

Решение: у каждого скана есть временная метка и ID устройства. При синхронизации сервер принимает первое событие как «успешное», остальные помечает как «дубликат» и возвращает причину. В интерфейсе сканера это должно отображаться явно: кто, когда и на каком входе уже пропустил билет.

Офлайн-режим и синхронизация на площадке

Офлайн-режим в сканере — не «приятная опция», а страховка от реальности. На входных группах часто нестабильный интернет: подвальные клубы, стадионы, павильоны с экранирующими конструкциями, а также перегруженная сеть, когда тысячи людей одновременно пытаются подключиться.

Почему офлайн критичен

Если проверка билета зависит от сервера, любой обрыв связи превращает очередь в конфликт. Офлайн-сканирование позволяет продолжать вход даже при нулевом интернете, а синхронизация «догоняет» позже.

Что хранить локально в сканере

Локальные данные должны быть достаточными для быстрой и безопасной проверки, но не избыточными.

Минимальный набор:

  • список валидных билетов/пропусков для конкретного события (лучше в виде компактного справочника: идентификатор + статус + зона/сеанс);
  • ключи проверки подписи QR (публичные ключи) и параметры валидации (срок действия, разрешённые зоны);
  • настройки точки входа: какой вход/турникет, какие типы билетов пускать, режим «один вход» или «многократный»;
  • журнал сканирований (очередь событий), который можно выгрузить и синхронизировать.

Персональные данные стоит минимизировать: если для контроля достаточно статуса билета, не нужно хранить ФИО/телефон. Это упрощает комплаенс и снижает последствия потери устройства.

Как синхронизировать сканы с сервером

Рабочая схема — отправлять на сервер не «изменения статуса билета», а события сканирования: кто/где/когда/какой результат. Сервер уже применяет правила и собирает аналитику.

Практические правила синхронизации:

  • отправка при появлении сети автоматически, в фоне, малыми пакетами;
  • обязательные уникальные идентификаторы событий, чтобы сервер мог безопасно принимать повторы;
  • при конфликте (например, тот же билет уже отмечен на другом входе) сервер возвращает итоговый статус, а устройство обновляет локальную базу.

Ограничения офлайна: о чём предупредить организатора

Офлайн всегда несёт риски дублей: если два сканера без связи проверяют один и тот же билет, оба могут «пустить». Снизить риск помогают:

  • ограничение по времени офлайн-работы (например, 30–60 минут без обновления);
  • предварительная раздача билетов по входам/зонам (каждый сканер видит только свою квоту);
  • лимит объёма локальной базы (особенно для массовых мероприятий) и политика обновления по частям.

План восстановления на площадке

Чтобы не сорвать вход, нужен простой аварийный план:

  • резервная точка доступа (модем/роутер) и инструкция для персонала;
  • возможность экспортировать локальный журнал сканирований (например, файл) для последующей загрузки в админ-панель;
  • быстрый «перевод» входа на другое устройство: логин по QR/коду, восстановление настроек входа и загрузка актуальной базы билетов.

Хороший офлайн-режим незаметен, пока всё работает, и спасает мероприятие, когда связь внезапно исчезает.

Интеграции: платежи, уведомления и экспорт данных

Данные билетов без хаоса
Опишите сущности и статусы, и TakProsto подготовит схему Go + PostgreSQL.

Интеграции превращают «приложение для мероприятий» в рабочий инструмент: деньги доходят организатору, участник вовремя получает билет, а команда — понятные отчёты после события.

Платежи: провайдер, статусы и вебхуки

Обычно подключают платёжного провайдера (банковский эквайринг/кошелёк) и строят процесс вокруг статусов платежа: создан, в обработке, успешен, неуспешен, возврат.

Ключевой элемент — вебхуки (уведомления от провайдера на ваш сервер). Именно вебхук должен считаться «истиной»: пользователь мог закрыть приложение, связь могла прерваться, но вебхук всё равно подтвердит оплату и позволит автоматически:

  • выдать электронный билет QR;
  • отправить чек/квитанцию (если применимо к вашей схеме продаж);
  • зафиксировать комиссию/сборы и валюту;
  • обработать возвраты и частичные возвраты.

Важно заранее продумать идемпотентность: один и тот же вебхук может прийти дважды — система не должна выдать два билета.

Уведомления: email/SMS/push и шаблоны

Уведомления лучше планировать как цепочку, а не разрозненные сообщения. Типовые этапы:

  • После покупки: подтверждение оплаты + билет + правила входа (время, адрес, что показать на входе).
  • За день/час до события: напоминание и быстрый доступ к QR.
  • После чек-ина (опционально): «вход подтверждён» — полезно для спорных ситуаций.

Шаблоны держите в админ-панели: организатор меняет текст, но переменные (имя, событие, QR-ссылка, номер заказа) подставляются автоматически.

Экспорт и API для организаторов

Организаторам почти всегда нужен CSV-экспорт: продажи, список участников, статусы чек-ина, промокоды, возвраты. Для продвинутых — API, чтобы отправлять данные в CRM/таблицы/BI-аналитику без ручной выгрузки.

Импорт баз: списки приглашённых, квоты, промокоды

Полезно поддержать импорт:

  • «white list» приглашённых (ФИО/телефон/email) для бесплатного входа;
  • партнёрские квоты (сколько билетов доступно партнёру, отчёт по использованию);
  • промокоды с правилами: скидка/фикс. цена, лимит, даты, применимость к типам билетов.

Если вы сравниваете уровни функций и интеграций, удобно вынести детали на /pricing, а подборки кейсов и разборы ошибок — в /blog.

Безопасность и персональные данные

Безопасность в билетном приложении — это не только «не дать пройти без билета», но и аккуратная работа с данными людей. Хорошая новость: для чек-ина обычно не нужен широкий профиль пользователя, и это упрощает соблюдение требований.

Минимизация и структура данных

Собирайте только то, что реально нужно для входа и отчётов: идентификатор билета, статус (действителен/использован/возврат), событие и зона входа. Персональные данные (ФИО, телефон, email) подключайте опционально — например, только если нужны именные билеты или отправка уведомлений.

Отдельно продумайте сроки хранения: операционные данные для события (например, списки входа) можно хранить ограниченное время, а затем агрегировать в статистику без привязки к личности.

Права доступа, роли и аудит

Разделите роли как минимум на: организатор (админ), контролёр (сканер) и поддержка. Ограничивайте доступ по событиям и даже по точкам входа: один контролёр видит только «свои» мероприятия и турникеты.

Добавьте журнал действий: кто и когда выполнял чек-ин, отменял проход, менял настройки, делал экспорт. Это помогает разбирать спорные ситуации и повышает дисциплину.

Защита от подделки билетов

QR-код должен быть не просто номером билета. Используйте подпись (например, HMAC/EdDSA) так, чтобы приложение сканера могло проверить подлинность без обращения к серверу (важно для офлайна).

Поддержите ротацию ключей: новые билеты подписываются свежим ключом, старые остаются проверяемыми в течение заданного периода. На API добавьте rate limiting и базовую защиту от перебора кодов.

Соответствие требованиям и управление жизненным циклом

Подготовьте понятную политику конфиденциальности, опишите цели обработки, сроки хранения, порядок удаления и обращений пользователей. Реализуйте удаление/анонимизацию по запросу и автоматическое удаление после завершения периода хранения.

Антифрод: покупки и «прокси-сканы»

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

Для чек-ина следите за аномалиями: слишком быстрые сканы одним контролёром, попытки повторного прохода, сканы билетов «в разных входах одновременно». Такие события отправляйте на ручную проверку в админ-панели и ограничивайте риск автоматическими правилами.

Тестирование и пилотный запуск

Тестирование системы билетов и чек-ина стоит планировать как отдельный мини‑проект: здесь важны не только «правильные экраны», но и скорость, устойчивость к сбоям и поведение в нестандартных ситуациях. Ошибка на входе превращается в очередь за минуты.

Скорость сканирования

Проведите замеры на нескольких типичных устройствах контролёров (разные модели, «средние» камеры) и при разном освещении: дневной свет, полумрак, прожекторы, мерцание. Фиксируйте метрики: среднее время от наведения до результата, долю нераспознанных QR, влияние защитных стёкол и чехлов.

Нагрузочные сценарии

Нужны два вида нагрузочных тестов:

  1. Пики продаж — одновременные покупки, выдача QR, отправка уведомлений.

  2. Пики на входе — параллельная работа нескольких сканеров в одной зоне.

Проверяйте, не «задумывается» ли сервер, не растёт ли время ответа, корректно ли обрабатываются одновременные попытки пройти по одному билету.

Офлайн и синхронизация

Смоделируйте реальность: авиарежим, пропадающая сеть, переключение между Wi‑Fi и LTE. Важно проверить, что сканер:

  • продолжает верификацию по локальным данным;
  • корректно помечает события для последующей отправки;
  • после восстановления связи синхронизируется без потерь и дублей.

Ошибки и спорные кейсы

Отдельно прогоните сценарии: дубли прохода, возврат/отмена, замена билета, неверная зона, ручная проверка по фамилии. Результат должен быть однозначным для контролёра: что делать дальше и кого звать.

Пилотное мероприятие

Пилот запускайте на небольшом событии с реальной аудиторией. Перед стартом — чек‑лист: актуальные списки, тестовый проход, запасные устройства/пауэрбанки, инструкции для персонала, контакты ответственных.

На площадке нужен план дежурства: кто принимает решения по спорным проходам, кто следит за связью и синхронизацией, кто собирает обратную связь. После пилота соберите отчёт: узкие места, причины задержек, список улучшений и приоритеты для следующего релиза.

Аналитика: продажи, посещаемость и эффективность чек-ина

Соберите MVP чек-ина в чате
Опишите роли и сценарии, а TakProsto соберет веб, бэкенд и мобильный сканер.

Аналитика в приложении для билетов — это не «красивые графики», а инструмент управления: где теряются продажи, хватает ли персонала на входе, какие ошибки сканирования повторяются и как меняется посещаемость по времени. Метрики лучше продумать заранее, чтобы данные собирались автоматически и без ручных отчётов после мероприятия.

Метрики продаж: что происходит до входа

Организатору критично видеть воронку покупки: просмотр → выбор билета → оформление → оплата. Полезный минимум:

  • Конверсия по шагам (в том числе по каналам и промокодам): откуда приходят покупатели и где «падают».
  • Брошенные корзины: доля и динамика, а также причины (ошибка оплаты, таймаут, нет мест нужной категории).
  • Промокоды: использование, средний чек, выручка, эффект на конверсию (например, промокод увеличил продажи, но снизил маржу).

Отдельно стоит выделять продажи по типам билетов (обычный/VIP/льготный), возвраты и апгрейды — это помогает прогнозировать нагрузку на входы и рассадку.

Метрики входа: скорость и качество чек-ина

На площадке нужны показатели, которые быстро отвечают на вопрос «успеваем ли мы»:

  • Среднее время сканирования (и распределение: медиана/95-й перцентиль) — чтобы понять, есть ли узкие места.
  • Процент отказов (не пропущено) и причины ошибок: уже использован, не найден, просрочен, неверный формат QR, нет синхронизации, билет другого события.
  • Пропускная способность по каждому входу/сканеру: сколько людей в минуту/час реально проходит.

Если ошибки типовые, их стоит выводить контролёру понятным текстом и собирать статистику — это ускоряет обучение персонала и уменьшает очередь.

Отчёты для организатора: посещаемость в разрезах

После мероприятия важны отчёты, которые помогают делать следующие события лучше:

  • Посещаемость по часам (пики и провалы),
  • по входам (какие точки перегружены),
  • по типам билетов (кто реально пришёл),
  • доля пришедших от проданных (no-show).

Эти отчёты удобно выгружать в CSV/XLSX и смотреть вместе с финансовыми данными.

Оперативный мониторинг: «что происходит сейчас»

В админ-панели нужен дашборд реального времени: продано/вошло, текущий темп входа, активные сканеры, очередь по входам (хотя бы косвенно — по задержкам сканов). Такой экран полезно держать открытым у руководителя смены.

Как улучшать продукт по данным и отзывам персонала

Добавьте быстрый сбор обратной связи от контролёров: кнопка «сообщить проблему» с категориями (связь, камера, подсветка, конфликт с гостем) и коротким комментарием. Совмещая это с метриками ошибок и временем скана, вы получите понятный список улучшений — от подсказок в интерфейсе до изменений в логике проверки билетов.

План разработки: MVP, сроки и приоритеты

Хороший чек-ин строится не вокруг «всех функций сразу», а вокруг минимального набора, который выдержит реальное мероприятие: очередь, плохую связь, человеческий фактор и необходимость быстро получить отчёт. Поэтому план лучше начинать с MVP и заранее расписать, что пойдёт во второй и третий релизы.

MVP за 4–8 недель: что обязательно

Для первой версии достаточно функциональности, которая закрывает полный цикл «купил билет → пришёл → прошёл контроль»:

  • базовый билет и его статус (активен/использован/аннулирован);
  • QR-код для билета и проверка на входе;
  • приложение-сканер для контролёра (проверка + фиксация результата);
  • список событий (чтобы контролёр не сканировал «не тот» QR);
  • простой отчёт по проходам (сколько вошло, сколько отклонено и почему).

Срок 4–8 недель реалистичен, если не усложнять правила доступа (места, таймслоты, сложные категории) и не пытаться сразу покрыть все интеграции.

План релизов: что добавлять дальше

После MVP логично нарастить возможности, которые чаще всего просят организаторы:

  • места и сектора (контроль по зоне, валидация «не в тот вход»);
  • таймслоты (окна входа, ограничение по времени);
  • промокоды и скидки;
  • мерч и доп. позиции к заказу;
  • бейджи и печать/экспорт для регистрации на стойке.

Важно: каждую функцию планировать вместе с изменениями в админ-панели и отчётах, иначе появится «невидимая» работа, которая съедает сроки.

Команда и роли

Минимальный состав, чтобы уложиться в сроки и не провалить качество:

  • продакт/PM: сценарии, приоритеты, приёмка;
  • дизайнер: быстрые потоки участника и контролёра;
  • мобильная разработка (1–2 человека): сканер + участник;
  • бэкенд: билеты, статусы, безопасность, синхронизация;
  • QA: проверки на реальных устройствах, стресс-тесты чек-ина.

Технологии без перегруза

Кроссплатформа подходит, если нужно быстрее выпустить две платформы и интерфейсы не перегружены. Нативная разработка чаще оправдана, когда критичны скорость сканирования, работа камеры на разных устройствах и нестандартные требования площадки. Практичное правило: если сканер — ключевой риск, уделите ему максимум внимания независимо от стека.

Риски и статьи бюджета, о которых забывают

Помимо разработки заложите:

  • поддержку на мероприятии (дежурный инженер/чат);
  • устройства для контролёров и запасные аккумуляторы;
  • связь: SIM/точки Wi‑Fi, план на случай отсутствия сети;
  • тестовый пилот на небольшом событии до большого запуска.

FAQ

Сколько времени занимает запуск MVP приложения для билетов и чек-ина?

Для большинства команд реалистичный ориентир — 4–8 недель на MVP, если держать правила доступа простыми.

Минимальный набор:

  • выпуск билета и статус (активен/использован/аннулирован);
  • QR и проверка на входе;
  • приложение-сканер (быстрый скан + фиксация результата);
  • базовая админ-панель (события, список заказов, права);
  • простой отчёт по проходам и причинам отказов.
Какие модули нужны в системе: участник, сканер и админ-панель?

Оптимально разделить систему на три интерфейса:

  • Участник: покупка/получение билета, «кошелёк» с QR, статусы, помощь.
  • Контролёр: максимально быстрый скан, крупный результат, офлайн, журнал действий.
  • Организатор (веб): настройки события, типы билетов, права, отчёты, экспорт.

Так проще управлять доступами и снижать риск ошибок на входе.

Как правильно сделать офлайн-режим для сканера на входе?

Офлайн нужен, чтобы очередь не зависела от качества связи на площадке.

Практичный подход:

  • заранее загрузить локальный кэш «разрешённых билетов» по событию/зоне;
  • проверять подпись и срок действия QR локально;
  • сохранять все сканы в локальную очередь и синхронизировать при появлении сети.

Важно заранее предупредить организатора о риске дублей при длительной работе без синхронизации.

Что должно быть внутри QR-кода и как защититься от подделок?

QR лучше делать не «номером билета», а токеном, который проверяется правилами системы.

Хорошая практика:

  • хранить в QR короткий токен (без персональных данных);
  • добавлять криптографическую подпись (например, HMAC/EdDSA), чтобы сканер мог проверить подлинность;
  • инвалидировать токен при возврате/обмене;
  • помечать билет «использован» при первом успешном проходе.

Так снижается риск подделки и пересылки скриншотов.

Какой должна быть модель данных для событий и билетов?

Нужен предсказуемый набор сущностей, чтобы покупки, проход и отчёты работали без ручных правок.

Минимум обычно такой:

  • событие (часовой пояс, правила) и сессии/даты;
  • тип билета (цена, ограничения, квоты);
  • билет-экземпляр (токен, статус, привязка к заказу/участнику);
  • правила доступа (день/сеанс/зона/таймслот/число проходов).

Статусы продумывайте заранее: «оплачен/выдан/аннулирован/возврат/обмен/использован».

Как обрабатывать ситуацию, когда один билет просканировали два раза?

Типовой конфликт — когда один и тот же QR сканируют два устройства почти одновременно.

Надёжная схема:

  • каждый скан — это событие с временем и ID устройства;
  • сервер принимает первое событие как успешное, остальные помечает как дубликат;
  • сканер показывает контролёру понятную причину: где и когда билет уже был использован.

Это особенно важно при офлайне и последующей синхронизации.

Как измерять и улучшать скорость прохода на входе?

Скорость зависит от устройств, света, качества камеры и того, сколько действий должен сделать контролёр.

Что помогает:

  • запуск сканера сразу в режиме камеры («один скан — один ответ»);
  • крупная индикация результата и короткая подсказка действия;
  • локальная проверка (кэш + подпись) при слабом интернете;
  • ручной поиск по имени/телефону/номеру заказа как запасной сценарий.

В тестах измеряйте медиану и 95-й перцентиль времени скана, а не только среднее.

Какие интеграции с оплатой обязательны и зачем нужны вебхуки?

Оплата должна подтверждаться не экраном «успех», а событием от провайдера.

Практические правила:

  • используйте вебхуки как источник истины;
  • делайте обработку идемпотентной (один и тот же вебхук не должен выдавать второй билет);
  • храните статусы платежа (создан/в обработке/успешен/неуспешен/возврат);
  • автоматически выдавайте QR и отправляйте подтверждение после успешного вебхука.

Это снижает число обращений в поддержку в день события.

Какая аналитика нужна организатору до, во время и после мероприятия?

Начните с отчётов, которые помогают управлять входом и продажами, а не просто рисуют графики.

Полезный минимум:

  • воронка покупки (просмотр → выбор → оформление → оплата);
  • продано vs вошло, no-show;
  • причины отказов на входе (уже использован, не найден, не та зона/день);
  • пропускная способность по входам/сканерам и пики по времени.

Для выгрузок достаточно CSV, а расширение можно вынести в экспорт из /reports.

Как минимизировать риски по персональным данным и доступам в билетном приложении?

Чек-ин обычно не требует «широкого профиля» пользователя — это плюс для безопасности.

Рекомендации:

  • собирайте только нужное (статус билета, событие, зона, история проходов);
  • персональные данные подключайте по необходимости (именные билеты, уведомления);
  • разделяйте роли и доступы (организатор/контролёр/поддержка) и ведите аудит действий;
  • задайте сроки хранения и реализуйте удаление/анонимизацию по запросу.

Потеря устройства контролёра не должна раскрывать лишние данные.

Похожие статьи