@servicetitan/titan-chatbot-api 8.0.0 → 9.0.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/CHANGELOG.md +12 -0
- package/dist/api-client/__mocks__/chatbot-api-client.mock.d.ts +1 -0
- package/dist/api-client/__mocks__/chatbot-api-client.mock.d.ts.map +1 -1
- package/dist/api-client/__mocks__/chatbot-api-client.mock.js +1 -0
- package/dist/api-client/__mocks__/chatbot-api-client.mock.js.map +1 -1
- package/dist/api-client/base/chatbot-api-client.d.ts +7 -0
- package/dist/api-client/base/chatbot-api-client.d.ts.map +1 -1
- package/dist/api-client/base/chatbot-api-client.js.map +1 -1
- package/dist/api-client/index.d.ts +0 -1
- package/dist/api-client/index.d.ts.map +1 -1
- package/dist/api-client/index.js +0 -2
- package/dist/api-client/index.js.map +1 -1
- package/dist/api-client/titan-chat/__tests__/chatbot-api-client-stream.test.d.ts +2 -0
- package/dist/api-client/titan-chat/__tests__/chatbot-api-client-stream.test.d.ts.map +1 -0
- package/dist/api-client/titan-chat/__tests__/chatbot-api-client-stream.test.js +240 -0
- package/dist/api-client/titan-chat/__tests__/chatbot-api-client-stream.test.js.map +1 -0
- package/dist/api-client/titan-chat/chatbot-api-client.d.ts +11 -0
- package/dist/api-client/titan-chat/chatbot-api-client.d.ts.map +1 -1
- package/dist/api-client/titan-chat/chatbot-api-client.js +29 -0
- package/dist/api-client/titan-chat/chatbot-api-client.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/models/__tests__/chatbot-customizations.test.d.ts +2 -0
- package/dist/models/__tests__/chatbot-customizations.test.d.ts.map +1 -0
- package/dist/models/__tests__/chatbot-customizations.test.js +36 -0
- package/dist/models/__tests__/chatbot-customizations.test.js.map +1 -0
- package/dist/models/chatbot-customizations.d.ts +17 -0
- package/dist/models/chatbot-customizations.d.ts.map +1 -1
- package/dist/models/chatbot-customizations.js +6 -1
- package/dist/models/chatbot-customizations.js.map +1 -1
- package/dist/models/index.d.ts +1 -1
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/index.js +1 -1
- package/dist/models/index.js.map +1 -1
- package/dist/stores/__tests__/chatbot-ui-backend.store.observability.test.d.ts +2 -0
- package/dist/stores/__tests__/chatbot-ui-backend.store.observability.test.d.ts.map +1 -0
- package/dist/stores/__tests__/chatbot-ui-backend.store.observability.test.js +107 -0
- package/dist/stores/__tests__/chatbot-ui-backend.store.observability.test.js.map +1 -0
- package/dist/stores/__tests__/chatbot-ui-backend.store.streaming.test.d.ts +2 -0
- package/dist/stores/__tests__/chatbot-ui-backend.store.streaming.test.d.ts.map +1 -0
- package/dist/stores/__tests__/chatbot-ui-backend.store.streaming.test.js +312 -0
- package/dist/stores/__tests__/chatbot-ui-backend.store.streaming.test.js.map +1 -0
- package/dist/stores/chatbot-ui-backend.store.d.ts +26 -2
- package/dist/stores/chatbot-ui-backend.store.d.ts.map +1 -1
- package/dist/stores/chatbot-ui-backend.store.js +129 -4
- package/dist/stores/chatbot-ui-backend.store.js.map +1 -1
- package/dist/streaming/__tests__/agent-stream.test.d.ts +2 -0
- package/dist/streaming/__tests__/agent-stream.test.d.ts.map +1 -0
- package/dist/streaming/__tests__/agent-stream.test.js +92 -0
- package/dist/streaming/__tests__/agent-stream.test.js.map +1 -0
- package/dist/streaming/agent-stream.d.ts +83 -0
- package/dist/streaming/agent-stream.d.ts.map +1 -0
- package/dist/streaming/agent-stream.js +28 -0
- package/dist/streaming/agent-stream.js.map +1 -0
- package/dist/streaming/index.d.ts +3 -0
- package/dist/streaming/index.d.ts.map +1 -0
- package/dist/streaming/index.js +4 -0
- package/dist/streaming/index.js.map +1 -0
- package/dist/streaming/run-agent-stream.d.ts +23 -0
- package/dist/streaming/run-agent-stream.d.ts.map +1 -0
- package/dist/streaming/run-agent-stream.js +83 -0
- package/dist/streaming/run-agent-stream.js.map +1 -0
- package/package.json +6 -3
- package/src/api-client/__mocks__/chatbot-api-client.mock.ts +1 -0
- package/src/api-client/base/chatbot-api-client.ts +11 -0
- package/src/api-client/index.ts +0 -1
- package/src/api-client/titan-chat/__tests__/chatbot-api-client-stream.test.ts +208 -0
- package/src/api-client/titan-chat/chatbot-api-client.ts +46 -0
- package/src/index.ts +6 -1
- package/src/models/__tests__/chatbot-customizations.test.ts +26 -0
- package/src/models/chatbot-customizations.ts +20 -0
- package/src/models/index.ts +1 -1
- package/src/stores/__tests__/chatbot-ui-backend.store.observability.test.ts +105 -0
- package/src/stores/__tests__/chatbot-ui-backend.store.streaming.test.ts +261 -0
- package/src/stores/chatbot-ui-backend.store.ts +179 -4
- package/src/streaming/__tests__/agent-stream.test.ts +80 -0
- package/src/streaming/agent-stream.ts +103 -0
- package/src/streaming/index.ts +2 -0
- package/src/streaming/run-agent-stream.ts +109 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/api-client/help-center/__tests__/converter-from-models.test.d.ts +0 -2
- package/dist/api-client/help-center/__tests__/converter-from-models.test.d.ts.map +0 -1
- package/dist/api-client/help-center/__tests__/converter-from-models.test.js +0 -67
- package/dist/api-client/help-center/__tests__/converter-from-models.test.js.map +0 -1
- package/dist/api-client/help-center/__tests__/converter-to-models.test.d.ts +0 -2
- package/dist/api-client/help-center/__tests__/converter-to-models.test.d.ts.map +0 -1
- package/dist/api-client/help-center/__tests__/converter-to-models.test.js +0 -83
- package/dist/api-client/help-center/__tests__/converter-to-models.test.js.map +0 -1
- package/dist/api-client/help-center/chatbot-api-client.d.ts +0 -32
- package/dist/api-client/help-center/chatbot-api-client.d.ts.map +0 -1
- package/dist/api-client/help-center/chatbot-api-client.js +0 -101
- package/dist/api-client/help-center/chatbot-api-client.js.map +0 -1
- package/dist/api-client/help-center/converter-from-models.d.ts +0 -13
- package/dist/api-client/help-center/converter-from-models.d.ts.map +0 -1
- package/dist/api-client/help-center/converter-from-models.js +0 -117
- package/dist/api-client/help-center/converter-from-models.js.map +0 -1
- package/dist/api-client/help-center/converter-to-models.d.ts +0 -13
- package/dist/api-client/help-center/converter-to-models.d.ts.map +0 -1
- package/dist/api-client/help-center/converter-to-models.js +0 -101
- package/dist/api-client/help-center/converter-to-models.js.map +0 -1
- package/dist/api-client/help-center/index.d.ts +0 -3
- package/dist/api-client/help-center/index.d.ts.map +0 -1
- package/dist/api-client/help-center/index.js +0 -3
- package/dist/api-client/help-center/index.js.map +0 -1
- package/dist/api-client/help-center/native-client.d.ts +0 -1268
- package/dist/api-client/help-center/native-client.d.ts.map +0 -1
- package/dist/api-client/help-center/native-client.js +0 -4550
- package/dist/api-client/help-center/native-client.js.map +0 -1
- package/src/api-client/help-center/__tests__/converter-from-models.test.ts +0 -41
- package/src/api-client/help-center/__tests__/converter-to-models.test.ts +0 -89
- package/src/api-client/help-center/chatbot-api-client.ts +0 -122
- package/src/api-client/help-center/converter-from-models.ts +0 -133
- package/src/api-client/help-center/converter-to-models.ts +0 -127
- package/src/api-client/help-center/index.ts +0 -2
- package/src/api-client/help-center/native-client.ts +0 -5727
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { expect } from '@jest/globals';
|
|
2
|
-
import { Models } from '../..';
|
|
3
|
-
import { ConverterFromModels } from '../converter-from-models';
|
|
4
|
-
|
|
5
|
-
describe('ConverterFromModels', () => {
|
|
6
|
-
test('convertFilters', () => {
|
|
7
|
-
expect(ConverterFromModels.convertFilters()).toBeUndefined();
|
|
8
|
-
expect(ConverterFromModels.convertFilters({})).toBeUndefined();
|
|
9
|
-
expect(
|
|
10
|
-
ConverterFromModels.convertFilters({
|
|
11
|
-
subOptions: {
|
|
12
|
-
ProductAreas: { values: [] },
|
|
13
|
-
},
|
|
14
|
-
} as unknown as Models.ISelections)
|
|
15
|
-
).toEqual({
|
|
16
|
-
productAreas: [],
|
|
17
|
-
});
|
|
18
|
-
expect(
|
|
19
|
-
ConverterFromModels.convertFilters({
|
|
20
|
-
subOptions: {
|
|
21
|
-
ProductAreas: { values: ['area1', 'area2'] },
|
|
22
|
-
},
|
|
23
|
-
} as unknown as Models.ISelections)
|
|
24
|
-
).toEqual({
|
|
25
|
-
productAreas: ['area1', 'area2'],
|
|
26
|
-
});
|
|
27
|
-
expect(
|
|
28
|
-
ConverterFromModels.convertFilters({
|
|
29
|
-
subOptions: {
|
|
30
|
-
Sources: { values: ['source1', 'source2'] },
|
|
31
|
-
ContentTypes: { values: ['type1'] },
|
|
32
|
-
ProductAreas: { values: ['area1', 'area2'] },
|
|
33
|
-
},
|
|
34
|
-
} as unknown as Models.ISelections)
|
|
35
|
-
).toEqual({
|
|
36
|
-
sources: ['source1', 'source2'],
|
|
37
|
-
contentTypes: ['type1'],
|
|
38
|
-
productAreas: ['area1', 'area2'],
|
|
39
|
-
});
|
|
40
|
-
});
|
|
41
|
-
});
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
import { expect } from '@jest/globals';
|
|
2
|
-
import { Models } from '../..';
|
|
3
|
-
import { ConverterToModels } from '../converter-to-models';
|
|
4
|
-
// eslint-disable-next-line no-restricted-imports
|
|
5
|
-
import * as HelpCenterClient from '../native-client';
|
|
6
|
-
|
|
7
|
-
describe('ConverterToModels', () => {
|
|
8
|
-
test('convertFilterOptions', () => {
|
|
9
|
-
expect(ConverterToModels.convertFilterOptions({})).toEqual(
|
|
10
|
-
new Models.FrontendModel({
|
|
11
|
-
options: new Models.Option({
|
|
12
|
-
key: 'help-center-filters-root',
|
|
13
|
-
displayName: 'help-center-filters-root',
|
|
14
|
-
type: Models.OptionType.Group,
|
|
15
|
-
subOptions: [],
|
|
16
|
-
}),
|
|
17
|
-
})
|
|
18
|
-
);
|
|
19
|
-
|
|
20
|
-
expect(
|
|
21
|
-
ConverterToModels.convertFilterOptions({
|
|
22
|
-
sources: [
|
|
23
|
-
new HelpCenterClient.FilterOption({
|
|
24
|
-
id: 'source1',
|
|
25
|
-
displayName: 'Source 1',
|
|
26
|
-
}),
|
|
27
|
-
new HelpCenterClient.FilterOption({
|
|
28
|
-
id: 'source2',
|
|
29
|
-
displayName: 'Source 2',
|
|
30
|
-
}),
|
|
31
|
-
],
|
|
32
|
-
productAreas: [
|
|
33
|
-
new HelpCenterClient.FilterOption({
|
|
34
|
-
id: 'area1',
|
|
35
|
-
displayName: 'Area 1',
|
|
36
|
-
}),
|
|
37
|
-
new HelpCenterClient.FilterOption({
|
|
38
|
-
id: 'area2',
|
|
39
|
-
displayName: 'Area 2',
|
|
40
|
-
}),
|
|
41
|
-
],
|
|
42
|
-
})
|
|
43
|
-
).toEqual(
|
|
44
|
-
new Models.FrontendModel({
|
|
45
|
-
options: new Models.Option({
|
|
46
|
-
key: 'help-center-filters-root',
|
|
47
|
-
displayName: 'help-center-filters-root',
|
|
48
|
-
type: Models.OptionType.Group,
|
|
49
|
-
subOptions: [
|
|
50
|
-
new Models.Option({
|
|
51
|
-
key: 'Sources',
|
|
52
|
-
displayName: 'Sources',
|
|
53
|
-
type: Models.OptionType.Group,
|
|
54
|
-
subOptions: [
|
|
55
|
-
new Models.Option({
|
|
56
|
-
key: 'source1',
|
|
57
|
-
displayName: 'Source 1',
|
|
58
|
-
type: Models.OptionType.Selectable,
|
|
59
|
-
}),
|
|
60
|
-
new Models.Option({
|
|
61
|
-
key: 'source2',
|
|
62
|
-
displayName: 'Source 2',
|
|
63
|
-
type: Models.OptionType.Selectable,
|
|
64
|
-
}),
|
|
65
|
-
],
|
|
66
|
-
}),
|
|
67
|
-
new Models.Option({
|
|
68
|
-
key: 'ProductAreas',
|
|
69
|
-
displayName: 'Product Areas',
|
|
70
|
-
type: Models.OptionType.Group,
|
|
71
|
-
subOptions: [
|
|
72
|
-
new Models.Option({
|
|
73
|
-
key: 'area1',
|
|
74
|
-
displayName: 'Area 1',
|
|
75
|
-
type: Models.OptionType.Selectable,
|
|
76
|
-
}),
|
|
77
|
-
new Models.Option({
|
|
78
|
-
key: 'area2',
|
|
79
|
-
displayName: 'Area 2',
|
|
80
|
-
type: Models.OptionType.Selectable,
|
|
81
|
-
}),
|
|
82
|
-
],
|
|
83
|
-
}),
|
|
84
|
-
],
|
|
85
|
-
}),
|
|
86
|
-
})
|
|
87
|
-
);
|
|
88
|
-
});
|
|
89
|
-
});
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
import { inject, injectable } from '@servicetitan/react-ioc';
|
|
2
|
-
import { Models } from '..';
|
|
3
|
-
import {
|
|
4
|
-
CHATBOT_CLIENT_SETTINGS,
|
|
5
|
-
FirstParameterType,
|
|
6
|
-
IChatbotApiClient,
|
|
7
|
-
IChatbotClientSettings,
|
|
8
|
-
SecondParameterType,
|
|
9
|
-
} from '../base/chatbot-api-client';
|
|
10
|
-
import { ConverterFromModels } from './converter-from-models';
|
|
11
|
-
import { ConverterToModels } from './converter-to-models';
|
|
12
|
-
// eslint-disable-next-line no-restricted-imports
|
|
13
|
-
import { ChatClient } from './native-client';
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Settings for the chatbot client, which includes a factory for constructor parameters, and additional settings
|
|
17
|
-
* like instance and area which are used in the API calls.
|
|
18
|
-
*/
|
|
19
|
-
export interface IChatbotClientSettingsHelpCenter extends IChatbotClientSettings {
|
|
20
|
-
constructorParametersFactory: () => {
|
|
21
|
-
baseUrl?: FirstParameterType<typeof ChatClient>;
|
|
22
|
-
axiosInstance?: SecondParameterType<typeof ChatClient>;
|
|
23
|
-
};
|
|
24
|
-
instance: string;
|
|
25
|
-
area: string;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Client adapter adopts the generated titan chatbot client to the generic IChatbotApiClient interface.
|
|
30
|
-
*/
|
|
31
|
-
@injectable()
|
|
32
|
-
export class ChatbotApiClient implements IChatbotApiClient {
|
|
33
|
-
private readonly client: ChatClient;
|
|
34
|
-
|
|
35
|
-
constructor(
|
|
36
|
-
@inject(CHATBOT_CLIENT_SETTINGS)
|
|
37
|
-
private readonly chatbotApiClientSettings: IChatbotClientSettingsHelpCenter
|
|
38
|
-
) {
|
|
39
|
-
const { axiosInstance, baseUrl } =
|
|
40
|
-
this.chatbotApiClientSettings.constructorParametersFactory();
|
|
41
|
-
this.client = new ChatClient(baseUrl, axiosInstance);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
async postFeedback(body: Models.Feedback, abortSignal?: AbortSignal) {
|
|
45
|
-
if (body?.messageId) {
|
|
46
|
-
await this.client.sendBotMessageFeedback(
|
|
47
|
-
body.sessionId,
|
|
48
|
-
body.messageId,
|
|
49
|
-
ConverterFromModels.convertMessageFeedback(body),
|
|
50
|
-
abortSignal
|
|
51
|
-
);
|
|
52
|
-
return body;
|
|
53
|
-
} else if (body?.sessionId) {
|
|
54
|
-
await this.client.sendSessionFeedback(
|
|
55
|
-
body.sessionId,
|
|
56
|
-
ConverterFromModels.convertSessionFeedback(body),
|
|
57
|
-
abortSignal
|
|
58
|
-
);
|
|
59
|
-
return body;
|
|
60
|
-
}
|
|
61
|
-
throw new Error('Feedback must contain either messageId or sessionId');
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
async postMessage(body: Models.UserMessage, abortSignal?: AbortSignal) {
|
|
65
|
-
const hcMessage = ConverterFromModels.convertUserMessage(
|
|
66
|
-
body,
|
|
67
|
-
this.chatbotApiClientSettings.area
|
|
68
|
-
);
|
|
69
|
-
const botMessage = await this.client.sendUserMessage(hcMessage, abortSignal);
|
|
70
|
-
return ConverterToModels.convertBotMessage(botMessage);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
postFollowUpEmail(
|
|
74
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
75
|
-
body: Models.UserMessage,
|
|
76
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
77
|
-
abortSignal?: AbortSignal
|
|
78
|
-
): Promise<Models.BotMessage> {
|
|
79
|
-
throw new Error('Method not implemented for Help Center chatbot API.');
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
async getOptions(abortSignal?: AbortSignal): Promise<Models.FrontendModel> {
|
|
83
|
-
const filterOptions = await this.client.getFilterOptions(abortSignal);
|
|
84
|
-
return ConverterToModels.convertFilterOptions(filterOptions);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
async postSession(body: Models.Session, abortSignal?: AbortSignal) {
|
|
88
|
-
body.data = body.data ?? {};
|
|
89
|
-
body.data.instance ??= this.chatbotApiClientSettings.instance;
|
|
90
|
-
const hcSession = ConverterFromModels.convertSession(body);
|
|
91
|
-
const newSession = await this.client.createSession(hcSession.source!, abortSignal);
|
|
92
|
-
return ConverterToModels.convertSession(newSession);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
async patchSession(body: Models.Session, abortSignal?: AbortSignal) {
|
|
96
|
-
const session = ConverterFromModels.convertSession(body);
|
|
97
|
-
await this.client.updateSessionCategory(
|
|
98
|
-
session.source?.category,
|
|
99
|
-
session.source?.subCategory,
|
|
100
|
-
session.id,
|
|
101
|
-
abortSignal
|
|
102
|
-
);
|
|
103
|
-
return body;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
async deleteSession(body: Models.Session, abortSignal?: AbortSignal) {
|
|
107
|
-
const session = ConverterFromModels.convertSession(body);
|
|
108
|
-
await this.client.closeSession(session.id, abortSignal);
|
|
109
|
-
return body;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
getTranscripts(
|
|
113
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
114
|
-
start?: Date,
|
|
115
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
116
|
-
end?: Date,
|
|
117
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
118
|
-
signal?: AbortSignal
|
|
119
|
-
): Promise<Models.ExportHistoryMessage[]> {
|
|
120
|
-
throw new Error('Method not implemented for Help Center chatbot API.');
|
|
121
|
-
}
|
|
122
|
-
}
|
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
import { Models } from '..';
|
|
2
|
-
// eslint-disable-next-line no-restricted-imports
|
|
3
|
-
import * as HelpCenterModels from './native-client';
|
|
4
|
-
|
|
5
|
-
export class ConverterFromModels {
|
|
6
|
-
static convertSession(session: Models.ISession): HelpCenterModels.ChatbotSession {
|
|
7
|
-
const data = session.data;
|
|
8
|
-
return new HelpCenterModels.ChatbotSession({
|
|
9
|
-
id: session.id,
|
|
10
|
-
createdUtc: data?.createdUtc ? new Date(data.createdUtc) : undefined,
|
|
11
|
-
closedUtc: data?.closedUtc ? new Date(data.closedUtc) : undefined,
|
|
12
|
-
botId: data?.botId,
|
|
13
|
-
source: new HelpCenterModels.SessionSource({
|
|
14
|
-
instance: data?.instance,
|
|
15
|
-
category: data?.category,
|
|
16
|
-
subCategory: data?.subCategory,
|
|
17
|
-
fullstorySessionId: data?.fullstorySessionId,
|
|
18
|
-
}),
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
static convertUserMessage(
|
|
23
|
-
userMessage: Models.IUserMessage,
|
|
24
|
-
area: string
|
|
25
|
-
): HelpCenterModels.UserMessage {
|
|
26
|
-
const filters =
|
|
27
|
-
ConverterFromModels.convertFilters(userMessage.selections) ??
|
|
28
|
-
new HelpCenterModels.FilterSelections({});
|
|
29
|
-
const data: HelpCenterModels.IUserMessage = {
|
|
30
|
-
sessionId: userMessage.sessionId,
|
|
31
|
-
text: userMessage.question,
|
|
32
|
-
source: new HelpCenterModels.MessageSource({
|
|
33
|
-
area,
|
|
34
|
-
}),
|
|
35
|
-
...(filters ? { filters } : undefined),
|
|
36
|
-
};
|
|
37
|
-
return HelpCenterModels.UserMessage.fromJS(data);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
static convertFilters(
|
|
41
|
-
selections?: Models.ISelections
|
|
42
|
-
): HelpCenterModels.FilterSelections | undefined {
|
|
43
|
-
if (!selections?.subOptions || !Object.keys(selections.subOptions).length) {
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
const data: HelpCenterModels.IFilterSelections = {};
|
|
47
|
-
const sources = selections.subOptions.Sources;
|
|
48
|
-
const contentTypes = selections.subOptions.ContentTypes;
|
|
49
|
-
const productAreas = selections.subOptions.ProductAreas;
|
|
50
|
-
if (sources?.values) {
|
|
51
|
-
data.sources = sources.values;
|
|
52
|
-
}
|
|
53
|
-
if (contentTypes?.values) {
|
|
54
|
-
data.contentTypes = contentTypes.values;
|
|
55
|
-
}
|
|
56
|
-
if (productAreas?.values) {
|
|
57
|
-
data.productAreas = productAreas.values;
|
|
58
|
-
}
|
|
59
|
-
return new HelpCenterModels.FilterSelections(data);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
static convertSessionFeedback(feedback: Models.IFeedback): HelpCenterModels.SessionFeedback {
|
|
63
|
-
return new HelpCenterModels.SessionFeedback({
|
|
64
|
-
description: feedback.description,
|
|
65
|
-
rating: ConverterFromModels.convertSessionFeedbackRating(feedback.rating),
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
static convertMessageFeedback(feedback: Models.IFeedback): HelpCenterModels.MessageFeedback {
|
|
70
|
-
return new HelpCenterModels.MessageFeedback({
|
|
71
|
-
linkUrl: feedback.linkUrl,
|
|
72
|
-
description: feedback.description,
|
|
73
|
-
rating: ConverterFromModels.convertMessageFeedbackRating(feedback.rating),
|
|
74
|
-
options: ConverterFromModels.convertFeedbackOptions(feedback.options),
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
static convertFeedbackOptions(
|
|
79
|
-
feedbackOptions?: Models.FeedbackOptions[]
|
|
80
|
-
): HelpCenterModels.FeedbackOptions[] | undefined {
|
|
81
|
-
if (feedbackOptions === undefined) {
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
return feedbackOptions.map(feedbackOption => {
|
|
85
|
-
switch (feedbackOption) {
|
|
86
|
-
case Models.FeedbackOptions.Incomplete:
|
|
87
|
-
return HelpCenterModels.FeedbackOptions.Incomplete;
|
|
88
|
-
case Models.FeedbackOptions.Incorrect:
|
|
89
|
-
return HelpCenterModels.FeedbackOptions.Incorrect;
|
|
90
|
-
case Models.FeedbackOptions.Other:
|
|
91
|
-
return HelpCenterModels.FeedbackOptions.Other;
|
|
92
|
-
case Models.FeedbackOptions.Unclear:
|
|
93
|
-
return HelpCenterModels.FeedbackOptions.Unclear;
|
|
94
|
-
case Models.FeedbackOptions.Unrelated:
|
|
95
|
-
return HelpCenterModels.FeedbackOptions.Unrelated;
|
|
96
|
-
default:
|
|
97
|
-
return HelpCenterModels.FeedbackOptions.Other;
|
|
98
|
-
}
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
static convertMessageFeedbackRating(
|
|
103
|
-
feedbackRatings?: Models.FeedbackRatings
|
|
104
|
-
): HelpCenterModels.MessageFeedbackRatings | undefined {
|
|
105
|
-
if (feedbackRatings === undefined) {
|
|
106
|
-
return;
|
|
107
|
-
}
|
|
108
|
-
switch (feedbackRatings) {
|
|
109
|
-
case Models.FeedbackRatings.ThumbsDown:
|
|
110
|
-
return HelpCenterModels.MessageFeedbackRatings.ThumbsDown;
|
|
111
|
-
case Models.FeedbackRatings.GuardrailFeedback:
|
|
112
|
-
return HelpCenterModels.MessageFeedbackRatings.GuardrailFeedback;
|
|
113
|
-
case Models.FeedbackRatings.ThumbsUp:
|
|
114
|
-
return HelpCenterModels.MessageFeedbackRatings.ThumbsUp;
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
static convertSessionFeedbackRating(
|
|
119
|
-
feedbackRatings?: Models.FeedbackRatings
|
|
120
|
-
): HelpCenterModels.SessionFeedbackRatings | undefined {
|
|
121
|
-
if (feedbackRatings === undefined) {
|
|
122
|
-
return;
|
|
123
|
-
}
|
|
124
|
-
switch (feedbackRatings) {
|
|
125
|
-
case Models.FeedbackRatings.ThumbsDown:
|
|
126
|
-
return HelpCenterModels.SessionFeedbackRatings.ThumbsDown;
|
|
127
|
-
case Models.FeedbackRatings.ThumbsUp:
|
|
128
|
-
return HelpCenterModels.SessionFeedbackRatings.ThumbsUp;
|
|
129
|
-
default:
|
|
130
|
-
return HelpCenterModels.SessionFeedbackRatings.ThumbsDown;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
}
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
import { Models } from '..';
|
|
2
|
-
// eslint-disable-next-line no-restricted-imports
|
|
3
|
-
import * as HelpCenterClient from './native-client';
|
|
4
|
-
|
|
5
|
-
export class ConverterToModels {
|
|
6
|
-
static convertSession(session: HelpCenterClient.IChatbotSession): Models.Session {
|
|
7
|
-
return new Models.Session({
|
|
8
|
-
id: session.id,
|
|
9
|
-
data: ConverterToModels.convertSessionData(session),
|
|
10
|
-
});
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
static convertSessionData(session: HelpCenterClient.IChatbotSession): Models.Session['data'] {
|
|
14
|
-
const data: Models.Session['data'] = {};
|
|
15
|
-
if (session.createdUtc) {
|
|
16
|
-
data.createdUtc = session.createdUtc.toISOString();
|
|
17
|
-
}
|
|
18
|
-
if (session.closedUtc) {
|
|
19
|
-
data.closedUtc = session.closedUtc.toISOString();
|
|
20
|
-
}
|
|
21
|
-
if (session.botId) {
|
|
22
|
-
data.botId = session.botId;
|
|
23
|
-
}
|
|
24
|
-
if (session.source) {
|
|
25
|
-
if (session.source.instance) {
|
|
26
|
-
data.instance = session.source.instance;
|
|
27
|
-
}
|
|
28
|
-
if (session.source.category) {
|
|
29
|
-
data.category = session.source.category;
|
|
30
|
-
}
|
|
31
|
-
if (session.source.subCategory) {
|
|
32
|
-
data.subCategory = session.source.subCategory;
|
|
33
|
-
}
|
|
34
|
-
if (session.source.fullstorySessionId) {
|
|
35
|
-
data.fullstorySessionId = session.source.fullstorySessionId;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
return Object.keys(data).length > 0 ? data : undefined;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Convert HC filters into single-level frontend model.
|
|
43
|
-
*/
|
|
44
|
-
static convertFilterOptions(options: HelpCenterClient.IFilterOptions): Models.FrontendModel {
|
|
45
|
-
const createFilterOption = (key: string, displayName?: string): Models.Option => {
|
|
46
|
-
return new Models.Option({
|
|
47
|
-
key,
|
|
48
|
-
displayName: displayName ?? key,
|
|
49
|
-
type: Models.OptionType.Selectable,
|
|
50
|
-
});
|
|
51
|
-
};
|
|
52
|
-
const createFilterOptions = (options?: HelpCenterClient.IFilterOption[]) =>
|
|
53
|
-
options?.map(x => createFilterOption(x.id ?? '', x.displayName));
|
|
54
|
-
const createFilter = (
|
|
55
|
-
key: string,
|
|
56
|
-
displayName?: string,
|
|
57
|
-
subOptions?: Models.Option[]
|
|
58
|
-
): Models.Option => {
|
|
59
|
-
return new Models.Option({
|
|
60
|
-
key,
|
|
61
|
-
displayName: displayName ?? key,
|
|
62
|
-
type: Models.OptionType.Group,
|
|
63
|
-
subOptions,
|
|
64
|
-
});
|
|
65
|
-
};
|
|
66
|
-
|
|
67
|
-
const subOptions: Models.Option[] = [];
|
|
68
|
-
if (options.sources?.length) {
|
|
69
|
-
subOptions.push(
|
|
70
|
-
createFilter('Sources', 'Sources', createFilterOptions(options.sources))
|
|
71
|
-
);
|
|
72
|
-
}
|
|
73
|
-
if (options.contentTypes?.length) {
|
|
74
|
-
subOptions.push(
|
|
75
|
-
createFilter(
|
|
76
|
-
'ContentTypes',
|
|
77
|
-
'Content Types',
|
|
78
|
-
createFilterOptions(options.contentTypes)
|
|
79
|
-
)
|
|
80
|
-
);
|
|
81
|
-
}
|
|
82
|
-
if (options.productAreas?.length) {
|
|
83
|
-
subOptions.push(
|
|
84
|
-
createFilter(
|
|
85
|
-
'ProductAreas',
|
|
86
|
-
'Product Areas',
|
|
87
|
-
createFilterOptions(options.productAreas)
|
|
88
|
-
)
|
|
89
|
-
);
|
|
90
|
-
}
|
|
91
|
-
return new Models.FrontendModel({
|
|
92
|
-
options: new Models.Option({
|
|
93
|
-
key: 'help-center-filters-root',
|
|
94
|
-
displayName: 'help-center-filters-root',
|
|
95
|
-
type: Models.OptionType.Group,
|
|
96
|
-
subOptions,
|
|
97
|
-
}),
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
static convertBotMessage(botMessage: HelpCenterClient.IBotMessage): Models.BotMessage {
|
|
102
|
-
return new Models.BotMessage({
|
|
103
|
-
id: botMessage.id ?? 0,
|
|
104
|
-
answer: botMessage.text ?? '',
|
|
105
|
-
isGuardrailed: botMessage.isGuardrailed ?? false,
|
|
106
|
-
guardFlag: botMessage.guardFlag ?? 'N',
|
|
107
|
-
sessionId: botMessage.sessionId ?? 0,
|
|
108
|
-
scoredUrls: ConverterToModels.convertScoredUrls(botMessage.scoredUrls),
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
static convertScoredUrls(
|
|
113
|
-
scoredUrls?: HelpCenterClient.IScoredUrl[]
|
|
114
|
-
): Models.ScoredUrl[] | undefined {
|
|
115
|
-
if (scoredUrls === undefined) {
|
|
116
|
-
return;
|
|
117
|
-
}
|
|
118
|
-
return scoredUrls.map(
|
|
119
|
-
url =>
|
|
120
|
-
new Models.ScoredUrl({
|
|
121
|
-
url: url.url,
|
|
122
|
-
score: url.score,
|
|
123
|
-
title: url.title,
|
|
124
|
-
})
|
|
125
|
-
);
|
|
126
|
-
}
|
|
127
|
-
}
|