Задача
Создать Telegram-бота или mini-app для продажи цифровых товаров (например, лицензионных ключей или текстовой информации). Ключевое требование - все должно работать на serverless-инфраструктуре (Cloudflare Workers, AWS Lambda, Google Cloud Functions или аналоги), без аренды выделенного сервера или VPS. Используется официальный API платежного шлюза для приема оплат.
Технические требования
Архитектура и инфраструктура
- Обязательное использование serverless-платформы (без администрирования VPS).
- Прием и отправка сообщений через Telegram Webhook.
Интеграция с платежным шлюзом
- Оплата через официальный Webhook.
- Требуется проверка цифровой подписи и статуса платежа.
- Успешным считаются статусы с текстом Approved или Success.
- Реализовать защиту от выполнения повторной обработки одного и того же уведомления (Webhook).
Логика бизнеса
- Пользователь запускает диалог командой /start.
- Интерфейс включает кнопки: Купить, Мои покупки, Поддержка.
- Выводится список доступных товаров с ценами.
- После успешного проведения платежа бот отправляет уникальный цифровой товар (ключ/текст).
- Каждый товар (ключ) должен быть выдан однократно.
- При исчерпании запаса ключей заказ помечается как ожидает исполнения, а пользователь автоматически уведомляется. Администратор может выдать товар вручную позднее.
Инструменты администратора
- Доступ к группе команд/меню с привязкой только к заданному Telegram User ID.
- Возможность добавлять, редактировать товары.
- Загрузка ключей списком (bulk-импорт).
- Контроль за остатками ключей по каждому элементу.
- Просмотр всей базы заказов (статусов оплаты/цифровых значений).
- Функция ручной выдачи товаров в непредвиденных (исчерпано/Hold) обстоятельствах.
Хранение данных
- Данные (пользователи; товары; ключи; заказы; история платежей) обязаны лежать в persistence-слое, хранилище бессерверного типа запущенное и пригодное для infinite horizontal scaling under cont? (NoSQL датирует: Cloudflare KV, D1/SupaB точковые/pac-pgbouncer compatible/not conflicting). Если название или характеристика указанные без бренда, задачник виноват - помещать server.