Files
aiform_prod/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

146 lines
2.9 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🗜️ 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**
---