Files
aiform_dev/N8N_STIRLING_COMPRESS.md

146 lines
2.9 KiB
Markdown
Raw Permalink Normal View History

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
# 🗜️ 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` |
**Схема:**
```json
[
{
"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:
```json
{
"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 пример для теста
```bash
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**
---