N8N_SETUP.md•10.3 kB
# Настройка n8n для работы с Railway
## Вариант 1: HTTP Request к Railway (рекомендуется)
### Шаг 1: Настройте переменную окружения в n8n
1. Откройте n8n settings
2. Перейдите в **Environment Variables**
3. Добавьте переменную:
   - **Name**: `RAILWAY_API_URL`
   - **Value**: `https://your-project.up.railway.app`
### Шаг 2: Импортируйте workflow
1. Откройте n8n
2. Нажмите **"+"** → **"Import from File"**
3. Выберите файл `n8n-workflow-railway.json` или `n8n-workflow-simple.json`
4. Workflow автоматически импортируется
### Шаг 3: Активируйте workflow
1. Нажмите **"Active"** в правом верхнем углу
2. Скопируйте Webhook URL
### Шаг 4: Тестирование
```bash
curl -X POST https://your-n8n-instance.com/webhook/human-design-railway \
  -H "Content-Type: application/json" \
  -d '{
    "birthDate": "1990-05-15",
    "birthTime": "14:30",
    "birthLocation": "Москва, Россия"
  }'
```
## Вариант 2: Ручная настройка Workflow
### Создайте workflow вручную
1. **Webhook Trigger**
   - Method: POST
   - Path: `/human-design`
   - Response Mode: "Respond to Webhook"
2. **HTTP Request Node**
   - URL: `https://your-project.up.railway.app/api/human-design`
   - Method: POST
   - Authentication: None
   - Send Body: Yes
   - Body:
     ```json
     {
       "birthDate": "{{ $json.birthDate }}",
       "birthTime": "{{ $json.birthTime }}",
       "birthLocation": "{{ $json.birthLocation }}"
     }
     ```
3. **IF Node** (опционально)
   - Check: `{{ $json.success }}`
   - Then: форматируйте успешный ответ
   - Else: форматируйте ошибку
4. **Code Node** (опционально)
   - Форматируйте ответ для красивого вывода
5. **Respond to Webhook**
   - Return the formatted response
## Вариант 3: Использование локального MCP Server
Если вы хотите использовать локальный MCP Server напрямую (без Railway):
### Шаг 1: Установите зависимости локально
```bash
cd /path/to/human_design
npm install
```
### Шаг 2: Запустите локальный HTTP Server
```bash
npm start
# Сервер запустится на http://localhost:3000
```
### Шаг 3: В n8n укажите локальный URL
В HTTP Request Node:
- URL: `http://localhost:3000/api/human-design`
### Шаг 4: Или используйте Code Node
```javascript
// В n8n Code Node
const { calculateHumanDesign } = require('/path/to/human_design/src/calculations-cjs.cjs');
const result = await calculateHumanDesign({
  birthDate: $input.item.json.birthDate,
  birthTime: $input.item.json.birthTime,
  birthLocation: $input.item.json.birthLocation,
});
return { json: result };
```
## Примеры использования
### Пример 1: Простой запрос
```javascript
// Webhook получает:
{
  "birthDate": "1990-05-15",
  "birthTime": "14:30",
  "birthLocation": "Москва"
}
// HTTP Request отправляет это на Railway
// Получает ответ и возвращает клиенту
```
### Пример 2: С валидацией
```javascript
// Code Node для валидации
const birthDate = $input.item.json.birthDate;
const birthTime = $input.item.json.birthTime;
const birthLocation = $input.item.json.birthLocation;
if (!birthDate || !birthTime || !birthLocation) {
  return {
    json: {
      success: false,
      error: "Missing required fields: birthDate, birthTime, birthLocation"
    }
  };
}
// Проверка формата даты
if (!birthDate.match(/^\d{4}-\d{2}-\d{2}$/)) {
  return {
    json: {
      success: false,
      error: "Invalid date format. Use YYYY-MM-DD"
    }
  };
}
// Проверка формата времени
if (!birthTime.match(/^\d{2}:\d{2}$/)) {
  return {
    json: {
      success: false,
      error: "Invalid time format. Use HH:MM"
    }
  };
}
return { json: $input.item.json };
```
### Пример 3: С форматированием
```javascript
// Format Response Code Node
const hd = $input.item.json.data;
const result = {
  type: hd.type.ru_name,
  strategy: hd.strategy,
  authority: hd.authority.ru_name,
  profile: hd.profile.number,
  gates: hd.gates.map(g => ({
    planet: g.planet,
    gate: `${g.gate} (${g.ru_name || g.name})`,
    line: g.line
  })),
  summary: `${hd.type.ru_name} с профилем ${hd.profile.number}. Стратегия: ${hd.strategy}`
};
return { json: result };
```
### Пример 4: Сохранение в базу данных
Добавьте Node после получения данных от Railway:
1. **PostgreSQL/MySQL Node**
   - Connect to your database
   - Insert Human Design data
   - Store: type, strategy, profile, gates as JSON
```sql
INSERT INTO human_design_charts 
(user_id, birth_date, birth_time, birth_location, type, strategy, authority, profile, gates, created_at)
VALUES 
(
  {{ $json.userId }},
  {{ $json.birthDate }},
  {{ $json.birthTime }},
  {{ $json.birthLocation }},
  {{ $json.data.type.name }},
  {{ $json.data.strategy }},
  {{ $json.data.authority.name }},
  {{ $json.data.profile.number }},
  '{{ JSON.stringify($json.data.gates) }}',
  NOW()
);
```
## Интеграция с Telegram Bot
### Workflow для Telegram бота
1. **Telegram Trigger**
   - Command: `/hd` или `/human-design`
2. **Prompt Node** или **Code Node**
   - Запрашивать: birthDate, birthTime, birthLocation
3. **HTTP Request к Railway**
4. **Format Response**
5. **Telegram Send Message**
   - Отправить отформатированный результат
Пример кода:
```javascript
// Вызов Railway через HTTP Request
const railwayUrl = process.env.RAILWAY_API_URL || 'https://your-project.up.railway.app';
const response = await fetch(`${railwayUrl}/api/human-design`, {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    birthDate: $input.item.json.birthDate,
    birthTime: $input.item.json.birthTime,
    birthLocation: $input.item.json.birthLocation,
  }),
});
const result = await response.json();
return { json: result.data };
```
## Обработка ошибок
### Рекомендуемая структура
```javascript
try {
  // HTTP Request к Railway
  const railwayResponse = $input.item.json;
  
  if (!railwayResponse.success) {
    // Обработка ошибки от Railway
    return {
      json: {
        success: false,
        error: railwayResponse.error,
        source: 'Railway API'
      }
    };
  }
  
  // Успех
  return {
    json: {
      success: true,
      data: railwayResponse.data
    }
  };
  
} catch (error) {
  // Обработка исключений
  return {
    json: {
      success: false,
      error: error.message,
      source: 'n8n workflow'
    }
  };
}
```
## Мониторинг и логирование
### Добавьте Log Node для отладки
1. После каждого важного шага добавьте **"Log"** node
2. Логируйте входные и выходные данные
3. Используйте для отладки в production
### Настройте алерты
1. **IF Node** для проверки ошибок
2. **Send Email** или **Slack** для уведомлений
3. **Webhook** для отправки в систему мониторинга
## Оптимизация
### Кэширование
Добавьте кэширование для повторяющихся запросов:
1. **Redis Node** или **Database Node**
2. Ключ: `birthDate+birthTime+birthLocation`
3. TTL: 24 часа
### Rate Limiting
Добавьте защиту от спама:
```javascript
// Rate limit check
const userId = $json.user.id || 'anonymous';
const key = `rate_limit:${userId}`;
const count = await redis.get(key);
if (count && count > 10) {
  return {
    json: {
      success: false,
      error: "Rate limit exceeded. Please try again later."
    }
  };
}
await redis.incr(key);
await redis.expire(key, 3600); // 1 hour
```
## Тестирование
### Unit тесты для workflow
1. Создайте тестовый workflow
2. Используйте статические данные
3. Проверяйте каждый node отдельно
### Production тестирование
```bash
# Health check
curl https://your-project.up.railway.app/health
# Полный тест
curl -X POST https://your-n8n-instance.com/webhook/human-design-railway \
  -H "Content-Type: application/json" \
  -d '{
    "birthDate": "1990-05-15",
    "birthTime": "14:30",
    "birthLocation": "Москва"
  }'
```
## Troubleshooting
### Проблема: Railway недоступен
**Решение:**
- Проверьте что Railway деплой успешен
- Проверьте logs в Railway Dashboard
- Убедитесь что URL правильный
### Проблема: Timeout в n8n
**Решение:**
- Увеличьте timeout в HTTP Request node
- Railway может быть медленным при первой загрузке
- Добавьте retry logic
### Проблема: Некорректный ответ
**Решение:**
- Добавьте Log node после Railway API
- Проверьте формат данных
- Убедитесь что Railway возвращает JSON
## Дополнительные ресурсы
- [n8n Documentation](https://docs.n8n.io)
- [Railway Deployment Guide](RAILWAY_DEPLOY.md)
- [Human Design API](https://github.com/dvvolkovv/MCP_Human_design)
## Пример полного workflow
См. файлы:
- `n8n-workflow-railway.json` - полная версия с ошибками
- `n8n-workflow-simple.json` - упрощенная версия
- `n8n-example-workflow.json` - локальная версия