Files
aiform_prod/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

4.8 KiB
Raw Permalink Blame History

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

{
  "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

{
  "success": true,
  "channel": "clientright:webform:approve",
  "idempotency_key": "0eb051ec-23a6-4e06-8b98-f02d20d35f68_1735123456789_user_123",
  "message": "Данные формы отправлены на обработку"
}

📢 Redis канал

Канал: clientright:webform:approve

Формат сообщения:

{
  "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

{
  "queue": "form_approve",
  "message": {
    "idempotency_key": "...",
    "claim_id": "...",
    "data": {...}
  },
  "headers": {
    "idempotency-key": "...",
    "retry-count": 0
  }
}

📊 Мониторинг

Проверка канала в Redis

redis-cli -h crm.clientright.ru -p 6379 -a 'CRM_Redis_Pass_2025_Secure!' \
  MONITOR | grep clientright:webform:approve

Подписка на канал (тест)

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