📝 Update: документация n8n исключения

This commit is contained in:
Umbrix Dev
2026-02-09 07:18:31 +03:00
parent 5677b48227
commit 6e27ce2fab

View File

@@ -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`