update: sessionId
parent
c160b15e2f
commit
6e99954b46
|
@ -1,3 +1,7 @@
|
||||||
/obj
|
bin/
|
||||||
/publish
|
obj/
|
||||||
/node_modules
|
publish/
|
||||||
|
appsettings.Development.json
|
||||||
|
*.user
|
||||||
|
*.db
|
||||||
|
node_modules/
|
||||||
|
|
|
@ -23,7 +23,7 @@ public class ApiProxyController : ControllerBase
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var payload = new { message = request.Message };
|
var payload = new { message = request.Message, sessionId = request.SessionId };
|
||||||
var json = JsonSerializer.Serialize(payload);
|
var json = JsonSerializer.Serialize(payload);
|
||||||
var content = new StringContent(json, Encoding.UTF8, "application/json");
|
var content = new StringContent(json, Encoding.UTF8, "application/json");
|
||||||
|
|
||||||
|
@ -57,5 +57,6 @@ public class ApiProxyController : ControllerBase
|
||||||
public class ChatRequest
|
public class ChatRequest
|
||||||
{
|
{
|
||||||
public string Message { get; set; } = string.Empty;
|
public string Message { get; set; } = string.Empty;
|
||||||
|
public string SessionId { get; set; } = string.Empty;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -443,11 +443,9 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||||
const sendMessage = document.getElementById("sendMessage");
|
const sendMessage = document.getElementById("sendMessage");
|
||||||
const userInput = document.getElementById("userInput");
|
const userInput = document.getElementById("userInput");
|
||||||
|
|
||||||
// Session configuration
|
|
||||||
const SESSION_DURATION = 30 * 60 * 1000;
|
const SESSION_DURATION = 30 * 60 * 1000;
|
||||||
const STORAGE_KEY = 'ecobot_chat_session';
|
const STORAGE_KEY = 'ecobot_chat_session';
|
||||||
|
|
||||||
// Load chat history from localStorage
|
|
||||||
function loadChatHistory() {
|
function loadChatHistory() {
|
||||||
try {
|
try {
|
||||||
const sessionData = localStorage.getItem(STORAGE_KEY);
|
const sessionData = localStorage.getItem(STORAGE_KEY);
|
||||||
|
@ -455,12 +453,9 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||||
const data = JSON.parse(sessionData);
|
const data = JSON.parse(sessionData);
|
||||||
const now = new Date().getTime();
|
const now = new Date().getTime();
|
||||||
|
|
||||||
// Check if session is still valid
|
|
||||||
if (now - data.timestamp < SESSION_DURATION) {
|
if (now - data.timestamp < SESSION_DURATION) {
|
||||||
const chatContent = document.querySelector(".chat-content");
|
const chatContent = document.querySelector(".chat-content");
|
||||||
// Clear default welcome message
|
|
||||||
chatContent.innerHTML = '';
|
chatContent.innerHTML = '';
|
||||||
// Load saved messages
|
|
||||||
data.messages.forEach(msg => {
|
data.messages.forEach(msg => {
|
||||||
const bubble = document.createElement("div");
|
const bubble = document.createElement("div");
|
||||||
bubble.className = `chat-bubble ${msg.type}`;
|
bubble.className = `chat-bubble ${msg.type}`;
|
||||||
|
@ -470,9 +465,8 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||||
chatContent.appendChild(bubble);
|
chatContent.appendChild(bubble);
|
||||||
});
|
});
|
||||||
chatContent.scrollTop = chatContent.scrollHeight;
|
chatContent.scrollTop = chatContent.scrollHeight;
|
||||||
return true; // Session restored
|
return true;
|
||||||
} else {
|
} else {
|
||||||
// Session expired, clear storage
|
|
||||||
localStorage.removeItem(STORAGE_KEY);
|
localStorage.removeItem(STORAGE_KEY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -480,10 +474,9 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||||
console.error('Error loading chat history:', error);
|
console.error('Error loading chat history:', error);
|
||||||
localStorage.removeItem(STORAGE_KEY);
|
localStorage.removeItem(STORAGE_KEY);
|
||||||
}
|
}
|
||||||
return false; // New session
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Save message to localStorage
|
|
||||||
function saveMessage(type, content) {
|
function saveMessage(type, content) {
|
||||||
try {
|
try {
|
||||||
let sessionData = localStorage.getItem(STORAGE_KEY);
|
let sessionData = localStorage.getItem(STORAGE_KEY);
|
||||||
|
@ -505,10 +498,12 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize chat session
|
function generateSessionId() {
|
||||||
|
return 'session_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9);
|
||||||
|
}
|
||||||
|
|
||||||
const sessionRestored = loadChatHistory();
|
const sessionRestored = loadChatHistory();
|
||||||
if (!sessionRestored) {
|
if (!sessionRestored) {
|
||||||
// New session - show welcome message and save it
|
|
||||||
const welcomeMsg = `
|
const welcomeMsg = `
|
||||||
<p>Halo! Selamat datang di layanan informasi Dinas Lingkungan Hidup DKI Jakarta! 👋</p>
|
<p>Halo! Selamat datang di layanan informasi Dinas Lingkungan Hidup DKI Jakarta! 👋</p>
|
||||||
<p>Saya di sini untuk membantu Anda. Ada yang ingin ditanyakan seputar layanan kami?</p>
|
<p>Saya di sini untuk membantu Anda. Ada yang ingin ditanyakan seputar layanan kami?</p>
|
||||||
|
@ -561,6 +556,17 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||||
chatContent.appendChild(typingIndicator);
|
chatContent.appendChild(typingIndicator);
|
||||||
chatContent.scrollTop = chatContent.scrollHeight;
|
chatContent.scrollTop = chatContent.scrollHeight;
|
||||||
|
|
||||||
|
// Get sessionId from localStorage
|
||||||
|
let sessionId = null;
|
||||||
|
try {
|
||||||
|
const sessionData = localStorage.getItem(STORAGE_KEY);
|
||||||
|
if (sessionData) {
|
||||||
|
const data = JSON.parse(sessionData);
|
||||||
|
sessionId = data.sessionId;
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error retrieving sessionId:', error);
|
||||||
|
}
|
||||||
fetch('/api/apiproxy/chatbot', {
|
fetch('/api/apiproxy/chatbot', {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
headers: {
|
headers: {
|
||||||
|
@ -570,12 +576,12 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||||
body: JSON.stringify({
|
body: JSON.stringify({
|
||||||
message: message
|
message: message
|
||||||
})
|
})
|
||||||
|
sessionId: sessionId
|
||||||
})
|
})
|
||||||
.then(response => {
|
.then(response => {
|
||||||
return response.json().catch(() => response.text());
|
return response.json().catch(() => response.text());
|
||||||
})
|
})
|
||||||
.then(data => {
|
.then(data => {
|
||||||
// Remove typing indicator
|
|
||||||
typingIndicator.remove();
|
typingIndicator.remove();
|
||||||
|
|
||||||
let reply = "";
|
let reply = "";
|
||||||
|
@ -632,7 +638,7 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
document.addEventListener('DOMContentLoaded', function() {
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
const UPDATE_INTERVAL = 5 * 60 * 1000; // 5 menit
|
const UPDATE_INTERVAL = 5 * 60 * 1000;
|
||||||
|
|
||||||
async function fetchVisitorStats(attempt = 1) {
|
async function fetchVisitorStats(attempt = 1) {
|
||||||
const RETRY_ATTEMPTS = 3;
|
const RETRY_ATTEMPTS = 3;
|
||||||
|
|
Loading…
Reference in New Issue