Files
crm.clientright.ru/test_typebot_logic.html

290 lines
11 KiB
HTML
Raw Permalink Normal View History

<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Тест логики 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;
}
.chat-log {
background: #f8f9fa;
padding: 15px;
border-radius: 8px;
margin: 15px 0;
max-height: 400px;
overflow-y: auto;
border: 1px solid #dee2e6;
}
.message {
margin: 10px 0;
padding: 10px;
border-radius: 5px;
}
.message.user {
background: #007bff;
color: white;
text-align: right;
}
.message.bot {
background: #e9ecef;
color: #333;
}
</style>
</head>
<body>
<div class="container">
<h1>🧪 Тест логики Typebot</h1>
<div class="test-section">
<h3>💬 Тест диалога</h3>
<input type="text" id="testMessage" placeholder="Введите сообщение..." value="Привет">
<button onclick="sendMessage()">Отправить сообщение</button>
<button onclick="clearChat()">Очистить чат</button>
<div id="chatLog" class="chat-log"></div>
</div>
<div class="test-section">
<h3>📊 Результаты тестов</h3>
<div id="testResults" class="result"></div>
</div>
</div>
<script>
let sessionId = null;
const PROXY_URL = '/aiassist/typebot_proxy.php';
function addMessage(text, isUser = false) {
const chatLog = document.getElementById('chatLog');
const messageDiv = document.createElement('div');
messageDiv.className = `message ${isUser ? 'user' : 'bot'}`;
messageDiv.textContent = text;
chatLog.appendChild(messageDiv);
chatLog.scrollTop = chatLog.scrollHeight;
}
function logResult(message, isError = false) {
const resultsDiv = document.getElementById('testResults');
const timestamp = new Date().toLocaleTimeString();
const logEntry = `[${timestamp}] ${message}\n`;
resultsDiv.textContent += logEntry;
if (isError) {
resultsDiv.className = 'result error';
} else {
resultsDiv.className = 'result success';
}
}
function clearChat() {
document.getElementById('chatLog').innerHTML = '';
sessionId = null;
logResult('Чат очищен, сессия сброшена');
}
async function sendMessage() {
const message = document.getElementById('testMessage').value.trim();
if (!message) {
alert('Введите сообщение');
return;
}
addMessage(message, true);
logResult(`Отправка сообщения: "${message}"`);
try {
const action = sessionId ? 'continueChat' : 'startChat';
logResult(`Действие: ${action}, SessionId: ${sessionId || 'новый'}`);
const response = await fetch(PROXY_URL, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
action: action,
message: message,
sessionId: sessionId,
context: {
projectId: 'test-123',
module: 'Test',
view: 'Test',
userId: 'test-user'
}
})
});
const result = await response.json();
logResult(`Ответ прокси: ${JSON.stringify(result, null, 2)}`);
if (result.success) {
const data = result.data;
// Обновляем sessionId если он есть
if (data.sessionId) {
sessionId = data.sessionId;
logResult(`SessionId обновлен: ${sessionId}`);
}
// Обрабатываем сообщения
if (data.messages && data.messages.length > 0) {
const lastMessage = data.messages[data.messages.length - 1];
let messageText = '';
if (lastMessage.content && lastMessage.content.richText) {
// Извлекаем текст из richText массива
messageText = extractTextFromRichText(lastMessage.content.richText);
} else {
messageText = lastMessage.content || 'Получен ответ от бота';
}
addMessage(messageText, false);
logResult(`Добавлено сообщение бота: "${messageText}"`);
}
// Обрабатываем clientSideActions
if (data.clientSideActions && data.clientSideActions.length > 0) {
logResult(`Найдено ${data.clientSideActions.length} clientSideActions`);
for (const action of data.clientSideActions) {
if (action.type === 'httpRequestToExecute') {
logResult(`Выполнение HTTP запроса: ${action.httpRequestToExecute.url}`);
await executeHttpRequest(action.httpRequestToExecute);
}
}
addMessage('Обрабатываю ваш запрос...', false);
}
// Проверяем input блок
if (data.input) {
logResult('Бот ждет ввода пользователя');
addMessage('Бот ждет ваш ответ...', false);
}
// Если нет сообщений и действий
if (!data.messages && !data.clientSideActions && !data.input) {
logResult('Нет сообщений, действий или input блока');
addMessage('Получен ответ от бота', false);
}
} else {
logResult(`Ошибка прокси: ${result.error}`, true);
addMessage('Ошибка: ' + result.error, false);
}
} catch (error) {
logResult(`Ошибка: ${error.message}`, true);
addMessage('Ошибка: ' + error.message, false);
}
}
function extractTextFromRichText(richText) {
if (!richText || !Array.isArray(richText)) {
return '';
}
let text = '';
for (const item of richText) {
if (item.type === 'p' && item.children) {
for (const child of item.children) {
if (child.text) {
text += child.text;
}
}
text += '\n';
} else if (item.text) {
text += item.text;
}
}
return text.trim();
}
async function executeHttpRequest(httpRequest) {
try {
logResult(`Выполнение HTTP запроса: ${httpRequest.url}`);
const response = await fetch(httpRequest.url, {
method: httpRequest.method || 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(httpRequest.body)
});
const result = await response.json();
logResult(`HTTP запрос выполнен: ${JSON.stringify(result, null, 2)}`);
// Если n8n вернул ответ, показываем его
if (result && result.length > 0 && result[0].output) {
addMessage(result[0].output, false);
}
return result;
} catch (error) {
logResult(`Ошибка HTTP запроса: ${error.message}`, true);
return null;
}
}
// Автоматический тест при загрузке
window.onload = function() {
logResult('Тест логики Typebot запущен');
addMessage('Привет! Я тестовый бот. Попробуйте отправить сообщение.', false);
};
</script>
</body>
</html>