- Создан API create_document_with_text.php для создания DOCX/XLSX/PPTX с текстом от AI - Поддержка Markdown форматирования (заголовки, жирный, курсив, списки, код) - Установлен PHPWord для красивого форматирования документов - Исправлены пути сохранения (crm2/CRM_Active_Files/... без /crm/ в начале) - Замена пробелов на подчеркивания в именах папок - Создана документация для AI и разработчиков - Добавлены API для работы с шаблонами Nextcloud
3.3 KiB
3.3 KiB
🔍 Диагностика проблемы AI Drawer
Проблема
Ошибка: "Ошибка при получении ответа. Попробуйте еще раз."
Что проверить
1. Проверить формат сообщения от n8n
n8n может публиковать сообщение в двух форматах:
Формат 1 (просто текст):
"Текст ответа от AI"
Формат 2 (JSON объект):
{
"task_id": "task-123",
"response": "Текст ответа",
"status": "completed"
}
2. Проверить Redis ключ
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 openedAI Drawer: Received response via SSE
Если их нет → SSE не подключается
4. Проверить публикацию в канал
redis-cli -h crm.clientright.ru -p 6379 -a 'CRM_Redis_Pass_2025_Secure!' \
MONITOR
Затем отправьте сообщение в AI Drawer - должны видеть PUBLISH команду
Решение
Если n8n публикует только в канал (без ключа):
-
Добавьте Redis SET ноду в n8n перед PUBLISH:
- Operation:
Set - Key:
ai:response:cache:{{ $json.taskId }} - Value: JSON с ответом
- TTL: 300 секунд
- Operation:
-
Или используйте текущий код - SSE endpoint сам сохранит в ключ когда получит из канала
Если SSE не подключается:
- Проверьте что
/aiassist/ai_sse.phpдоступен - Проверьте логи PHP на ошибки
- Проверьте консоль браузера на ошибки CORS/сети
Текущая архитектура
n8n → Redis PUBLISH (канал) → SSE endpoint получает → сохраняет в ключ → отправляет браузеру
↓
Если SSE не получил → fallback проверяет ключ
Что исправлено
✅ SSE endpoint теперь:
- Принимает и JSON и простой текст
- Сохраняет ответ в Redis ключ при получении
- Проверяет ключ при подключении (на случай если ответ уже есть)
✅ JavaScript теперь:
- Не вызывает fallback если уже получил ответ
- Проверяет Redis ключ периодически если SSE не работает
- Логирует все действия для отладки
Следующие шаги
- Проверьте что n8n сохраняет в ключ
ai:response:cache:{taskId}ПЕРЕД публикацией - Проверьте логи в консоли браузера
- Проверьте логи PHP (error_log)