Added:
- Detailed logging for /api/v1/claims/description endpoint
- Full event data logging for debugging
- Documentation for n8n workflow setup (N8N_DESCRIPTION_WORKFLOW.md)
The issue: Form hangs on recommendations step because n8n doesn't process description events.
Flow:
1. Frontend sends description to /api/v1/claims/description
2. Backend publishes to Redis channel ticket_form:description
3. Frontend subscribes to SSE /api/v1/events/{session_id} (listens to ocr_events:{session_id})
4. n8n must:
- Subscribe to ticket_form:description channel
- Process description and generate wizard_plan
- Publish wizard_plan back to ocr_events:{session_id} channel
Files:
- backend/app/api/claims.py (enhanced logging)
- docs/N8N_DESCRIPTION_WORKFLOW.md (new documentation)
5.7 KiB
Настройка n8n Workflow для обработки описания проблемы
Проблема
После отправки описания проблемы форма "тупит" на шаге рекомендаций. Это происходит потому, что n8n не обрабатывает событие из Redis канала.
Текущий поток данных
- Frontend отправляет описание на
/api/v1/claims/description - Backend публикует событие в Redis канал
ticket_form:description - Frontend подписывается на SSE
/api/v1/events/{session_id}(слушает каналocr_events:{session_id}) - n8n должен:
- Подписаться на канал
ticket_form:description(или получить событие из него) - Обработать описание и сгенерировать
wizard_plan - Опубликовать
wizard_planв каналocr_events:{session_id}через POST/api/v1/events/{session_id}
- Подписаться на канал
Структура события в Redis канале ticket_form:description
{
"type": "ticket_form_description",
"session_id": "sess_xxx",
"claim_id": "claim_id_xxx" или null,
"phone": "79262306381",
"email": "user@example.com",
"description": "Описание проблемы...",
"source": "ticket_form",
"timestamp": "2025-11-25T12:30:36.262855"
}
Настройка n8n Workflow
Шаг 1: Redis Subscribe Node
- Добавьте Redis Subscribe node
- Настройте подключение к Redis:
- Host:
crm.clientright.ru(или IP вашего Redis) - Port:
6379 - Password:
CRM_Redis_Pass_2025_Secure!
- Host:
- Channel:
ticket_form:description - Output:
JSON
Шаг 2: Обработка описания
После получения события из Redis:
- Извлеките
session_idиз события:{{ $json.session_id }} - Извлеките
descriptionиз события:{{ $json.description }} - Обработайте описание (AI, RAG и т.д.)
- Сгенерируйте
wizard_plan
Шаг 3: Сохранение wizard_plan в PostgreSQL
Сохраните wizard_plan в таблицу clpr_claims используя SQL скрипт (например, SQL_CLAIMSAVE_UPSERT_SIMPLE.sql).
Шаг 4: Публикация wizard_plan обратно в Redis
ВАЖНО: После генерации wizard_plan нужно опубликовать событие обратно в Redis канал ocr_events:{session_id}.
Используйте HTTP Request node:
- Method: POST
- URL:
http://147.45.146.17:8200/api/v1/events/{{ $json.session_id }} - Headers:
{ "Content-Type": "application/json" } - Body (JSON):
{ "event_type": "wizard_ready", "status": "ready", "message": "Wizard plan готов", "data": { "claim_id": "{{ $json.claim_id }}", "wizard_plan": {{ $json.wizard_plan }}, "answers_prefill": {{ $json.answers_prefill }}, "coverage_report": {{ $json.coverage_report }} }, "timestamp": "{{ $now.toISO() }}" }
Альтернатива: Используйте Redis Publish node напрямую:
- Channel:
ocr_events:{{ $json.session_id }} - Message (JSON):
{ "event_type": "wizard_ready", "status": "ready", "message": "Wizard plan готов", "data": { "claim_id": "{{ $json.claim_id }}", "wizard_plan": {{ $json.wizard_plan }}, "answers_prefill": {{ $json.answers_prefill }}, "coverage_report": {{ $json.coverage_report }} }, "timestamp": "{{ $now.toISO() }}" }
Проверка работы
- Откройте консоль браузера (F12)
- Отправьте описание проблемы
- Проверьте логи backend:
docker-compose logs -f ticket_form_backend | grep -E "📝|📡|description" - Проверьте, что событие опубликовано в Redis:
redis-cli -h crm.clientright.ru -p 6379 -a "CRM_Redis_Pass_2025_Secure!" PUBSUB CHANNELS "ticket_form:*" - Проверьте, что n8n получил событие (в логах n8n workflow)
- Проверьте, что n8n опубликовал
wizard_planобратно в каналocr_events:{session_id}
Типичные проблемы
Проблема 1: n8n не получает события из Redis
Решение: Проверьте, что Redis Subscribe node правильно настроен и подключен к правильному каналу ticket_form:description.
Проблема 2: Frontend не получает wizard_plan
Решение: Проверьте, что n8n публикует событие в правильный канал ocr_events:{session_id} (не ocr_events:session_id, а ocr_events:{session_id} где {session_id} - это значение из события).
Проблема 3: Неправильный формат события
Решение: Убедитесь, что событие содержит поле event_type: "wizard_ready" и status: "ready". Backend ожидает этот формат.
Пример полного workflow в n8n
Redis Subscribe (ticket_form:description)
↓
Code Node (обработка описания)
↓
AI/RAG Node (генерация wizard_plan)
↓
PostgreSQL Node (сохранение wizard_plan)
↓
HTTP Request Node (POST /api/v1/events/{session_id})
или
Redis Publish Node (ocr_events:{session_id})