Some checks failed
Backend CI / test (push) Waiting to run
Backend CI / build (push) Blocked by required conditions
Deploy Mnemo Cards / Deploy Backend (push) Waiting to run
Deploy Mnemo Cards / Deploy Web App (push) Blocked by required conditions
Deploy Mnemo Cards / Final Verification (push) Blocked by required conditions
Deploy Telegram Bot / Deploy Telegram Bot (push) Has been cancelled
This will show the exact reason for token verification failure
4.8 KiB
4.8 KiB
Миграция Telegram бота с Isar DB на Backend API
Обзор
Telegram бот был мигрирован с прямого доступа к Isar базе данных на использование Backend API через HTTP запросы. Это обеспечивает:
- Централизованное управление данными
- Упрощение развертывания (не нужна локальная БД)
- Единую точку доступа к данным
Изменения
Бэкенд
-
Middleware для API ключа (
telegram_bot_auth_middleware.dart)- Проверяет заголовок
X-API-Key - Использует переменную окружения
TELEGRAM_BOT_API_KEY
- Проверяет заголовок
-
API эндпоинты для бота (
telegram_bot_api_v2.dart)GET /api/v2/telegram-bot/random-card- получить случайную карточкуPOST /api/v2/telegram-bot/share/check-limit- проверить лимит шарингаPOST /api/v2/telegram-bot/share/record- записать факт шарингаGET /api/v2/telegram-bot/users/info- информация о пользователяхGET /api/v2/telegram-bot/words- список всех слов
Телеграм бот
-
HTTP клиент (
backend_client.dart)- Заменяет
DBManager - Поддерживает retry логику с экспоненциальной задержкой
- Использует API ключ для аутентификации
- Заменяет
-
Удалены зависимости
- Удалена зависимость
isarизpubspec.yaml - Удалена зависимость
argsизpubspec.yaml(CLI аргументы больше не используются) - Удален файл
db_manager.dart - Удалена опция
--isarиз конфигурации
- Удалена зависимость
-
Конфигурация через переменные окружения
- CLI аргументы заменены на переменные окружения
- Все настройки теперь читаются из
Platform.environment - Добавлена переменная
TELEGRAM_BOT_TOKENдля токена бота
Настройка
Переменные окружения
Бэкенд:
TELEGRAM_BOT_API_KEY=your-secret-api-key-here
Бот (все обязательны):
TELEGRAM_BOT_TOKEN=your-telegram-bot-token # Токен бота от BotFather
TELEGRAM_BOT_API_KEY=your-secret-api-key-here # Должен совпадать с бэкендом
BACKEND_URL=https://api.mnemo-cards.online # Опционально, по умолчанию используется значение по умолчанию
BOT_SHARE_DAILY_LIMIT=1 # Опционально, по умолчанию 1
Примечание: Бот теперь использует только переменные окружения. CLI аргументы больше не поддерживаются.
Docker
В Dockerfile бота определены переменные окружения:
ENV BACKEND_URL=https://api.mnemo-cards.online \
BOT_SHARE_DAILY_LIMIT=1 \
TELEGRAM_BOT_API_KEY= \
TELEGRAM_BOT_TOKEN=
Установите значения при запуске контейнера:
docker run \
-e TELEGRAM_BOT_TOKEN=your-bot-token \
-e TELEGRAM_BOT_API_KEY=your-api-key \
...
Использование
Бот работает так же, как и раньше, но теперь все операции выполняются через API:
/start,/login,/code- генерация кодов авторизации/share- шаринг карточек с проверкой лимитов/info,/user,/words- административные команды
Все данные теперь хранятся и обрабатываются на бэкенде.
Безопасность
- API ключ передается через заголовок
X-API-Key - Ключ должен быть достаточно длинным и случайным
- Рекомендуется использовать переменные окружения, а не хардкодить ключ
- API ключ должен совпадать в бэкенде и боте
Откат
Если нужно вернуться к использованию Isar:
- Восстановите файл
db_manager.dartиз git истории - Верните зависимость
isarвpubspec.yaml - Замените
BackendClientнаDBManagerвmain.dart - Обновите конфигурацию для использования пути к Isar БД