Разрабатываем Telegram Mini Web App на примере личного таск трекера
Всем привет! В этой стате я покажу и расскажу как создать Mini App в телеграме на примере разработки домашнего таск-трекера. В его функционал входят: личные задачи, работа в команде, назначение исполнителей, смена статуса и приоритеты. Цель трекера простая -- ведение семейного списка дел -- что купить, убрать и т.д.;).
И в завершении мы разместим проект на специализированном под такие проекты хостинге - Amvera, где
- TG-боты работают, несмотря на географические ограничения ТГ. Есть прокси и серверы в Европе.
- Получим бесплатный https домен без необходимости настройки SSL. Это пригодится для фронта Mini App.
- Опубликуем проект в интернете за минуту и три команды в терминале (или загрузив файлы в интерфейсе), используя встроенный CI/CD (простая публикация без настройки VPS - главная фишка сервиса).
- Получим 111 р приветственного баланса для бесплатного тестирования, и возможность редактирования кода AI-агентом во встроенной онлайн ИИ-IDE.
Итог создания Mini App
На выходе мы получаем бота, с которым можно работать как в чате, так и через Mini App.
Поддерживаются статусы разные статусы (в работе, готово...) и есть поддержка командной работы: можно создавать команды, добавлять участников, создавать задачи и назначать исполнителей, также значенные пользователю задачи видны в разделе «Назначено».
Архитектура нашего TG Web App
Любой Web App содержит в своем составе бэкенд (бот) и фронт. Иногда, это может быть реализовано как два разных проекта, иногда можно создать один.
В нашем примере бэкенд написан на Python, а фронтенд на JavaScript без использования дополнительных фреймворков.
Структура проекта:
Ключевая особенность: бот и Mini App используют одну базу данных и запускаются одновременно через один файл.
Как уже написал выше, фронт можно реализовать как отдельный проект. Но в нашем случае было проще сделать один index.html файл.
Полный код проекта доступен в GitHub.
Архитектура базы данных
Бот и Mini App работают с общей базой данных SQLite3. Используются 4 таблицы:
- `users` - пользователи
- `teams` - команды
- `members`
- участники команд
- `todos` - задачи
Схема таблиц:
API для Mini App
Для Mini App было реализовано API на Flask. Имеются следующие эндпоинты:
- `GET /api/bootstrap` - данные пользователя и счетчики
- `GET/POST /api/my-tasks` - личные задачи
- `GET /api/assigned` - назначенные задачи
- `GET/POST /api/teams` - список команд и создание команды
- `GET /api/teams/` - детали команды
- `POST /api/todos//status` - смена статуса задачи
Публикация созданного Web App на хостинге
Запускать будем на хостинге Amvera. Это даст нам бесплатный домен с настроенным SSL и возможность не думать о настройке VPS -- достаточно загрузить файлы проекта и сервис все сам запустит и настроит.
В репозитории уже есть для этого файл конфигурации `amvera.yml`:
Для начала создаем приложение, даем ему имя (например, «miniapp»), и выбираем тариф. Далее загружаем файлы в проект.
Если загружаете через интерфейс - скачайте архив из GitHub, распакуйте и загрузите файлы:
Если загружаете через Git, то выполните эти команды в терминале:
После этого добавьте переменные окружения:
Добавьте переменную `TOKEN` со значением токена бота и обязательно отметьте ее как секрет:
Убедитесь, что конфигурация успешно применилась:
Завершите создание, начните сборку и дождитесь запуска приложения.
Наш бот успешно запустился и мы можем это проверить командой `/start`:
Далее нужно подключить фронт Mini App к боту. Сначала создайте домен в разделе «Домены»:
Затем откройте @BotFather и введите команду `/setmenubutton`. Выберите бота, задайте название кнопки (например, «Открыть интерфейс») и укажите ссылку на ваш Mini App (домен из предыдущего шага).
Вуаля, у бота появилась кнопка по нажатию которой, откроется веб-интерфейс:
Заключение
В итоге получился домашний таск-треккер, который объединяет бота и Mini App в одном проекте: личные и командные задачи, приоритеты, статусы и назначения исполнителей. Такой проект удобно развивать дальше под свои процессы: добавить дедлайны, напоминания, фильтры и расширенные роли доступа.
Уточнение: проект mini app частично написан нейронкой и доведен до ума своими руками).