@exotel-npm-dev/exotel-ai-assist 1.2.1 → 1.2.3
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/controller/index.js +1 -1
- package/dist/index.js +19 -7
- package/dist/react/index.js +19 -7
- package/dist/types/index.d.ts +1 -1
- package/package.json +1 -1
- package/src/components/ExotelAIAssistApp.tsx +18 -6
- package/src/controller/index.ts +2 -2
- package/src/types/index.ts +1 -1
package/dist/controller/index.js
CHANGED
|
@@ -1811,7 +1811,7 @@ class ExotelAIAssistController extends EventEmitter {
|
|
|
1811
1811
|
this.emit("streamState", state);
|
|
1812
1812
|
if (state === "connected" || state === "throttled") {
|
|
1813
1813
|
this._fireReady();
|
|
1814
|
-
} else if (state === "disconnected" && this.readyFired) {
|
|
1814
|
+
} else if ((state === "connection_timeout" || state === "disconnected") && this.readyFired) {
|
|
1815
1815
|
this.readyFired = false;
|
|
1816
1816
|
this.emit("onReady", false);
|
|
1817
1817
|
}
|
package/dist/index.js
CHANGED
|
@@ -21229,7 +21229,7 @@ class ExotelAIAssistController extends EventEmitter {
|
|
|
21229
21229
|
this.emit("streamState", state);
|
|
21230
21230
|
if (state === "connected" || state === "throttled") {
|
|
21231
21231
|
this._fireReady();
|
|
21232
|
-
} else if (state === "disconnected" && this.readyFired) {
|
|
21232
|
+
} else if ((state === "connection_timeout" || state === "disconnected") && this.readyFired) {
|
|
21233
21233
|
this.readyFired = false;
|
|
21234
21234
|
this.emit("onReady", false);
|
|
21235
21235
|
}
|
|
@@ -21890,6 +21890,23 @@ function ExotelAIAssist(_a) {
|
|
|
21890
21890
|
(_a = onReadyRef.current) === null || _a === void 0 ? void 0 : _a.call(onReadyRef, isReady);
|
|
21891
21891
|
}, [isReady]);
|
|
21892
21892
|
const connected = streamState === "connected";
|
|
21893
|
+
function renderProperEmptyContent() {
|
|
21894
|
+
if (streamState === "throttled") {
|
|
21895
|
+
return jsxRuntimeExports.jsx(EmptyState, {
|
|
21896
|
+
title: "AI Assist Unavailable",
|
|
21897
|
+
subtitle: "Available again on your next call",
|
|
21898
|
+
showWarningBanner: true,
|
|
21899
|
+
warningBannerMessage: "AI Assist couldn't join this call \u2014 capacity is full. It should be ready for your next call."
|
|
21900
|
+
});
|
|
21901
|
+
}
|
|
21902
|
+
if (streamState === "connection_timeout") {
|
|
21903
|
+
return jsxRuntimeExports.jsx(EmptyState, {
|
|
21904
|
+
title: "AI Assist is currently inactive",
|
|
21905
|
+
subtitle: "we were unable to establish a connection."
|
|
21906
|
+
});
|
|
21907
|
+
}
|
|
21908
|
+
return null;
|
|
21909
|
+
}
|
|
21893
21910
|
return jsxRuntimeExports.jsx(Provider, {
|
|
21894
21911
|
children: jsxRuntimeExports.jsx("div", {
|
|
21895
21912
|
className: "oa-theme-root",
|
|
@@ -21956,12 +21973,7 @@ function ExotelAIAssist(_a) {
|
|
|
21956
21973
|
botConfig: botConfig
|
|
21957
21974
|
})
|
|
21958
21975
|
})]
|
|
21959
|
-
}) :
|
|
21960
|
-
title: "AI Assist Unavailable",
|
|
21961
|
-
subtitle: "Available again on your next call",
|
|
21962
|
-
showWarningBanner: true,
|
|
21963
|
-
warningBannerMessage: "AI Assist couldn't join this call \u2014 capacity is full. It should be ready for your next call."
|
|
21964
|
-
})]
|
|
21976
|
+
}) : renderProperEmptyContent()]
|
|
21965
21977
|
})
|
|
21966
21978
|
})
|
|
21967
21979
|
})
|
package/dist/react/index.js
CHANGED
|
@@ -6515,7 +6515,7 @@ class ExotelAIAssistController extends EventEmitter {
|
|
|
6515
6515
|
this.emit("streamState", state);
|
|
6516
6516
|
if (state === "connected" || state === "throttled") {
|
|
6517
6517
|
this._fireReady();
|
|
6518
|
-
} else if (state === "disconnected" && this.readyFired) {
|
|
6518
|
+
} else if ((state === "connection_timeout" || state === "disconnected") && this.readyFired) {
|
|
6519
6519
|
this.readyFired = false;
|
|
6520
6520
|
this.emit("onReady", false);
|
|
6521
6521
|
}
|
|
@@ -7176,6 +7176,23 @@ function ExotelAIAssist(_a) {
|
|
|
7176
7176
|
(_a = onReadyRef.current) === null || _a === void 0 ? void 0 : _a.call(onReadyRef, isReady);
|
|
7177
7177
|
}, [isReady]);
|
|
7178
7178
|
const connected = streamState === "connected";
|
|
7179
|
+
function renderProperEmptyContent() {
|
|
7180
|
+
if (streamState === "throttled") {
|
|
7181
|
+
return jsxRuntime.jsx(EmptyState, {
|
|
7182
|
+
title: "AI Assist Unavailable",
|
|
7183
|
+
subtitle: "Available again on your next call",
|
|
7184
|
+
showWarningBanner: true,
|
|
7185
|
+
warningBannerMessage: "AI Assist couldn't join this call \u2014 capacity is full. It should be ready for your next call."
|
|
7186
|
+
});
|
|
7187
|
+
}
|
|
7188
|
+
if (streamState === "connection_timeout") {
|
|
7189
|
+
return jsxRuntime.jsx(EmptyState, {
|
|
7190
|
+
title: "AI Assist is currently inactive",
|
|
7191
|
+
subtitle: "we were unable to establish a connection."
|
|
7192
|
+
});
|
|
7193
|
+
}
|
|
7194
|
+
return null;
|
|
7195
|
+
}
|
|
7179
7196
|
return jsxRuntime.jsx(Provider, {
|
|
7180
7197
|
children: jsxRuntime.jsx("div", {
|
|
7181
7198
|
className: "oa-theme-root",
|
|
@@ -7242,12 +7259,7 @@ function ExotelAIAssist(_a) {
|
|
|
7242
7259
|
botConfig: botConfig
|
|
7243
7260
|
})
|
|
7244
7261
|
})]
|
|
7245
|
-
}) :
|
|
7246
|
-
title: "AI Assist Unavailable",
|
|
7247
|
-
subtitle: "Available again on your next call",
|
|
7248
|
-
showWarningBanner: true,
|
|
7249
|
-
warningBannerMessage: "AI Assist couldn't join this call \u2014 capacity is full. It should be ready for your next call."
|
|
7250
|
-
})]
|
|
7262
|
+
}) : renderProperEmptyContent()]
|
|
7251
7263
|
})
|
|
7252
7264
|
})
|
|
7253
7265
|
})
|
package/dist/types/index.d.ts
CHANGED
|
@@ -38,7 +38,7 @@ export type ConnectionStatus = "idle" | "connecting" | "connected" | "disconnect
|
|
|
38
38
|
* - `throttled` – capacity full; the bot cannot join this call
|
|
39
39
|
* - `pending` – stream is pending
|
|
40
40
|
*/
|
|
41
|
-
export type StreamState = "connected" | "throttled" | "pending" | "disconnected";
|
|
41
|
+
export type StreamState = "connected" | "throttled" | "pending" | "disconnected" | 'connection_timeout';
|
|
42
42
|
/** Feature-flag config received from the AI Assist backend. */
|
|
43
43
|
export interface BotConfig {
|
|
44
44
|
sentiment: boolean;
|
package/package.json
CHANGED
|
@@ -30,6 +30,23 @@ export function ExotelAIAssist({ className, onReady, ...params }: ExotelAIAssist
|
|
|
30
30
|
|
|
31
31
|
const connected = streamState === "connected";
|
|
32
32
|
|
|
33
|
+
function renderProperEmptyContent(): JSX.Element | null {
|
|
34
|
+
if (streamState === "throttled") {
|
|
35
|
+
return (
|
|
36
|
+
<EmptyState
|
|
37
|
+
title="AI Assist Unavailable"
|
|
38
|
+
subtitle="Available again on your next call"
|
|
39
|
+
showWarningBanner={true}
|
|
40
|
+
warningBannerMessage="AI Assist couldn't join this call — capacity is full. It should be ready for your next call."
|
|
41
|
+
/>
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
if (streamState === "connection_timeout") {
|
|
45
|
+
return <EmptyState title="AI Assist is currently inactive" subtitle="we were unable to establish a connection." />;
|
|
46
|
+
}
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
|
|
33
50
|
return (
|
|
34
51
|
<Tooltip.Provider>
|
|
35
52
|
<div className="oa-theme-root">
|
|
@@ -60,12 +77,7 @@ export function ExotelAIAssist({ className, onReady, ...params }: ExotelAIAssist
|
|
|
60
77
|
</Tabs.Content>
|
|
61
78
|
</Tabs.Root>
|
|
62
79
|
) : (
|
|
63
|
-
|
|
64
|
-
title="AI Assist Unavailable"
|
|
65
|
-
subtitle="Available again on your next call"
|
|
66
|
-
showWarningBanner={true}
|
|
67
|
-
warningBannerMessage="AI Assist couldn't join this call — capacity is full. It should be ready for your next call."
|
|
68
|
-
/>
|
|
80
|
+
renderProperEmptyContent()
|
|
69
81
|
)}
|
|
70
82
|
</div>
|
|
71
83
|
</div>
|
package/src/controller/index.ts
CHANGED
|
@@ -225,7 +225,7 @@ export class ExotelAIAssistController extends EventEmitter<ControllerEvents> {
|
|
|
225
225
|
if (!event) continue;
|
|
226
226
|
|
|
227
227
|
if (event.event_type === "transcript" && event.value) {
|
|
228
|
-
const transcripts = Array.isArray(event?.value) ? event.value : event?.transcript ?? []
|
|
228
|
+
const transcripts = Array.isArray(event?.value) ? event.value : (event?.transcript ?? []);
|
|
229
229
|
const lines: TranscriptLine[] = transcripts.map((msg) => {
|
|
230
230
|
const first = msg.transcript_segments?.[0];
|
|
231
231
|
const last = msg.transcript_segments?.[msg.transcript_segments.length - 1];
|
|
@@ -264,7 +264,7 @@ export class ExotelAIAssistController extends EventEmitter<ControllerEvents> {
|
|
|
264
264
|
this.emit("streamState", state);
|
|
265
265
|
if (state === "connected" || state === "throttled") {
|
|
266
266
|
this._fireReady();
|
|
267
|
-
} else if (state === "disconnected" && this.readyFired) {
|
|
267
|
+
} else if ((state === "connection_timeout" || state === "disconnected") && this.readyFired) {
|
|
268
268
|
this.readyFired = false;
|
|
269
269
|
this.emit("onReady", false);
|
|
270
270
|
}
|
package/src/types/index.ts
CHANGED
|
@@ -43,7 +43,7 @@ export type ConnectionStatus = "idle" | "connecting" | "connected" | "disconnect
|
|
|
43
43
|
* - `throttled` – capacity full; the bot cannot join this call
|
|
44
44
|
* - `pending` – stream is pending
|
|
45
45
|
*/
|
|
46
|
-
export type StreamState = "connected" | "throttled" | "pending" | "disconnected";
|
|
46
|
+
export type StreamState = "connected" | "throttled" | "pending" | "disconnected" | 'connection_timeout';
|
|
47
47
|
|
|
48
48
|
// ---------------------------------------------------------------------------
|
|
49
49
|
// Internal-only backend response types
|