# Настройка n8n Workflow для обработки описания проблемы ## Проблема После отправки описания проблемы форма "тупит" на шаге рекомендаций. Это происходит потому, что n8n не обрабатывает событие из Redis канала. ## Текущий поток данных 1. **Frontend** отправляет описание на `/api/v1/claims/description` 2. **Backend** публикует событие в Redis канал `ticket_form:description` 3. **Frontend** подписывается на SSE `/api/v1/events/{session_id}` (слушает канал `ocr_events:{session_id}`) 4. **n8n** должен: - Подписаться на канал `ticket_form:description` (или получить событие из него) - Обработать описание и сгенерировать `wizard_plan` - Опубликовать `wizard_plan` в канал `ocr_events:{session_id}` через POST `/api/v1/events/{session_id}` ## Структура события в Redis канале `ticket_form:description` ```json { "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 1. Добавьте **Redis Subscribe** node 2. Настройте подключение к Redis: - Host: `crm.clientright.ru` (или IP вашего Redis) - Port: `6379` - Password: `CRM_Redis_Pass_2025_Secure!` 3. Channel: `ticket_form:description` 4. Output: `JSON` ### Шаг 2: Обработка описания После получения события из Redis: 1. Извлеките `session_id` из события: `{{ $json.session_id }}` 2. Извлеките `description` из события: `{{ $json.description }}` 3. Обработайте описание (AI, RAG и т.д.) 4. Сгенерируйте `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:** ```json { "Content-Type": "application/json" } ``` - **Body (JSON):** ```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): ```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() }}" } ``` ## Проверка работы 1. Откройте консоль браузера (F12) 2. Отправьте описание проблемы 3. Проверьте логи backend: ```bash docker-compose logs -f ticket_form_backend | grep -E "📝|📡|description" ``` 4. Проверьте, что событие опубликовано в Redis: ```bash redis-cli -h crm.clientright.ru -p 6379 -a "CRM_Redis_Pass_2025_Secure!" PUBSUB CHANNELS "ticket_form:*" ``` 5. Проверьте, что n8n получил событие (в логах n8n workflow) 6. Проверьте, что 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}) ```