You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

138 lines
4.9 KiB
JavaScript

const chat_ws_scheme = window.location.protocol === "https:" ? "wss" : "ws";
const domain = "192.168.1.111:8000";
// Function to fetch session ID
async function fetchSessionID() {
let session_id = 'Unknown';
while (session_id === 'Unknown') {
try {
const response = await fetch('http://192.168.1.111:3000/get-client-session/');
const data = await response.json();
if (data.session_id) {
session_id = data.session_id;
}
} catch (error) {
console.error('Error fetching session ID:', error);
}
}
return session_id;
}
// Function to initialize WebSocket connection
async function initializeChatWebSocket() {
const session_id = await fetchSessionID();
const osichatSocketUrl = `${chat_ws_scheme}://${domain}/ws/osichat/${session_id}/`;
const osichatSocket = new WebSocket(osichatSocketUrl);
osichatSocket.onopen = () => {
console.log('WebSocket connection to osichat established');
const eventMessage = {
'event_type': 'load_chat',
};
osichatSocket.send(JSON.stringify(eventMessage));
};
osichatSocket.onmessage = function (e) {
const data = JSON.parse(e.data);
if (data.event_type === 'load_chat') {
const chatDiv = document.getElementById('osichat');
const html = data.html;
chatDiv.innerHTML = html;
// Append the toggle tag
const script = document.createElement('script');
script.type = 'text/javascript';
script.src = `http://${domain}/static/js/osichat/chat-toggle.js`;
chatDiv.appendChild(script);
const startChatContainer = document.getElementById('startChat');
// If this container exists then the template returned was start-conversation.html, no conversation yet.
if (startChatContainer) {
startChatContainer.addEventListener('submit', function (event) {
event.preventDefault();
const guestName = event.target.elements.guest_name.value;
const guestMobileNumber = event.target.elements.guest_mobile_number.value;
const eventMessage = {
'event_type': 'start_conversation',
'guest_name': guestName,
'guest_mobile_number': guestMobileNumber,
};
osichatSocket.send(JSON.stringify(eventMessage));
event.target.reset();
});
}
const sendMessageContainer = document.getElementById('sendMessage');
if (sendMessageContainer) {
const textareaScript = document.createElement('script');
textareaScript.type = 'text/javascript';
textareaScript.src = `http://${domain}/static/js/osichat/textarea.js`;
chatDiv.appendChild(textareaScript);
sendMessageContainer.addEventListener('submit', function (event) {
event.preventDefault();
const message = event.target.elements.message.value;
const eventMessage = {
'event_type': 'send_message',
'message': message,
};
osichatSocket.send(JSON.stringify(eventMessage));
event.target.reset();
});
}
} else if (data.event_type === 'start_conversation') {
const chatDiv = document.getElementById('osichat');
const html = data.html;
chatDiv.innerHTML = html;
const textareaScript = document.createElement('script');
textareaScript.type = 'text/javascript';
textareaScript.src = `http://${domain}/static/js/osichat/textarea.js`;
chatDiv.appendChild(textareaScript);
const sendMessageContainer = document.getElementById('sendMessage');
sendMessageContainer.addEventListener('submit', function (event) {
event.preventDefault();
const message = event.target.elements.message.value;
const eventMessage = {
'event_type': 'send_message',
'message': message,
};
osichatSocket.send(JSON.stringify(eventMessage));
event.target.reset();
});
} else if (data.event_type === 'send_message') {
const messagesDiv = document.getElementById('messages');
const html = data.html;
messagesDiv.insertAdjacentHTML('beforeend', html);
}
};
osichatSocket.onclose = () => {
console.log('WebSocket connection to osichat closed');
};
osichatSocket.onerror = (error) => {
console.log('WebSocket error:', error);
};
}
initializeChatWebSocket();