ok
This commit is contained in:
@@ -19,7 +19,6 @@ const Dashboard = () => {
|
|||||||
totalChats: 0,
|
totalChats: 0,
|
||||||
userMessages: 0,
|
userMessages: 0,
|
||||||
botMessages: 0,
|
botMessages: 0,
|
||||||
mostDiscussedTopics: '-',
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
@@ -38,17 +37,22 @@ const Dashboard = () => {
|
|||||||
try {
|
try {
|
||||||
const response = await fetch('https://bot.kediritechnopark.com/webhook/master-agent/dashboard');
|
const response = await fetch('https://bot.kediritechnopark.com/webhook/master-agent/dashboard');
|
||||||
const data = await response.json();
|
const data = await response.json();
|
||||||
|
setDiscussedTopics(data[0].result.topics)
|
||||||
|
console.log(data[0].result.topics[0].topic)
|
||||||
|
|
||||||
setRawData(data);
|
const graphObj = data[0].result.graph;
|
||||||
|
const rawDataArray = Object.entries(graphObj).map(([hour, sesi]) => ({
|
||||||
// Hitung statistik
|
hour,
|
||||||
let totalSessions = new Set(); // unik session_id
|
sesi,
|
||||||
|
}));
|
||||||
|
setRawData(rawDataArray);
|
||||||
|
let totalSessions = new Set();
|
||||||
let userMessages = 0;
|
let userMessages = 0;
|
||||||
let botMessages = 0;
|
let botMessages = 0;
|
||||||
|
|
||||||
data.forEach(({ sesi }) => {
|
rawDataArray.forEach(({ sesi }) => {
|
||||||
Object.entries(sesi).forEach(([channel, messages]) => {
|
Object.values(sesi).forEach(messages => {
|
||||||
messages.forEach((msg) => {
|
messages.forEach(msg => {
|
||||||
totalSessions.add(msg.session_id);
|
totalSessions.add(msg.session_id);
|
||||||
if (msg.message.type === 'human') userMessages++;
|
if (msg.message.type === 'human') userMessages++;
|
||||||
if (msg.message.type === 'ai') botMessages++;
|
if (msg.message.type === 'ai') botMessages++;
|
||||||
@@ -56,11 +60,11 @@ const Dashboard = () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
setStats({
|
setStats({
|
||||||
totalChats: totalSessions.size,
|
totalChats: totalSessions.size,
|
||||||
userMessages,
|
userMessages,
|
||||||
botMessages,
|
botMessages,
|
||||||
mostDiscussedTopics: '-', // placeholder, bisa ditambah nanti
|
|
||||||
});
|
});
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@@ -103,19 +107,14 @@ useEffect(() => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const prefixes = Object.keys(prefixLabelMap);
|
const prefixes = Object.keys(prefixLabelMap);
|
||||||
|
const hours = rawData.map(d => d.hour).sort((a, b) => parseFloat(a) - parseFloat(b));
|
||||||
|
|
||||||
// Ambil semua grub (jam)
|
|
||||||
const hours = rawData.map(d => d.grub).sort((a, b) => parseFloat(a) - parseFloat(b));
|
|
||||||
|
|
||||||
// Inisialisasi data per platform
|
|
||||||
const counts = {};
|
const counts = {};
|
||||||
prefixes.forEach(prefix => {
|
prefixes.forEach(prefix => {
|
||||||
counts[prefix] = hours.map(() => 0);
|
counts[prefix] = hours.map(() => 0);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Hitung jumlah pesan berdasarkan panjang array per grub & prefix
|
rawData.forEach(({ sesi }, index) => {
|
||||||
rawData.forEach((entry, index) => {
|
|
||||||
const sesi = entry.sesi || {};
|
|
||||||
prefixes.forEach(prefix => {
|
prefixes.forEach(prefix => {
|
||||||
if (Array.isArray(sesi[prefix])) {
|
if (Array.isArray(sesi[prefix])) {
|
||||||
counts[prefix][index] = sesi[prefix].length;
|
counts[prefix][index] = sesi[prefix].length;
|
||||||
@@ -123,6 +122,7 @@ useEffect(() => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
const datasets = prefixes.map(prefix => ({
|
const datasets = prefixes.map(prefix => ({
|
||||||
label: prefixLabelMap[prefix],
|
label: prefixLabelMap[prefix],
|
||||||
data: counts[prefix],
|
data: counts[prefix],
|
||||||
@@ -189,7 +189,7 @@ useEffect(() => {
|
|||||||
<p>Respons Bot</p>
|
<p>Respons Bot</p>
|
||||||
</div>
|
</div>
|
||||||
<div className={styles.statCard} onClick={openTopicsModal}>
|
<div className={styles.statCard} onClick={openTopicsModal}>
|
||||||
<h2 style={{ fontSize: '17px' }}>{stats.mostDiscussedTopics}</h2>
|
<h2 style={{ fontSize: '17px' }}>{discussedTopics[0]?.topic}</h2>
|
||||||
<p>Paling sering ditanyakan</p>
|
<p>Paling sering ditanyakan</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ const DiscussedTopics = ({ topics }) => {
|
|||||||
<h2>Topik yang Sering Ditanyakan</h2>
|
<h2>Topik yang Sering Ditanyakan</h2>
|
||||||
<ul>
|
<ul>
|
||||||
{topics.map((topic, idx) => (
|
{topics.map((topic, idx) => (
|
||||||
<li key={idx}><strong>{topic.topic}</strong> - {topic.question_count} pertanyaan</li>
|
<li key={idx}><strong>{topic.topic}</strong> - {topic.count} kali</li>
|
||||||
))}
|
))}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user