Files
crm.clientright.ru/ticket_form/docs/REDIS_FORM_APPROVE.md
Fedor 52fe013375 feat(ticket_form): unified_id/contact_id передача, исправлен мерж сессии, новая сессия для жалобы
- Добавлены unified_id и contact_id в TicketFormDescriptionRequest
- Исправлен CODE_MERGE_PROJECT_TO_SESSION.js - теперь сохраняются ВСЕ данные из body.other
- Добавлен fallback на получение other из Webhook напрямую
- Генерация новой session_id при создании новой жалобы (сохраняя авторизацию)
- Добавлен SQL_SELECT_CONTACT_WITH_CUSTOM_FIELDS.sql для CRM контактов
- Создан SESSION_LOG_2025-11-25.md с документацией сессии
2025-11-25 20:02:21 +03:00

164 lines
4.8 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 канал `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