@botonic/plugin-hubtype-analytics 2.25.0 → 2.27.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 +15 -0
- package/package.json +2 -2
- package/src/lib/event-models/bot/ht-event-intent-smart.d.ts +1 -1
- package/src/lib/event-models/bot/ht-event-keyword.d.ts +1 -1
- package/src/lib/event-models/test-helpers.d.ts +2 -2
- package/src/lib/event-models/test-helpers.js +38 -35
- package/src/lib/event-models/test-helpers.js.map +1 -1
- package/src/lib/index.d.ts +3 -3
- package/src/lib/index.js +26 -26
- package/src/lib/index.js.map +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,18 @@
|
|
|
1
|
+
## 2.27.0 (2026-04-29)
|
|
2
|
+
|
|
3
|
+
### 🚀 Features
|
|
4
|
+
|
|
5
|
+
- typing to work again and improve it with few modes when sending messages ([#831](https://github.com/metis-ai/hubtype-product/pull/831))
|
|
6
|
+
- **botonic:** session and Hubtype API adaptations (non-webviews) ([#810](https://github.com/metis-ai/hubtype-product/pull/810))
|
|
7
|
+
|
|
8
|
+
### ❤️ Thank You
|
|
9
|
+
|
|
10
|
+
- Marc Rabat @vanbasten17
|
|
11
|
+
|
|
12
|
+
## 2.26.0 (2026-03-31)
|
|
13
|
+
|
|
14
|
+
This was a version bump only for @botonic/plugin-hubtype-analytics to align it with other projects, there were no code changes.
|
|
15
|
+
|
|
1
16
|
## 2.25.0 (2026-03-27)
|
|
2
17
|
|
|
3
18
|
This was a version bump only for @botonic/plugin-hubtype-analytics to align it with other projects, there were no code changes.
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@botonic/plugin-hubtype-analytics",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.27.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"module": "./src/index.js",
|
|
6
6
|
"types": "./src/index.d.ts",
|
|
7
7
|
"dependencies": {
|
|
8
8
|
"tslib": "^2.3.0",
|
|
9
|
-
"@botonic/shared": "2.
|
|
9
|
+
"@botonic/shared": "2.27.0"
|
|
10
10
|
},
|
|
11
11
|
"references": [
|
|
12
12
|
{
|
|
@@ -6,7 +6,7 @@ export declare class HtEventIntentSmart extends HtEvent {
|
|
|
6
6
|
nlu_intent_smart_num_used: number;
|
|
7
7
|
nlu_intent_smart_message_id: string;
|
|
8
8
|
user_input: string;
|
|
9
|
-
flow_thread_id
|
|
9
|
+
flow_thread_id?: string;
|
|
10
10
|
flow_id: string;
|
|
11
11
|
flow_name: string;
|
|
12
12
|
flow_node_id: string;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BotonicContext, MessagingChannel } from '@botonic/shared';
|
|
2
2
|
interface RequestArgs {
|
|
3
3
|
language?: string;
|
|
4
4
|
country?: string;
|
|
@@ -7,5 +7,5 @@ interface RequestArgs {
|
|
|
7
7
|
isFirstInteraction?: boolean;
|
|
8
8
|
}
|
|
9
9
|
export declare function getRequestData(args?: RequestArgs): import("./types").RequestData;
|
|
10
|
-
export declare function createRequest(args?: RequestArgs):
|
|
10
|
+
export declare function createRequest(args?: RequestArgs): BotonicContext;
|
|
11
11
|
export {};
|
|
@@ -1,50 +1,53 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
|
-
import {
|
|
2
|
+
import { BotonicContext, BotonicContextInput, BotonicContextSecrets, BotonicContextSession, BotonicContextSettings, BotonicTextData, MessageType, MessagingChannel, } from '@botonic/shared';
|
|
3
3
|
import { BotonicPluginHubtypeAnalytics } from '../index';
|
|
4
|
+
const noopHubtype = {
|
|
5
|
+
sendMessages: () => __awaiter(void 0, void 0, void 0, function* () { return ({}); }),
|
|
6
|
+
doHandoff: () => __awaiter(void 0, void 0, void 0, function* () { return ({}); }),
|
|
7
|
+
getBotSession: () => __awaiter(void 0, void 0, void 0, function* () { return ({}); }),
|
|
8
|
+
updateBotSession: (_ctx, _updates) => __awaiter(void 0, void 0, void 0, function* () {
|
|
9
|
+
yield Promise.resolve();
|
|
10
|
+
}),
|
|
11
|
+
};
|
|
4
12
|
export function getRequestData(args) {
|
|
5
13
|
const request = createRequest(args);
|
|
6
14
|
const hubtypeAnalyticsPlugin = new BotonicPluginHubtypeAnalytics();
|
|
7
15
|
return hubtypeAnalyticsPlugin.getRequestData(request);
|
|
8
16
|
}
|
|
9
17
|
export function createRequest(args) {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
18
|
+
const sessionData = {
|
|
19
|
+
is_first_interaction: (args === null || args === void 0 ? void 0 : args.isFirstInteraction) || false,
|
|
20
|
+
organization: { id: 'orgIdTest', name: 'orgTest' },
|
|
21
|
+
bot: { id: 'bid1', name: 'Bot' },
|
|
22
|
+
channel: {
|
|
23
|
+
provider: (args === null || args === void 0 ? void 0 : args.provider) || MessagingChannel.Webchat,
|
|
24
|
+
imp_id: 'imp-test',
|
|
25
|
+
unformatted_phone_number: '',
|
|
26
|
+
},
|
|
27
|
+
user: {
|
|
28
|
+
id: (args === null || args === void 0 ? void 0 : args.chatId) || 'chatIdTest',
|
|
29
|
+
provider_id: (args === null || args === void 0 ? void 0 : args.provider) || MessagingChannel.Webchat,
|
|
30
|
+
locale: (args === null || args === void 0 ? void 0 : args.language) || 'es',
|
|
31
|
+
country: (args === null || args === void 0 ? void 0 : args.country) || 'ES',
|
|
32
|
+
system_locale: (args === null || args === void 0 ? void 0 : args.language) || 'es',
|
|
33
|
+
extra_data: {},
|
|
34
|
+
},
|
|
35
|
+
is_test_integration: false,
|
|
36
|
+
flow_thread_id: 'testFlowThreadId',
|
|
37
|
+
};
|
|
38
|
+
return new BotonicContext(noopHubtype, {
|
|
24
39
|
input: new BotonicContextInput({
|
|
25
40
|
type: MessageType.Text,
|
|
26
|
-
data:
|
|
41
|
+
data: new BotonicTextData('Hola'),
|
|
27
42
|
bot_interaction_id: 'testInteractionId',
|
|
28
43
|
}),
|
|
29
|
-
session: new BotonicContextSession(
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
provider: (args === null || args === void 0 ? void 0 : args.provider) || MessagingChannel.Webchat,
|
|
36
|
-
id: (args === null || args === void 0 ? void 0 : args.chatId) || 'chatIdTest',
|
|
37
|
-
locale: (args === null || args === void 0 ? void 0 : args.language) || 'es',
|
|
38
|
-
country: (args === null || args === void 0 ? void 0 : args.country) || 'ES',
|
|
39
|
-
system_locale: (args === null || args === void 0 ? void 0 : args.language) || 'es',
|
|
40
|
-
extra_data: {},
|
|
41
|
-
},
|
|
42
|
-
__retries: 0,
|
|
43
|
-
_access_token: 'fake_access_token',
|
|
44
|
-
_hubtype_api: 'https://api.hubtype.com',
|
|
45
|
-
is_test_integration: false,
|
|
46
|
-
flow_thread_id: 'testFlowThreadId',
|
|
44
|
+
session: new BotonicContextSession(sessionData),
|
|
45
|
+
settings: new BotonicContextSettings({
|
|
46
|
+
HUBTYPE_API_URL: 'https://api.hubtype.com',
|
|
47
|
+
}),
|
|
48
|
+
secrets: new BotonicContextSecrets({
|
|
49
|
+
HUBTYPE_ACCESS_TOKEN: 'fake_access_token',
|
|
47
50
|
}),
|
|
48
|
-
}, {}, 0, 0);
|
|
51
|
+
}, {}, 0, 0, 'inBetweenTyping');
|
|
49
52
|
}
|
|
50
53
|
//# sourceMappingURL=test-helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-helpers.js","sourceRoot":"","sources":["../../../../../../../libs/botonic/plugin-hubtype-analytics/src/lib/event-models/test-helpers.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"test-helpers.js","sourceRoot":"","sources":["../../../../../../../libs/botonic/plugin-hubtype-analytics/src/lib/event-models/test-helpers.ts"],"names":[],"mappings":";AACA,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EAEtB,eAAe,EAEf,WAAW,EACX,gBAAgB,GAGjB,MAAM,iBAAiB,CAAA;AAExB,OAAO,EAAE,6BAA6B,EAAE,MAAM,UAAU,CAAA;AAUxD,MAAM,WAAW,GAAG;IAClB,YAAY,EAAE,GAAS,EAAE,kDAAC,OAAA,CAAC,EAAE,CAAC,CAAA,GAAA;IAC9B,SAAS,EAAE,GAAS,EAAE,kDAAC,OAAA,CAAC,EAAE,CAAC,CAAA,GAAA;IAC3B,aAAa,EAAE,GAAS,EAAE,kDAAC,OAAA,CAAC,EAAE,CAAC,CAAA,GAAA;IAC/B,gBAAgB,EAAE,CAChB,IAAoB,EACpB,QAA8B,EAC9B,EAAE;QACF,MAAM,OAAO,CAAC,OAAO,EAAE,CAAA;IACzB,CAAC,CAAA;CAC8B,CAAA;AAEjC,MAAM,UAAU,cAAc,CAAC,IAAkB;IAC/C,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;IACnC,MAAM,sBAAsB,GAAG,IAAI,6BAA6B,EAAE,CAAA;IAClE,OAAO,sBAAsB,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;AACvD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAkB;IAC9C,MAAM,WAAW,GAAmB;QAClC,oBAAoB,EAAE,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,kBAAkB,KAAI,KAAK;QACvD,YAAY,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE;QAClD,GAAG,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE;QAChC,OAAO,EAAE;YACP,QAAQ,EAAE,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,KAAI,gBAAgB,CAAC,OAAO;YACpD,MAAM,EAAE,UAAU;YAClB,wBAAwB,EAAE,EAAE;SAC7B;QACD,IAAI,EAAE;YACJ,EAAE,EAAE,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,KAAI,YAAY;YAChC,WAAW,EAAE,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,KAAI,gBAAgB,CAAC,OAAO;YACvD,MAAM,EAAE,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,KAAI,IAAI;YAC9B,OAAO,EAAE,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OAAO,KAAI,IAAI;YAC9B,aAAa,EAAE,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,KAAI,IAAI;YACrC,UAAU,EAAE,EAAE;SACf;QACD,mBAAmB,EAAE,KAAK;QAC1B,cAAc,EAAE,kBAAkB;KACnC,CAAA;IAED,OAAO,IAAI,cAAc,CACvB,WAAW,EACX;QACE,KAAK,EAAE,IAAI,mBAAmB,CAAC;YAC7B,IAAI,EAAE,WAAW,CAAC,IAAI;YACtB,IAAI,EAAE,IAAI,eAAe,CAAC,MAAM,CAAC;YACjC,kBAAkB,EAAE,mBAAmB;SACxC,CAAC;QACF,OAAO,EAAE,IAAI,qBAAqB,CAAC,WAAW,CAAC;QAC/C,QAAQ,EAAE,IAAI,sBAAsB,CAAC;YACnC,eAAe,EAAE,yBAAyB;SAC3C,CAAC;QACF,OAAO,EAAE,IAAI,qBAAqB,CAAC;YACjC,oBAAoB,EAAE,mBAAmB;SAC1C,CAAC;KACH,EACD,EAAE,EACF,CAAC,EACD,CAAC,EACD,iBAAiB,CAClB,CAAA;AACH,CAAC"}
|
package/src/lib/index.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BotonicContext, Plugin } from '@botonic/shared';
|
|
2
2
|
import { HtEventProps, RequestData } from './event-models/types';
|
|
3
3
|
export declare class BotonicPluginHubtypeAnalytics implements Plugin {
|
|
4
4
|
eventsBaseUrl: string;
|
|
5
5
|
constructor();
|
|
6
6
|
post(): void;
|
|
7
|
-
trackEvent(
|
|
8
|
-
getRequestData(
|
|
7
|
+
trackEvent(botonicContext: BotonicContext, htEventProps: HtEventProps): Promise<any>;
|
|
8
|
+
getRequestData(botonicContext: BotonicContext): RequestData;
|
|
9
9
|
private isLambdaEvent;
|
|
10
10
|
private sendEvent;
|
|
11
11
|
private sendBotEvent;
|
package/src/lib/index.js
CHANGED
|
@@ -11,45 +11,45 @@ export class BotonicPluginHubtypeAnalytics {
|
|
|
11
11
|
post() {
|
|
12
12
|
return;
|
|
13
13
|
}
|
|
14
|
-
trackEvent(
|
|
14
|
+
trackEvent(botonicContext, htEventProps) {
|
|
15
15
|
return __awaiter(this, void 0, void 0, function* () {
|
|
16
|
-
const requestData = this.getRequestData(
|
|
16
|
+
const requestData = this.getRequestData(botonicContext);
|
|
17
17
|
const event = createHtEvent(requestData, htEventProps);
|
|
18
|
-
return this.sendEvent(
|
|
18
|
+
return this.sendEvent(botonicContext, event);
|
|
19
19
|
});
|
|
20
20
|
}
|
|
21
|
-
getRequestData(
|
|
21
|
+
getRequestData(botonicContext) {
|
|
22
22
|
return {
|
|
23
|
-
userId: this.isLambdaEvent(
|
|
24
|
-
?
|
|
23
|
+
userId: this.isLambdaEvent(botonicContext)
|
|
24
|
+
? botonicContext.session.user.id
|
|
25
25
|
: undefined,
|
|
26
|
-
botInteractionId:
|
|
27
|
-
userLocale:
|
|
28
|
-
userCountry:
|
|
29
|
-
systemLocale:
|
|
26
|
+
botInteractionId: botonicContext.input.botInteractionId,
|
|
27
|
+
userLocale: botonicContext.session.user.locale,
|
|
28
|
+
userCountry: botonicContext.session.user.country,
|
|
29
|
+
systemLocale: botonicContext.session.user.systemLocale,
|
|
30
30
|
};
|
|
31
31
|
}
|
|
32
|
-
isLambdaEvent(
|
|
32
|
+
isLambdaEvent(botonicContext) {
|
|
33
33
|
var _a, _b;
|
|
34
|
-
return ((_b = (_a =
|
|
34
|
+
return ((_b = (_a = botonicContext.session) === null || _a === void 0 ? void 0 : _a.bot) === null || _b === void 0 ? void 0 : _b.id) !== undefined;
|
|
35
35
|
}
|
|
36
|
-
sendEvent(
|
|
36
|
+
sendEvent(botonicContext, event) {
|
|
37
37
|
return __awaiter(this, void 0, void 0, function* () {
|
|
38
38
|
if (event.type === EventType.BotEvent) {
|
|
39
|
-
return this.sendBotEvent(
|
|
39
|
+
return this.sendBotEvent(botonicContext, event);
|
|
40
40
|
}
|
|
41
|
-
return this.sendWebEvent(
|
|
41
|
+
return this.sendWebEvent(botonicContext, event);
|
|
42
42
|
});
|
|
43
43
|
}
|
|
44
|
-
sendBotEvent(
|
|
44
|
+
sendBotEvent(botonicContext, event) {
|
|
45
45
|
return __awaiter(this, void 0, void 0, function* () {
|
|
46
|
-
const botId =
|
|
46
|
+
const botId = botonicContext.session.bot.id;
|
|
47
47
|
const url = `${this.eventsBaseUrl}/${botId}/bot_event/`;
|
|
48
48
|
const response = yield fetch(url, {
|
|
49
49
|
method: 'POST',
|
|
50
50
|
headers: {
|
|
51
51
|
'Content-Type': 'application/json',
|
|
52
|
-
Authorization: `Bearer ${
|
|
52
|
+
Authorization: `Bearer ${botonicContext.secrets.hubtypeAccessToken}`,
|
|
53
53
|
},
|
|
54
54
|
body: JSON.stringify(event),
|
|
55
55
|
});
|
|
@@ -59,17 +59,17 @@ export class BotonicPluginHubtypeAnalytics {
|
|
|
59
59
|
return yield response.json();
|
|
60
60
|
});
|
|
61
61
|
}
|
|
62
|
-
sendWebEvent(
|
|
62
|
+
sendWebEvent(botonicContext, event) {
|
|
63
63
|
return __awaiter(this, void 0, void 0, function* () {
|
|
64
|
-
if (this.isLambdaEvent(
|
|
65
|
-
return this.sendWebEventByBotId(
|
|
64
|
+
if (this.isLambdaEvent(botonicContext)) {
|
|
65
|
+
return this.sendWebEventByBotId(botonicContext, event);
|
|
66
66
|
}
|
|
67
|
-
return this.sendWebEventByProviderId(
|
|
67
|
+
return this.sendWebEventByProviderId(botonicContext, event);
|
|
68
68
|
});
|
|
69
69
|
}
|
|
70
|
-
sendWebEventByBotId(
|
|
70
|
+
sendWebEventByBotId(botonicContext, event) {
|
|
71
71
|
return __awaiter(this, void 0, void 0, function* () {
|
|
72
|
-
const botId =
|
|
72
|
+
const botId = botonicContext.session.bot.id;
|
|
73
73
|
const url = `${this.eventsBaseUrl}/${botId}/web_event/`;
|
|
74
74
|
const response = yield fetch(url, {
|
|
75
75
|
method: 'POST',
|
|
@@ -84,10 +84,10 @@ export class BotonicPluginHubtypeAnalytics {
|
|
|
84
84
|
return yield response.json();
|
|
85
85
|
});
|
|
86
86
|
}
|
|
87
|
-
sendWebEventByProviderId(
|
|
87
|
+
sendWebEventByProviderId(botonicContext, event) {
|
|
88
88
|
return __awaiter(this, void 0, void 0, function* () {
|
|
89
89
|
const url = new URL(`${this.eventsBaseUrl}/web_event/`);
|
|
90
|
-
url.searchParams.set('provider_id',
|
|
90
|
+
url.searchParams.set('provider_id', botonicContext.session.user.id);
|
|
91
91
|
const response = yield fetch(url.toString(), {
|
|
92
92
|
method: 'POST',
|
|
93
93
|
headers: {
|
package/src/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../libs/botonic/plugin-hubtype-analytics/src/lib/index.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,SAAS,EAA6B,MAAM,sBAAsB,CAAA;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAEvC,MAAM,eAAe;AACnB,4CAA4C;AAC5C,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,oBAAoB,IAAI,yBAAyB,CAAA;AAEnE,MAAM,OAAO,6BAA6B;IAExC;QACE,IAAI,CAAC,aAAa,GAAG,GAAG,eAAe,kCAAkC,CAAA;IAC3E,CAAC;IAED,IAAI;QACF,OAAM;IACR,CAAC;IAEK,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../libs/botonic/plugin-hubtype-analytics/src/lib/index.ts"],"names":[],"mappings":"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"}
|