Files
crm.clientright.ru/test_typebot_logic.html

290 lines
11 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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>