Files
aiform_prod/docs/N8N_DESCRIPTION_WORKFLOW.md

151 lines
5.7 KiB
Markdown
Raw Permalink Normal View 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`
```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})
```