@memberjunction/ng-dashboards 6.2.0-edge.2 → 6.2.0-edge.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AI/components/analytics/realtime/realtime-transcripts-data.d.ts +4 -3
- package/dist/AI/components/analytics/realtime/realtime-transcripts-data.d.ts.map +1 -1
- package/dist/AI/components/analytics/realtime/realtime-transcripts-data.js +8 -5
- package/dist/AI/components/analytics/realtime/realtime-transcripts-data.js.map +1 -1
- package/dist/AI/components/duplicates/compare-value.component.d.ts +67 -0
- package/dist/AI/components/duplicates/compare-value.component.d.ts.map +1 -0
- package/dist/AI/components/duplicates/compare-value.component.js +168 -0
- package/dist/AI/components/duplicates/compare-value.component.js.map +1 -0
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +49 -3
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +287 -169
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-run-scope.d.ts +77 -0
- package/dist/AI/components/duplicates/duplicate-detection-run-scope.d.ts.map +1 -0
- package/dist/AI/components/duplicates/duplicate-detection-run-scope.js +116 -0
- package/dist/AI/components/duplicates/duplicate-detection-run-scope.js.map +1 -0
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts +1 -0
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +16 -4
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.d.ts +2 -0
- package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.js +12 -6
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
- package/dist/AI/components/vectors/vector-index-auto.d.ts +29 -0
- package/dist/AI/components/vectors/vector-index-auto.d.ts.map +1 -0
- package/dist/AI/components/vectors/vector-index-auto.js +59 -0
- package/dist/AI/components/vectors/vector-index-auto.js.map +1 -0
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts +9 -0
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +65 -20
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +7 -3
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
- package/dist/Actions/components/categories-list-view.component.js +3 -2
- package/dist/Actions/components/categories-list-view.component.js.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.js +1 -0
- package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts +0 -3
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js +5 -14
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js +1 -0
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +1 -0
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/form-override-dialog.component.d.ts +12 -1
- package/dist/ComponentStudio/components/form-override-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/form-override-dialog.component.js +128 -81
- package/dist/ComponentStudio/components/form-override-dialog.component.js.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.d.ts +2 -0
- package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +12 -10
- package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-agent-context.d.ts +14 -43
- package/dist/DashboardBrowser/dashboard-browser-agent-context.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-agent-context.js +6 -29
- package/dist/DashboardBrowser/dashboard-browser-agent-context.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts +174 -321
- package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js +522 -1195
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-library-filter.d.ts +116 -0
- package/dist/DashboardBrowser/dashboard-library-filter.d.ts.map +1 -0
- package/dist/DashboardBrowser/dashboard-library-filter.js +277 -0
- package/dist/DashboardBrowser/dashboard-library-filter.js.map +1 -0
- package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts +1 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboards-agent-tools.d.ts +26 -0
- package/dist/DashboardBrowser/dashboards-agent-tools.d.ts.map +1 -0
- package/dist/DashboardBrowser/dashboards-agent-tools.js +32 -0
- package/dist/DashboardBrowser/dashboards-agent-tools.js.map +1 -0
- package/dist/DashboardBrowser/dashboards-categories-resource.component.d.ts +58 -0
- package/dist/DashboardBrowser/dashboards-categories-resource.component.d.ts.map +1 -0
- package/dist/DashboardBrowser/dashboards-categories-resource.component.js +391 -0
- package/dist/DashboardBrowser/dashboards-categories-resource.component.js.map +1 -0
- package/dist/DashboardBrowser/dashboards-categories.helpers.d.ts +37 -0
- package/dist/DashboardBrowser/dashboards-categories.helpers.d.ts.map +1 -0
- package/dist/DashboardBrowser/dashboards-categories.helpers.js +68 -0
- package/dist/DashboardBrowser/dashboards-categories.helpers.js.map +1 -0
- package/dist/DashboardEditor/dashboard-editor.component.d.ts +295 -0
- package/dist/DashboardEditor/dashboard-editor.component.d.ts.map +1 -0
- package/dist/DashboardEditor/dashboard-editor.component.js +1022 -0
- package/dist/DashboardEditor/dashboard-editor.component.js.map +1 -0
- package/dist/DashboardEditor/dashboard-editor.types.d.ts +23 -0
- package/dist/DashboardEditor/dashboard-editor.types.d.ts.map +1 -0
- package/dist/DashboardEditor/dashboard-editor.types.js +3 -0
- package/dist/DashboardEditor/dashboard-editor.types.js.map +1 -0
- package/dist/DashboardEditor/dashboard-viewer-factory.d.ts +11 -0
- package/dist/DashboardEditor/dashboard-viewer-factory.d.ts.map +1 -0
- package/dist/DashboardEditor/dashboard-viewer-factory.js +17 -0
- package/dist/DashboardEditor/dashboard-viewer-factory.js.map +1 -0
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +30 -0
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +349 -232
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/DataExplorer/services/explorer-state.service.d.ts +1 -1
- package/dist/DataExplorer/services/explorer-state.service.js +2 -5
- package/dist/DataExplorer/services/explorer-state.service.js.map +1 -1
- package/dist/FormBuilder/form-builder-resource.component.d.ts +0 -14
- package/dist/FormBuilder/form-builder-resource.component.d.ts.map +1 -1
- package/dist/FormBuilder/form-builder-resource.component.js +7 -29
- package/dist/FormBuilder/form-builder-resource.component.js.map +1 -1
- package/dist/Home/home-agent-context.d.ts +29 -10
- package/dist/Home/home-agent-context.d.ts.map +1 -1
- package/dist/Home/home-agent-context.js +50 -24
- package/dist/Home/home-agent-context.js.map +1 -1
- package/dist/Home/home-dashboard-switcher.component.d.ts +95 -0
- package/dist/Home/home-dashboard-switcher.component.d.ts.map +1 -0
- package/dist/Home/home-dashboard-switcher.component.js +442 -0
- package/dist/Home/home-dashboard-switcher.component.js.map +1 -0
- package/dist/Home/home-dashboard.component.d.ts +330 -17
- package/dist/Home/home-dashboard.component.d.ts.map +1 -1
- package/dist/Home/home-dashboard.component.js +1702 -1014
- package/dist/Home/home-dashboard.component.js.map +1 -1
- package/dist/Home/home-menus.d.ts +38 -0
- package/dist/Home/home-menus.d.ts.map +1 -0
- package/dist/Home/home-menus.js +53 -0
- package/dist/Home/home-menus.js.map +1 -0
- package/dist/Home/home-pinned-dashboards.d.ts +33 -0
- package/dist/Home/home-pinned-dashboards.d.ts.map +1 -0
- package/dist/Home/home-pinned-dashboards.js +76 -0
- package/dist/Home/home-pinned-dashboards.js.map +1 -0
- package/dist/PredictiveStudio/components/ps-production.component.d.ts +5 -1
- package/dist/PredictiveStudio/components/ps-production.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-production.component.js +64 -41
- package/dist/PredictiveStudio/components/ps-production.component.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +3 -2
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/RealtimeRecordings/realtime-recordings-dashboard.component.js +2 -2
- package/dist/RealtimeRecordings/realtime-recordings-dashboard.component.js.map +1 -1
- package/dist/TelephonyOperations/telephony-operations-agent-context.d.ts +107 -0
- package/dist/TelephonyOperations/telephony-operations-agent-context.d.ts.map +1 -0
- package/dist/TelephonyOperations/telephony-operations-agent-context.js +216 -0
- package/dist/TelephonyOperations/telephony-operations-agent-context.js.map +1 -0
- package/dist/TelephonyOperations/telephony-operations-dashboard.component.d.ts +58 -0
- package/dist/TelephonyOperations/telephony-operations-dashboard.component.d.ts.map +1 -0
- package/dist/TelephonyOperations/telephony-operations-dashboard.component.js +812 -0
- package/dist/TelephonyOperations/telephony-operations-dashboard.component.js.map +1 -0
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +7 -7
- package/dist/Testing/components/testing-explorer.component.js.map +1 -1
- package/dist/WorkQueue/components/work-queue-bindings.component.d.ts +37 -0
- package/dist/WorkQueue/components/work-queue-bindings.component.d.ts.map +1 -0
- package/dist/WorkQueue/components/work-queue-bindings.component.js +210 -0
- package/dist/WorkQueue/components/work-queue-bindings.component.js.map +1 -0
- package/dist/WorkQueue/components/work-queue-dead-letters.component.d.ts +70 -0
- package/dist/WorkQueue/components/work-queue-dead-letters.component.d.ts.map +1 -0
- package/dist/WorkQueue/components/work-queue-dead-letters.component.js +496 -0
- package/dist/WorkQueue/components/work-queue-dead-letters.component.js.map +1 -0
- package/dist/WorkQueue/components/work-queue-discard-dialog.component.d.ts +22 -0
- package/dist/WorkQueue/components/work-queue-discard-dialog.component.d.ts.map +1 -0
- package/dist/WorkQueue/components/work-queue-discard-dialog.component.js +99 -0
- package/dist/WorkQueue/components/work-queue-discard-dialog.component.js.map +1 -0
- package/dist/WorkQueue/components/work-queue-overview.component.d.ts +29 -0
- package/dist/WorkQueue/components/work-queue-overview.component.d.ts.map +1 -0
- package/dist/WorkQueue/components/work-queue-overview.component.js +278 -0
- package/dist/WorkQueue/components/work-queue-overview.component.js.map +1 -0
- package/dist/WorkQueue/components/work-queue-partitions.component.d.ts +59 -0
- package/dist/WorkQueue/components/work-queue-partitions.component.d.ts.map +1 -0
- package/dist/WorkQueue/components/work-queue-partitions.component.js +359 -0
- package/dist/WorkQueue/components/work-queue-partitions.component.js.map +1 -0
- package/dist/WorkQueue/services/work-queue-operator.service.d.ts +22 -0
- package/dist/WorkQueue/services/work-queue-operator.service.d.ts.map +1 -0
- package/dist/WorkQueue/services/work-queue-operator.service.js +44 -0
- package/dist/WorkQueue/services/work-queue-operator.service.js.map +1 -0
- package/dist/WorkQueue/work-queue-agent-context.d.ts +67 -0
- package/dist/WorkQueue/work-queue-agent-context.d.ts.map +1 -0
- package/dist/WorkQueue/work-queue-agent-context.js +119 -0
- package/dist/WorkQueue/work-queue-agent-context.js.map +1 -0
- package/dist/WorkQueue/work-queue-dashboard.component.d.ts +94 -0
- package/dist/WorkQueue/work-queue-dashboard.component.d.ts.map +1 -0
- package/dist/WorkQueue/work-queue-dashboard.component.js +545 -0
- package/dist/WorkQueue/work-queue-dashboard.component.js.map +1 -0
- package/dist/WorkQueue/work-queue-types.d.ts +40 -0
- package/dist/WorkQueue/work-queue-types.d.ts.map +1 -0
- package/dist/WorkQueue/work-queue-types.js +2 -0
- package/dist/WorkQueue/work-queue-types.js.map +1 -0
- package/dist/ai-dashboards.module.d.ts +21 -20
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +4 -1
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/core-dashboards.module.d.ts +69 -61
- package/dist/core-dashboards.module.d.ts.map +1 -1
- package/dist/core-dashboards.module.js +29 -2
- package/dist/core-dashboards.module.js.map +1 -1
- package/dist/data-explorer-dashboards.module.d.ts +1 -1
- package/dist/data-explorer-dashboards.module.d.ts.map +1 -1
- package/dist/data-explorer-dashboards.module.js +3 -1
- package/dist/data-explorer-dashboards.module.js.map +1 -1
- package/dist/module.d.ts +14 -13
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +7 -0
- package/dist/module.js.map +1 -1
- package/dist/public-api.d.ts +6 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +9 -0
- package/dist/public-api.js.map +1 -1
- package/dist/shared/dashboard-library-changes.d.ts +23 -0
- package/dist/shared/dashboard-library-changes.d.ts.map +1 -0
- package/dist/shared/dashboard-library-changes.js +26 -0
- package/dist/shared/dashboard-library-changes.js.map +1 -0
- package/dist/shared/dashboard-owner-names.d.ts +17 -0
- package/dist/shared/dashboard-owner-names.d.ts.map +1 -0
- package/dist/shared/dashboard-owner-names.js +65 -0
- package/dist/shared/dashboard-owner-names.js.map +1 -0
- package/dist/shared/dashboard-recents.d.ts +34 -0
- package/dist/shared/dashboard-recents.d.ts.map +1 -0
- package/dist/shared/dashboard-recents.js +87 -0
- package/dist/shared/dashboard-recents.js.map +1 -0
- package/dist/shared/dashboards-app-install.d.ts +59 -0
- package/dist/shared/dashboards-app-install.d.ts.map +1 -0
- package/dist/shared/dashboards-app-install.js +97 -0
- package/dist/shared/dashboards-app-install.js.map +1 -0
- package/dist/shared/dashboards-app.helpers.d.ts +42 -0
- package/dist/shared/dashboards-app.helpers.d.ts.map +1 -0
- package/dist/shared/dashboards-app.helpers.js +143 -0
- package/dist/shared/dashboards-app.helpers.js.map +1 -0
- package/dist/work-queue-dashboards.module.d.ts +23 -0
- package/dist/work-queue-dashboards.module.d.ts.map +1 -0
- package/dist/work-queue-dashboards.module.js +92 -0
- package/dist/work-queue-dashboards.module.js.map +1 -0
- package/package.json +73 -66
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telephony-operations-agent-context.js","sourceRoot":"","sources":["../../src/TelephonyOperations/telephony-operations-agent-context.ts"],"names":[],"mappings":"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","sourcesContent":["import { BoundNameList, ValidateEnumParam, type AgentToolResult } from '../shared/agent-tool-validation';\n\nexport type TimeRangeFilter = '24h' | '7d' | '30d' | 'all';\nexport type ChannelFilter = 'all' | 'Phone' | 'Web' | 'Meeting';\n\nexport const VALID_TIME_RANGES: readonly TimeRangeFilter[] = ['24h', '7d', '30d', 'all'] as const;\nexport const VALID_CHANNELS: readonly ChannelFilter[] = ['all', 'Phone', 'Web', 'Meeting'] as const;\n\nexport interface ChannelMetrics {\n Channel: 'Phone' | 'Web' | 'Meeting';\n Count: number;\n Percentage: number;\n}\n\nexport interface DirectionMetrics {\n Direction: 'Inbound' | 'Outbound' | 'Internal';\n Count: number;\n Percentage: number;\n}\n\nexport interface CostByDay {\n Date: string;\n Cost: number;\n Count: number;\n}\n\nexport interface CostByNumber {\n PhoneNumberID: string | null;\n PhoneNumber: string;\n Cost: number;\n Count: number;\n}\n\nexport interface LiveInteractionSummary {\n ID: string;\n Channel: 'Phone' | 'Web' | 'Meeting';\n Direction: 'Inbound' | 'Outbound' | 'Internal';\n Status: string;\n RemoteAddress: string | null;\n StartedAt: Date;\n ElapsedSeconds: number;\n ElapsedLabel: string;\n}\n\nexport interface OperationsMetrics {\n TotalVolume: number;\n LiveCallsCount: number;\n AnsweredCount: number;\n AnswerRate: number;\n AbandonedCount: number;\n AbandonmentRate: number;\n AverageHandleTimeSeconds: number;\n AverageHandleTimeFormatted: string;\n AverageSpeedToAnswerSeconds: number;\n AverageSpeedToAnswerFormatted: string;\n TransferCount: number;\n EscalationCount: number;\n TotalCost: number;\n TotalCostFormatted: string;\n VolumeByChannel: ChannelMetrics[];\n VolumeByDirection: DirectionMetrics[];\n CostByDay: CostByDay[];\n CostByNumber: CostByNumber[];\n LiveInteractions: LiveInteractionSummary[];\n}\n\nexport interface InteractionRecordLike {\n ID: string;\n Channel: 'Meeting' | 'Phone' | 'Web' | string;\n Direction: 'Inbound' | 'Internal' | 'Outbound' | string;\n Status: 'Abandoned' | 'Active' | 'Ended' | 'Failed' | 'Queued' | string;\n AgentSessionID: string | null;\n RoomName: string | null;\n PhoneNumberID: string | null;\n RemoteAddress: string | null;\n StartedAt: Date | string;\n AnsweredAt: Date | string | null;\n EndedAt: Date | string | null;\n EndReason: string | null;\n RecordingEnabled: boolean;\n CostEstimate: number | null;\n}\n\nexport interface InteractionEventRecordLike {\n ID: string;\n InteractionID: string;\n EventType: 'Abandoned' | 'Accepted' | 'Answered' | 'Created' | 'Declined' | 'Ended' | 'Escalated' | 'Held' | 'Offered' | 'Queued' | 'RecordingStarted' | 'RecordingStopped' | 'Resumed' | 'Transferred' | string;\n OccurredAt: Date | string;\n ActorUserID: string | null;\n ActorAgentID: string | null;\n Details: string | null;\n}\n\nexport interface PhoneNumberRecordLike {\n ID: string;\n PhoneNumber: string;\n FriendlyName?: string | null;\n}\n\nexport function FormatDuration(seconds: number): string {\n if (!Number.isFinite(seconds) || seconds <= 0) {\n return '0s';\n }\n const rounded = Math.floor(seconds);\n const mins = Math.floor(rounded / 60);\n const secs = rounded % 60;\n if (mins === 0) {\n return `${secs}s`;\n }\n return `${mins}m ${secs.toString().padStart(2, '0')}s`;\n}\n\nexport function FormatCurrency(amount: number): string {\n if (!Number.isFinite(amount) || amount <= 0) {\n return '$0.00';\n }\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(amount);\n}\n\nexport function ParseDate(val: Date | string | null | undefined): Date | null {\n if (!val) return null;\n if (val instanceof Date) return val;\n const parsed = new Date(val);\n return isNaN(parsed.getTime()) ? null : parsed;\n}\n\nexport function CalculateOperationsMetrics(\n interactions: readonly InteractionRecordLike[],\n events: readonly InteractionEventRecordLike[],\n phoneNumbers: readonly PhoneNumberRecordLike[],\n now: Date = new Date(),\n): OperationsMetrics {\n const totalVolume = interactions.length;\n const phoneNumberMap = new Map<string, string>();\n for (const pn of phoneNumbers) {\n phoneNumberMap.set(pn.ID.toLowerCase(), pn.FriendlyName?.trim() || pn.PhoneNumber);\n }\n\n let answeredCount = 0;\n let abandonedCount = 0;\n let totalHandleTime = 0;\n let completedHandledCount = 0;\n let totalWaitTime = 0;\n let speedToAnswerCount = 0;\n let totalCost = 0;\n\n const channelCounts: Record<'Phone' | 'Web' | 'Meeting', number> = { Phone: 0, Web: 0, Meeting: 0 };\n const directionCounts: Record<'Inbound' | 'Outbound' | 'Internal', number> = { Inbound: 0, Outbound: 0, Internal: 0 };\n const costByDayMap = new Map<string, { cost: number; count: number }>();\n const costByNumberMap = new Map<string, { phoneNumber: string; cost: number; count: number }>();\n const liveInteractions: LiveInteractionSummary[] = [];\n\n // Group events by interaction id for quick checks\n const eventsByInteraction = new Map<string, InteractionEventRecordLike[]>();\n let transferCount = 0;\n let escalationCount = 0;\n\n for (const evt of events) {\n if (evt.EventType === 'Transferred') transferCount++;\n if (evt.EventType === 'Escalated') escalationCount++;\n\n const key = evt.InteractionID.toLowerCase();\n const existing = eventsByInteraction.get(key);\n if (existing) {\n existing.push(evt);\n } else {\n eventsByInteraction.set(key, [evt]);\n }\n }\n\n for (const row of interactions) {\n const started = ParseDate(row.StartedAt) ?? new Date();\n const answered = ParseDate(row.AnsweredAt);\n const ended = ParseDate(row.EndedAt);\n const status = row.Status;\n\n // Channel count\n const ch = (row.Channel as 'Phone' | 'Web' | 'Meeting') || 'Phone';\n if (ch in channelCounts) {\n channelCounts[ch]++;\n }\n\n // Direction count\n const dir = (row.Direction as 'Inbound' | 'Outbound' | 'Internal') || 'Inbound';\n if (dir in directionCounts) {\n directionCounts[dir]++;\n }\n\n // Cost accumulation\n const cost = typeof row.CostEstimate === 'number' && Number.isFinite(row.CostEstimate) ? row.CostEstimate : 0;\n totalCost += cost;\n\n // Cost by day\n const dayKey = started.toISOString().split('T')[0];\n const dayEntry = costByDayMap.get(dayKey) ?? { cost: 0, count: 0 };\n dayEntry.cost += cost;\n dayEntry.count++;\n costByDayMap.set(dayKey, dayEntry);\n\n // Cost by number\n const pnId = row.PhoneNumberID ? row.PhoneNumberID.toLowerCase() : null;\n const pnLabel = pnId ? (phoneNumberMap.get(pnId) ?? row.RemoteAddress ?? 'Assigned Pool') : (row.RemoteAddress ?? 'Non-Phone');\n const pnKey = pnId ?? pnLabel;\n const numberEntry = costByNumberMap.get(pnKey) ?? { phoneNumber: pnLabel, cost: 0, count: 0 };\n numberEntry.cost += cost;\n numberEntry.count++;\n costByNumberMap.set(pnKey, numberEntry);\n\n // Live interactions\n const isLive = (status === 'Active' || status === 'Queued') && ended === null;\n if (isLive) {\n const elapsed = Math.max(0, Math.floor((now.getTime() - started.getTime()) / 1000));\n liveInteractions.push({\n ID: row.ID,\n Channel: ch,\n Direction: dir,\n Status: status,\n RemoteAddress: row.RemoteAddress,\n StartedAt: started,\n ElapsedSeconds: elapsed,\n ElapsedLabel: FormatDuration(elapsed),\n });\n }\n\n // Answered check\n const hasAnswerEvent = (eventsByInteraction.get(row.ID.toLowerCase()) ?? []).some(\n (e) => e.EventType === 'Answered' || e.EventType === 'Accepted',\n );\n const isAnswered = answered !== null || hasAnswerEvent || status === 'Active' || status === 'Ended';\n if (isAnswered) {\n answeredCount++;\n }\n\n // Abandoned check\n const isAbandoned = status === 'Abandoned' || (eventsByInteraction.get(row.ID.toLowerCase()) ?? []).some(\n (e) => e.EventType === 'Abandoned',\n );\n if (isAbandoned) {\n abandonedCount++;\n }\n\n // Handle time: for ended interactions\n if (ended !== null) {\n const effectiveStart = answered ?? started;\n const durationSec = Math.max(0, Math.floor((ended.getTime() - effectiveStart.getTime()) / 1000));\n totalHandleTime += durationSec;\n completedHandledCount++;\n }\n\n // Speed to answer\n if (answered !== null) {\n const waitSec = Math.max(0, Math.floor((answered.getTime() - started.getTime()) / 1000));\n totalWaitTime += waitSec;\n speedToAnswerCount++;\n }\n }\n\n const answerRate = totalVolume > 0 ? (answeredCount / totalVolume) * 100 : 0;\n const abandonmentRate = totalVolume > 0 ? (abandonedCount / totalVolume) * 100 : 0;\n const avgHandleTime = completedHandledCount > 0 ? totalHandleTime / completedHandledCount : 0;\n const avgSpeedToAnswer = speedToAnswerCount > 0 ? totalWaitTime / speedToAnswerCount : 0;\n\n const volumeByChannel: ChannelMetrics[] = (['Phone', 'Web', 'Meeting'] as const).map((channel) => ({\n Channel: channel,\n Count: channelCounts[channel],\n Percentage: totalVolume > 0 ? Math.round((channelCounts[channel] / totalVolume) * 100) : 0,\n }));\n\n const volumeByDirection: DirectionMetrics[] = (['Inbound', 'Outbound', 'Internal'] as const).map((direction) => ({\n Direction: direction,\n Count: directionCounts[direction],\n Percentage: totalVolume > 0 ? Math.round((directionCounts[direction] / totalVolume) * 100) : 0,\n }));\n\n const costByDay: CostByDay[] = Array.from(costByDayMap.entries())\n .map(([date, data]) => ({ Date: date, Cost: data.cost, Count: data.count }))\n .sort((a, b) => a.Date.localeCompare(b.Date));\n\n const costByNumber: CostByNumber[] = Array.from(costByNumberMap.entries())\n .map(([id, data]) => ({\n PhoneNumberID: id.includes('-') ? id : null,\n PhoneNumber: data.phoneNumber,\n Cost: data.cost,\n Count: data.count,\n }))\n .sort((a, b) => b.Cost - a.Cost);\n\n return {\n TotalVolume: totalVolume,\n LiveCallsCount: liveInteractions.length,\n AnsweredCount: answeredCount,\n AnswerRate: answerRate,\n AbandonedCount: abandonedCount,\n AbandonmentRate: abandonmentRate,\n AverageHandleTimeSeconds: avgHandleTime,\n AverageHandleTimeFormatted: FormatDuration(avgHandleTime),\n AverageSpeedToAnswerSeconds: avgSpeedToAnswer,\n AverageSpeedToAnswerFormatted: FormatDuration(avgSpeedToAnswer),\n TransferCount: transferCount,\n EscalationCount: escalationCount,\n TotalCost: totalCost,\n TotalCostFormatted: FormatCurrency(totalCost),\n VolumeByChannel: volumeByChannel,\n VolumeByDirection: volumeByDirection,\n CostByDay: costByDay,\n CostByNumber: costByNumber,\n LiveInteractions: liveInteractions.sort((a, b) => b.ElapsedSeconds - a.ElapsedSeconds),\n };\n}\n\nexport function BuildTelephonyOperationsAgentContext(\n metrics: OperationsMetrics,\n timeRange: TimeRangeFilter,\n channelFilter: ChannelFilter,\n): Record<string, unknown> {\n return {\n Surface: 'TelephonyOperationsDashboard',\n TimeRange: timeRange,\n ChannelFilter: channelFilter,\n TotalVolume: metrics.TotalVolume,\n LiveCallsCount: metrics.LiveCallsCount,\n AnswerRatePercent: Math.round(metrics.AnswerRate * 10) / 10,\n AbandonmentRatePercent: Math.round(metrics.AbandonmentRate * 10) / 10,\n AverageHandleTime: metrics.AverageHandleTimeFormatted,\n AverageSpeedToAnswer: metrics.AverageSpeedToAnswerFormatted,\n TransferCount: metrics.TransferCount,\n EscalationCount: metrics.EscalationCount,\n TotalCostEstimate: metrics.TotalCostFormatted,\n VolumeByChannel: metrics.VolumeByChannel.map((c) => `${c.Channel}: ${c.Count} (${c.Percentage}%)`),\n VolumeByDirection: metrics.VolumeByDirection.map((d) => `${d.Direction}: ${d.Count} (${d.Percentage}%)`),\n VisibleLiveCallAddresses: BoundNameList(\n metrics.LiveInteractions.map((i) => `${i.Channel} (${i.Direction}): ${i.RemoteAddress || i.ID} [${i.ElapsedLabel}]`),\n ),\n TopCostNumbers: BoundNameList(\n metrics.CostByNumber.map((n) => `${n.PhoneNumber}: $${n.Cost.toFixed(2)} (${n.Count} calls)`),\n ),\n };\n}\n\nexport function ValidateTimeRangeParam(raw: unknown): { ok: true; value: TimeRangeFilter } | { ok: false; result: AgentToolResult } {\n return ValidateEnumParam(raw, VALID_TIME_RANGES, 'timeRange');\n}\n\nexport function ValidateChannelParam(raw: unknown): { ok: true; value: ChannelFilter } | { ok: false; result: AgentToolResult } {\n return ValidateEnumParam(raw, VALID_CHANNELS, 'channel');\n}\n"]}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { AfterViewInit, OnDestroy, OnInit } from '@angular/core';
|
|
2
|
+
import { BaseResourceComponent } from '@memberjunction/ng-shared';
|
|
3
|
+
import { ResourceData } from '@memberjunction/core-entities';
|
|
4
|
+
import { type ChannelFilter, type InteractionEventRecordLike, type InteractionRecordLike, type OperationsMetrics, type PhoneNumberRecordLike, type TimeRangeFilter } from './telephony-operations-agent-context';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
/**
|
|
7
|
+
* TELEPHONY & INTERACTION OPERATIONS DASHBOARD
|
|
8
|
+
*
|
|
9
|
+
* An Explorer L3 dashboard providing operational analytics across phone calls, web realtime
|
|
10
|
+
* sessions, and multi-party meetings.
|
|
11
|
+
*
|
|
12
|
+
* Metrics computed from `MJ: Interactions`, `MJ: Interaction Events`, and `MJ: Phone Numbers`:
|
|
13
|
+
* - Volume by channel (Phone, Web, Meeting) and direction (Inbound, Outbound, Internal)
|
|
14
|
+
* - Answer rate and abandonment rate
|
|
15
|
+
* - Average handle time (AHT) and speed to answer (ASA)
|
|
16
|
+
* - Transfer and escalation volumes
|
|
17
|
+
* - Cost estimates by day and by phone number
|
|
18
|
+
* - Active live calls / sessions in real time
|
|
19
|
+
*
|
|
20
|
+
* Data is loaded in a single batched `RunViews` call and aggregated in memory.
|
|
21
|
+
*/
|
|
22
|
+
export declare class TelephonyOperationsDashboardComponent extends BaseResourceComponent implements OnInit, OnDestroy, AfterViewInit {
|
|
23
|
+
IsLoading: boolean;
|
|
24
|
+
ErrorMessage: string | null;
|
|
25
|
+
SelectedTimeRange: TimeRangeFilter;
|
|
26
|
+
SelectedChannelFilter: ChannelFilter;
|
|
27
|
+
SearchQuery: string;
|
|
28
|
+
RawInteractions: InteractionRecordLike[];
|
|
29
|
+
RawEvents: InteractionEventRecordLike[];
|
|
30
|
+
RawPhoneNumbers: PhoneNumberRecordLike[];
|
|
31
|
+
Metrics: OperationsMetrics;
|
|
32
|
+
private refreshTimer;
|
|
33
|
+
private destroyed;
|
|
34
|
+
private readonly cdr;
|
|
35
|
+
GetResourceDisplayName(_data: ResourceData): Promise<string>;
|
|
36
|
+
GetResourceIconClass(_data: ResourceData): Promise<string>;
|
|
37
|
+
ngOnInit(): Promise<void>;
|
|
38
|
+
ngAfterViewInit(): void;
|
|
39
|
+
ngOnDestroy(): void;
|
|
40
|
+
LoadData(): Promise<void>;
|
|
41
|
+
SetTimeRange(range: TimeRangeFilter): void;
|
|
42
|
+
SetChannelFilter(channel: ChannelFilter): void;
|
|
43
|
+
OnSearchQueryChange(query: string): void;
|
|
44
|
+
get FilteredLiveInteractions(): OperationsMetrics['LiveInteractions'];
|
|
45
|
+
get FilteredRecentInteractions(): InteractionRecordLike[];
|
|
46
|
+
FormatCost(amount: number | null): string;
|
|
47
|
+
FormatTime(date: Date | string | null): string;
|
|
48
|
+
FormatDate(date: Date | string | null): string;
|
|
49
|
+
ComputeDuration(started: Date | string, ended: Date | string | null): string;
|
|
50
|
+
private get filteredRawInteractions();
|
|
51
|
+
private recalculateMetrics;
|
|
52
|
+
private getDateFilter;
|
|
53
|
+
private publishAgentContext;
|
|
54
|
+
private registerAgentClientTools;
|
|
55
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TelephonyOperationsDashboardComponent, never>;
|
|
56
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TelephonyOperationsDashboardComponent, "mj-telephony-operations-dashboard", never, {}, {}, never, never, false, never>;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=telephony-operations-dashboard.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telephony-operations-dashboard.component.d.ts","sourceRoot":"","sources":["../../src/TelephonyOperations/telephony-operations-dashboard.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAgC,SAAS,EAAE,MAAM,EAAU,MAAM,eAAe,CAAC;AAEvG,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAOL,KAAK,aAAa,EAClB,KAAK,0BAA0B,EAC/B,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACrB,MAAM,sCAAsC,CAAC;;AAE9C;;;;;;;;;;;;;;;GAeG;AACH,qBAQa,qCACX,SAAQ,qBACR,YAAW,MAAM,EAAE,SAAS,EAAE,aAAa;IAEpC,SAAS,UAAQ;IACjB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEnC,iBAAiB,EAAE,eAAe,CAAQ;IAC1C,qBAAqB,EAAE,aAAa,CAAS;IAC7C,WAAW,SAAM;IAEjB,eAAe,EAAE,qBAAqB,EAAE,CAAM;IAC9C,SAAS,EAAE,0BAA0B,EAAE,CAAM;IAC7C,eAAe,EAAE,qBAAqB,EAAE,CAAM;IAE9C,OAAO,EAAE,iBAAiB,CAA0C;IAE3E,OAAO,CAAC,YAAY,CAA+C;IACnE,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA6B;IAElC,sBAAsB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAI5D,oBAAoB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAI1D,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBxC,eAAe,IAAI,IAAI;IAKd,WAAW,IAAI,IAAI;IASf,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IA6D/B,YAAY,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAO1C,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAS9C,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK/C,IAAW,wBAAwB,IAAI,iBAAiB,CAAC,kBAAkB,CAAC,CAY3E;IAED,IAAW,0BAA0B,IAAI,qBAAqB,EAAE,CAc/D;IAEM,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM;IAIzC,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM;IAM9C,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM;IAM9C,eAAe,CAAC,OAAO,EAAE,IAAI,GAAG,MAAM,EAAE,KAAK,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM;IASnF,OAAO,KAAK,uBAAuB,GAKlC;IAED,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,aAAa;IAcrB,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,wBAAwB;yCA7OrB,qCAAqC;2CAArC,qCAAqC;CA0SjD"}
|