@edvak99/voice-receptionist-widget 1.0.0 → 1.1.0
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/README.md +56 -43
- package/fesm2022/edvak99-voice-receptionist-widget-analytics-page.component-CoVjr5Y3.mjs +113 -0
- package/fesm2022/edvak99-voice-receptionist-widget-analytics-page.component-CoVjr5Y3.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-audit-page.component-ou9oxnJp.mjs +35 -0
- package/fesm2022/edvak99-voice-receptionist-widget-audit-page.component-ou9oxnJp.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-call-history-detail-page.component-BV7KOhd9.mjs +316 -0
- package/fesm2022/edvak99-voice-receptionist-widget-call-history-detail-page.component-BV7KOhd9.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-call-history-page.component-CWWma-6r.mjs +138 -0
- package/fesm2022/edvak99-voice-receptionist-widget-call-history-page.component-CWWma-6r.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-call-recording-player.component-B2IuwsVH.mjs +110 -0
- package/fesm2022/edvak99-voice-receptionist-widget-call-recording-player.component-B2IuwsVH.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-call-review.service-D-GutOar.mjs +29 -0
- package/fesm2022/edvak99-voice-receptionist-widget-call-review.service-D-GutOar.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-call-review.util-DQLIw7xb.mjs +70 -0
- package/fesm2022/edvak99-voice-receptionist-widget-call-review.util-DQLIw7xb.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-dashboard-page.component-B93giErR.mjs +248 -0
- package/fesm2022/edvak99-voice-receptionist-widget-dashboard-page.component-B93giErR.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-eds-avatar.component-PCnIWeOA.mjs +27 -0
- package/fesm2022/edvak99-voice-receptionist-widget-eds-avatar.component-PCnIWeOA.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-eds-elapsed.pipe-BrMNsxB5.mjs +136 -0
- package/fesm2022/edvak99-voice-receptionist-widget-eds-elapsed.pipe-BrMNsxB5.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-edvak99-voice-receptionist-widget-DClMfxeY.mjs +2666 -0
- package/fesm2022/edvak99-voice-receptionist-widget-edvak99-voice-receptionist-widget-DClMfxeY.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-knowledge-hub.page-BNsM-o3z.mjs +575 -0
- package/fesm2022/edvak99-voice-receptionist-widget-knowledge-hub.page-BNsM-o3z.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-live-calls-list.service-C2UZJ5wF.mjs +120 -0
- package/fesm2022/edvak99-voice-receptionist-widget-live-calls-list.service-C2UZJ5wF.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-live-calls-page.component-DQTVJjsP.mjs +115 -0
- package/fesm2022/edvak99-voice-receptionist-widget-live-calls-page.component-DQTVJjsP.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-live-monitor-page.component-C3iTtVdn.mjs +574 -0
- package/fesm2022/edvak99-voice-receptionist-widget-live-monitor-page.component-C3iTtVdn.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-outbound-purpose.util-BQECIuJu.mjs +54 -0
- package/fesm2022/edvak99-voice-receptionist-widget-outbound-purpose.util-BQECIuJu.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-outbound-purposes-page.component-C10N-x5g.mjs +265 -0
- package/fesm2022/edvak99-voice-receptionist-widget-outbound-purposes-page.component-C10N-x5g.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-settings-page.component-BBE_H2jb.mjs +509 -0
- package/fesm2022/edvak99-voice-receptionist-widget-settings-page.component-BBE_H2jb.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-task.util-DdtI0CR3.mjs +52 -0
- package/fesm2022/edvak99-voice-receptionist-widget-task.util-DdtI0CR3.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-tasks-page.component-COnYcaMT.mjs +237 -0
- package/fesm2022/edvak99-voice-receptionist-widget-tasks-page.component-COnYcaMT.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-wizard-page.component-Box7X-Cq.mjs +45 -0
- package/fesm2022/edvak99-voice-receptionist-widget-wizard-page.component-Box7X-Cq.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget.mjs +1 -41
- package/fesm2022/edvak99-voice-receptionist-widget.mjs.map +1 -1
- package/lib/api-paths.d.ts +11 -0
- package/lib/components/call-conversation-panel/call-conversation-panel.component.d.ts +45 -0
- package/lib/components/call-recording-player/call-recording-player.component.d.ts +29 -0
- package/lib/components/call-tasks-panel/call-tasks-panel.component.d.ts +19 -0
- package/lib/components/live-transcript-panel/live-transcript-panel.component.d.ts +36 -0
- package/lib/components/outbound-dial-modal/outbound-dial-modal.component.d.ts +37 -0
- package/lib/components/outbound-purpose-form-modal/outbound-purpose-form-modal.component.d.ts +38 -0
- package/lib/components/task-detail-drawer/task-detail-drawer.component.d.ts +20 -0
- package/lib/config.d.ts +23 -0
- package/lib/extract-api-rows.d.ts +2 -0
- package/lib/knowledge/components/faq-empty-state/faq-empty-state.component.d.ts +22 -0
- package/lib/knowledge/components/faq-form/faq-form.component.d.ts +27 -0
- package/lib/knowledge/components/faq-search-tester/faq-search-tester.component.d.ts +17 -0
- package/lib/knowledge/mocks/practice-faq.seed.d.ts +2 -0
- package/lib/knowledge/models/practice-faq.model.d.ts +47 -0
- package/lib/knowledge/pages/knowledge-hub.page.d.ts +47 -0
- package/lib/knowledge/services/practice-faq-api.mock.d.ts +16 -0
- package/lib/knowledge/services/practice-faq-api.service.d.ts +22 -0
- package/lib/knowledge/utils/faq.util.d.ts +3 -0
- package/lib/layout/eds-app-rail.component.d.ts +6 -0
- package/lib/layout/eds-app-shell.component.d.ts +5 -0
- package/lib/layout/eds-module-nav.component.d.ts +24 -0
- package/lib/layout/eds-topbar.component.d.ts +29 -0
- package/lib/mocks/api-log.seed.d.ts +5 -0
- package/lib/mocks/outbound-purpose.seed.d.ts +3 -0
- package/lib/mocks/seed-data.d.ts +38 -0
- package/lib/models/ai-receptionist.types.d.ts +257 -0
- package/lib/models/api-dto.types.d.ts +215 -0
- package/lib/models/api-log.types.d.ts +53 -0
- package/lib/models/live-transcript.types.d.ts +26 -0
- package/lib/models/outbound-purpose.types.d.ts +50 -0
- package/lib/pages/analytics-page/analytics-page.component.d.ts +44 -0
- package/lib/pages/audit-page/audit-page.component.d.ts +14 -0
- package/lib/pages/call-history-detail-page/call-history-detail-page.component.d.ts +25 -0
- package/lib/pages/call-history-page/call-history-page.component.d.ts +42 -0
- package/lib/pages/dashboard-page/dashboard-page.component.d.ts +60 -0
- package/lib/pages/live-calls-page/live-calls-page.component.d.ts +37 -0
- package/lib/pages/live-monitor-page/live-monitor-page.component.d.ts +43 -0
- package/lib/pages/outbound-purposes-page/outbound-purposes-page.component.d.ts +24 -0
- package/lib/pages/settings-page/settings-fields.config.d.ts +35 -0
- package/lib/pages/settings-page/settings-page.component.d.ts +50 -0
- package/lib/pages/settings-page/tts-voice-presets.d.ts +7 -0
- package/lib/pages/tasks-page/tasks-page.component.d.ts +35 -0
- package/lib/pages/wizard-page/wizard-page.component.d.ts +17 -0
- package/lib/pipes/eds-elapsed.pipe.d.ts +7 -0
- package/lib/provide-voice-receptionist.d.ts +6 -0
- package/lib/routes.d.ts +8 -0
- package/lib/services/agent-online.service.d.ts +29 -0
- package/lib/services/ai-receptionist-api.mappers.d.ts +45 -0
- package/lib/services/ai-receptionist-api.mock.d.ts +150 -0
- package/lib/services/ai-receptionist-api.service.d.ts +156 -0
- package/lib/services/call-review.service.d.ts +12 -0
- package/lib/services/dashboard-socket.service.d.ts +26 -0
- package/lib/services/live-calls-list.service.d.ts +29 -0
- package/lib/services/live-transcript.service.d.ts +39 -0
- package/lib/shared/copy-button.component.d.ts +14 -0
- package/lib/shared/modal.component.d.ts +20 -0
- package/lib/shared/toast-container.component.d.ts +7 -0
- package/lib/shared/toast.service.d.ts +16 -0
- package/lib/ui/eds-avatar.component.d.ts +8 -0
- package/lib/ui/eds-badge.component.d.ts +7 -0
- package/lib/ui/eds-button.component.d.ts +9 -0
- package/lib/ui/eds-icon.component.d.ts +10 -0
- package/lib/ui/eds-pulse-dot.component.d.ts +5 -0
- package/lib/ui/eds-waveform.component.d.ts +8 -0
- package/lib/utils/call-outcome.util.d.ts +8 -0
- package/lib/utils/call-review.util.d.ts +8 -0
- package/lib/utils/outbound-purpose.util.d.ts +14 -0
- package/lib/utils/task.util.d.ts +10 -0
- package/lib/utils/tool-labels.util.d.ts +14 -0
- package/lib/utils/transcript-timing.util.d.ts +17 -0
- package/lib/utils/welcome-message.util.d.ts +5 -0
- package/package.json +12 -5
- package/public-api.d.ts +6 -2
- package/styles/_index.scss +55 -0
- package/styles/chat-ui.scss +133 -0
- package/styles/eds.scss +328 -0
- package/lib/voice-receptionist-widget.component.d.ts +0 -5
- package/lib/voice-receptionist-widget.service.d.ts +0 -6
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
import { AgentSettings, AiReceptionistStatus, AnalyticsData, AuditEvent, DashboardData, CallRecordingMeta, HistoryCall, HistoryDetail, LiveCall, LocationOption, ProviderOption, SetupData, TaskItem, CreateTaskRequest, TaskFilters, RegenerateSummaryResult, ToolEvent, TranscriptLine } from '../models/ai-receptionist.types';
|
|
3
|
+
import { ApiLogDetail, ApiLogFilters, ApiLogListResponse, ApiLogStats } from '../models/api-log.types';
|
|
4
|
+
import { CreateOutboundPurposeRequest, OutboundPurpose, OutboundPurposesResponse, PlaceOutboundCallRequest, PlaceOutboundCallResponse, UpdateOutboundPurposeRequest } from '../models/outbound-purpose.types';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export declare class AiReceptionistApiMockService {
|
|
7
|
+
private readonly liveCalls;
|
|
8
|
+
private readonly tasks;
|
|
9
|
+
private readonly history;
|
|
10
|
+
private readonly settings;
|
|
11
|
+
private readonly status;
|
|
12
|
+
private readonly outboundPurposes;
|
|
13
|
+
private mock;
|
|
14
|
+
getStatus(): Observable<{
|
|
15
|
+
data: AiReceptionistStatus;
|
|
16
|
+
}>;
|
|
17
|
+
setAgentOn(on: boolean): void;
|
|
18
|
+
getDashboard(): Observable<{
|
|
19
|
+
data: DashboardData;
|
|
20
|
+
}>;
|
|
21
|
+
getLiveCalls(): Observable<{
|
|
22
|
+
data: LiveCall[];
|
|
23
|
+
}>;
|
|
24
|
+
getLiveCall(id: string): Observable<{
|
|
25
|
+
data: LiveCall | null;
|
|
26
|
+
}>;
|
|
27
|
+
getCallTranscript(id: string): Observable<{
|
|
28
|
+
data: TranscriptLine[];
|
|
29
|
+
}>;
|
|
30
|
+
getCallSummary(id: string): Observable<{
|
|
31
|
+
data: {
|
|
32
|
+
summary: string;
|
|
33
|
+
transcript: TranscriptLine[];
|
|
34
|
+
tools: ToolEvent[];
|
|
35
|
+
} | null;
|
|
36
|
+
}>;
|
|
37
|
+
getCallRecording(callId: string): Observable<CallRecordingMeta>;
|
|
38
|
+
getCallRecordingBlob(): Observable<Blob>;
|
|
39
|
+
getHistory(filters?: {
|
|
40
|
+
q?: string;
|
|
41
|
+
dir?: string;
|
|
42
|
+
outcome?: string;
|
|
43
|
+
location?: string;
|
|
44
|
+
review?: 'needs' | 'reviewed';
|
|
45
|
+
}): Observable<{
|
|
46
|
+
data: HistoryCall[];
|
|
47
|
+
}>;
|
|
48
|
+
getCallDetail(id: string): Observable<{
|
|
49
|
+
data: HistoryDetail | null;
|
|
50
|
+
}>;
|
|
51
|
+
regenerateCallSummary(callId: string): Observable<{
|
|
52
|
+
data: RegenerateSummaryResult;
|
|
53
|
+
}>;
|
|
54
|
+
postTakeover(id: string): Observable<{
|
|
55
|
+
data: {
|
|
56
|
+
success: boolean;
|
|
57
|
+
};
|
|
58
|
+
}>;
|
|
59
|
+
postResumeAi(id: string): Observable<{
|
|
60
|
+
data: {
|
|
61
|
+
success: boolean;
|
|
62
|
+
};
|
|
63
|
+
}>;
|
|
64
|
+
postPause(id: string): Observable<{
|
|
65
|
+
data: {
|
|
66
|
+
success: boolean;
|
|
67
|
+
};
|
|
68
|
+
}>;
|
|
69
|
+
postTransfer(id: string): Observable<{
|
|
70
|
+
data: {
|
|
71
|
+
success: boolean;
|
|
72
|
+
};
|
|
73
|
+
}>;
|
|
74
|
+
postEnd(id: string): Observable<{
|
|
75
|
+
data: {
|
|
76
|
+
success: boolean;
|
|
77
|
+
};
|
|
78
|
+
}>;
|
|
79
|
+
postMessage(id: string, text: string): Observable<{
|
|
80
|
+
data: {
|
|
81
|
+
success: boolean;
|
|
82
|
+
};
|
|
83
|
+
}>;
|
|
84
|
+
postReview(id: string): Observable<{
|
|
85
|
+
data: {
|
|
86
|
+
review: string;
|
|
87
|
+
};
|
|
88
|
+
}>;
|
|
89
|
+
getTasks(filters?: TaskFilters): Observable<{
|
|
90
|
+
data: TaskItem[];
|
|
91
|
+
}>;
|
|
92
|
+
getCallTasks(callId: string): Observable<{
|
|
93
|
+
data: TaskItem[];
|
|
94
|
+
}>;
|
|
95
|
+
createTask(req: CreateTaskRequest): Observable<{
|
|
96
|
+
data: TaskItem;
|
|
97
|
+
}>;
|
|
98
|
+
patchTask(id: string, status: TaskItem['status']): Observable<{
|
|
99
|
+
data: TaskItem | null;
|
|
100
|
+
}>;
|
|
101
|
+
getAnalytics(range: string): Observable<{
|
|
102
|
+
data: AnalyticsData;
|
|
103
|
+
}>;
|
|
104
|
+
getSettings(): Observable<{
|
|
105
|
+
data: AgentSettings;
|
|
106
|
+
}>;
|
|
107
|
+
putSettings(next: AgentSettings): Observable<{
|
|
108
|
+
data: AgentSettings;
|
|
109
|
+
}>;
|
|
110
|
+
previewVoice(_voiceId: string): Observable<Blob>;
|
|
111
|
+
private withEffectiveWelcome;
|
|
112
|
+
getAudit(q?: string, actor?: string): Observable<{
|
|
113
|
+
data: AuditEvent[];
|
|
114
|
+
}>;
|
|
115
|
+
getSetup(): Observable<{
|
|
116
|
+
data: SetupData;
|
|
117
|
+
}>;
|
|
118
|
+
activateSetup(): Observable<{
|
|
119
|
+
data: {
|
|
120
|
+
success: boolean;
|
|
121
|
+
};
|
|
122
|
+
}>;
|
|
123
|
+
getLocations(): Observable<{
|
|
124
|
+
data: LocationOption[];
|
|
125
|
+
}>;
|
|
126
|
+
getProviders(): Observable<{
|
|
127
|
+
data: ProviderOption[];
|
|
128
|
+
}>;
|
|
129
|
+
getStreamLines(): TranscriptLine[];
|
|
130
|
+
appendStreamLine(callId: string, line: TranscriptLine): void;
|
|
131
|
+
usesMockStreaming(): boolean;
|
|
132
|
+
getCallApiLogs(callId: string): Observable<ApiLogListResponse>;
|
|
133
|
+
getApiLogs(filters?: ApiLogFilters): Observable<ApiLogListResponse>;
|
|
134
|
+
getApiLogDetail(logId: string): Observable<{
|
|
135
|
+
data: ApiLogDetail | null;
|
|
136
|
+
}>;
|
|
137
|
+
getApiLogStats(): Observable<{
|
|
138
|
+
data: ApiLogStats;
|
|
139
|
+
}>;
|
|
140
|
+
getOutboundPurposes(includeInactive?: boolean): Observable<OutboundPurposesResponse>;
|
|
141
|
+
createOutboundPurpose(body: CreateOutboundPurposeRequest): Observable<OutboundPurpose>;
|
|
142
|
+
updateOutboundPurpose(purposeId: string, body: UpdateOutboundPurposeRequest): Observable<OutboundPurpose>;
|
|
143
|
+
deleteOutboundPurpose(purposeId: string): Observable<{
|
|
144
|
+
success: boolean;
|
|
145
|
+
}>;
|
|
146
|
+
placeOutboundCall(body: PlaceOutboundCallRequest): Observable<PlaceOutboundCallResponse>;
|
|
147
|
+
private patchLive;
|
|
148
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AiReceptionistApiMockService, never>;
|
|
149
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<AiReceptionistApiMockService>;
|
|
150
|
+
}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
import { ApiLogDetail, ApiLogFilters, ApiLogListResponse, ApiLogStats } from '../models/api-log.types';
|
|
3
|
+
import { CreateOutboundPurposeRequest, OutboundPurpose, OutboundPurposesResponse, PlaceOutboundCallRequest, PlaceOutboundCallResponse, UpdateOutboundPurposeRequest } from '../models/outbound-purpose.types';
|
|
4
|
+
import { AgentSettings, AiReceptionistStatus, AnalyticsData, AuditEvent, DashboardData, HistoryCall, HistoryDetail, LiveCall, RegenerateSummaryResult, LocationOption, ProviderOption, SetupData, TaskItem, CreateTaskRequest, TaskFilters, ToolEvent, TranscriptLine, CallRecordingMeta } from '../models/ai-receptionist.types';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export declare class AiReceptionistApiService {
|
|
7
|
+
private readonly http;
|
|
8
|
+
private readonly mock;
|
|
9
|
+
private readonly config;
|
|
10
|
+
private readonly paths;
|
|
11
|
+
private readonly arBase;
|
|
12
|
+
private get useMock();
|
|
13
|
+
getStatus(): Observable<{
|
|
14
|
+
data: AiReceptionistStatus;
|
|
15
|
+
}>;
|
|
16
|
+
/** Prefer this for the dashboard On/Off switch — PUT { enabled }. */
|
|
17
|
+
setAgentOnline(enabled: boolean): Observable<{
|
|
18
|
+
data: AiReceptionistStatus;
|
|
19
|
+
}>;
|
|
20
|
+
/** @deprecated Prefer setAgentOnline — kept for setup wizard activate flow. */
|
|
21
|
+
setAgentOn(on: boolean): void;
|
|
22
|
+
getDashboard(): Observable<{
|
|
23
|
+
data: DashboardData;
|
|
24
|
+
}>;
|
|
25
|
+
getLiveCalls(): Observable<{
|
|
26
|
+
data: LiveCall[];
|
|
27
|
+
}>;
|
|
28
|
+
getLiveCall(id: string): Observable<{
|
|
29
|
+
data: LiveCall | null;
|
|
30
|
+
}>;
|
|
31
|
+
getCallTranscript(id: string): Observable<{
|
|
32
|
+
data: TranscriptLine[];
|
|
33
|
+
}>;
|
|
34
|
+
getCallSummary(id: string): Observable<{
|
|
35
|
+
data: {
|
|
36
|
+
summary: string;
|
|
37
|
+
transcript: TranscriptLine[];
|
|
38
|
+
tools: ToolEvent[];
|
|
39
|
+
} | null;
|
|
40
|
+
}>;
|
|
41
|
+
getCallRecording(callId: string): Observable<CallRecordingMeta>;
|
|
42
|
+
/** Fetch audio bytes with JWT (interceptor). Pass relative path from metadata.url. */
|
|
43
|
+
getCallRecordingBlob(audioPath: string): Observable<Blob>;
|
|
44
|
+
getHistory(filters?: {
|
|
45
|
+
q?: string;
|
|
46
|
+
dir?: string;
|
|
47
|
+
outcome?: string;
|
|
48
|
+
location?: string;
|
|
49
|
+
review?: 'needs' | 'reviewed';
|
|
50
|
+
}): Observable<{
|
|
51
|
+
data: HistoryCall[];
|
|
52
|
+
}>;
|
|
53
|
+
getCallDetail(id: string): Observable<{
|
|
54
|
+
data: HistoryDetail | null;
|
|
55
|
+
}>;
|
|
56
|
+
regenerateCallSummary(callId: string): Observable<{
|
|
57
|
+
data: RegenerateSummaryResult;
|
|
58
|
+
}>;
|
|
59
|
+
postTakeover(id: string): Observable<{
|
|
60
|
+
data: {
|
|
61
|
+
success: boolean;
|
|
62
|
+
};
|
|
63
|
+
}>;
|
|
64
|
+
postResumeAi(id: string): Observable<{
|
|
65
|
+
data: {
|
|
66
|
+
success: boolean;
|
|
67
|
+
};
|
|
68
|
+
}>;
|
|
69
|
+
postPause(id: string): Observable<{
|
|
70
|
+
data: {
|
|
71
|
+
success: boolean;
|
|
72
|
+
};
|
|
73
|
+
}>;
|
|
74
|
+
postTransfer(id: string): Observable<{
|
|
75
|
+
data: {
|
|
76
|
+
success: boolean;
|
|
77
|
+
};
|
|
78
|
+
}>;
|
|
79
|
+
postEnd(id: string): Observable<{
|
|
80
|
+
data: {
|
|
81
|
+
success: boolean;
|
|
82
|
+
};
|
|
83
|
+
}>;
|
|
84
|
+
postMessage(id: string, text: string): Observable<{
|
|
85
|
+
data: {
|
|
86
|
+
success: boolean;
|
|
87
|
+
};
|
|
88
|
+
}>;
|
|
89
|
+
postReview(id: string): Observable<{
|
|
90
|
+
data: {
|
|
91
|
+
review: string;
|
|
92
|
+
};
|
|
93
|
+
}>;
|
|
94
|
+
getTasks(filters?: TaskFilters): Observable<{
|
|
95
|
+
data: TaskItem[];
|
|
96
|
+
}>;
|
|
97
|
+
getCallTasks(callId: string): Observable<{
|
|
98
|
+
data: TaskItem[];
|
|
99
|
+
}>;
|
|
100
|
+
createTask(req: CreateTaskRequest): Observable<{
|
|
101
|
+
data: TaskItem;
|
|
102
|
+
}>;
|
|
103
|
+
patchTask(id: string, status: TaskItem['status']): Observable<{
|
|
104
|
+
data: TaskItem | null;
|
|
105
|
+
}>;
|
|
106
|
+
getAnalytics(range: string): Observable<{
|
|
107
|
+
data: AnalyticsData;
|
|
108
|
+
}>;
|
|
109
|
+
getSettings(): Observable<{
|
|
110
|
+
data: AgentSettings;
|
|
111
|
+
}>;
|
|
112
|
+
putSettings(next: AgentSettings): Observable<{
|
|
113
|
+
data: AgentSettings;
|
|
114
|
+
}>;
|
|
115
|
+
/** ElevenLabs spoken sample for Agent Settings voice picker. */
|
|
116
|
+
previewVoice(voiceId: string): Observable<Blob>;
|
|
117
|
+
getAudit(q?: string): Observable<{
|
|
118
|
+
data: AuditEvent[];
|
|
119
|
+
}>;
|
|
120
|
+
getSetup(): Observable<{
|
|
121
|
+
data: SetupData;
|
|
122
|
+
}>;
|
|
123
|
+
activateSetup(): Observable<{
|
|
124
|
+
data: {
|
|
125
|
+
success: boolean;
|
|
126
|
+
};
|
|
127
|
+
}>;
|
|
128
|
+
getLocations(): Observable<{
|
|
129
|
+
data: LocationOption[];
|
|
130
|
+
}>;
|
|
131
|
+
getProviders(): Observable<{
|
|
132
|
+
data: ProviderOption[];
|
|
133
|
+
}>;
|
|
134
|
+
getStreamLines(): TranscriptLine[];
|
|
135
|
+
appendStreamLine(callId: string, line: TranscriptLine): void;
|
|
136
|
+
usesMockStreaming(): boolean;
|
|
137
|
+
getCallApiLogs(callId: string): Observable<ApiLogListResponse>;
|
|
138
|
+
getApiLogs(filters?: ApiLogFilters): Observable<ApiLogListResponse>;
|
|
139
|
+
getApiLogDetail(logId: string): Observable<{
|
|
140
|
+
data: ApiLogDetail | null;
|
|
141
|
+
}>;
|
|
142
|
+
getApiLogStats(): Observable<{
|
|
143
|
+
data: ApiLogStats;
|
|
144
|
+
}>;
|
|
145
|
+
getOutboundPurposes(includeInactive?: boolean): Observable<OutboundPurposesResponse>;
|
|
146
|
+
createOutboundPurpose(body: CreateOutboundPurposeRequest): Observable<OutboundPurpose>;
|
|
147
|
+
updateOutboundPurpose(purposeId: string, body: UpdateOutboundPurposeRequest): Observable<OutboundPurpose>;
|
|
148
|
+
deleteOutboundPurpose(purposeId: string): Observable<{
|
|
149
|
+
success: boolean;
|
|
150
|
+
}>;
|
|
151
|
+
placeOutboundCall(body: PlaceOutboundCallRequest): Observable<PlaceOutboundCallResponse>;
|
|
152
|
+
private postCallAction;
|
|
153
|
+
private apiErrorMessage;
|
|
154
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AiReceptionistApiService, never>;
|
|
155
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<AiReceptionistApiService>;
|
|
156
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
import { CallReviewStatus } from '../utils/call-review.util';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class CallReviewService {
|
|
5
|
+
private readonly api;
|
|
6
|
+
/** Cached from dashboard summary; decremented optimistically on review. */
|
|
7
|
+
readonly needsReviewCount: import("@angular/core").WritableSignal<number | null>;
|
|
8
|
+
setNeedsReviewCount(count: number): void;
|
|
9
|
+
markReviewed(callId: string): Observable<CallReviewStatus>;
|
|
10
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CallReviewService, never>;
|
|
11
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<CallReviewService>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
/**
|
|
3
|
+
* Single shared Socket.io connection to the `/dashboard` namespace.
|
|
4
|
+
* Used by live calls list + per-call transcript stream.
|
|
5
|
+
*/
|
|
6
|
+
export declare class DashboardSocketService {
|
|
7
|
+
private readonly config;
|
|
8
|
+
private readonly paths;
|
|
9
|
+
readonly connected: import("@angular/core").WritableSignal<boolean>;
|
|
10
|
+
private socket;
|
|
11
|
+
private refCount;
|
|
12
|
+
private readonly handlers;
|
|
13
|
+
private readonly connectCallbacks;
|
|
14
|
+
acquire(): void;
|
|
15
|
+
release(): void;
|
|
16
|
+
onConnect(callback: () => void): void;
|
|
17
|
+
offConnect(callback: () => void): void;
|
|
18
|
+
on<T>(event: string, handler: (payload: T) => void): void;
|
|
19
|
+
off<T>(event: string, handler: (payload: T) => void): void;
|
|
20
|
+
emit(event: string, payload?: unknown): void;
|
|
21
|
+
private connect;
|
|
22
|
+
private disconnect;
|
|
23
|
+
private fireConnectCallbacks;
|
|
24
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DashboardSocketService, never>;
|
|
25
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<DashboardSocketService>;
|
|
26
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { LiveCall } from '../models/ai-receptionist.types';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* Shared live calls list — REST + `live_calls_updated` socket + fallback poll.
|
|
5
|
+
*/
|
|
6
|
+
export declare class LiveCallsListService {
|
|
7
|
+
private readonly api;
|
|
8
|
+
private readonly socket;
|
|
9
|
+
private readonly config;
|
|
10
|
+
readonly calls: import("@angular/core").WritableSignal<LiveCall[]>;
|
|
11
|
+
readonly loading: import("@angular/core").WritableSignal<boolean>;
|
|
12
|
+
readonly error: import("@angular/core").WritableSignal<string | null>;
|
|
13
|
+
readonly lastUpdated: import("@angular/core").WritableSignal<number | null>;
|
|
14
|
+
private subscriberCount;
|
|
15
|
+
private pollSub?;
|
|
16
|
+
private visibilityHandler?;
|
|
17
|
+
private mockPollTimer;
|
|
18
|
+
private readonly onLiveCallsUpdated;
|
|
19
|
+
private readonly onSocketConnect;
|
|
20
|
+
start(): void;
|
|
21
|
+
stop(): void;
|
|
22
|
+
refresh(showLoading?: boolean): void;
|
|
23
|
+
private startFallbackPoll;
|
|
24
|
+
private stopFallbackPoll;
|
|
25
|
+
private bindVisibility;
|
|
26
|
+
private unbindVisibility;
|
|
27
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<LiveCallsListService, never>;
|
|
28
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<LiveCallsListService>;
|
|
29
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { ToolEvent, TranscriptLine } from '../models/ai-receptionist.types';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* Live call stream over shared Socket.io (`/dashboard` namespace).
|
|
5
|
+
* REST seeds transcript/tools once; socket delivers `new_chunk` + `call_event`.
|
|
6
|
+
*/
|
|
7
|
+
export declare class LiveTranscriptService {
|
|
8
|
+
private readonly socket;
|
|
9
|
+
private readonly config;
|
|
10
|
+
readonly lines: import("@angular/core").WritableSignal<TranscriptLine[]>;
|
|
11
|
+
readonly patientInterim: import("@angular/core").WritableSignal<string | null>;
|
|
12
|
+
readonly aiInterim: import("@angular/core").WritableSignal<string | null>;
|
|
13
|
+
readonly tools: import("@angular/core").WritableSignal<ToolEvent[]>;
|
|
14
|
+
readonly connected: import("@angular/core").WritableSignal<boolean>;
|
|
15
|
+
readonly error: import("@angular/core").WritableSignal<string | null>;
|
|
16
|
+
readonly callEnded: import("@angular/core").WritableSignal<boolean>;
|
|
17
|
+
readonly summaryRequested: import("@angular/core").WritableSignal<boolean>;
|
|
18
|
+
private activeCallId;
|
|
19
|
+
private watching;
|
|
20
|
+
private mockTimer;
|
|
21
|
+
private mockIndex;
|
|
22
|
+
private readonly chunkHandler;
|
|
23
|
+
private readonly eventHandler;
|
|
24
|
+
private readonly onSocketConnect;
|
|
25
|
+
seed(transcript: TranscriptLine[], toolEvents: ToolEvent[]): void;
|
|
26
|
+
watch(callId: string, live?: boolean): void;
|
|
27
|
+
stop(): void;
|
|
28
|
+
markCompleted(): void;
|
|
29
|
+
private unsubscribeSocketEvents;
|
|
30
|
+
private handleChunk;
|
|
31
|
+
private handleCallEvent;
|
|
32
|
+
private appendLineIfNew;
|
|
33
|
+
private startMockStream;
|
|
34
|
+
private stopMockStream;
|
|
35
|
+
private clearInterim;
|
|
36
|
+
private resetStreamState;
|
|
37
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<LiveTranscriptService, never>;
|
|
38
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<LiveTranscriptService>;
|
|
39
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
export declare class CopyButtonComponent {
|
|
3
|
+
/** Raw value to copy (full ID / phone / etc.) */
|
|
4
|
+
value: string | null | undefined;
|
|
5
|
+
/** Accessible label, e.g. "patient ID" */
|
|
6
|
+
label: string;
|
|
7
|
+
private readonly toast;
|
|
8
|
+
protected readonly copied: import("@angular/core").WritableSignal<boolean>;
|
|
9
|
+
protected get copyValue(): string;
|
|
10
|
+
protected get ariaLabel(): string;
|
|
11
|
+
onCopy(event: MouseEvent): Promise<void>;
|
|
12
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CopyButtonComponent, never>;
|
|
13
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CopyButtonComponent, "app-copy-btn", never, { "value": { "alias": "value"; "required": false; }; "label": { "alias": "label"; "required": false; }; }, {}, never, never, true, never>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { EventEmitter } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* Lightweight, reusable modal shell.
|
|
5
|
+
*
|
|
6
|
+
* Renders a centered card on top of a dimmed backdrop. Closes on backdrop
|
|
7
|
+
* click, ESC key, or via the close button. Slot the modal body using
|
|
8
|
+
* <ng-content>.
|
|
9
|
+
*/
|
|
10
|
+
export declare class ModalComponent {
|
|
11
|
+
title: string;
|
|
12
|
+
subtitle?: string;
|
|
13
|
+
maxWidth: string;
|
|
14
|
+
readonly closed: EventEmitter<void>;
|
|
15
|
+
onEscape(): void;
|
|
16
|
+
onBackdropClick(event: MouseEvent): void;
|
|
17
|
+
close(): void;
|
|
18
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ModalComponent, never>;
|
|
19
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ModalComponent, "app-modal", never, { "title": { "alias": "title"; "required": true; }; "subtitle": { "alias": "subtitle"; "required": false; }; "maxWidth": { "alias": "maxWidth"; "required": false; }; }, { "closed": "closed"; }, never, ["*"], true, never>;
|
|
20
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ToastService } from './toast.service';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class ToastContainerComponent {
|
|
4
|
+
protected readonly toastService: ToastService;
|
|
5
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ToastContainerComponent, never>;
|
|
6
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ToastContainerComponent, "app-toast-container", never, {}, {}, never, never, true, never>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
export interface ToastMessage {
|
|
3
|
+
id: number;
|
|
4
|
+
text: string;
|
|
5
|
+
variant: 'info' | 'success' | 'error';
|
|
6
|
+
}
|
|
7
|
+
export declare class ToastService {
|
|
8
|
+
private nextId;
|
|
9
|
+
private timers;
|
|
10
|
+
private readonly _toasts;
|
|
11
|
+
readonly toasts: import("@angular/core").Signal<ToastMessage[]>;
|
|
12
|
+
show(text: string, variant?: ToastMessage['variant'], durationMs?: number): void;
|
|
13
|
+
dismiss(id: number): void;
|
|
14
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ToastService, never>;
|
|
15
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<ToastService>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
export declare class EdsAvatarComponent {
|
|
3
|
+
readonly initials: import("@angular/core").InputSignal<string>;
|
|
4
|
+
readonly tone: import("@angular/core").InputSignal<"brand" | "gray">;
|
|
5
|
+
readonly gradient: import("@angular/core").InputSignal<boolean>;
|
|
6
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<EdsAvatarComponent, never>;
|
|
7
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<EdsAvatarComponent, "eds-avatar", never, { "initials": { "alias": "initials"; "required": false; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; "gradient": { "alias": "gradient"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
export type BadgeTone = 'brand' | 'pos' | 'notice' | 'neg' | 'violet' | 'gray';
|
|
3
|
+
export declare class EdsBadgeComponent {
|
|
4
|
+
readonly tone: import("@angular/core").InputSignal<BadgeTone>;
|
|
5
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<EdsBadgeComponent, never>;
|
|
6
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<EdsBadgeComponent, "eds-badge", never, { "tone": { "alias": "tone"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
export type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'danger' | 'positive';
|
|
3
|
+
export declare class EdsButtonComponent {
|
|
4
|
+
readonly variant: import("@angular/core").InputSignal<ButtonVariant>;
|
|
5
|
+
readonly type: import("@angular/core").InputSignal<"button" | "submit">;
|
|
6
|
+
readonly disabled: import("@angular/core").InputSignal<boolean>;
|
|
7
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<EdsButtonComponent, never>;
|
|
8
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<EdsButtonComponent, "eds-button", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
export declare class EdsIconComponent {
|
|
3
|
+
readonly name: import("@angular/core").InputSignal<string>;
|
|
4
|
+
readonly size: import("@angular/core").InputSignal<number>;
|
|
5
|
+
readonly fill: import("@angular/core").InputSignal<number>;
|
|
6
|
+
readonly weight: import("@angular/core").InputSignal<number>;
|
|
7
|
+
protected readonly variation: import("@angular/core").Signal<string>;
|
|
8
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<EdsIconComponent, never>;
|
|
9
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<EdsIconComponent, "eds-icon", never, { "name": { "alias": "name"; "required": true; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "fill": { "alias": "fill"; "required": false; "isSignal": true; }; "weight": { "alias": "weight"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
export declare class EdsPulseDotComponent {
|
|
3
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<EdsPulseDotComponent, never>;
|
|
4
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<EdsPulseDotComponent, "eds-pulse-dot", never, {}, {}, never, never, true, never>;
|
|
5
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
export declare class EdsWaveformComponent {
|
|
3
|
+
readonly active: import("@angular/core").InputSignal<boolean>;
|
|
4
|
+
readonly tone: import("@angular/core").InputSignal<"brand" | "violet">;
|
|
5
|
+
protected readonly bars: number[];
|
|
6
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<EdsWaveformComponent, never>;
|
|
7
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<EdsWaveformComponent, "eds-waveform", never, { "active": { "alias": "active"; "required": false; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { BadgeTone } from '../ui/eds-badge.component';
|
|
2
|
+
/** Known history outcomes from GET /calls/history (HistoryCallDto.outcome). */
|
|
3
|
+
export declare const HISTORY_OUTCOMES: readonly ["completed", "failed", "transferred", "escalated"];
|
|
4
|
+
export type HistoryOutcome = (typeof HISTORY_OUTCOMES)[number] | 'custom';
|
|
5
|
+
export declare function normalizeHistoryOutcome(outcome: string): HistoryOutcome;
|
|
6
|
+
/** Badge tone for history table / detail — separate from lifecycle or live UI status. */
|
|
7
|
+
export declare function outcomeBadgeTone(outcome: string): BadgeTone;
|
|
8
|
+
export declare function formatOutcomeLabel(outcome: string): string;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type CallReviewStatus = 'needs' | 'reviewed';
|
|
2
|
+
export declare function reviewLabel(status: CallReviewStatus): string;
|
|
3
|
+
export declare function reviewBadgeTone(status: CallReviewStatus): 'pos' | 'notice';
|
|
4
|
+
export declare function isNeedsReview(status: CallReviewStatus): boolean;
|
|
5
|
+
/** Normalize legacy or API values to CallReviewStatus. */
|
|
6
|
+
export declare function normalizeReviewStatus(value: string | undefined | null): CallReviewStatus;
|
|
7
|
+
export type ReviewFilterTab = 'all' | 'needs' | 'reviewed';
|
|
8
|
+
export declare function matchesReviewFilter(status: CallReviewStatus, tab: ReviewFilterTab): boolean;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { OutboundPurpose, OutboundPurposePlaceholder, OutboundRequiredField } from '../models/outbound-purpose.types';
|
|
2
|
+
export declare const REQUIRED_FIELD_OPTIONS: {
|
|
3
|
+
value: OutboundRequiredField;
|
|
4
|
+
label: string;
|
|
5
|
+
}[];
|
|
6
|
+
export declare function requiredFieldLabel(field: OutboundRequiredField): string;
|
|
7
|
+
export declare function formatRequiredFields(fields: OutboundRequiredField[]): string;
|
|
8
|
+
/** Substitute placeholder tokens with sample values. */
|
|
9
|
+
export declare function substitutePlaceholders(text: string, placeholders: OutboundPurposePlaceholder[]): string;
|
|
10
|
+
/** Live preview: sampleOpening if set, else openingTemplate with substitutions. */
|
|
11
|
+
export declare function renderOpeningPreview(sampleOpening: string, openingTemplate: string, placeholders: OutboundPurposePlaceholder[]): string;
|
|
12
|
+
export declare function purposeShowsCustomScript(purpose: OutboundPurpose): boolean;
|
|
13
|
+
export declare function isCustomScriptRequired(purpose: OutboundPurpose): boolean;
|
|
14
|
+
export declare function isPurposeFormValid(purpose: OutboundPurpose | null, values: Record<string, string>): boolean;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { BadgeTone } from '../ui/eds-badge.component';
|
|
2
|
+
import { TaskPriority, TaskSource, TaskStatus } from '../models/ai-receptionist.types';
|
|
3
|
+
export declare const TASK_TYPE_OPTIONS: readonly ["Refill request", "Callback", "Billing", "Scheduling", "Clinical", "Other"];
|
|
4
|
+
export declare function taskStatusLabel(status: TaskStatus): string;
|
|
5
|
+
export declare function taskStatusTone(status: TaskStatus): BadgeTone;
|
|
6
|
+
export declare function taskPriorityTone(priority: TaskPriority): BadgeTone;
|
|
7
|
+
export declare function taskPriorityLabel(priority: TaskPriority): string;
|
|
8
|
+
export declare function taskSourceLabel(source: TaskSource): string;
|
|
9
|
+
export declare function taskTypeTone(type: string): BadgeTone;
|
|
10
|
+
export declare function taskCallRoute(callId: string): string[];
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** V3 agent tool labels — mirrors GET /api/agent-tools/catalog */
|
|
2
|
+
export declare const AGENT_TOOL_LABELS: Record<string, string>;
|
|
3
|
+
/** Prefer API `name`; fall back to catalog label or a readable key. */
|
|
4
|
+
export declare function resolveToolDisplayName(key: string | undefined, name: string): string;
|
|
5
|
+
/** Derive tool key from legacy `tech` values like `tool_check_doctor_availability`. */
|
|
6
|
+
export declare function inferToolKeyFromTech(tech: string): string | undefined;
|
|
7
|
+
export declare function resolveToolKey(key: string | undefined, name: string, tech: string): string | undefined;
|
|
8
|
+
/** Stable @for track key — avoid ?? in template track expressions (Angular compiler bug). */
|
|
9
|
+
export declare function toolEventTrackKey(tool: {
|
|
10
|
+
key?: string;
|
|
11
|
+
t: string;
|
|
12
|
+
tech: string;
|
|
13
|
+
name: string;
|
|
14
|
+
}, index: number): string;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ToolEvent, TranscriptLine } from '../models/ai-receptionist.types';
|
|
2
|
+
export interface TimedTranscriptLine extends TranscriptLine {
|
|
3
|
+
startSec: number;
|
|
4
|
+
endSec: number;
|
|
5
|
+
index: number;
|
|
6
|
+
}
|
|
7
|
+
/** Parse tool timestamp strings like "1:02" or "0:42" into seconds. */
|
|
8
|
+
export declare function parseClockTime(value: string): number | null;
|
|
9
|
+
/**
|
|
10
|
+
* Assign start/end seconds to transcript lines for audio sync.
|
|
11
|
+
* Uses explicit `at` when present; otherwise estimates from call duration.
|
|
12
|
+
*/
|
|
13
|
+
export declare function buildTimedTranscript(lines: TranscriptLine[], durationSeconds: number): TimedTranscriptLine[];
|
|
14
|
+
export declare function activeTranscriptIndex(lines: TimedTranscriptLine[], currentSec: number): number;
|
|
15
|
+
export declare function formatPlaybackTime(seconds: number): string;
|
|
16
|
+
export declare function toolStateClass(state: ToolEvent['state']): string;
|
|
17
|
+
export declare function transcriptRoleLabel(who: TranscriptLine['who']): string;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { AgentSettings } from '../models/ai-receptionist.types';
|
|
2
|
+
export declare const WELCOME_MESSAGE_MAX = 500;
|
|
3
|
+
export declare function buildAutoWelcomeTemplate(practiceName: string, agentName: string): string;
|
|
4
|
+
export declare function resolveWelcomePreview(welcomeMessage: string | undefined, practiceName: string, agentName: string): string;
|
|
5
|
+
export declare function computeEffectiveWelcomeMessage(settings: Pick<AgentSettings, 'general'>): string;
|