@botonic/react 0.35.0-alpha.1 → 0.35.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.
@@ -4,7 +4,6 @@ exports.MessageFeedback = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const jsx_runtime_1 = require("react/jsx-runtime");
6
6
  const react_1 = require("react");
7
- const uuid_1 = require("uuid");
8
7
  const thumbs_down_svg_1 = tslib_1.__importDefault(require("../../assets/thumbs-down.svg"));
9
8
  const thumbs_up_svg_1 = tslib_1.__importDefault(require("../../assets/thumbs-up.svg"));
10
9
  const util_1 = require("../../util");
@@ -12,7 +11,8 @@ const context_1 = require("../../webchat/context");
12
11
  const tracking_1 = require("../../webchat/tracking");
13
12
  const styles_1 = require("./styles");
14
13
  const MessageFeedback = ({ botInteractionId, inferenceId, messageId, }) => {
15
- const { webchatState, updateMessage, trackEvent } = (0, react_1.useContext)(context_1.WebchatContext);
14
+ const { webchatState, updateMessage } = (0, react_1.useContext)(context_1.WebchatContext);
15
+ const { trackKnowledgebaseFeedback } = (0, tracking_1.useTracking)();
16
16
  const [className, setClassName] = (0, react_1.useState)('');
17
17
  const [disabled, setDisabled] = (0, react_1.useState)({
18
18
  positive: false,
@@ -33,29 +33,18 @@ const MessageFeedback = ({ botInteractionId, inferenceId, messageId, }) => {
33
33
  }
34
34
  }, [disabled]);
35
35
  const handleClick = (isUseful) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
36
- if (!trackEvent) {
37
- return;
38
- }
39
36
  if (isUseful) {
40
37
  setDisabled({ positive: false, negative: true });
41
38
  }
42
39
  else {
43
40
  setDisabled({ positive: true, negative: false });
44
41
  }
45
- const args = {
46
- knowledgebaseInferenceId: inferenceId,
47
- feedbackBotInteractionId: botInteractionId,
48
- feedbackTargetId: messageId,
49
- feedbackGroupId: (0, uuid_1.v7)(),
50
- possibleOptions: [tracking_1.FeedbackOption.ThumbsDown, tracking_1.FeedbackOption.ThumbsUp],
51
- possibleValues: [0, 1],
52
- option: isUseful ? tracking_1.FeedbackOption.ThumbsUp : tracking_1.FeedbackOption.ThumbsDown,
53
- value: isUseful ? 1 : 0,
54
- };
55
- const request = {
56
- session: Object.assign({}, webchatState.session),
57
- };
58
- yield trackEvent(request, tracking_1.EventAction.FeedbackKnowledgebase, args);
42
+ yield trackKnowledgebaseFeedback({
43
+ messageId,
44
+ isUseful,
45
+ botInteractionId,
46
+ inferenceId,
47
+ });
59
48
  });
60
49
  return ((0, jsx_runtime_1.jsxs)(styles_1.FeedbackMessageContainer, { children: [(0, jsx_runtime_1.jsx)(styles_1.FeedbackButton, Object.assign({ className: className, disabled: disabled.positive, onClick: () => handleClick(true) }, { children: (0, jsx_runtime_1.jsx)("img", { src: (0, util_1.resolveImage)(thumbs_up_svg_1.default) }) })), (0, jsx_runtime_1.jsx)(styles_1.FeedbackButton, Object.assign({ className: className, disabled: disabled.negative, onClick: () => handleClick(false) }, { children: (0, jsx_runtime_1.jsx)("img", { src: (0, util_1.resolveImage)(thumbs_down_svg_1.default) }) }))] }));
61
50
  };
@@ -1 +1 @@
1
- {"version":3,"file":"message-feedback.js","sourceRoot":"","sources":["../../../../src/components/message/message-feedback.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"message-feedback.js","sourceRoot":"","sources":["../../../../src/components/message/message-feedback.tsx"],"names":[],"mappings":";;;;;AAAA,iCAA8D;AAE9D,2FAAqD;AACrD,uFAAiD;AACjD,qCAAyC;AACzC,mDAAsD;AACtD,qDAAoD;AACpD,qCAAmE;AAa5D,MAAM,eAAe,GAAG,CAAC,EAC9B,gBAAgB,EAChB,WAAW,EACX,SAAS,GACG,EAAE,EAAE;IAChB,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,IAAA,kBAAU,EAAC,wBAAc,CAAC,CAAA;IAClE,MAAM,EAAE,0BAA0B,EAAE,GAAG,IAAA,sBAAW,GAAE,CAAA;IAEpD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAC,EAAE,CAAC,CAAA;IAC9C,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,IAAA,gBAAQ,EAAe;QACrD,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAA;IAEF,MAAM,qBAAqB,GAAG,CAAC,eAAwB,EAAE,EAAE;QACzD,MAAM,OAAO,GAAG,YAAY,CAAC,YAAY,CAAC,IAAI,CAC5C,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,SAAS,CACpC,CAAA;QACD,MAAM,UAAU,mCACX,OAAO,KACV,eAAe,GAChB,CAAA;QACD,aAAa,CAAC,UAAU,CAAC,CAAA;IAC3B,CAAC,CAAA;IAED,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,qBAAqB,CAAC,IAAI,CAAC,CAAA;IAC7B,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,EAAE;YAC1C,YAAY,CAAC,SAAS,CAAC,CAAA;YACvB,qBAAqB,CAAC,KAAK,CAAC,CAAA;SAC7B;IACH,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEd,MAAM,WAAW,GAAG,CAAO,QAAiB,EAAE,EAAE;QAC9C,IAAI,QAAQ,EAAE;YACZ,WAAW,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;SACjD;aAAM;YACL,WAAW,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA;SACjD;QAED,MAAM,0BAA0B,CAAC;YAC/B,SAAS;YACT,QAAQ;YACR,gBAAgB;YAChB,WAAW;SACZ,CAAC,CAAA;IACJ,CAAC,CAAA,CAAA;IAED,OAAO,CACL,wBAAC,iCAAwB,eACvB,uBAAC,uBAAc,kBACb,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAC3B,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,gBAEhC,gCAAK,GAAG,EAAE,IAAA,mBAAY,EAAC,uBAAQ,CAAC,GAAI,IACrB,EACjB,uBAAC,uBAAc,kBACb,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAC3B,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,gBAEjC,gCAAK,GAAG,EAAE,IAAA,mBAAY,EAAC,yBAAU,CAAC,GAAI,IACvB,IACQ,CAC5B,CAAA;AACH,CAAC,CAAA;AArEY,QAAA,eAAe,mBAqE3B"}
@@ -1,7 +1,17 @@
1
1
  export declare enum EventAction {
2
2
  FeedbackKnowledgebase = "feedback_knowledgebase"
3
3
  }
4
+ interface TrackKnowledgebaseFeedbackArgs {
5
+ messageId: string;
6
+ isUseful: boolean;
7
+ botInteractionId?: string;
8
+ inferenceId?: string;
9
+ }
4
10
  export declare enum FeedbackOption {
5
11
  ThumbsUp = "thumbsUp",
6
12
  ThumbsDown = "thumbsDown"
7
13
  }
14
+ export declare function useTracking(): {
15
+ trackKnowledgebaseFeedback: ({ messageId, isUseful, botInteractionId, inferenceId, }: TrackKnowledgebaseFeedbackArgs) => Promise<void>;
16
+ };
17
+ export {};
@@ -1,6 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FeedbackOption = exports.EventAction = void 0;
3
+ exports.useTracking = exports.FeedbackOption = exports.EventAction = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const react_1 = require("react");
6
+ const uuid_1 = require("uuid");
7
+ const context_1 = require("./context");
4
8
  var EventAction;
5
9
  (function (EventAction) {
6
10
  EventAction["FeedbackKnowledgebase"] = "feedback_knowledgebase";
@@ -10,4 +14,38 @@ var FeedbackOption;
10
14
  FeedbackOption["ThumbsUp"] = "thumbsUp";
11
15
  FeedbackOption["ThumbsDown"] = "thumbsDown";
12
16
  })(FeedbackOption = exports.FeedbackOption || (exports.FeedbackOption = {}));
17
+ function useTracking() {
18
+ const { webchatState, trackEvent } = (0, react_1.useContext)(context_1.WebchatContext);
19
+ const getRequest = () => {
20
+ const request = {
21
+ session: Object.assign({}, webchatState.session),
22
+ getUserCountry: () => { var _a; return ((_a = webchatState.session.user) === null || _a === void 0 ? void 0 : _a.country) || ''; },
23
+ getUserLocale: () => { var _a; return ((_a = webchatState.session.user) === null || _a === void 0 ? void 0 : _a.locale) || ''; },
24
+ getSystemLocale: () => {
25
+ var _a;
26
+ return ((_a = webchatState.session.user) === null || _a === void 0 ? void 0 : _a.system_locale) || '';
27
+ },
28
+ };
29
+ return request;
30
+ };
31
+ const trackKnowledgebaseFeedback = ({ messageId, isUseful, botInteractionId, inferenceId, }) => tslib_1.__awaiter(this, void 0, void 0, function* () {
32
+ if (!trackEvent) {
33
+ return;
34
+ }
35
+ const args = {
36
+ knowledgebaseInferenceId: inferenceId,
37
+ feedbackBotInteractionId: botInteractionId,
38
+ feedbackTargetId: messageId,
39
+ feedbackGroupId: (0, uuid_1.v7)(),
40
+ possibleOptions: [FeedbackOption.ThumbsDown, FeedbackOption.ThumbsUp],
41
+ possibleValues: [0, 1],
42
+ option: isUseful ? FeedbackOption.ThumbsUp : FeedbackOption.ThumbsDown,
43
+ value: isUseful ? 1 : 0,
44
+ };
45
+ const request = getRequest();
46
+ yield trackEvent(request, EventAction.FeedbackKnowledgebase, args);
47
+ });
48
+ return { trackKnowledgebaseFeedback };
49
+ }
50
+ exports.useTracking = useTracking;
13
51
  //# sourceMappingURL=tracking.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tracking.js","sourceRoot":"","sources":["../../../src/webchat/tracking.ts"],"names":[],"mappings":";;;AAAA,IAAY,WAEX;AAFD,WAAY,WAAW;IACrB,+DAAgD,CAAA;AAClD,CAAC,EAFW,WAAW,GAAX,mBAAW,KAAX,mBAAW,QAEtB;AAED,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,uCAAqB,CAAA;IACrB,2CAAyB,CAAA;AAC3B,CAAC,EAHW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAGzB"}
1
+ {"version":3,"file":"tracking.js","sourceRoot":"","sources":["../../../src/webchat/tracking.ts"],"names":[],"mappings":";;;;AAAA,iCAAkC;AAClC,+BAAmC;AAGnC,uCAA0C;AAE1C,IAAY,WAEX;AAFD,WAAY,WAAW;IACrB,+DAAgD,CAAA;AAClD,CAAC,EAFW,WAAW,GAAX,mBAAW,KAAX,mBAAW,QAEtB;AAQD,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,uCAAqB,CAAA;IACrB,2CAAyB,CAAA;AAC3B,CAAC,EAHW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAGzB;AAED,SAAgB,WAAW;IACzB,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,IAAA,kBAAU,EAAC,wBAAc,CAAC,CAAA;IAE/D,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,MAAM,OAAO,GAAG;YACd,OAAO,oBACF,YAAY,CAAC,OAAO,CACxB;YACD,cAAc,EAAE,GAAG,EAAE,WAAC,OAAA,CAAA,MAAA,YAAY,CAAC,OAAO,CAAC,IAAI,0CAAE,OAAO,KAAI,EAAE,CAAA,EAAA;YAC9D,aAAa,EAAE,GAAG,EAAE,WAAC,OAAA,CAAA,MAAA,YAAY,CAAC,OAAO,CAAC,IAAI,0CAAE,MAAM,KAAI,EAAE,CAAA,EAAA;YAC5D,eAAe,EAAE,GAAG,EAAE;;gBACpB,OAAO,CAAA,MAAA,YAAY,CAAC,OAAO,CAAC,IAAI,0CAAE,aAAa,KAAI,EAAE,CAAA;YACvD,CAAC;SAC0B,CAAA;QAE7B,OAAO,OAAO,CAAA;IAChB,CAAC,CAAA;IAED,MAAM,0BAA0B,GAAG,CAAO,EACxC,SAAS,EACT,QAAQ,EACR,gBAAgB,EAChB,WAAW,GACoB,EAAE,EAAE;QACnC,IAAI,CAAC,UAAU,EAAE;YACf,OAAM;SACP;QAED,MAAM,IAAI,GAAG;YACX,wBAAwB,EAAE,WAAW;YACrC,wBAAwB,EAAE,gBAAgB;YAC1C,gBAAgB,EAAE,SAAS;YAC3B,eAAe,EAAE,IAAA,SAAM,GAAE;YACzB,eAAe,EAAE,CAAC,cAAc,CAAC,UAAU,EAAE,cAAc,CAAC,QAAQ,CAAC;YACrE,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACtB,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU;YACtE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACxB,CAAA;QAED,MAAM,OAAO,GAAG,UAAU,EAAE,CAAA;QAE5B,MAAM,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAA;IACpE,CAAC,CAAA,CAAA;IAED,OAAO,EAAE,0BAA0B,EAAE,CAAA;AACvC,CAAC;AA7CD,kCA6CC"}
@@ -1,4 +1,4 @@
1
- <!doctype html>
1
+ <!DOCTYPE html>
2
2
  <html lang="en-US">
3
3
  <head>
4
4
  <meta charset="UTF-8" />
@@ -28,50 +28,9 @@
28
28
  </style>
29
29
  </head>
30
30
  <body>
31
- <div id="webchatRoot"></div>
32
31
  <script type="text/javascript">
33
32
  document.addEventListener('DOMContentLoaded', function (event) {
34
- Botonic.render(document.getElementById('webchatRoot'), {
35
- onInit: async app => {
36
- const urlParams = new URLSearchParams(location.search)
37
- const userLocale = urlParams.get('userLocale')
38
- const userCountry = urlParams.get('userCountry')
39
- const systemLocale = urlParams.get('systemLocale')
40
-
41
- // app.setSystemLocale(systemLocale)
42
- // app.setUserLocale(userLocale)
43
- // app.setUserCountry(userCountry)
44
-
45
- const extraLanguage = urlParams.get('extraLanguage')
46
- const extraCountry = urlParams.get('extraCountry')
47
-
48
- console.log('systemLocale', systemLocale)
49
- console.log('userLocale', userLocale)
50
- console.log('userCountry', userCountry)
51
- console.log('extraLanguage', extraLanguage)
52
- console.log('extraCountry', extraCountry)
53
-
54
- app.updateUser({
55
- country: userCountry,
56
- locale: userLocale,
57
- system_locale: systemLocale,
58
- extra_data: {
59
- country: extraCountry,
60
- language: extraLanguage,
61
- },
62
- })
63
- await window.botonicOnInit(app)
64
- },
65
- onOpen: async app => {
66
- await window.botonicOnOpen(app)
67
- },
68
- onClose: async app => {
69
- await window.botonicOnClose(app)
70
- },
71
- onMessage: async (app, message) => {
72
- await window.botonicOnMessage(app, message)
73
- },
74
- })
33
+ Botonic.render()
75
34
  })
76
35
  </script>
77
36
  </body>
@@ -1,15 +1,15 @@
1
1
  import { __awaiter } from "tslib";
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { useContext, useEffect, useState } from 'react';
4
- import { v7 as uuidv7 } from 'uuid';
5
4
  import ThumbsDown from '../../assets/thumbs-down.svg';
6
5
  import ThumbsUp from '../../assets/thumbs-up.svg';
7
6
  import { resolveImage } from '../../util';
8
7
  import { WebchatContext } from '../../webchat/context';
9
- import { EventAction, FeedbackOption } from '../../webchat/tracking';
8
+ import { useTracking } from '../../webchat/tracking';
10
9
  import { FeedbackButton, FeedbackMessageContainer } from './styles';
11
10
  export const MessageFeedback = ({ botInteractionId, inferenceId, messageId, }) => {
12
- const { webchatState, updateMessage, trackEvent } = useContext(WebchatContext);
11
+ const { webchatState, updateMessage } = useContext(WebchatContext);
12
+ const { trackKnowledgebaseFeedback } = useTracking();
13
13
  const [className, setClassName] = useState('');
14
14
  const [disabled, setDisabled] = useState({
15
15
  positive: false,
@@ -30,29 +30,18 @@ export const MessageFeedback = ({ botInteractionId, inferenceId, messageId, }) =
30
30
  }
31
31
  }, [disabled]);
32
32
  const handleClick = (isUseful) => __awaiter(void 0, void 0, void 0, function* () {
33
- if (!trackEvent) {
34
- return;
35
- }
36
33
  if (isUseful) {
37
34
  setDisabled({ positive: false, negative: true });
38
35
  }
39
36
  else {
40
37
  setDisabled({ positive: true, negative: false });
41
38
  }
42
- const args = {
43
- knowledgebaseInferenceId: inferenceId,
44
- feedbackBotInteractionId: botInteractionId,
45
- feedbackTargetId: messageId,
46
- feedbackGroupId: uuidv7(),
47
- possibleOptions: [FeedbackOption.ThumbsDown, FeedbackOption.ThumbsUp],
48
- possibleValues: [0, 1],
49
- option: isUseful ? FeedbackOption.ThumbsUp : FeedbackOption.ThumbsDown,
50
- value: isUseful ? 1 : 0,
51
- };
52
- const request = {
53
- session: Object.assign({}, webchatState.session),
54
- };
55
- yield trackEvent(request, EventAction.FeedbackKnowledgebase, args);
39
+ yield trackKnowledgebaseFeedback({
40
+ messageId,
41
+ isUseful,
42
+ botInteractionId,
43
+ inferenceId,
44
+ });
56
45
  });
57
46
  return (_jsxs(FeedbackMessageContainer, { children: [_jsx(FeedbackButton, Object.assign({ className: className, disabled: disabled.positive, onClick: () => handleClick(true) }, { children: _jsx("img", { src: resolveImage(ThumbsUp) }) })), _jsx(FeedbackButton, Object.assign({ className: className, disabled: disabled.negative, onClick: () => handleClick(false) }, { children: _jsx("img", { src: resolveImage(ThumbsDown) }) }))] }));
58
47
  };
@@ -1 +1 @@
1
- {"version":3,"file":"message-feedback.js","sourceRoot":"","sources":["../../../../src/components/message/message-feedback.tsx"],"names":[],"mappings":";;AAAA,OAAc,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAC9D,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAA;AAEnC,OAAO,UAAU,MAAM,8BAA8B,CAAA;AACrD,OAAO,QAAQ,MAAM,4BAA4B,CAAA;AAEjD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACpE,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAA;AAanE,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAC9B,gBAAgB,EAChB,WAAW,EACX,SAAS,GACG,EAAE,EAAE;IAChB,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,UAAU,CAAC,cAAc,CAAC,CAAA;IAE9E,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAC9C,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAe;QACrD,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAA;IAEF,MAAM,qBAAqB,GAAG,CAAC,eAAwB,EAAE,EAAE;QACzD,MAAM,OAAO,GAAG,YAAY,CAAC,YAAY,CAAC,IAAI,CAC5C,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,SAAS,CACpC,CAAA;QACD,MAAM,UAAU,mCACX,OAAO,KACV,eAAe,GAChB,CAAA;QACD,aAAa,CAAC,UAAU,CAAC,CAAA;IAC3B,CAAC,CAAA;IAED,SAAS,CAAC,GAAG,EAAE;QACb,qBAAqB,CAAC,IAAI,CAAC,CAAA;IAC7B,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,EAAE;YAC1C,YAAY,CAAC,SAAS,CAAC,CAAA;YACvB,qBAAqB,CAAC,KAAK,CAAC,CAAA;SAC7B;IACH,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEd,MAAM,WAAW,GAAG,CAAO,QAAiB,EAAE,EAAE;QAC9C,IAAI,CAAC,UAAU,EAAE;YACf,OAAM;SACP;QAED,IAAI,QAAQ,EAAE;YACZ,WAAW,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;SACjD;aAAM;YACL,WAAW,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA;SACjD;QAED,MAAM,IAAI,GAAG;YACX,wBAAwB,EAAE,WAAW;YACrC,wBAAwB,EAAE,gBAAgB;YAC1C,gBAAgB,EAAE,SAAS;YAC3B,eAAe,EAAE,MAAM,EAAE;YACzB,eAAe,EAAE,CAAC,cAAc,CAAC,UAAU,EAAE,cAAc,CAAC,QAAQ,CAAC;YACrE,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACtB,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU;YACtE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACxB,CAAA;QAED,MAAM,OAAO,GAAG;YACd,OAAO,oBACF,YAAY,CAAC,OAAO,CACxB;SAC0B,CAAA;QAE7B,MAAM,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAA;IACpE,CAAC,CAAA,CAAA;IAED,OAAO,CACL,MAAC,wBAAwB,eACvB,KAAC,cAAc,kBACb,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAC3B,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,gBAEhC,cAAK,GAAG,EAAE,YAAY,CAAC,QAAQ,CAAC,GAAI,IACrB,EACjB,KAAC,cAAc,kBACb,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAC3B,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,gBAEjC,cAAK,GAAG,EAAE,YAAY,CAAC,UAAU,CAAC,GAAI,IACvB,IACQ,CAC5B,CAAA;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"message-feedback.js","sourceRoot":"","sources":["../../../../src/components/message/message-feedback.tsx"],"names":[],"mappings":";;AAAA,OAAc,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAE9D,OAAO,UAAU,MAAM,8BAA8B,CAAA;AACrD,OAAO,QAAQ,MAAM,4BAA4B,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAA;AAanE,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAC9B,gBAAgB,EAChB,WAAW,EACX,SAAS,GACG,EAAE,EAAE;IAChB,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,UAAU,CAAC,cAAc,CAAC,CAAA;IAClE,MAAM,EAAE,0BAA0B,EAAE,GAAG,WAAW,EAAE,CAAA;IAEpD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAC9C,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAe;QACrD,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAA;IAEF,MAAM,qBAAqB,GAAG,CAAC,eAAwB,EAAE,EAAE;QACzD,MAAM,OAAO,GAAG,YAAY,CAAC,YAAY,CAAC,IAAI,CAC5C,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,SAAS,CACpC,CAAA;QACD,MAAM,UAAU,mCACX,OAAO,KACV,eAAe,GAChB,CAAA;QACD,aAAa,CAAC,UAAU,CAAC,CAAA;IAC3B,CAAC,CAAA;IAED,SAAS,CAAC,GAAG,EAAE;QACb,qBAAqB,CAAC,IAAI,CAAC,CAAA;IAC7B,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,EAAE;YAC1C,YAAY,CAAC,SAAS,CAAC,CAAA;YACvB,qBAAqB,CAAC,KAAK,CAAC,CAAA;SAC7B;IACH,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEd,MAAM,WAAW,GAAG,CAAO,QAAiB,EAAE,EAAE;QAC9C,IAAI,QAAQ,EAAE;YACZ,WAAW,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;SACjD;aAAM;YACL,WAAW,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA;SACjD;QAED,MAAM,0BAA0B,CAAC;YAC/B,SAAS;YACT,QAAQ;YACR,gBAAgB;YAChB,WAAW;SACZ,CAAC,CAAA;IACJ,CAAC,CAAA,CAAA;IAED,OAAO,CACL,MAAC,wBAAwB,eACvB,KAAC,cAAc,kBACb,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAC3B,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,gBAEhC,cAAK,GAAG,EAAE,YAAY,CAAC,QAAQ,CAAC,GAAI,IACrB,EACjB,KAAC,cAAc,kBACb,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAC3B,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,gBAEjC,cAAK,GAAG,EAAE,YAAY,CAAC,UAAU,CAAC,GAAI,IACvB,IACQ,CAC5B,CAAA;AACH,CAAC,CAAA"}
@@ -1,7 +1,17 @@
1
1
  export declare enum EventAction {
2
2
  FeedbackKnowledgebase = "feedback_knowledgebase"
3
3
  }
4
+ interface TrackKnowledgebaseFeedbackArgs {
5
+ messageId: string;
6
+ isUseful: boolean;
7
+ botInteractionId?: string;
8
+ inferenceId?: string;
9
+ }
4
10
  export declare enum FeedbackOption {
5
11
  ThumbsUp = "thumbsUp",
6
12
  ThumbsDown = "thumbsDown"
7
13
  }
14
+ export declare function useTracking(): {
15
+ trackKnowledgebaseFeedback: ({ messageId, isUseful, botInteractionId, inferenceId, }: TrackKnowledgebaseFeedbackArgs) => Promise<void>;
16
+ };
17
+ export {};
@@ -1,3 +1,7 @@
1
+ import { __awaiter } from "tslib";
2
+ import { useContext } from 'react';
3
+ import { v7 as uuidv7 } from 'uuid';
4
+ import { WebchatContext } from './context';
1
5
  export var EventAction;
2
6
  (function (EventAction) {
3
7
  EventAction["FeedbackKnowledgebase"] = "feedback_knowledgebase";
@@ -7,4 +11,37 @@ export var FeedbackOption;
7
11
  FeedbackOption["ThumbsUp"] = "thumbsUp";
8
12
  FeedbackOption["ThumbsDown"] = "thumbsDown";
9
13
  })(FeedbackOption || (FeedbackOption = {}));
14
+ export function useTracking() {
15
+ const { webchatState, trackEvent } = useContext(WebchatContext);
16
+ const getRequest = () => {
17
+ const request = {
18
+ session: Object.assign({}, webchatState.session),
19
+ getUserCountry: () => { var _a; return ((_a = webchatState.session.user) === null || _a === void 0 ? void 0 : _a.country) || ''; },
20
+ getUserLocale: () => { var _a; return ((_a = webchatState.session.user) === null || _a === void 0 ? void 0 : _a.locale) || ''; },
21
+ getSystemLocale: () => {
22
+ var _a;
23
+ return ((_a = webchatState.session.user) === null || _a === void 0 ? void 0 : _a.system_locale) || '';
24
+ },
25
+ };
26
+ return request;
27
+ };
28
+ const trackKnowledgebaseFeedback = ({ messageId, isUseful, botInteractionId, inferenceId, }) => __awaiter(this, void 0, void 0, function* () {
29
+ if (!trackEvent) {
30
+ return;
31
+ }
32
+ const args = {
33
+ knowledgebaseInferenceId: inferenceId,
34
+ feedbackBotInteractionId: botInteractionId,
35
+ feedbackTargetId: messageId,
36
+ feedbackGroupId: uuidv7(),
37
+ possibleOptions: [FeedbackOption.ThumbsDown, FeedbackOption.ThumbsUp],
38
+ possibleValues: [0, 1],
39
+ option: isUseful ? FeedbackOption.ThumbsUp : FeedbackOption.ThumbsDown,
40
+ value: isUseful ? 1 : 0,
41
+ };
42
+ const request = getRequest();
43
+ yield trackEvent(request, EventAction.FeedbackKnowledgebase, args);
44
+ });
45
+ return { trackKnowledgebaseFeedback };
46
+ }
10
47
  //# sourceMappingURL=tracking.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tracking.js","sourceRoot":"","sources":["../../../src/webchat/tracking.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,WAEX;AAFD,WAAY,WAAW;IACrB,+DAAgD,CAAA;AAClD,CAAC,EAFW,WAAW,KAAX,WAAW,QAEtB;AAED,MAAM,CAAN,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,uCAAqB,CAAA;IACrB,2CAAyB,CAAA;AAC3B,CAAC,EAHW,cAAc,KAAd,cAAc,QAGzB"}
1
+ {"version":3,"file":"tracking.js","sourceRoot":"","sources":["../../../src/webchat/tracking.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAClC,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAA;AAGnC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAE1C,MAAM,CAAN,IAAY,WAEX;AAFD,WAAY,WAAW;IACrB,+DAAgD,CAAA;AAClD,CAAC,EAFW,WAAW,KAAX,WAAW,QAEtB;AAQD,MAAM,CAAN,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,uCAAqB,CAAA;IACrB,2CAAyB,CAAA;AAC3B,CAAC,EAHW,cAAc,KAAd,cAAc,QAGzB;AAED,MAAM,UAAU,WAAW;IACzB,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,UAAU,CAAC,cAAc,CAAC,CAAA;IAE/D,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,MAAM,OAAO,GAAG;YACd,OAAO,oBACF,YAAY,CAAC,OAAO,CACxB;YACD,cAAc,EAAE,GAAG,EAAE,WAAC,OAAA,CAAA,MAAA,YAAY,CAAC,OAAO,CAAC,IAAI,0CAAE,OAAO,KAAI,EAAE,CAAA,EAAA;YAC9D,aAAa,EAAE,GAAG,EAAE,WAAC,OAAA,CAAA,MAAA,YAAY,CAAC,OAAO,CAAC,IAAI,0CAAE,MAAM,KAAI,EAAE,CAAA,EAAA;YAC5D,eAAe,EAAE,GAAG,EAAE;;gBACpB,OAAO,CAAA,MAAA,YAAY,CAAC,OAAO,CAAC,IAAI,0CAAE,aAAa,KAAI,EAAE,CAAA;YACvD,CAAC;SAC0B,CAAA;QAE7B,OAAO,OAAO,CAAA;IAChB,CAAC,CAAA;IAED,MAAM,0BAA0B,GAAG,CAAO,EACxC,SAAS,EACT,QAAQ,EACR,gBAAgB,EAChB,WAAW,GACoB,EAAE,EAAE;QACnC,IAAI,CAAC,UAAU,EAAE;YACf,OAAM;SACP;QAED,MAAM,IAAI,GAAG;YACX,wBAAwB,EAAE,WAAW;YACrC,wBAAwB,EAAE,gBAAgB;YAC1C,gBAAgB,EAAE,SAAS;YAC3B,eAAe,EAAE,MAAM,EAAE;YACzB,eAAe,EAAE,CAAC,cAAc,CAAC,UAAU,EAAE,cAAc,CAAC,QAAQ,CAAC;YACrE,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACtB,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU;YACtE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACxB,CAAA;QAED,MAAM,OAAO,GAAG,UAAU,EAAE,CAAA;QAE5B,MAAM,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAA;IACpE,CAAC,CAAA,CAAA;IAED,OAAO,EAAE,0BAA0B,EAAE,CAAA;AACvC,CAAC"}
@@ -1,4 +1,4 @@
1
- <!doctype html>
1
+ <!DOCTYPE html>
2
2
  <html lang="en-US">
3
3
  <head>
4
4
  <meta charset="UTF-8" />
@@ -28,50 +28,9 @@
28
28
  </style>
29
29
  </head>
30
30
  <body>
31
- <div id="webchatRoot"></div>
32
31
  <script type="text/javascript">
33
32
  document.addEventListener('DOMContentLoaded', function (event) {
34
- Botonic.render(document.getElementById('webchatRoot'), {
35
- onInit: async app => {
36
- const urlParams = new URLSearchParams(location.search)
37
- const userLocale = urlParams.get('userLocale')
38
- const userCountry = urlParams.get('userCountry')
39
- const systemLocale = urlParams.get('systemLocale')
40
-
41
- // app.setSystemLocale(systemLocale)
42
- // app.setUserLocale(userLocale)
43
- // app.setUserCountry(userCountry)
44
-
45
- const extraLanguage = urlParams.get('extraLanguage')
46
- const extraCountry = urlParams.get('extraCountry')
47
-
48
- console.log('systemLocale', systemLocale)
49
- console.log('userLocale', userLocale)
50
- console.log('userCountry', userCountry)
51
- console.log('extraLanguage', extraLanguage)
52
- console.log('extraCountry', extraCountry)
53
-
54
- app.updateUser({
55
- country: userCountry,
56
- locale: userLocale,
57
- system_locale: systemLocale,
58
- extra_data: {
59
- country: extraCountry,
60
- language: extraLanguage,
61
- },
62
- })
63
- await window.botonicOnInit(app)
64
- },
65
- onOpen: async app => {
66
- await window.botonicOnOpen(app)
67
- },
68
- onClose: async app => {
69
- await window.botonicOnClose(app)
70
- },
71
- onMessage: async (app, message) => {
72
- await window.botonicOnMessage(app, message)
73
- },
74
- })
33
+ Botonic.render()
75
34
  })
76
35
  </script>
77
36
  </body>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@botonic/react",
3
- "version": "0.35.0-alpha.1",
3
+ "version": "0.35.0",
4
4
  "license": "MIT",
5
5
  "description": "Build Chatbots using React",
6
6
  "main": "./lib/cjs",
@@ -20,8 +20,8 @@
20
20
  "lint_core": "../../node_modules/.bin/eslint_d --cache --quiet '.*.js' '*.js' 'src/**/*.js*' --fix"
21
21
  },
22
22
  "dependencies": {
23
- "@botonic/core": "0.35.0-alpha.1",
24
- "axios": "^1.7.9",
23
+ "@botonic/core": "^0.35.0",
24
+ "axios": "^1.9.0",
25
25
  "emoji-picker-react": "^4.12.0",
26
26
  "lodash.merge": "^4.6.2",
27
27
  "markdown-it": "^12.3.2",
@@ -1,12 +1,10 @@
1
1
  import React, { useContext, useEffect, useState } from 'react'
2
- import { v7 as uuidv7 } from 'uuid'
3
2
 
4
3
  import ThumbsDown from '../../assets/thumbs-down.svg'
5
4
  import ThumbsUp from '../../assets/thumbs-up.svg'
6
- import { ActionRequest } from '../../index-types'
7
5
  import { resolveImage } from '../../util'
8
6
  import { WebchatContext } from '../../webchat/context'
9
- import { EventAction, FeedbackOption } from '../../webchat/tracking'
7
+ import { useTracking } from '../../webchat/tracking'
10
8
  import { FeedbackButton, FeedbackMessageContainer } from './styles'
11
9
 
12
10
  interface ButtonsState {
@@ -25,7 +23,8 @@ export const MessageFeedback = ({
25
23
  inferenceId,
26
24
  messageId,
27
25
  }: RatingProps) => {
28
- const { webchatState, updateMessage, trackEvent } = useContext(WebchatContext)
26
+ const { webchatState, updateMessage } = useContext(WebchatContext)
27
+ const { trackKnowledgebaseFeedback } = useTracking()
29
28
 
30
29
  const [className, setClassName] = useState('')
31
30
  const [disabled, setDisabled] = useState<ButtonsState>({
@@ -56,34 +55,18 @@ export const MessageFeedback = ({
56
55
  }, [disabled])
57
56
 
58
57
  const handleClick = async (isUseful: boolean) => {
59
- if (!trackEvent) {
60
- return
61
- }
62
-
63
58
  if (isUseful) {
64
59
  setDisabled({ positive: false, negative: true })
65
60
  } else {
66
61
  setDisabled({ positive: true, negative: false })
67
62
  }
68
63
 
69
- const args = {
70
- knowledgebaseInferenceId: inferenceId,
71
- feedbackBotInteractionId: botInteractionId,
72
- feedbackTargetId: messageId,
73
- feedbackGroupId: uuidv7(),
74
- possibleOptions: [FeedbackOption.ThumbsDown, FeedbackOption.ThumbsUp],
75
- possibleValues: [0, 1],
76
- option: isUseful ? FeedbackOption.ThumbsUp : FeedbackOption.ThumbsDown,
77
- value: isUseful ? 1 : 0,
78
- }
79
-
80
- const request = {
81
- session: {
82
- ...webchatState.session,
83
- },
84
- } as unknown as ActionRequest
85
-
86
- await trackEvent(request, EventAction.FeedbackKnowledgebase, args)
64
+ await trackKnowledgebaseFeedback({
65
+ messageId,
66
+ isUseful,
67
+ botInteractionId,
68
+ inferenceId,
69
+ })
87
70
  }
88
71
 
89
72
  return (
@@ -1,8 +1,67 @@
1
+ import { useContext } from 'react'
2
+ import { v7 as uuidv7 } from 'uuid'
3
+
4
+ import { ActionRequest } from '../index-types'
5
+ import { WebchatContext } from './context'
6
+
1
7
  export enum EventAction {
2
8
  FeedbackKnowledgebase = 'feedback_knowledgebase',
3
9
  }
10
+ interface TrackKnowledgebaseFeedbackArgs {
11
+ messageId: string
12
+ isUseful: boolean
13
+ botInteractionId?: string
14
+ inferenceId?: string
15
+ }
4
16
 
5
17
  export enum FeedbackOption {
6
18
  ThumbsUp = 'thumbsUp',
7
19
  ThumbsDown = 'thumbsDown',
8
20
  }
21
+
22
+ export function useTracking() {
23
+ const { webchatState, trackEvent } = useContext(WebchatContext)
24
+
25
+ const getRequest = () => {
26
+ const request = {
27
+ session: {
28
+ ...webchatState.session,
29
+ },
30
+ getUserCountry: () => webchatState.session.user?.country || '',
31
+ getUserLocale: () => webchatState.session.user?.locale || '',
32
+ getSystemLocale: () => {
33
+ return webchatState.session.user?.system_locale || ''
34
+ },
35
+ } as unknown as ActionRequest
36
+
37
+ return request
38
+ }
39
+
40
+ const trackKnowledgebaseFeedback = async ({
41
+ messageId,
42
+ isUseful,
43
+ botInteractionId,
44
+ inferenceId,
45
+ }: TrackKnowledgebaseFeedbackArgs) => {
46
+ if (!trackEvent) {
47
+ return
48
+ }
49
+
50
+ const args = {
51
+ knowledgebaseInferenceId: inferenceId,
52
+ feedbackBotInteractionId: botInteractionId,
53
+ feedbackTargetId: messageId,
54
+ feedbackGroupId: uuidv7(),
55
+ possibleOptions: [FeedbackOption.ThumbsDown, FeedbackOption.ThumbsUp],
56
+ possibleValues: [0, 1],
57
+ option: isUseful ? FeedbackOption.ThumbsUp : FeedbackOption.ThumbsDown,
58
+ value: isUseful ? 1 : 0,
59
+ }
60
+
61
+ const request = getRequest()
62
+
63
+ await trackEvent(request, EventAction.FeedbackKnowledgebase, args)
64
+ }
65
+
66
+ return { trackKnowledgebaseFeedback }
67
+ }
@@ -1,4 +1,4 @@
1
- <!doctype html>
1
+ <!DOCTYPE html>
2
2
  <html lang="en-US">
3
3
  <head>
4
4
  <meta charset="UTF-8" />
@@ -28,50 +28,9 @@
28
28
  </style>
29
29
  </head>
30
30
  <body>
31
- <div id="webchatRoot"></div>
32
31
  <script type="text/javascript">
33
32
  document.addEventListener('DOMContentLoaded', function (event) {
34
- Botonic.render(document.getElementById('webchatRoot'), {
35
- onInit: async app => {
36
- const urlParams = new URLSearchParams(location.search)
37
- const userLocale = urlParams.get('userLocale')
38
- const userCountry = urlParams.get('userCountry')
39
- const systemLocale = urlParams.get('systemLocale')
40
-
41
- // app.setSystemLocale(systemLocale)
42
- // app.setUserLocale(userLocale)
43
- // app.setUserCountry(userCountry)
44
-
45
- const extraLanguage = urlParams.get('extraLanguage')
46
- const extraCountry = urlParams.get('extraCountry')
47
-
48
- console.log('systemLocale', systemLocale)
49
- console.log('userLocale', userLocale)
50
- console.log('userCountry', userCountry)
51
- console.log('extraLanguage', extraLanguage)
52
- console.log('extraCountry', extraCountry)
53
-
54
- app.updateUser({
55
- country: userCountry,
56
- locale: userLocale,
57
- system_locale: systemLocale,
58
- extra_data: {
59
- country: extraCountry,
60
- language: extraLanguage,
61
- },
62
- })
63
- await window.botonicOnInit(app)
64
- },
65
- onOpen: async app => {
66
- await window.botonicOnOpen(app)
67
- },
68
- onClose: async app => {
69
- await window.botonicOnClose(app)
70
- },
71
- onMessage: async (app, message) => {
72
- await window.botonicOnMessage(app, message)
73
- },
74
- })
33
+ Botonic.render()
75
34
  })
76
35
  </script>
77
36
  </body>