Files
crm.clientright.ru/ticket_form/docs/N8N_DESCRIPTION_WORKFLOW.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

5.7 KiB
Raw Blame History

Настройка 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

{
  "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:
    {
      "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() }}"
    }
    

Проверка работы

  1. Откройте консоль браузера (F12)
  2. Отправьте описание проблемы
  3. Проверьте логи backend:
    docker-compose logs -f ticket_form_backend | grep -E "📝|📡|description"
    
  4. Проверьте, что событие опубликовано в Redis:
    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})