Files
aiform_prod/docs/REDIS_FORM_APPROVE.md
AI Assistant de092755af feat: Switch form approval to Redis channel instead of webhook
Changed from webhook to Redis Pub/Sub channel:
- Created endpoint POST /api/v1/claims/approve
- Publishes to Redis channel: form_approve:{claim_id}
- Added idempotency_key for future RabbitMQ integration
- Fire-and-forget approach (no waiting for response)

Benefits:
- Higher performance (Redis Pub/Sub is faster)
- Better scalability
- Ready for RabbitMQ queue integration
- Idempotency key included for duplicate protection

Files:
- backend/app/api/claims.py (new /approve endpoint)
- frontend/src/components/form/StepClaimConfirmation.tsx (updated saveFormData)
- docs/REDIS_FORM_APPROVE.md (documentation)
2025-11-25 12:29:36 +03:00

165 lines
4.9 KiB
Markdown
Raw 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 канал `form_approve:{claim_id}` для обработки в n8n workflow.
## 🔄 Архитектура
```
Frontend (StepClaimConfirmation)
→ POST /api/v1/claims/approve
→ Backend публикует в Redis канал form_approve:{claim_id}
→ 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": "form_approve:0eb051ec-23a6-4e06-8b98-f02d20d35f68",
"idempotency_key": "0eb051ec-23a6-4e06-8b98-f02d20d35f68_1735123456789_user_123",
"message": "Данные формы отправлены на обработку"
}
```
## 📢 Redis канал
**Канал:** `form_approve:{claim_id}`
**Формат сообщения:**
```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:** `form_approve:{{ $json.claim_id }}`
**Или:** Подписка на паттерн `form_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 form_approve
```
### Подписка на канал (тест)
```bash
redis-cli -h crm.clientright.ru -p 6379 -a 'CRM_Redis_Pass_2025_Secure!' \
SUBSCRIBE form_approve:*
```
## ✅ Преимущества
1. **Высокая производительность:** Redis Pub/Sub очень быстрый
2. **Не блокирует фронтенд:** Fire-and-forget подход
3. **Масштабируемость:** Можно добавить несколько подписчиков
4. **Готовность к RabbitMQ:** Idempotency key уже включен
5. **Простота отладки:** Можно мониторить через Redis MONITOR