# 🔌 Интеграция n8n с React Frontend ## 📡 Redis Pub/Sub для real-time событий ### Публикация события из n8n (HTTP Request Node) **POST** `http://147.45.146.17:8100/api/v1/events/{task_id}` ```json { "status": "processing|ocr_started|ocr_completed|ai_started|completed|error", "message": "Описание для пользователя", "data": { "chars": 1500, "confidence": 0.95, "document_type": "policy", "extracted_data": {...} } } ``` **Примеры:** 1. **Начало обработки:** ```json POST /api/v1/events/abc-123-def { "status": "processing", "message": "Начата обработка файла", "data": { "filename": "Policy_123.pdf" } } ``` 2. **OCR завершён:** ```json POST /api/v1/events/abc-123-def { "status": "ocr_completed", "message": "Распознано 1500 символов", "data": { "chars": 1500, "ocr_text_preview": "ЕВРОИНС ПОЛИС E1000-..." } } ``` 3. **AI анализ:** ```json POST /api/v1/events/abc-123-def { "status": "ai_started", "message": "Запущен AI анализ документа", "data": {} } ``` 4. **Завершено:** ```json POST /api/v1/events/abc-123-def { "status": "completed", "message": "Обработка завершена", "data": { "document_type": "policy", "is_valid": true, "confidence": 0.95, "extracted_data": { "voucher": "E1000-302545808", "holder_name": "ROMANOVA ANASTASIIA", "insured_from": "22.09.2025", "insured_to": "30.09.2025" } } } ``` 5. **Ошибка:** ```json POST /api/v1/events/abc-123-def { "status": "error", "message": "Ошибка обработки: файл повреждён", "data": { "error_code": "OCR_FAILED" } } ``` --- ## 🎯 Вебхуки для n8n ### 1. Проверка полиса (MySQL) **POST** `/webhook/check-policy` **Request:** ```json { "policy_number": "E1000-302545808", "inn": "123456789012" } ``` **Response:** ```json { "found": true, "policy": { "voucher": "E1000-302545808", "holder_name": "ROMANOVA ANASTASIIA", "status": "active" } } ``` --- ### 2. Загрузка файла в S3 **POST** `/webhook/upload-file` **Request (multipart/form-data):** - `file`: File - `folder`: "policies" | "documents" | "tickets" **Response:** ```json { "success": true, "task_id": "abc-123-def", "s3_url": "https://s3.twcstorage.ru/bucket/policies/file.pdf", "message": "Файл загружен, обработка началась" } ``` **n8n Flow:** 1. Загрузить в S3 2. Сгенерировать `task_id` (UUID) 3. Положить задачу в RabbitMQ (`erv_ocr_processing`) 4. Вернуть `task_id` --- ### 3. OCR Worker (RabbitMQ Trigger) **n8n Workflow:** ``` RabbitMQ Trigger (erv_ocr_processing) ↓ Скачать файл из S3 ↓ POST /api/v1/events/{task_id} status: "processing" ↓ HTTP Request → OCR API POST http://147.45.146.17:8001/analyze-file ↓ POST /api/v1/events/{task_id} status: "ocr_completed" data: {chars: ..., ocr_text: "..."} ↓ HTTP Request → Gemini Vision (OpenRouter) ↓ POST /api/v1/events/{task_id} status: "completed" data: {document_type, is_valid, extracted_data} ↓ Сохранить результат в Redis key: "ocr_result:{task_id}" ttl: 3600 ``` --- ### 4. Получение результата OCR **GET** `/webhook/ocr-result/{task_id}` **Response:** ```json { "success": true, "result": { "document_type": "policy", "is_valid": true, "confidence": 0.95, "ocr_text": "...", "extracted_data": {...} } } ``` **n8n:** Читает из Redis `ocr_result:{task_id}` --- ### 5. Создание заявки (финал) **POST** `/webhook/create-claim` **Request:** ```json { "voucher": "E1000-302545808", "email": "user@example.com", "phone": "+79001234567", "incident": { "type": "flight_delay", "date": "2025-10-25", "flight_number": "SU123", "description": "Задержка более 3 часов" }, "payment": { "method": "sbp", "bank": "sberbank" }, "documents": [ "https://s3.../ticket1.pdf", "https://s3.../boarding_pass.pdf" ] } ``` **Response:** ```json { "success": true, "claim_id": "CLM-2025-001", "crm_id": "12345", "message": "Заявка успешно создана" } ``` **n8n Flow:** 1. Проверить все данные 2. Создать запись в PostgreSQL 3. Отправить в Vtiger CRM 4. Отправить email подтверждение 5. Вернуть claim_id --- ## 📊 Draft (автосохранение) **POST** `/webhook/draft/save` ```json { "session_id": "sess-abc-123", "step": 1, "form_data": {...} } ``` **GET** `/webhook/draft/stats` Возвращает статистику: сколько людей бросили на каждом шаге. --- ## 🔗 Redis Connection **Host:** `crm.clientright.ru` **Port:** `6379` **Password:** `CRM_Redis_Pass_2025_Secure!` **DB:** `0` **Channels:** - `ocr_events:{task_id}` - события обработки --- ## 📝 Примечания 1. **task_id** - генерируется как UUID в n8n 2. **Redis TTL** - результаты хранятся 1 час 3. **RabbitMQ** - `185.197.75.249:5672` (admin/tyejvtej) 4. **S3** - TWC Storage, креды в .env --- **Готово для n8n! 🚀**