From 6e27ce2fabc0a072092d1143aa40419f6a25b3b5 Mon Sep 17 00:00:00 2001 From: Umbrix Dev Date: Mon, 9 Feb 2026 07:18:31 +0300 Subject: [PATCH] =?UTF-8?q?=F0=9F=93=9D=20Update:=20=D0=B4=D0=BE=D0=BA?= =?UTF-8?q?=D1=83=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D1=86=D0=B8=D1=8F=20n8n=20?= =?UTF-8?q?=D0=B8=D1=81=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TRIAL-USERNAME-FIX.md | 87 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) diff --git a/TRIAL-USERNAME-FIX.md b/TRIAL-USERNAME-FIX.md index 0678171..0bb79e2 100644 --- a/TRIAL-USERNAME-FIX.md +++ b/TRIAL-USERNAME-FIX.md @@ -179,3 +179,90 @@ export async function POST(request: NextRequest) { 3. Нужно переоткрыть через `@Chat_8n8_bot` → "Открыть приложение" **Теперь система автоматически блокирует такие попытки!** ✅ + +--- + +## 🔓 UPDATE: Исключение для n8n переходов (5677b48) + +### Проблема после первого фикса: + +После блокировки создания без Telegram ID - **перестали работать переходы из n8n**! + +n8n workflow отправляет пользователей по **прямой ссылке** (открывается в браузере), где `window.Telegram?.WebApp` недоступен. + +### Решение: + +Добавлены **URL параметры-исключения** для n8n переходов: + +```typescript +// Проверяем источник перехода +const urlParams = new URLSearchParams(window.location.search); +const source = urlParams.get('source') || urlParams.get('utm_source'); +const fromN8n = source === 'n8n' || source === 'chat' || urlParams.has('from_n8n'); + +// Блокируем ТОЛЬКО если нет Telegram ID И это НЕ n8n переход +if (!tgUser?.id && !fromN8n) { + showToastNotification('❌ Откройте приложение через Telegram бота'); + return; +} + +// Для n8n переходов генерируем временный ID +const userId = tgUser?.id || Date.now(); +``` + +### Поддерживаемые параметры: + +1. `?source=n8n` - рекомендуемый +2. `?utm_source=n8n` - для аналитики +3. `?utm_source=chat` - альтернативный вариант +4. `?from_n8n=true` - явное указание + +### Примеры ссылок из n8n: + +``` +✅ https://app.umbrix.net/?source=n8n +✅ https://app.umbrix.net/plans?utm_source=chat +✅ https://app.umbrix.net/?from_n8n=true&ref=user123 +❌ https://app.umbrix.net/ (без параметров - блокируется) +``` + +### Итоговая логика: + +| Способ входа | Telegram ID | URL параметры | Результат | +|-------------|-------------|---------------|-----------| +| Telegram Mini App | ✅ Есть | Любые | ✅ Создается с реальным ID | +| n8n workflow | ❌ Нет | `?source=n8n` | ✅ Создается с временным ID | +| Прямая ссылка | ❌ Нет | Нет параметров | ❌ **БЛОКИРОВКА** | + +### Backend поддержка: + +```typescript +// app/api/create-user/route.ts +const { telegramId, source } = await request.json(); + +// Разрешаем n8n переходы +const fromN8n = source === 'n8n' || source === 'chat'; + +if (!telegramId && !fromN8n) { + return NextResponse.json( + { success: false, error: 'Telegram ID required' }, + { status: 400 } + ); +} +``` + +### Проверка в production: + +```bash +# 1. Переход через n8n (должен работать) +curl -X POST https://app.umbrix.net/api/create-user \ + -H "Content-Type: application/json" \ + -d '{"planType":"trial","source":"n8n"}' + +# 2. Переход без параметров (должен блокироваться) +curl -X POST https://app.umbrix.net/api/create-user \ + -H "Content-Type: application/json" \ + -d '{"planType":"trial"}' +``` + +**Деплой**: PM2 перезапущен (pid 50711), коммит `5677b48` ✅