✅ Что сделано:
- app/page.tsx: Проверка source/utm_source параметров (n8n, chat, from_n8n)
- app/plans/page.tsx: Аналогичная проверка для 3-step flow
- app/api/create-user/route.ts: Разрешение создания без telegramId если source=n8n
🔓 ИСКЛЮЧЕНИЯ для n8n:
- ?source=n8n
- ?utm_source=n8n
- ?utm_source=chat
- ?from_n8n=true
🎯 ЛОГИКА:
1. Переход через Telegram Mini App → требуется tgUser.id ✅
2. Переход из n8n (прямая ссылка) → НЕ требуется, генерируется временный ID ✅
3. Переход из браузера напрямую → блокируется ❌💡 Для временных ID используется Date.now() но только если fromN8n=true
✅ Что сделано:
- app/page.tsx: Добавлена проверка tgUser?.id перед созданием trial
- app/plans/page.tsx: Добавлена валидация user?.id в createUser()
- app/api/create-user/route.ts: Серверная валидация telegramId (400 если отсутствует)
- types/telegram.ts: Расширен TelegramWebApp интерфейс (MainButton, BackButton, HapticFeedback)
- types/telegram.d.ts: Глобальная декларация Window.Telegram
- hooks/useTelegramWebApp.ts: Упрощено - использует (window as any)
❌ ПРОБЛЕМА (user_... имена):
Имена вида user_1770605873419 появляются когда Telegram WebApp не передает данные пользователя.
Теперь система блокирует создание trial/подписки если нет tgUser.id
✅ РЕШЕНИЕ:
Приложение должно быть открыто ВНУТРИ Telegram Mini App, а не в браузере!
Если пользователь видит user_..., значит открыто не через бота.