Files
aiform_dev/docs/REDIS_FORM_APPROVE.md
AI Assistant 13070a2100 fix: Change Redis channel to fixed name clientright:webform:approve
Changed from dynamic channel form_approve:{claim_id} to fixed channel:
- Channel: clientright:webform:approve
- Simpler n8n subscription (no need for dynamic channel name)
- All form approvals go to the same channel

Files:
- backend/app/api/claims.py
- frontend/src/components/form/StepClaimConfirmation.tsx
- docs/REDIS_FORM_APPROVE.md
2025-11-25 12:32:51 +03:00

164 lines
4.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

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.

# 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