Files
aiform_dev/N8N_STIRLING_COMPRESS.md
AI Assistant 647abf6578 feat: Интеграция n8n + Redis Pub/Sub + SSE для real-time обработки заявок
🎯 Основные изменения:

Backend:
-  Добавлен SSE endpoint для real-time событий (/api/v1/events/{task_id})
-  Redis Pub/Sub для публикации/подписки на события OCR/Vision
-  Удален aioboto3 из requirements.txt (конфликт зависимостей)
-  Добавлен OCR worker (deprecated, логика перенесена в n8n)

Frontend (React):
-  Автогенерация claim_id и session_id
-  Клиентская конвертация файлов в PDF (JPG/PNG/HEIC/WEBP)
-  Сжатие изображений до 2MB перед конвертацией
-  SSE подписка на события OCR/Vision в Step1Policy
-  Валидация документов (полис vs неподходящий контент)
-  Real-time прогресс загрузки и обработки файлов
-  Интеграция с n8n webhooks для проверки полиса и загрузки файлов

n8n Workflows:
-  Проверка полиса в MySQL + запись в PostgreSQL
-  Загрузка файлов в S3 + OCR + Vision AI
-  Публикация событий в Redis через backend API
-  Валидация документов (распознавание полисов ERV)

Документация:
- 📝 N8N_INTEGRATION.md - интеграция с n8n
- 📝 N8N_SQL_QUERIES.md - SQL запросы для workflows
- 📝 N8N_PDF_COMPRESS.md - сжатие PDF
- 📝 N8N_STIRLING_COMPRESS.md - интеграция Stirling-PDF

Утилиты:
- 🔧 monitor_redis.py/sh - мониторинг Redis Pub/Sub
- 🔧 test_redis_events.sh - тестирование событий
- 🔧 pdfConverter.ts - клиентская конвертация в PDF

Архитектура:
React → n8n webhooks (sync) → MySQL/PostgreSQL/S3
      → n8n workflows (async) → OCR/Vision → Redis Pub/Sub → SSE → React
2025-10-27 08:33:16 +03:00

2.9 KiB
Raw Blame History

🗜️ PDF Compression для n8n

⚠️ UPDATE: Stirling API недоступен!

Альтернатива: Используем Ghostscript или Python pypdf


🐍 Вариант 1: Python Code Node (РЕКОМЕНДУЕТСЯ)

1 Базовая настройка

Method: POST
URL: https://stirling.klientprav.tech/api/v1/general/compress-pdf


2 Authentication

  • Type: Header Auth
  • Name: X-API-Key
  • Value: HTYgGMCZ64rlzoRbbmg6IeutXzJHEdVpKV1

3 Body

Content Type: Multipart-Form Data

Fields:

Property Name Type Value
fileInput Binary Data {{ $binary.data }}
optimizeLevel String 3
expectedOutputSize String 2

Схема:

[
  {
    "name": "fileInput",
    "data": "{{ $binary.data }}"
  },
  {
    "name": "optimizeLevel",
    "data": "3"
  },
  {
    "name": "expectedOutputSize",
    "data": "2"
  }
]

4 Send Binary Data

Include Binary Data: Yes
Binary Property Name: data


📥 Response

Stirling вернёт сжатый PDF в формате:

Success:

  • Status: 200 OK
  • Body: Binary PDF file
  • Headers:
    Content-Type: application/pdf
    Content-Disposition: attachment; filename="compressed.pdf"
    

Error:

{
  "message": "Error description",
  "status": 400
}

🔗 Использование в workflow

Полная цепочка:

Webhook (получили PDF)
  ↓
IF Node: file_size > 5 MB?
  ├─ TRUE → HTTP Request (Stirling Compress)
  │          ↓
  │     Binary Data (сжатый PDF)
  │          ↓
  └─ FALSE → Binary Data (оригинал)
         ↓
   S3 Upload (оба варианта)
         ↓
   PostgreSQL (запись пути)

🧪 Curl пример для теста

curl -X POST \
  -H "X-API-Key: HTYgGMCZ64rlzoRbbmg6IeutXzJHEdVpKV1" \
  -F "fileInput=@/path/to/file.pdf" \
  -F "optimizeLevel=3" \
  -F "expectedOutputSize=2" \
  https://stirling.klientprav.tech/api/v1/general/compress-pdf \
  --output compressed.pdf

⚙️ Параметры сжатия

  • optimizeLevel:

    • 1 = минимальное сжатие (быстро)
    • 2 = среднее сжатие (баланс)
    • 3 = максимальное сжатие (медленно, но эффективно)
  • expectedOutputSize:

    • Целевой размер в MB (опционально)
    • Например: 2 = максимум 2MB

📝 Примечания

⚠️ Важно:

  1. Stirling работает только с PDF
  2. JPEG/PNG сначала конвертируются в PDF на frontend
  3. В n8n приходит уже PDF
  4. Если файл > 5MB → сжимаем в Stirling
  5. Если файл ≤ 5MB → пропускаем Stirling