✈️ Agent Performance Dashboard

No data loaded — click "Load Demo" to preview
📊 Dashboard
👥 Agent Detail
💬 Conversations
🔌 Export Guide
📊 Team Overview
⚡ Avg Response Time
Load data to see metrics
💬 Meaningful Response
🗺️ Trip Plan Time
🔔 Total Active Conversations
😊 % Positive Sentiment
⏱ Avg Response & Meaningful Response Time (minutes)
📅 Active Conversations & Avg Response Time
😊 Client Sentiment Over Time (rolling 4-week share, weeks ending Saturday)
👤 Individual Agent
⚡ Avg Response Time
Select an agent or load data
💬 Meaningful Response
🗺️ Trip Plan Time
🔔 Total Active Conversations
😊 % Positive Sentiment
⏱ Avg Response & Meaningful Response Time (minutes)
📅 Active Conversations & Avg Response Time
😊 Client Sentiment Over Time (rolling 4-week share, weeks ending Saturday)
👥 Agent Comparison
⚡ Avg Response Time by Agent (minutes · sorted fastest → slowest · 🟢 <20 min · 🟡 20–45 min · 🔴 >45 min)
💬 Conversation Status
Active Conversations
Client ⇅ Since Last Message ⇅
Load data to populate
Inactive Conversations
Client ⇅ Since Last Message ⇅
Load data to populate
Closed / Resolved Conversations
Client ⇅ Since Last Message ⇅
Load data to populate
👥 Agent Performance Summary
# Agent ⇅ Type Convos ⇅ Avg Response Time ⇅ Meaningful Response ⇅ Sentiment ⇅ Open

No data loaded

Load demo data or import a JSON file

💬 All Conversations
Client Agent Date FRT Duration Sentiment Status Messages

No data loaded

Weekly Data Export — Command Center

Use the script below to pull real conversation and message data directly from the Maestro Command Center API. It runs in your browser console while you're logged in — no setup required. The dashboard auto-detects and transforms the output format.
This script is built specifically for prod.cc.askmaestro.com. It calls the real /api/conversations and /api/conversations/{id}/messages endpoints using your existing login session.

▶ How to run it (takes ~1–2 minutes)

1

Log into prod.cc.askmaestro.com/conversations in Chrome.

2

Open the browser console: press F12 (Windows) or Cmd+Option+I (Mac), then click the Console tab.

3

Click Copy below, paste into the console, and press Enter. You'll see progress logs appear. The script uses top-level await so it runs directly — no wrapper needed.

4

A JSON file will download automatically. Come back here and click Import JSON (top right) to load it.

💡 Tip: By default the script exports the last 7 days. Change the DAYS_BACK value at the top of the script to export a different range.
Maestro Command Center — Weekly Extractor v3
// ═══════════════════════════════════════════════════════════ // Maestro Command Center — Weekly Data Extractor v3 // Paste into Chrome console at prod.cc.askmaestro.com/conversations // Uses top-level await — no wrapper needed, just paste and press Enter // ═══════════════════════════════════════════════════════════ // ── CONFIG (edit these if needed) ─────────────────────────── const DAYS_BACK = 7; // conversations active in the last N days const MSG_LIMIT = 200; // messages per conversation (max ~200) const INCLUDE_AI_REPLIES = false; // true = include AI auto-replies in metrics // ──────────────────────────────────────────────────────────── const _cutoff = new Date(Date.now() - DAYS_BACK * 86400000).toISOString(); const _statuses = ['', 'done']; let _allConvs = []; console.log('🚀 Maestro Extractor starting — pulling last', DAYS_BACK, 'days...'); for (const _status of _statuses) { let _page = 1, _more = true; while (_more) { const _qs = new URLSearchParams({ limit: 100, page: _page }); if (_status) _qs.set('status', _status); const _r = await fetch('/api/conversations?' + _qs, { headers: { Accept: 'application/json' } }); if (!_r.ok) { console.warn('Fetch failed:', _r.status); break; } const _d = await _r.json(); const _convs = _d.data?.conversations || []; const _recent = _convs.filter(c => (c.lastMessageAt || c.updatedAt || '') >= _cutoff); _allConvs.push(..._recent); console.log(' page', _page, '(' + (_status || 'open/new') + '):', _recent.length, 'in range of', _convs.length); _more = _convs.length === 100 && _recent.length > 0; _page++; } } const _seen = new Set(); _allConvs = _allConvs.filter(c => { if (_seen.has(c.conversation_id)) return false; _seen.add(c.conversation_id); return true; }); console.log('✅', _allConvs.length, 'unique conversations found — fetching messages...'); const _conversations = []; for (let _i = 0; _i < _allConvs.length; _i++) { const _conv = _allConvs[_i]; console.log(' [' + (_i + 1) + '/' + _allConvs.length + '] ' + _conv.customerName); try { const _mr = await fetch('/api/conversations/' + _conv.conversation_id + '/messages?limit=' + MSG_LIMIT, { headers: { Accept: 'application/json' } }); const _md = await _mr.json(); const _messages = (_md.data || []) .filter(m => INCLUDE_AI_REPLIES || !m.is_ai_auto_reply) .map(m => ({ id: m._id, timestamp: m.timestamp || m.createdAt, role: m.role, participant_name: m.participant_name, sent_by: m.sent_by || null, is_ai_auto_reply: !!m.is_ai_auto_reply, body: m.body || m.processed_body || '', })); if (_messages.length > 0) { _conversations.push({ conversation_id: _conv.conversation_id, customerName: _conv.customerName, status: _conv.status, messages: _messages, }); } } catch (_e) { console.warn(' error:', _e.message); } await new Promise(_r => setTimeout(_r, 80)); } const _output = { exported_at: new Date().toISOString(), date_range: { from: _cutoff.slice(0,10), to: new Date().toISOString().slice(0,10) }, conversations: _conversations }; const _filename = 'maestro-' + _output.date_range.from + '_to_' + _output.date_range.to + '.json'; const _blob = new Blob([JSON.stringify(_output, null, 2)], { type: 'application/json' }); const _a = Object.assign(document.createElement('a'), { href: URL.createObjectURL(_blob), download: _filename }); _a.click(); URL.revokeObjectURL(_a.href); console.log('🎉 Done!', _conversations.length, 'conversations saved to', _filename);

📥 Import the downloaded file

Once the file downloads, drag it here or click to browse. The dashboard will parse and display it automatically.

📂

Click to browse or drag & drop your downloaded JSON file here

Format: maestro-YYYY-MM-DD_to_YYYY-MM-DD.json

📌 What each KPI measures

Avg Response Time — Average minutes from any client message to the next agent reply. Measures sustained responsiveness throughout the entire interaction.

Meaningful Response — Average minutes from any client message to the next agent reply that is 10+ words long — a proxy for a substantive answer.

Total Active Conversations (Team) — Conversations where the client sent a message within the last 72 hours of the most recent message in the dataset.

Total Active Conversations (Individual) — Conversations where the selected agent sent a message within the last 72 hours of the most recent message in the dataset.

Sentiment — Keyword analysis of client messages only. Positive and negative words produce a score per conversation.