Все работы

Telegram Mini App для голосования: от голоса участника до статистики организатора

Участник голосует за номинанта в Telegram Mini App. Система сохраняет и учитывает голос, а организатор получает статистику по номинациям и номинантам в отдельной веб-панели. Серверная логика связывает действия участников, правила голосования и сохранённые данные.

Две стороны одного голосования

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

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

Мой вклад

Я разработал интерфейс участника, серверную часть, хранение голосов и интеграцию с Telegram Bot API. Связал интерфейс, сервер, хранение данных и интеграцию с Telegram: участник делает выбор, сервер проверяет правила и сохраняет голос, интеграция проверяет подписку на обязательные каналы. Сохранённые голоса учитываются в статистике организатора.

Как проходит один голос

  1. Вход через Telegram. Участник открывает приложение, а сервер проверяет данные запуска и связывает действия с его Telegram-аккаунтом.
  2. Номинация и текущий выбор. Участник открывает номинацию, видит доступных номинантов и собственный текущий голос. Он выбирает, кого поддержать.
  3. Проверка подписки. В пользовательском сценарии предусмотрена проверка подписки на обязательные каналы через Telegram Bot API.
  4. Проверка правил голосования. Сервер проверяет период голосования, активность номинации и принадлежность номинанта к ней. Если голос уже есть, учитывает, разрешено ли менять выбор.
  5. Сохранение и учёт голоса. Система сохраняет текущий выбор и обновляет счётчик номинанта. После успешного ответа участник видит обновлённые данные номинации и свой голос.

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

Сменить выбор — не добавить ещё один голос

В приложении также предусмотрены отмена голоса и переголосование. Возможность сменить выбор зависит от настроек голосования.

Проверка подписки через Telegram

Сведения о подписке находятся вне платформы. Чтобы проверить обязательные каналы, сервис обращается к Telegram Bot API и получает статус членства аккаунта.

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

Отдельные инструменты организатора

Для управления предусмотрена отдельная веб-панель со своим входом. В ней организатор работает с номинациями и номинантами, меняет настройки и просматривает статистику. Административные экраны не встроены в участнический Mini App.

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

Так участник сосредоточен на выборе, а организатор — на ведении голосования. Для просмотра статистики не нужно превращать пользовательский экран в административный.

Статистику по номинациям и номинантам можно выгрузить из панели в CSV и дальше работать с ней в табличном виде.

Результат

Получился связанный сценарий голосования: участник голосует в Telegram Mini App, система сохраняет и учитывает его голос, а организатор получает статистику по номинациям и номинантам. Отдельная веб-панель даёт инструменты управления голосованием и выгрузку статистики в CSV.

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

Подтверждённых замеров экономии времени, вовлечённости или финансового эффекта для этого кейса у меня нет.

Технологии

React, TypeScript, Telegram Mini App, FastAPI, SQLAlchemy, Telegram Bot API.

Обсудим вашу задачу?

Коротко опишите, что хотите изменить или создать. Готовое ТЗ не нужно.