97 lines
3.3 KiB
Markdown
97 lines
3.3 KiB
Markdown
|
|
# 🔍 Диагностика проблемы AI Drawer
|
|||
|
|
|
|||
|
|
## Проблема
|
|||
|
|
Ошибка: "Ошибка при получении ответа. Попробуйте еще раз."
|
|||
|
|
|
|||
|
|
## Что проверить
|
|||
|
|
|
|||
|
|
### 1. Проверить формат сообщения от n8n
|
|||
|
|
|
|||
|
|
n8n может публиковать сообщение в двух форматах:
|
|||
|
|
|
|||
|
|
**Формат 1 (просто текст):**
|
|||
|
|
```
|
|||
|
|
"Текст ответа от AI"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Формат 2 (JSON объект):**
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"task_id": "task-123",
|
|||
|
|
"response": "Текст ответа",
|
|||
|
|
"status": "completed"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. Проверить Redis ключ
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
redis-cli -h crm.clientright.ru -p 6379 -a 'CRM_Redis_Pass_2025_Secure!' \
|
|||
|
|
GET "ai:response:cache:task-691209e225894-1762789858"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Если ключ есть → ответ сохранен, но SSE не получил
|
|||
|
|
Если ключа нет → n8n не сохраняет в ключ (нужно настроить)
|
|||
|
|
|
|||
|
|
### 3. Проверить логи SSE
|
|||
|
|
|
|||
|
|
В консоли браузера должны быть логи:
|
|||
|
|
- `AI Drawer: SSE connection opened`
|
|||
|
|
- `AI Drawer: Received response via SSE`
|
|||
|
|
|
|||
|
|
Если их нет → SSE не подключается
|
|||
|
|
|
|||
|
|
### 4. Проверить публикацию в канал
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
redis-cli -h crm.clientright.ru -p 6379 -a 'CRM_Redis_Pass_2025_Secure!' \
|
|||
|
|
MONITOR
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Затем отправьте сообщение в AI Drawer - должны видеть PUBLISH команду
|
|||
|
|
|
|||
|
|
## Решение
|
|||
|
|
|
|||
|
|
### Если n8n публикует только в канал (без ключа):
|
|||
|
|
|
|||
|
|
1. **Добавьте Redis SET ноду в n8n** перед PUBLISH:
|
|||
|
|
- Operation: `Set`
|
|||
|
|
- Key: `ai:response:cache:{{ $json.taskId }}`
|
|||
|
|
- Value: JSON с ответом
|
|||
|
|
- TTL: 300 секунд
|
|||
|
|
|
|||
|
|
2. **Или** используйте текущий код - SSE endpoint сам сохранит в ключ когда получит из канала
|
|||
|
|
|
|||
|
|
### Если SSE не подключается:
|
|||
|
|
|
|||
|
|
1. Проверьте что `/aiassist/ai_sse.php` доступен
|
|||
|
|
2. Проверьте логи PHP на ошибки
|
|||
|
|
3. Проверьте консоль браузера на ошибки CORS/сети
|
|||
|
|
|
|||
|
|
## Текущая архитектура
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
n8n → Redis PUBLISH (канал) → SSE endpoint получает → сохраняет в ключ → отправляет браузеру
|
|||
|
|
↓
|
|||
|
|
Если SSE не получил → fallback проверяет ключ
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Что исправлено
|
|||
|
|
|
|||
|
|
✅ SSE endpoint теперь:
|
|||
|
|
- Принимает и JSON и простой текст
|
|||
|
|
- Сохраняет ответ в Redis ключ при получении
|
|||
|
|
- Проверяет ключ при подключении (на случай если ответ уже есть)
|
|||
|
|
|
|||
|
|
✅ JavaScript теперь:
|
|||
|
|
- Не вызывает fallback если уже получил ответ
|
|||
|
|
- Проверяет Redis ключ периодически если SSE не работает
|
|||
|
|
- Логирует все действия для отладки
|
|||
|
|
|
|||
|
|
## Следующие шаги
|
|||
|
|
|
|||
|
|
1. Проверьте что n8n сохраняет в ключ `ai:response:cache:{taskId}` ПЕРЕД публикацией
|
|||
|
|
2. Проверьте логи в консоли браузера
|
|||
|
|
3. Проверьте логи PHP (error_log)
|
|||
|
|
|