Skip to content

Commit c75c471

Browse files
Archithclaude
andcommitted
Improve Slack export with better candidate behavior metrics
- Added engagement level (High/Medium/Low) to Slack messages - Shows idle time as both minutes and percentage of session - Added warning indicators for high tab switches (>10) - Renamed 'suspicious patterns' to 'notable behaviors' - Improved preview formatting with clearer metrics - Added emojis to indicate engagement quality - Shows activity score as X/100 instead of percentage 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 927f60b commit c75c471

File tree

1 file changed

+51
-11
lines changed

1 file changed

+51
-11
lines changed

scripts/slack-integration.js

Lines changed: 51 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -145,16 +145,32 @@
145145

146146
// Format activity analysis if available
147147
let activitySection = '';
148+
let engagementLevel = 'Not tracked';
148149
if (activitySummary) {
150+
// Calculate engagement level
151+
if (activitySummary.activityScore > 80) {
152+
engagementLevel = 'High';
153+
} else if (activitySummary.activityScore > 60) {
154+
engagementLevel = 'Medium';
155+
} else {
156+
engagementLevel = 'Low';
157+
}
158+
149159
const scoreEmoji = activitySummary.activityScore > 80 ? '✅' :
150160
activitySummary.activityScore > 60 ? '⚠️' : '🚨';
161+
162+
// Calculate idle percentage
163+
const idlePercentage = Math.round((activitySummary.totalIdleSeconds / (activitySummary.sessionDurationMinutes * 60)) * 100);
164+
151165
activitySection = `
152166
<div style="margin-top: 10px; padding: 8px; background: rgba(66,165,245,0.1); border-radius: 4px;">
153-
<strong>📊 Activity Analysis:</strong>
154-
<div>Activity Score: ${scoreEmoji} ${activitySummary.activityScore}%</div>
155-
${activitySummary.tabSwitches > 0 ? `<div>• Tab Switches: ${activitySummary.tabSwitches}</div>` : ''}
156-
${activitySummary.idlePeriods > 0 ? `<div>• Idle Periods: ${activitySummary.idlePeriods}</div>` : ''}
157-
${activitySummary.suspiciousPatterns.length > 0 ? `<div>• ⚠️ Suspicious Patterns: ${activitySummary.suspiciousPatterns.length}</div>` : ''}
167+
<strong>📊 Candidate Behavior Analysis:</strong>
168+
<div>Engagement Level: ${scoreEmoji} ${engagementLevel} (Score: ${activitySummary.activityScore}/100)</div>
169+
<div>• Tab Switches: ${activitySummary.tabSwitches} ${activitySummary.tabSwitches > 10 ? '⚠️ (High)' : ''}</div>
170+
<div>• Idle Periods: ${activitySummary.idlePeriods} times</div>
171+
<div>• Total Idle Time: ${Math.round(activitySummary.totalIdleSeconds / 60)} min (${idlePercentage}% of session)</div>
172+
${activitySummary.suspiciousPatterns && activitySummary.suspiciousPatterns.length > 0 ?
173+
`<div>• Notable Behaviors: ${activitySummary.suspiciousPatterns.length} detected</div>` : ''}
158174
<div>• Session Duration: ${activitySummary.sessionDurationMinutes} minutes</div>
159175
</div>
160176
`;
@@ -220,18 +236,42 @@
220236
const activityColor = activitySummary.activityScore > 80 ? '#4caf50' :
221237
activitySummary.activityScore > 60 ? '#ff9800' : '#ff0000';
222238

239+
// Calculate idle percentage
240+
const idlePercentage = Math.round((activitySummary.totalIdleSeconds / (activitySummary.sessionDurationMinutes * 60)) * 100);
241+
242+
// Determine engagement emoji and text
243+
let engagementEmoji = '✅';
244+
let engagementText = 'High Engagement';
245+
if (activitySummary.activityScore < 60) {
246+
engagementEmoji = '🚨';
247+
engagementText = 'Low Engagement';
248+
} else if (activitySummary.activityScore < 80) {
249+
engagementEmoji = '⚠️';
250+
engagementText = 'Medium Engagement';
251+
}
252+
223253
slackPayload.attachments.push({
224254
color: activityColor,
225-
title: "📊 Candidate Activity Analysis",
255+
title: "📊 Candidate Behavior Metrics",
226256
fields: [
257+
{
258+
title: "Engagement Level",
259+
value: `${engagementEmoji} ${engagementText}`,
260+
short: true
261+
},
227262
{
228263
title: "Activity Score",
229-
value: `${activitySummary.activityScore}%`,
264+
value: `${activitySummary.activityScore}/100`,
230265
short: true
231266
},
232267
{
233268
title: "Tab Switches",
234-
value: activitySummary.tabSwitches.toString(),
269+
value: `${activitySummary.tabSwitches}${activitySummary.tabSwitches > 10 ? ' ⚠️' : ''}`,
270+
short: true
271+
},
272+
{
273+
title: "Idle Time",
274+
value: `${Math.round(activitySummary.totalIdleSeconds / 60)}min (${idlePercentage}%)`,
235275
short: true
236276
},
237277
{
@@ -245,9 +285,9 @@
245285
short: true
246286
}
247287
],
248-
footer: activitySummary.suspiciousPatterns.length > 0 ?
249-
`⚠️ ${activitySummary.suspiciousPatterns.length} suspicious patterns detected` :
250-
"Normal activity patterns"
288+
footer: activitySummary.suspiciousPatterns && activitySummary.suspiciousPatterns.length > 0 ?
289+
`⚠️ ${activitySummary.suspiciousPatterns.length} notable behaviors detected` :
290+
"Normal activity patterns"
251291
});
252292
}
253293

0 commit comments

Comments
 (0)