Skip to content

Commit 7ccac13

Browse files
committed
handoff template updates and readme
1 parent 958bea9 commit 7ccac13

File tree

4 files changed

+40
-247
lines changed

4 files changed

+40
-247
lines changed

server/dashboards/preconfigured/cosmosdb-handoff.ts

Lines changed: 40 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -98,20 +98,24 @@ export const config: IDashboardConfig = /*return*/ {
9898
query: () => `where name == 'Transcript'
9999
| extend conversationId=tostring(customDimensions.userConversationId),
100100
customerName=tostring(customDimensions.customerName),
101-
userTime=tostring(customDimensions.timestamp)
102-
| project conversationId, customerName, timestamp, userTime, customDimensions
101+
timestamp=todatetime(customDimensions.timestamp)
102+
| project conversationId, customerName, timestamp, customDimensions
103103
| order by timestamp desc
104-
| summarize transcripts_count=count(userTime),
104+
| summarize transcripts_count=count(timestamp),
105105
transcripts=makelist(customDimensions) by customerName, conversationId
106106
| project conversationId, customerName, transcripts_count, transcripts`,
107107
calculated: (transcripts) => {
108108
const listTranscripts = transcripts.reduce((destArray, currentValue) => {
109109
const transcriptsArray = JSON.parse(currentValue.transcripts);
110-
const lastMessage = transcriptsArray.find(x => x.from !== 'Bot');
110+
if (!Array.isArray(transcriptsArray)) {
111+
return destArray;
112+
}
113+
const lastMessage = transcriptsArray.find(x => x.from === 'Customer');
111114
if (!lastMessage) {
112115
return destArray;
113116
}
114-
const lastSentimentScore = lastMessage.sentimentScore || 0.5;
117+
const lastSentimentScore = parseFloat(lastMessage.sentimentScore) || 0.5;
118+
const lastState = parseInt(transcriptsArray[0].state);
115119
const value = {
116120
userId: lastMessage.customerId,
117121
conversationId: lastMessage.customerConversationId,
@@ -124,7 +128,8 @@ export const config: IDashboardConfig = /*return*/ {
124128
lastSentimentScore < 0.4 ? 'sentiment_dissatisfied' :
125129
lastSentimentScore < 0.6 ? 'sentiment_neutral' :
126130
lastSentimentScore < 0.8 ? 'sentiment_satisfied' : 'sentiment_very_satisfied',
127-
icon: lastMessage.state === 1 ? 'perm_identity' : 'memory',
131+
icon: lastState === 0 ? 'memory' :
132+
lastState === 2 ? 'perm_identity' : 'more_horiz',
128133
};
129134
destArray.push(value);
130135
return destArray;
@@ -156,10 +161,20 @@ export const config: IDashboardConfig = /*return*/ {
156161
const avgTimeWaiting = times.reduce((a, c) => a + c, 0) / times.length;
157162
const maxTimeWaiting = Math.max(...times);
158163
const minTimeWaiting = Math.min(...times);
164+
const timeFormat = (secs) => {
165+
const time = new Date(secs * 1000);
166+
let t = time.getSeconds() + 's';
167+
if (time.getHours() > 0 && time.getMinutes() > 0) {
168+
t = time.getHours() + 'h ' + time.getMinutes() + 'm';
169+
} else if (time.getMinutes() > 0) {
170+
t = time.getMinutes() + 'm';
171+
}
172+
return t;
173+
};
159174
return {
160-
'transcriptsAverageTimeWaiting-value': avgTimeWaiting.toFixed(1),
161-
'transcriptsLongestTimeWaiting-value': maxTimeWaiting.toFixed(1),
162-
'transcriptsShortestTimeWaiting-value': minTimeWaiting.toFixed(1),
175+
'transcriptsAverageTimeWaiting-value': isFinite(avgTimeWaiting) ? timeFormat(avgTimeWaiting) : '-',
176+
'transcriptsLongestTimeWaiting-value': isFinite(avgTimeWaiting) ? timeFormat(maxTimeWaiting) : '-',
177+
'transcriptsShortestTimeWaiting-value': isFinite(avgTimeWaiting) ? timeFormat(minTimeWaiting) : '-',
163178
};
164179
}
165180
},
@@ -226,15 +241,23 @@ export const config: IDashboardConfig = /*return*/ {
226241
},
227242

228243
customerTranscripts: {
229-
query: () => `where name == 'Transcript'
230-
| summarize
231-
maxState=max(toint(customDimensions.state))
232-
by customerConversationId=tostring(customDimensions.userConversationId),
233-
customerName=tostring(customDimensions.customerName)`,
244+
query: () => `where name == 'Transcript'
245+
| extend customerId=tostring(customDimensions.customerId)
246+
| extend state=toint(customDimensions.state)
247+
| extend timestamp=todatetime(customDimensions.timestamp)
248+
| project customerId, timestamp, state
249+
| order by timestamp desc
250+
| summarize transcripts_count=count(customerId), timestamps=makelist(timestamp) by customerId, state
251+
| project customerId, state, transcripts_count, timestamp=timestamps[0]
252+
| summarize count(customerId),
253+
totals=makelist(transcripts_count),
254+
states=makelist(state),
255+
timestamps=makelist(timestamp) by customerId
256+
| project customerId, state=toint(states[0]), transcripts_count=toint(totals[0]), timestamp=timestamps[0]`,
234257
calculated: (customerTranscripts) => {
235-
const bot = customerTranscripts.filter((e) => e.maxState === 0);
236-
const waiting = customerTranscripts.filter((e) => e.maxState === 1);
237-
const agent = customerTranscripts.filter((e) => e.maxState === 2);
258+
const bot = customerTranscripts.filter((customer) => customer.state === 0);
259+
const waiting = customerTranscripts.filter((customer) => customer.state === 1);
260+
const agent = customerTranscripts.filter((customer) => customer.state === 2);
238261
return {
239262
'customerTotal-value': customerTranscripts.length,
240263
'customerBot-value': bot.length,

src/data-sources/plugins/ApplicationInsights/ai.d.ts

Lines changed: 0 additions & 22 deletions
This file was deleted.

src/data-sources/plugins/Constant.ts

Lines changed: 0 additions & 49 deletions
This file was deleted.

src/types.d.ts

Lines changed: 0 additions & 159 deletions
This file was deleted.

0 commit comments

Comments
 (0)