Tópico sobre construção de um chatbot web com autenticação por email…
INEMA
} else if (jsonData.message) {
responseText = jsonData.message;
} else if (jsonData.choices && jsonData.choices[0] && jsonData.choices[0].message) {
responseText = jsonData.choices[0].message.content;
} else {
// Fallback to stringify if no known format
responseText = JSON.stringify(jsonData, null, 2);
}
addMessage('system', responseText);
return;
}
} catch (jsonError) {
console.log("Response is not JSON, trying as text");
}
// If JSON parsing failed, try as plain text
try {
const textData = await responseClone.text();
addMessage('system', textData || "Recebi uma resposta vazia do servidor.");
} catch (textError) {
console.error("Error reading response as text:", textError);
addMessage('system', `Erro ao ler a resposta do servidor: ${textError.message}`);
}
} catch (error) {
console.error('Error:', error);
addMessage('system', `Desculpe, houve um erro ao processar sua solicitação: ${error.message}`);
} finally {
typingIndicator.classList.add('hidden');
userInput.disabled = false;
sendButton.disabled = false;
isWaitingResponse = false;
userInput.focus();
}
}
function addMessage(sender, text) {
const messageDiv = document.createElement('div');
messageDiv.className = 'message-transition fade-in flex ' + (sender === 'user' ? 'justify-end' : 'justify-start');
const bubble = document.createElement('div');
bubble.className = sender === 'user'
? 'max-w-xs sm:max-w-md md:max-w-lg bg-blue-600 text-white rounded-xl p-3'
: 'max-w-xs sm:max-w-md md:max-w-lg bg-gray-100 text-gray-800 rounded-xl p-3';
bubble.innerHTML = `<p>${text}</p>`;
messageDiv.appendChild(bubble);
chatMessages.appendChild(messageDiv);
chatMessages.scrollTop = chatMessages.scrollHeight;
// Trigger animation
setTimeout(() => {
messageDiv.classList.add('fade-in');
}, 10);
}
// Close modal when clicking outside
window.addEventListener('click', (event) => {
if (event.target === authModal) {
authModal.classList.add('hidden');
}
});
</script>