feat: Добавлен инструмент генерации документов для AI Ассистента

- Создан API create_document_with_text.php для создания DOCX/XLSX/PPTX с текстом от AI
- Поддержка Markdown форматирования (заголовки, жирный, курсив, списки, код)
- Установлен PHPWord для красивого форматирования документов
- Исправлены пути сохранения (crm2/CRM_Active_Files/... без /crm/ в начале)
- Замена пробелов на подчеркивания в именах папок
- Создана документация для AI и разработчиков
- Добавлены API для работы с шаблонами Nextcloud
This commit is contained in:
Fedor
2025-11-12 19:46:06 +03:00
parent 75912e5cfb
commit cd90b0d58a
307 changed files with 17246 additions and 417 deletions

96
AI_DRAWER_DEBUG.md Normal file
View File

@@ -0,0 +1,96 @@
# 🔍 Диагностика проблемы 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)