286 lines
11 KiB
HTML
286 lines
11 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="ru">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>Тест интеграции CRM с Typebot</title>
|
||
<style>
|
||
body {
|
||
font-family: Arial, sans-serif;
|
||
max-width: 800px;
|
||
margin: 0 auto;
|
||
padding: 20px;
|
||
background-color: #f5f5f5;
|
||
}
|
||
.container {
|
||
background: white;
|
||
border-radius: 10px;
|
||
padding: 20px;
|
||
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
|
||
}
|
||
.test-section {
|
||
background: #e3f2fd;
|
||
padding: 15px;
|
||
border-radius: 8px;
|
||
margin: 15px 0;
|
||
}
|
||
.result {
|
||
background: #f3e5f5;
|
||
padding: 10px;
|
||
border-radius: 5px;
|
||
margin: 10px 0;
|
||
white-space: pre-wrap;
|
||
font-family: monospace;
|
||
font-size: 12px;
|
||
}
|
||
.error {
|
||
background: #ffebee;
|
||
color: #c62828;
|
||
}
|
||
.success {
|
||
background: #e8f5e8;
|
||
color: #2e7d32;
|
||
}
|
||
button {
|
||
background: #2196f3;
|
||
color: white;
|
||
border: none;
|
||
padding: 10px 20px;
|
||
border-radius: 5px;
|
||
cursor: pointer;
|
||
margin: 5px;
|
||
}
|
||
button:hover {
|
||
background: #1976d2;
|
||
}
|
||
input[type="text"] {
|
||
width: 100%;
|
||
padding: 10px;
|
||
border: 1px solid #ddd;
|
||
border-radius: 5px;
|
||
margin: 5px 0;
|
||
}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
<div class="container">
|
||
<h1>🧪 Тест интеграции CRM с Typebot</h1>
|
||
|
||
<div class="test-section">
|
||
<h3>1. Тест прокси Typebot</h3>
|
||
<input type="text" id="testMessage" placeholder="Введите тестовое сообщение..." value="Привет, это тест из CRM">
|
||
<button onclick="testProxy()">Тестировать прокси</button>
|
||
<div id="proxyResult" class="result"></div>
|
||
</div>
|
||
|
||
<div class="test-section">
|
||
<h3>2. Тест прямого обращения к Typebot</h3>
|
||
<button onclick="testDirectTypebot()">Тестировать прямое обращение</button>
|
||
<div id="directResult" class="result"></div>
|
||
</div>
|
||
|
||
<div class="test-section">
|
||
<h3>3. Тест CORS</h3>
|
||
<button onclick="testCORS()">Тестировать CORS</button>
|
||
<div id="corsResult" class="result"></div>
|
||
</div>
|
||
|
||
<div class="test-section">
|
||
<h3>4. Симуляция CRM контекста</h3>
|
||
<button onclick="testCRMContext()">Тестировать с CRM контекстом</button>
|
||
<div id="crmResult" class="result"></div>
|
||
</div>
|
||
|
||
<div class="test-section">
|
||
<h3>5. Полный тест интеграции</h3>
|
||
<button onclick="testFullIntegration()">Полный тест</button>
|
||
<div id="fullResult" class="result"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<script>
|
||
const PROXY_URL = '/aiassist/typebot_proxy.php';
|
||
const TYPEBOT_URL = 'https://bot.klientprav.tech/api/v1/typebots/my-typebot-lezm06l/startChat';
|
||
|
||
function showResult(elementId, content, isError = false) {
|
||
const element = document.getElementById(elementId);
|
||
element.textContent = content;
|
||
element.className = `result ${isError ? 'error' : 'success'}`;
|
||
}
|
||
|
||
async function testProxy() {
|
||
const message = document.getElementById('testMessage').value;
|
||
showResult('proxyResult', 'Тестирование прокси...');
|
||
|
||
try {
|
||
const response = await fetch(PROXY_URL, {
|
||
method: 'POST',
|
||
headers: {
|
||
'Content-Type': 'application/json',
|
||
},
|
||
body: JSON.stringify({
|
||
action: 'startChat',
|
||
message: message,
|
||
context: {
|
||
projectId: 'test-123',
|
||
module: 'Accounts',
|
||
view: 'Detail',
|
||
userId: '1'
|
||
}
|
||
})
|
||
});
|
||
|
||
const result = await response.json();
|
||
|
||
if (result.success) {
|
||
showResult('proxyResult', `✅ Прокси работает!\n\nОтвет:\n${JSON.stringify(result.data, null, 2)}`);
|
||
} else {
|
||
showResult('proxyResult', `❌ Ошибка прокси:\n${result.error}`, true);
|
||
}
|
||
} catch (error) {
|
||
showResult('proxyResult', `❌ Ошибка сети:\n${error.message}`, true);
|
||
}
|
||
}
|
||
|
||
async function testDirectTypebot() {
|
||
showResult('directResult', 'Тестирование прямого обращения...');
|
||
|
||
try {
|
||
const response = await fetch(TYPEBOT_URL, {
|
||
method: 'POST',
|
||
headers: {
|
||
'Content-Type': 'application/json',
|
||
},
|
||
body: JSON.stringify({
|
||
message: {
|
||
type: 'text',
|
||
text: 'Тест прямого обращения'
|
||
},
|
||
prefilledVariables: {
|
||
projectId: 'test-123',
|
||
module: 'Accounts',
|
||
view: 'Detail',
|
||
userId: '1'
|
||
}
|
||
})
|
||
});
|
||
|
||
if (response.ok) {
|
||
const result = await response.json();
|
||
showResult('directResult', `✅ Прямое обращение работает!\n\nОтвет:\n${JSON.stringify(result, null, 2)}`);
|
||
} else {
|
||
showResult('directResult', `❌ Ошибка прямого обращения:\nHTTP ${response.status}: ${response.statusText}`, true);
|
||
}
|
||
} catch (error) {
|
||
showResult('directResult', `❌ CORS ошибка (ожидаемо):\n${error.message}`, true);
|
||
}
|
||
}
|
||
|
||
async function testCORS() {
|
||
showResult('corsResult', 'Тестирование CORS...');
|
||
|
||
try {
|
||
// Пробуем запрос к внешнему домену
|
||
const response = await fetch('https://httpbin.org/get');
|
||
const result = await response.json();
|
||
showResult('corsResult', `✅ CORS работает для httpbin.org\n\nОтвет:\n${JSON.stringify(result, null, 2)}`);
|
||
} catch (error) {
|
||
showResult('corsResult', `❌ CORS ошибка:\n${error.message}`, true);
|
||
}
|
||
}
|
||
|
||
async function testCRMContext() {
|
||
showResult('crmResult', 'Тестирование с CRM контекстом...');
|
||
|
||
try {
|
||
const response = await fetch(PROXY_URL, {
|
||
method: 'POST',
|
||
headers: {
|
||
'Content-Type': 'application/json',
|
||
},
|
||
body: JSON.stringify({
|
||
action: 'startChat',
|
||
message: 'Покажи информацию о проекте',
|
||
context: {
|
||
projectId: 'PROJ-2024-001',
|
||
module: 'Project',
|
||
view: 'Detail',
|
||
userId: 'admin',
|
||
userName: 'Администратор',
|
||
currentUrl: window.location.href,
|
||
timestamp: new Date().toISOString()
|
||
}
|
||
})
|
||
});
|
||
|
||
const result = await response.json();
|
||
|
||
if (result.success) {
|
||
showResult('crmResult', `✅ CRM контекст работает!\n\nОтвет:\n${JSON.stringify(result.data, null, 2)}`);
|
||
} else {
|
||
showResult('crmResult', `❌ Ошибка с CRM контекстом:\n${result.error}`, true);
|
||
}
|
||
} catch (error) {
|
||
showResult('crmResult', `❌ Ошибка сети:\n${error.message}`, true);
|
||
}
|
||
}
|
||
|
||
async function testFullIntegration() {
|
||
showResult('fullResult', 'Полный тест интеграции...');
|
||
|
||
let results = [];
|
||
|
||
// Тест 1: Прокси
|
||
try {
|
||
const proxyResponse = await fetch(PROXY_URL, {
|
||
method: 'POST',
|
||
headers: { 'Content-Type': 'application/json' },
|
||
body: JSON.stringify({
|
||
action: 'startChat',
|
||
message: 'Полный тест интеграции',
|
||
context: { projectId: 'full-test', module: 'Test', view: 'Test', userId: 'test' }
|
||
})
|
||
});
|
||
|
||
const proxyResult = await proxyResponse.json();
|
||
results.push(`✅ Прокси: ${proxyResult.success ? 'OK' : 'ERROR'}`);
|
||
|
||
if (proxyResult.success && proxyResult.data.sessionId) {
|
||
// Тест 2: Продолжение сессии
|
||
const continueResponse = await fetch(PROXY_URL, {
|
||
method: 'POST',
|
||
headers: { 'Content-Type': 'application/json' },
|
||
body: JSON.stringify({
|
||
action: 'continueChat',
|
||
sessionId: proxyResult.data.sessionId,
|
||
message: 'Второе сообщение в сессии'
|
||
})
|
||
});
|
||
|
||
const continueResult = await continueResponse.json();
|
||
results.push(`✅ Продолжение сессии: ${continueResult.success ? 'OK' : 'ERROR'}`);
|
||
}
|
||
|
||
} catch (error) {
|
||
results.push(`❌ Прокси: ${error.message}`);
|
||
}
|
||
|
||
// Тест 3: Проверка доступности Typebot
|
||
try {
|
||
const typebotResponse = await fetch('https://bot.klientprav.tech/api/v1/typebots/my-typebot-lezm06l');
|
||
results.push(`✅ Typebot доступен: ${typebotResponse.ok ? 'OK' : 'ERROR'}`);
|
||
} catch (error) {
|
||
results.push(`❌ Typebot недоступен: ${error.message}`);
|
||
}
|
||
|
||
showResult('fullResult', `Результаты полного теста:\n\n${results.join('\n')}`);
|
||
}
|
||
|
||
// Автоматический тест при загрузке
|
||
window.onload = function() {
|
||
console.log('Тест интеграции CRM загружен');
|
||
setTimeout(testProxy, 1000);
|
||
};
|
||
</script>
|
||
</body>
|
||
</html> |