Files
crm.clientright.ru/debug_ai_response.html

252 lines
10 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<title>AI Drawer Response Debug</title>
<style>
body { font-family: Arial, sans-serif; margin: 20px; }
.test-section { margin: 20px 0; padding: 15px; border: 1px solid #ccc; }
.result { background: #f5f5f5; padding: 10px; margin: 10px 0; }
.error { background: #ffebee; color: #c62828; }
.success { background: #e8f5e8; color: #2e7d32; }
button { padding: 10px 20px; margin: 5px; }
</style>
</head>
<body>
<h1>AI Drawer Response Debug</h1>
<div class="test-section">
<h3>Тест 1: Прямой запрос к n8n прокси</h3>
<button onclick="testN8NProxy()">Тест n8n прокси</button>
<div id="n8n-result" class="result"></div>
</div>
<div class="test-section">
<h3>Тест 2: Локальный AI</h3>
<button onclick="testLocalAI()">Тест локальный AI</button>
<div id="local-result" class="result"></div>
</div>
<div class="test-section">
<h3>Тест 3: Симуляция AI Drawer</h3>
<button onclick="testAIDrawer()">Тест AI Drawer логика</button>
<div id="drawer-result" class="result"></div>
</div>
<script>
const AI_CONFIG = {
n8n: {
enabled: true,
proxyUrl: '/aiassist/n8n_proxy.php'
},
local: {
enabled: false,
url: '/aiassist/crm_endpoint.php'
}
};
async function testN8NProxy() {
const resultDiv = document.getElementById('n8n-result');
resultDiv.innerHTML = 'Тестируем...';
try {
const response = await fetch(AI_CONFIG.n8n.proxyUrl, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
message: 'тест сообщение',
context: {
module: 'Project',
projectId: '390681'
},
sessionId: 'test-session-' + Date.now()
})
});
if (!response.ok) {
throw new Error(`HTTP ${response.status}`);
}
const data = await response.json();
resultDiv.className = 'result success';
resultDiv.innerHTML = `
<strong>✅ n8n прокси работает!</strong><br>
<strong>Ответ:</strong> ${data.response}<br>
<strong>Источник:</strong> ${data.source}<br>
<strong>Сырой ответ:</strong> <pre>${JSON.stringify(data.rawResponse, null, 2)}</pre>
`;
} catch (error) {
resultDiv.className = 'result error';
resultDiv.innerHTML = `<strong>❌ Ошибка n8n прокси:</strong> ${error.message}`;
}
}
async function testLocalAI() {
const resultDiv = document.getElementById('local-result');
resultDiv.innerHTML = 'Тестируем...';
try {
const response = await fetch(AI_CONFIG.local.url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
message: 'тест сообщение',
context: {
module: 'Project',
projectId: '390681'
},
sessionId: 'test-session-' + Date.now()
})
});
if (!response.ok) {
throw new Error(`HTTP ${response.status}`);
}
const data = await response.json();
resultDiv.className = 'result success';
resultDiv.innerHTML = `
<strong>✅ Локальный AI работает!</strong><br>
<strong>Ответ:</strong> ${data.response}<br>
<strong>Время:</strong> ${data.timestamp}
`;
} catch (error) {
resultDiv.className = 'result error';
resultDiv.innerHTML = `<strong>❌ Ошибка локального AI:</strong> ${error.message}`;
}
}
async function testAIDrawer() {
const resultDiv = document.getElementById('drawer-result');
resultDiv.innerHTML = 'Тестируем...';
try {
// Симулируем логику AI Drawer
const message = 'тест сообщение';
const context = {
module: 'Project',
projectId: '390681'
};
console.log('AI Drawer: sendToAI called with message:', message);
console.log('AI Drawer: context:', context);
console.log('AI Drawer: AI_CONFIG:', AI_CONFIG);
// Пробуем n8n если включен
if (AI_CONFIG.n8n.enabled) {
console.log('AI Drawer: Using n8n');
try {
const result = await sendToN8N(message, context);
resultDiv.className = 'result success';
resultDiv.innerHTML = `
<strong>✅ AI Drawer использует n8n!</strong><br>
<strong>Результат:</strong> ${JSON.stringify(result, null, 2)}<br>
<strong>Текст ответа:</strong> ${result.response || result}
`;
return;
} catch (error) {
console.error('AI Drawer: n8n error, falling back to local AI:', error);
// Fallback на локальный AI при ошибке n8n
const result = await sendToLocalAI(message, context);
resultDiv.className = 'result error';
resultDiv.innerHTML = `
<strong>⚠️ AI Drawer использует локальный AI (fallback)</strong><br>
<strong>Ошибка n8n:</strong> ${error.message}<br>
<strong>Результат локального AI:</strong> ${result}
`;
return;
}
}
// Fallback на локальный AI ассистент
console.log('AI Drawer: Using local AI');
const result = await sendToLocalAI(message, context);
resultDiv.className = 'result success';
resultDiv.innerHTML = `
<strong>✅ AI Drawer использует локальный AI</strong><br>
<strong>Результат:</strong> ${result}
`;
} catch (error) {
resultDiv.className = 'result error';
resultDiv.innerHTML = `<strong>❌ Ошибка AI Drawer:</strong> ${error.message}`;
}
}
async function sendToN8N(message, context) {
console.log('AI Drawer: sendToN8N called with message:', message);
console.log('AI Drawer: sendToN8N context:', context);
const sessionId = 'n8n-session-' + Date.now();
try {
const response = await fetch(AI_CONFIG.n8n.proxyUrl, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
message: message,
context: context,
sessionId: sessionId
})
});
if (!response.ok) {
throw new Error(`N8N Proxy error: ${response.status}`);
}
const data = await response.json();
console.log('AI Drawer: n8n response:', data);
if (data.error) {
throw new Error(data.error);
}
return {
response: data.response,
sessionId: data.sessionId,
source: 'n8n'
};
} catch (error) {
throw error;
}
}
async function sendToLocalAI(message, context) {
try {
const response = await fetch(AI_CONFIG.local.url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
message: message,
context: context,
sessionId: 'crm-session-' + Date.now()
})
});
if (!response.ok) {
throw new Error(`Local AI error: ${response.status}`);
}
const data = await response.json();
console.log('AI Drawer: Local AI response:', data);
return data.response || data.message || 'Получен ответ от AI ассистента.';
} catch (error) {
console.error('AI Drawer: Local AI error:', error);
// Простой fallback ответ
return `Я получил ваше сообщение: "${message}". Сейчас работаю в режиме локального AI ассистента. Контекст: модуль ${context.module}, запись ${context.projectId}.`;
}
}
</script>
</body>
</html>