# Redis канал для подтверждения формы (form_approve) ## 📋 Описание После SMS-апрува данные подтвержденной формы публикуются в Redis канал `clientright:webform:approve` для обработки в n8n workflow. ## 🔄 Архитектура ``` Frontend (StepClaimConfirmation) → POST /api/v1/claims/approve → Backend публикует в Redis канал clientright:webform:approve → n8n подписывается на канал и обрабатывает данные ``` ## 📡 Endpoint **POST** `/api/v1/claims/approve` ### Request Body ```json { "claim_id": "0eb051ec-23a6-4e06-8b98-f02d20d35f68", "session_token": "sess_c9e7c0c2-de2e-40cd-ab7c-3bdc40282d34", "session_id": "sess_c9e7c0c2-de2e-40cd-ab7c-3bdc40282d34", "unified_id": "usr_90599ff2-ac79-4236-b950-0df85395096c", "user_id": "user_123", "phone": "79262306381", "form_data": { "user": {...}, "project": {...}, "offenders": [...], "meta": {...} }, "user": {...}, "project": {...}, "offenders": [...], "meta": {...}, "original_data": {...} } ``` ### Response ```json { "success": true, "channel": "clientright:webform:approve", "idempotency_key": "0eb051ec-23a6-4e06-8b98-f02d20d35f68_1735123456789_user_123", "message": "Данные формы отправлены на обработку" } ``` ## 📢 Redis канал **Канал:** `clientright:webform:approve` **Формат сообщения:** ```json { "event_type": "form_approve", "status": "approved", "message": "Форма подтверждена после SMS-верификации", "claim_id": "0eb051ec-23a6-4e06-8b98-f02d20d35f68", "session_token": "sess_c9e7c0c2-de2e-40cd-ab7c-3bdc40282d34", "unified_id": "usr_90599ff2-ac79-4236-b950-0df85395096c", "phone": "79262306381", "sms_verified": true, "idempotency_key": "0eb051ec-23a6-4e06-8b98-f02d20d35f68_1735123456789_user_123", "timestamp": "2025-11-24T14:15:26.03297+03:00", "form_data": {...}, "user": {...}, "project": {...}, "offenders": [...], "meta": {...}, "original_data": {...} } ``` ## 🔐 Idempotency Key Для защиты от дублей генерируется `idempotency_key`: ``` {claim_id}_{timestamp_ms}_{user_id} ``` Этот ключ можно использовать в будущем для интеграции с RabbitMQ: - Проверка дублей перед обработкой - Дедупликация в очереди - Гарантия идемпотентности ## 🚀 Настройка n8n ### 1. Redis Subscribe Node **Operation:** `Subscribe` **Channel:** `clientright:webform:approve` ### 2. Обработка события После получения события из Redis: 1. Проверить `idempotency_key` (для защиты от дублей) 2. Обработать данные формы 3. Сохранить в БД через SQL запрос 4. Отправить уведомления (если нужно) ### 3. Пример workflow ``` [Redis Subscribe] → [Check Idempotency] → [Process Form Data] → [Save to DB] → [Send Notifications] ``` ## 🔮 Будущая интеграция с RabbitMQ При необходимости можно подключить RabbitMQ для: - **Очереди:** Гарантированная обработка всех событий - **Защита от дублей:** Проверка `idempotency_key` перед добавлением в очередь - **Retry механизм:** Автоматические повторы при ошибках - **Масштабирование:** Несколько воркеров для обработки ### Структура для RabbitMQ ```json { "queue": "form_approve", "message": { "idempotency_key": "...", "claim_id": "...", "data": {...} }, "headers": { "idempotency-key": "...", "retry-count": 0 } } ``` ## 📊 Мониторинг ### Проверка канала в Redis ```bash redis-cli -h crm.clientright.ru -p 6379 -a 'CRM_Redis_Pass_2025_Secure!' \ MONITOR | grep clientright:webform:approve ``` ### Подписка на канал (тест) ```bash redis-cli -h crm.clientright.ru -p 6379 -a 'CRM_Redis_Pass_2025_Secure!' \ SUBSCRIBE clientright:webform:approve ``` ## ✅ Преимущества 1. **Высокая производительность:** Redis Pub/Sub очень быстрый 2. **Не блокирует фронтенд:** Fire-and-forget подход 3. **Масштабируемость:** Можно добавить несколько подписчиков 4. **Готовность к RabbitMQ:** Idempotency key уже включен 5. **Простота отладки:** Можно мониторить через Redis MONITOR