Knowledge Base · Manager Console · Dialpad Platform

Dialpad OPS Console

Real-time call center operations dashboard for managers. Monitors queue health, agent states, SLA compliance, and system diagnostics, and provides the Script Manager to control what guidance techs see during calls.

File dashboard-dialpad-console.html
Role Manager / Supervisor
Status Demo Mode
Live Data Proxy Required
Scripts SharePoint

What This Tool Is

The OPS Console is the manager's real-time command view of the call center floor. It surfaces live metrics from Dialpad, runs a local diagnostics engine, and gives managers a single screen to monitor queue health, agent distribution, SLA status, and error patterns. It also contains the Script Manager, the only place where call scripts and KB steps can be authored and published to the tech console.

Manager Functions
Monitor queue depth and wait times
Track agent state distribution
Watch SLA and abandon rate live
Identify routing issues and SIP failures
Flag individual agent outliers
Author and publish call scripts
Control script source per issue type
What It Does Not Do
Handle calls or direct interactions
Execute scripts or automation
Show individual call content to techs
Replace Dialpad admin portal
Manage agent schedules
Authenticate users (no login layer)
Allow techs to see the live queue
Tech console queue isolation is intentional. The tech console does not show the live queue. This prevents cherry-picking — techs cannot see which calls are waiting and select easier ones. Queue management and call distribution belong exclusively to this console and Dialpad's native routing.

Architecture

Data Flow

The console is a single stateless HTML file. All live metrics come from Dialpad's REST API and Stats API via a proxy server. The diagnostics engine runs entirely in the browser. Scripts are read from and written to SharePoint via the SP REST API.

Three Data Sources
Dialpad REST API — Live queue metrics, agent states, call center status. Reached via proxy.

Dialpad Stats API — Historical call counts, AHT, SLA, abandon rate. Two-step: POST /stats to initiate, then GET /stats/{id} to retrieve CSV. Results cached 30 min by Dialpad.

SharePoint REST APIscripts.json in {SP_DATA_FOLDER}. Read on Script Manager open, written on Publish. Same site and folder as Agent Tracker data.
Demo vs Live Mode
Currently in demo mode. genDemoState() generates all dashboard data. The signal strip drifts every 12 seconds via liveTick(). All real API calls are commented out pending proxy deployment.
AspectDemo ModeLive Mode
Data sourcegenDemoState() — random within realistic rangesDialpad Stats + Call Center Status APIs via proxy
Signal stripliveTick() every 12s random walkliveTick() calls GET /callcenters/{id}/status
StatsGenerated hourly buckets with business-hour curvePOST /stats then GET /stats/{id} after 15–20s
Target selectorSwitches simulated client labelSwitches Dialpad call center ID for all API calls
Mode indicatorYellow dot, label: DEMOGreen dot, label: LIVE

UI Panels

KTC Nav Bar — #ktc-bar
Fixed Navigation Strip — 36px, top of viewport
Always visible. Contains all top-level navigation and the Script Manager trigger.

OPS CONSOLE — Active page, cyan style.
MGR TRENDS — Links to dialpad-mgr-trends-v8.html.
TECH CONSOLE — Links to dashboard-dialpad-tech-console.html.
Script Manager button — Purple, right-aligned. Slides open the Script Manager drawer. Highlights when open. Shows a dot indicator when there are unpublished changes.
Rail Bar — #rail
Operational Control Bar — 44px
Brand — Static: "Dialpad · OPS" with subtitle "ENGINEER CONSOLE · Live".

Target selector#target-sel — Switches monitored call center. In demo mode changes the label. In live mode sets TARGET_ID for all subsequent API calls. The hardcoded client names are placeholders — replace with your actual Dialpad call center names and IDs.

Mode dot + label#mode-dot / #mode-lbl — Yellow (DEMO) or green (LIVE).

API key input#key-in — Password field. On SET, base64-encoded and saved to localStorage under dp_api_key. Auto-restored on page load.

Last updated#last-upd — HH:MM:SS of last full render plus TARGET_NAME.

Refresh — Calls refresh() for a full data re-render.
Live Signal Strip — #signal-strip

Seven live metrics below the rail. Updates every 12 seconds via liveTick() without full page re-render.

SignalElement IDThresholdsLive Source
Queue Depth#sv-queue>8 red · >4 orange · else green. >8 adds crit glow.callcenters/{id}/status → queue_depth
Longest Wait#sv-wait>120s red · >60s orange · else greenDerived from queue status
Calls Active#sv-active>18 "near capacity"agents_on_call
Agents Free#sv-agents<2 red · <4 yellow · else greenagents_available
Service Level#sv-sl≥80% green · ≥70% orange · <70% redStats API stat_type=calls
Abandon Rate#sv-abn>5% red · >3% orange · else greenStats API derived
Queue Pressure#sv-pressure-val<1 STABLE · <2 BUILDING · ≥2 CRITICAL. Ratio: queue ÷ free agents.Calculated locally
Queue Pressure is a locally calculated metric, not a Dialpad API field. It divides queue_depth by agents_available. A ratio ≥2 means twice as many waiting callers as free agents — a reliable early warning before SLA degrades.
3×3 Dashboard Grid — #grid

Nine panels in a 3-column CSS grid. Each panel has a header with title, source tag, and key metric, and a body with the visualization. Panels can enter warning or critical states via .sla-warn-panel and .sla-crit-panel classes which add colored border glows.

Call Volume Timeline — #cp-vol
Spans 2 columns · Row 1
Stacked bar chart (Chart.js) showing hourly call volume today: Inbound (cyan), Abandoned (red), Missed (orange).

Key value: #cv-total — total calls today · Source tag: stat_type=calls
Live source: POST /api/v2/stats with stat_type=calls, is_today=true
Demo: genDemoState().vol — business-hour sine curve shape
Panel glow: .sla-crit-panel when queue depth > 8
System Alerts — #cp-alerts
Row 1 · Column 3
Live alert feed from renderAlerts(d). Rules fire on current signal strip values. Threshold conditions:

🔴 Critical: Abandon >5%, SLA <80%, Queue >8, Agents free <2, Pressure ≥2
🟠 Warning: Abandon 3–5%, SLA 70–80%, Overflow >12%, Errors >8
🟡 Info: Wrap-up agents >3
🟢 OK: All systems nominal

Critical alerts fire a toast on first render only. Count badge #cv-alert-count shows critical count or ✓ when clear.
Agent State Distribution — #cp-astate
Row 2 · Column 1
Horizontal bar chart showing percentage of agents in each state: On Call, Available, Wrap-up, Offline.

Live source: GET /api/v2/callcenters/{id}/statusagents_on_call, agents_available, agents_in_wrapup
Key value: #cv-total-agents — total agent count
Queue Aging — #cp-aging
Row 2 · Column 2
Four wait-time brackets: 0–30s, 30–60s, 60–120s, >120s.

Derived Metric Dialpad does not expose per-caller wait time in the public Stats API. In live mode, accurate brackets require real-time WebSocket event stream to track each caller's entry time. Currently simulated from queue depth.

Key value: #cv-aging-max — worst occupied wait bracket
Error Telemetry — #cp-errors
Row 2 · Column 3
Five error type counters: SIP Failures, Call Setup, Transfer Errors, API Timeouts, Auth Failures.

Not Yet Live No direct Dialpad API endpoint maps to these error categories. In live mode, data would come from Dialpad platform health API or SIEM integration. Currently simulated.

Key value: #cv-err-total — total error count
Call Routing Diagnostics — #cp-routing
Row 3 · Column 1
Four routing paths with percentage bars and delta indicators: Primary Queue, Overflow Queue, Direct Agent, Voicemail.

Derived Routing path breakdown is not available in the stat_type=calls Stats API response. Accurate data requires export_type=records with field mapping. The delta column compares to a simulated prior-period baseline.
Queue Map — #cp-qmap
Row 3 · Column 2
Per-queue SLA bar for five queues: Support, Billing, Sales, VIP, Tech. Each row shows SLA percentage and current depth.

Live source: GET /api/v2/callcenters/{id}/status per queue. Requires iterating all known call center IDs.
Queue names and IDs in genDemoState().queues must be updated to match actual Dialpad call centers.
Color: ≥80% green · ≥70% orange · <70% red
System Diagnostics — #cp-timeline
Row 3 · Column 3 — Rules Engine
Local rules engine runs every render cycle: collectMetrics(d)runDiagnostics(metrics)renderDiagnostics(alerts). No API call. Evaluates 12 rules against the current metric snapshot. Multiple rules can fire simultaneously. Results sorted critical-first.

Header counters: #diag-count-crit / #diag-count-warn
Panel glow: .sla-crit-panel when criticals fire; .sla-warn-panel for warnings only

See Config → Diagnostics Rules for full rule catalog.
Agent Outlier Drawer — #outlier-drawer
Slide-up panel — bottom right
Fixed-position drawer that slides up when the OUTLIERS button is clicked. Shows agents flagged by renderOutliers().

Outlier triggers: AHT >9 min (HIGH/CRITICAL), Wrap-up >5 min (HIGH), Idle >15 min (OFFLINE?)
Badge count: #outlier-count — always visible, even when drawer is closed
Live source: Proxy Required Agent-level metrics come from GET /api/v2/stats with stat_type=onduty, target_type=user for per-agent AHT and state duration.

Script Manager

Full management UI for authoring and maintaining call scripts. Manager-only. Techs consume the published output read-only. All script changes must be made here and published before techs see them.

Manager-only write access. The tech console loads scripts.json read-only at startup. No edit controls exist in the tech console. All changes must be published via the SharePoint Publish button.
Layout — Two Columns
Left sidebar (200px) — Issue type list. Each row shows issue name and step count. Click to select. X on hover to delete. Add New Issue input at the bottom.

Right editor — Step list for the selected issue. Source toggle at the top. Each step card has move up/down, inline edit, and delete. Edit opens title field, instructions textarea, badge type selector, Save/Cancel. Escalation config row at the bottom.
Script Source Toggle Per Issue Type

Every issue type has a Script Source toggle controlling what the tech console renders for calls of that type. The manager sets this. Techs cannot change it.

Custom
Tech console renders your custom runbook cards from scripts.json. No Dialpad Playbook notice.
Dialpad Playbook
Tech console shows a notice to follow the Dialpad AI Playbook in the app. No custom cards rendered. Manager records the playbook name for reference.
Both
Tech console shows the Dialpad notice at the top and your custom cards below. Tech sees both in one view.
Dialpad Playbook source note: Dialpad Playbooks require the Premium Support plan. Once published, they cannot be edited — you must duplicate and re-publish. The playbook name field in the Script Manager is a reference only; the console does not fetch or validate playbooks via API. Playbook management must be done in the Dialpad Admin portal.
SharePoint Publish Flow
Explicit Publish — Nothing Auto-Saves
Changes are held in memory until the manager clicks Publish to SharePoint. The button is disabled until there are unsaved changes (_scriptsDirty flag). A dot appears when dirty.

On publish: POST /_api/contextinfo to get form digest → POST /Files/Add(url='scripts.json', overwrite=true) with the full JSON payload.

Closing the drawer with unsaved changes triggers a warning toast. Changes are not lost — the drawer can be reopened and Publish clicked before navigating away.

If SP_SITE is not configured: publish saves to local defaults only with a toast confirmation.
scripts.json Schema

Lives at {SP_DATA_FOLDER}/scripts.json on SharePoint — same folder as agent-tracker-data.json.

// Top-level structure { "_meta": { "last_updated": "ISO", "updated_by": "name" }, "_queue_map": { "Support": "Password Reset", "Tech": "Network Issue" }, "Password Reset": { "meta": { "source": "custom", // "custom" | "dialpad" | "both" "escalation_threshold_minutes": 8, "escalation_target": "Tier 2 · #escalations", "dialpad_playbook_name": "", // reference only "last_updated": "2026-03-24", "owner": "ITE Team" }, "steps": [ { "order": 1, "title": "Verify Identity", "body": "...", "tag": "req" } ] } }
TagLabelColorUse For
reqREQUIREDRedSteps that must not be skipped — identity verification, compliance
runRUNBOOKGreenTechnical procedure steps — AD commands, PowerShell, tool paths
tipTIPCyanSoft guidance, shortcuts, context clues
cautCAUTIONYellowSteps requiring care — irreversible actions, service account warnings

API Reference

All Dialpad API calls are commented out pending proxy deployment. They activate when PROXY.base is set and real fetch blocks are uncommented in refresh() and liveTick().

Dialpad Stats API Proxy Required
RouteMethodPurposeKey Params
/api/v2/statsPOSTInitiate stats processing — returns an ID to pollstat_type=calls, is_today=true, target_type=callcenter, target_id={id}, timezone
/api/v2/stats/{id}GETRetrieve CSV result. Wait 15–20s before first GET. Retry every 5–10s if not ready. Cached 30 min.Do not repeat POST with same params within cache window.
/api/v2/statsPOSTOn-duty stats for agent state distributionstat_type=onduty, is_today=true, target_type=callcenter
Call Center Status API Proxy Required
RouteMethodPurposeResponse Fields Used
/api/v2/callcenters/{id}/statusGETReal-time queue and agent status — feeds signal stripqueue_depth, agents_available, agents_on_call, agents_in_wrapup, agents_total, service_level, abandon_rate
/api/v2/callcentersGETList all call centers — use to populate target selector with real IDsid, name, phone_number, type

Config Fields

Target Selector Variables
VariableDefaultDescription
TARGET_ID'off_1a2b'Dialpad call center ID for API calls. Update #target-sel option values to real IDs.
TARGET_NAME'Meridian Financial'Display name in last-updated stamp and toast messages.
API_KEYFrom localStorageDialpad API key. Base64-encoded in storage. Never hardcoded in file.
MODE'demo'Set to 'live' when API key is saved.
SharePoint Config — SP_* Constants
ConstantDefaultDescription
SP_SITE''SharePoint site path e.g. '/sites/ITPortal'. Must match tech console exactly.
SP_SCRIPTS_FILE'scripts.json'Filename. Do not change.
SP_DATA_FOLDER'{SP_SITE}/pages/config/current'Full folder path. Same as Agent Tracker data folder.
SP_SITE must match exactly between manager console and tech console. If they differ the tech console reads from a different path than what the manager published to.
Diagnostics Rules — DIAGNOSTIC_RULES

12 rules evaluated every render cycle. Add, remove, or modify by editing the array. Each rule is a plain object with id, condition(m), severity, message, reason, and hint.

RuleSeverityCondition
R01CriticalAbandon >5% AND agents free <2 — staffing shortage
R02WarningSLA <80% AND agents free >3 — routing misconfiguration
R03CriticalQueue pressure ratio >2 — queue overload
R04CriticalQueue >5 AND active calls <2 — possible platform issue
R05WarningAbandon >7% AND queue <3 — abandon spike without queue cause
R06WarningWrap-up >30% of agents — ACW bloat
R07CriticalSIP failures ≥4 — carrier or trunk issue
R08WarningTotal errors >10 — elevated system error rate
R09CriticalSLA <70% AND agents free <4 — critically degraded
R10InfoOverflow >20% — primary queue undersized
R11CriticalLongest wait >180s AND agents free = 0 — callers trapped
OKOKAll metrics in range — fallback when no rules trigger

Live Mode Activation Checklist

Step 1 — Deploy Proxy
Deploy a Node.js or Cloudflare Worker proxy. Must handle /dialpad/* routes, hold the Dialpad API key server-side, set CORS headers, and forward to https://dialpad.com/api/v2.
Step 2 — Update Target Selector
Replace hardcoded client names and IDs in #target-sel with your actual Dialpad call center names and IDs. Use GET /api/v2/callcenters to list them.
Step 3 — Uncomment Live Fetch in refresh()
Replace the genDemoState() call with real API calls to POST /api/v2/stats and GET /api/v2/callcenters/{id}/status. Add a mapDialpadData() function translating API responses to the internal state shape.
Step 4 — Update liveTick() for Live Data
Replace random-walk drift in liveTick() with a real GET /api/v2/callcenters/{id}/status call to keep the signal strip current every 12 seconds without full re-render.
Step 5 — Configure SharePoint
Set SP_SITE in both the manager and tech console. Confirm /pages/config/current/ exists on SharePoint. Publish default scripts once to create the file.
Step 6 — Enter API Key and Verify
Enter Dialpad API key in the rail bar and click SET. Mode dot turns green. Confirm signal strip shows real numbers, stat cards show live data, and Script Manager can publish to SharePoint.
Verify activation: Mode dot green, label LIVE. Signal strip updates with real numbers. System Diagnostics panel reflects actual floor conditions, not generated data.

Limitations

Limitation Queue Aging Is Approximate
Dialpad does not expose per-caller wait time via the public Stats API. The Queue Aging brackets are derived from queue depth and call volume. Exact brackets require a real-time WebSocket event stream to track each caller entry time.
Limitation Error Telemetry Panel Is Simulated
SIP Failures, Call Setup errors, Transfer Errors, API Timeouts, and Auth Failures have no direct Dialpad public API endpoints. These need a SIEM integration or Dialpad platform health API (if available).
Limitation Routing Breakdown Is Derived
Primary/Overflow/Direct/Voicemail percentages are not exposed in the stat_type=calls Stats API response. Accurate routing breakdown requires export_type=records with custom field mapping.
Demo Target Selector Uses Hardcoded Clients
The dropdown contains fabricated client names. Replace with real Dialpad call center names and IDs before going live.
Not Yet Live Dialpad Playbook Integration Is Reference-Only
When source is set to Dialpad Playbook, the console records the playbook name as a reference. There is no public API to fetch playbook content or check assignment status. Dialpad Playbook management must be done in the Dialpad Admin portal.
Limitation No Authentication Layer
No login, session management, or RBAC. Restrict access via VPN, reverse proxy auth, or SharePoint page protection in production.

Troubleshooting

Console stays in demo mode after entering API key
Cause: Live fetch code is still commented out in refresh(). Setting the API key switches MODE but the data generator still calls genDemoState().
Fix: Complete activation Step 3.
Script Manager shows "local · SP not configured"
Cause: SP_SITE is empty.
Fix: Set SP_SITE to your SharePoint site path. Confirm /pages/config/current/ folder exists before first publish.
Publish to SharePoint fails with 403 or digest error
Cause: The /_api/contextinfo request is failing — usually CORS or the console is not on the same SharePoint domain.
Fix: The console must be hosted on the same SharePoint tenant, or SP REST API must be proxied. The form digest endpoint does not support cross-origin requests from non-SP domains.
Diagnostics panel always shows "No operational issues"
Cause: Demo data happens to fall within all rule thresholds.
Fix for testing: Temporarily lower a threshold in DIAGNOSTIC_RULES to force a trigger, then revert.
Tech console loads different scripts than what was published
Cause: SP_SITE differs between the two files.
Fix: Ensure both files have identical SP_SITE values. The data folder is computed from SP_SITE — if one is empty and one is set, they resolve to different paths.
Signal strip stops drifting
Cause: Not a bug. liveTick() only updates the signal strip, not the charts. Charts update on full refresh() every 5 minutes or on manual refresh.
KRAWCZYK.CITY · KB · DIALPAD OPS MANAGER CONSOLE · COPILOT PLATFORM