@botonic/plugin-hubtype-analytics 0.22.0-alpha.2 → 0.22.0-alpha.4

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.
Files changed (87) hide show
  1. package/lib/cjs/event-models/ht-event-agent-rating.d.ts +6 -0
  2. package/lib/cjs/event-models/ht-event-agent-rating.js +12 -0
  3. package/lib/cjs/event-models/ht-event-agent-rating.js.map +1 -0
  4. package/lib/cjs/event-models/ht-event-bot-ai-model.d.ts +8 -0
  5. package/lib/cjs/event-models/ht-event-bot-ai-model.js +14 -0
  6. package/lib/cjs/event-models/ht-event-bot-ai-model.js.map +1 -0
  7. package/lib/cjs/event-models/ht-event-bot-faq.d.ts +6 -0
  8. package/lib/cjs/event-models/ht-event-bot-faq.js +12 -0
  9. package/lib/cjs/event-models/ht-event-bot-faq.js.map +1 -0
  10. package/lib/cjs/event-models/ht-event-bot-keyword-model.d.ts +6 -0
  11. package/lib/cjs/event-models/ht-event-bot-keyword-model.js +12 -0
  12. package/lib/cjs/event-models/ht-event-bot-keyword-model.js.map +1 -0
  13. package/lib/cjs/event-models/ht-event-bot-rating.d.ts +8 -0
  14. package/lib/cjs/event-models/ht-event-bot-rating.js +14 -0
  15. package/lib/cjs/event-models/ht-event-bot-rating.js.map +1 -0
  16. package/lib/cjs/event-models/ht-event-channel-rating.d.ts +6 -0
  17. package/lib/cjs/event-models/ht-event-channel-rating.js +12 -0
  18. package/lib/cjs/event-models/ht-event-channel-rating.js.map +1 -0
  19. package/lib/cjs/event-models/ht-event-faq-useful.d.ts +7 -0
  20. package/lib/cjs/event-models/ht-event-faq-useful.js +13 -0
  21. package/lib/cjs/event-models/ht-event-faq-useful.js.map +1 -0
  22. package/lib/cjs/event-models/ht-event-handoff-fail.d.ts +8 -0
  23. package/lib/cjs/event-models/ht-event-handoff-fail.js +14 -0
  24. package/lib/cjs/event-models/ht-event-handoff-fail.js.map +1 -0
  25. package/lib/cjs/event-models/ht-event-handoff-success.d.ts +8 -0
  26. package/lib/cjs/event-models/ht-event-handoff-success.js +14 -0
  27. package/lib/cjs/event-models/ht-event-handoff-success.js.map +1 -0
  28. package/lib/cjs/event-models/ht-event.d.ts +8 -0
  29. package/lib/cjs/event-models/ht-event.js +59 -0
  30. package/lib/cjs/event-models/ht-event.js.map +1 -0
  31. package/lib/cjs/index.d.ts +16 -0
  32. package/lib/cjs/index.js +42 -0
  33. package/lib/cjs/index.js.map +1 -0
  34. package/lib/cjs/types.d.ts +117 -0
  35. package/lib/cjs/types.js +20 -0
  36. package/lib/cjs/types.js.map +1 -0
  37. package/lib/esm/event-models/ht-event-agent-rating.d.ts +6 -0
  38. package/lib/esm/event-models/ht-event-agent-rating.js +8 -0
  39. package/lib/esm/event-models/ht-event-agent-rating.js.map +1 -0
  40. package/lib/esm/event-models/ht-event-bot-ai-model.d.ts +8 -0
  41. package/lib/esm/event-models/ht-event-bot-ai-model.js +10 -0
  42. package/lib/esm/event-models/ht-event-bot-ai-model.js.map +1 -0
  43. package/lib/esm/event-models/ht-event-bot-faq.d.ts +6 -0
  44. package/lib/esm/event-models/ht-event-bot-faq.js +8 -0
  45. package/lib/esm/event-models/ht-event-bot-faq.js.map +1 -0
  46. package/lib/esm/event-models/ht-event-bot-keyword-model.d.ts +6 -0
  47. package/lib/esm/event-models/ht-event-bot-keyword-model.js +8 -0
  48. package/lib/esm/event-models/ht-event-bot-keyword-model.js.map +1 -0
  49. package/lib/esm/event-models/ht-event-bot-rating.d.ts +8 -0
  50. package/lib/esm/event-models/ht-event-bot-rating.js +10 -0
  51. package/lib/esm/event-models/ht-event-bot-rating.js.map +1 -0
  52. package/lib/esm/event-models/ht-event-channel-rating.d.ts +6 -0
  53. package/lib/esm/event-models/ht-event-channel-rating.js +8 -0
  54. package/lib/esm/event-models/ht-event-channel-rating.js.map +1 -0
  55. package/lib/esm/event-models/ht-event-faq-useful.d.ts +7 -0
  56. package/lib/esm/event-models/ht-event-faq-useful.js +9 -0
  57. package/lib/esm/event-models/ht-event-faq-useful.js.map +1 -0
  58. package/lib/esm/event-models/ht-event-handoff-fail.d.ts +8 -0
  59. package/lib/esm/event-models/ht-event-handoff-fail.js +10 -0
  60. package/lib/esm/event-models/ht-event-handoff-fail.js.map +1 -0
  61. package/lib/esm/event-models/ht-event-handoff-success.d.ts +8 -0
  62. package/lib/esm/event-models/ht-event-handoff-success.js +10 -0
  63. package/lib/esm/event-models/ht-event-handoff-success.js.map +1 -0
  64. package/lib/esm/event-models/ht-event.d.ts +8 -0
  65. package/lib/esm/event-models/ht-event.js +55 -0
  66. package/lib/esm/event-models/ht-event.js.map +1 -0
  67. package/lib/esm/index.d.ts +16 -0
  68. package/lib/esm/index.js +38 -0
  69. package/lib/esm/index.js.map +1 -0
  70. package/lib/esm/types.d.ts +117 -0
  71. package/lib/esm/types.js +17 -0
  72. package/lib/esm/types.js.map +1 -0
  73. package/package.json +22 -17
  74. package/src/event-models/ht-event-agent-rating.ts +11 -0
  75. package/src/event-models/ht-event-bot-ai-model.ts +15 -0
  76. package/src/event-models/ht-event-bot-faq.ts +11 -0
  77. package/src/event-models/ht-event-bot-keyword-model.ts +12 -0
  78. package/src/event-models/ht-event-bot-rating.ts +15 -0
  79. package/src/event-models/ht-event-channel-rating.ts +11 -0
  80. package/src/event-models/ht-event-faq-useful.ts +13 -0
  81. package/src/event-models/ht-event-handoff-fail.ts +15 -0
  82. package/src/event-models/ht-event-handoff-success.ts +15 -0
  83. package/src/event-models/ht-event.ts +61 -0
  84. package/src/index.ts +30 -18
  85. package/src/types.ts +76 -49
  86. package/tsconfig.esm.json +0 -11
  87. package/tsconfig.json +0 -13
package/src/index.ts CHANGED
@@ -1,20 +1,30 @@
1
1
  import { BotRequest, Plugin } from '@botonic/core'
2
2
  import axios from 'axios'
3
3
 
4
- import { HtEvent } from './types'
4
+ import { HtEvent } from './event-models/ht-event'
5
+ import { HtEventProps, RequestData } from './types'
5
6
 
6
7
  export interface HubtypeAnalyticsOptions {
7
- baseUrl: string
8
+ getLaguange?: (request: BotRequest) => string
9
+ getCountry?: (request: BotRequest) => string
10
+ }
11
+
12
+ function getDefaultLanguage(request: BotRequest): string {
13
+ return request.session.user.extra_data.language
14
+ }
15
+
16
+ function getDefaultCountry(request: BotRequest): string {
17
+ return request.session.user.extra_data.country
8
18
  }
9
19
 
10
20
  export default class BotonicPluginHubtypeAnalytics implements Plugin {
11
21
  baseUrl: string
22
+ getLaguange: (request: BotRequest) => string
23
+ getCountry: (request: BotRequest) => string
12
24
  constructor(options: HubtypeAnalyticsOptions) {
13
- this.baseUrl = options.baseUrl
14
- }
15
-
16
- pre(): void {
17
- return
25
+ this.baseUrl = process.env.HUBTYPE_API_URL || 'https://api.hubtype.com'
26
+ this.getLaguange = options.getLaguange || getDefaultLanguage
27
+ this.getCountry = options.getCountry || getDefaultCountry
18
28
  }
19
29
 
20
30
  post(): void {
@@ -25,19 +35,21 @@ export default class BotonicPluginHubtypeAnalytics implements Plugin {
25
35
  return `${this.baseUrl}/external/v1/conversational_apps/${request.session.bot.id}/bot_event/`
26
36
  }
27
37
 
28
- async trackEvent(request: BotRequest, event: HtEvent) {
29
- const url = this.getUrl(request)
30
- const data = {
31
- chat: request.session.user.id,
32
- event_type: event.event_type,
33
- event_data: {
34
- ...event.event_data,
35
- event_datetime: new Date().toISOString(),
36
- channel: request.session.user.provider,
37
- },
38
+ getRequestData(request: BotRequest): RequestData {
39
+ return {
40
+ language: this.getLaguange(request),
41
+ country: this.getCountry(request),
42
+ provider: request.session.user.provider,
43
+ userId: request.session.user.id,
38
44
  }
45
+ }
46
+
47
+ async trackEvent(request: BotRequest, htEventProps: HtEventProps) {
48
+ const url = this.getUrl(request)
49
+ const requestData = this.getRequestData(request)
50
+ const event = HtEvent.create(requestData, htEventProps)
39
51
  const headers = { Authorization: `Bearer ${request.session._access_token}` }
40
52
  const config = { headers }
41
- return axios.post(url, data, config)
53
+ return axios.post(url, event, config)
42
54
  }
43
55
  }
package/src/types.ts CHANGED
@@ -1,3 +1,11 @@
1
+ import { PROVIDER } from '@botonic/core'
2
+
3
+ export interface Event {
4
+ chat: string
5
+ event_type: EventName
6
+ event_data: BaseEventData
7
+ }
8
+
1
9
  export enum EventName {
2
10
  botAgentRating = 'bot_agent_rating',
3
11
  botChannelRating = 'bot_channel_rating',
@@ -13,101 +21,113 @@ export enum EventName {
13
21
  handoffSuccess = 'handoff_success',
14
22
  handoffFail = 'handoff_fail',
15
23
  }
16
-
17
- interface EventData {
18
- enduser_country?: string
24
+ export interface BaseEventData {
25
+ channel: string
26
+ event_datetime: string
19
27
  enduser_language: string
28
+ enduser_country?: string
20
29
  format_version?: number
21
30
  bot_version?: string
22
31
  flow_version?: string
23
32
  }
24
33
 
25
- export interface EventAgentRating {
26
- event_type: EventName.botAgentRating
27
- event_data: EventData & { rating: number }
34
+ export interface HtBaseEventProps {
35
+ event_type: EventName
28
36
  }
29
37
 
30
- export interface EventChannelRating {
38
+ export interface EventAgentRating extends HtBaseEventProps {
39
+ event_type: EventName.botAgentRating
40
+ event_data: EventDataRating
41
+ }
42
+ export interface EventChannelRating extends HtBaseEventProps {
31
43
  event_type: EventName.botChannelRating
32
- event_data: EventData & { rating: number }
44
+ event_data: EventDataRating
45
+ }
46
+
47
+ export interface EventDataRating {
48
+ rating: number
33
49
  }
34
50
 
35
- export interface EventFaqUseful {
51
+ export interface EventFaqUseful extends HtBaseEventProps {
36
52
  event_type: EventName.botFaqUseful
37
- event_data: EventData & { faq_name: string; useful: boolean }
53
+ event_data: EventDataUseful
38
54
  }
39
55
 
40
- export interface EventBotRating {
56
+ export interface EventDataUseful {
57
+ faq_name: string
58
+ useful: boolean
59
+ }
60
+ export interface EventBotRating extends HtBaseEventProps {
41
61
  event_type: EventName.botRating
42
- event_data: EventData & {
43
- faq_name: string
44
- useful: boolean
45
- rating: number
46
- free_comment: string
47
- selected_options: string[]
48
- }
62
+ event_data: EventDataBotRating
63
+ }
64
+
65
+ interface EventDataBotRating {
66
+ rating: number
67
+ free_comment?: string
68
+ selected_options?: string[]
49
69
  }
50
70
 
51
- export interface EventBotFaq {
71
+ export interface EventBotFaq extends HtBaseEventProps {
52
72
  event_type: EventName.botFaq
53
- event_data: EventData & { faq_name: string }
73
+ event_data: EventDataBotFaq
54
74
  }
55
75
 
56
- export interface EventBotStart {
76
+ interface EventDataBotFaq {
77
+ faq_name: string
78
+ }
79
+ export interface EventBotStart extends HtBaseEventProps {
57
80
  event_type: EventName.botStart
58
- event_data: EventData
59
81
  }
60
82
 
61
83
  export interface EventBotOpen {
62
84
  event_type: EventName.botOpen
63
- event_data: EventData
64
85
  }
65
86
 
66
87
  export interface EventBotAiModel {
67
88
  event_type: EventName.botAiModel
68
- event_data: EventData & {
69
- intent: string
70
- confidence: number
71
- confidence_successful: boolean
72
- }
89
+ event_data: EventDataBotAiModel
90
+ }
91
+
92
+ interface EventDataBotAiModel {
93
+ intent: string
94
+ confidence: number
95
+ confidence_successful: boolean
73
96
  }
74
97
 
75
- export interface EventBotKeywordModel {
98
+ export interface EventBotKeywordModel extends HtBaseEventProps {
76
99
  event_type: EventName.botKeywordsModel
77
- event_data: EventData & {
78
- confidence_successful: boolean
79
- }
100
+ event_data: EventDataBotKeywordModel
80
101
  }
81
102
 
82
- export interface EventFallback {
103
+ interface EventDataBotKeywordModel {
104
+ confidence_successful: boolean
105
+ }
106
+ export interface EventFallback extends HtBaseEventProps {
83
107
  event_type: EventName.fallback
84
- event_data: EventData
85
108
  }
86
109
 
87
- export interface EventHandoffOption {
110
+ export interface EventHandoffOption extends HtBaseEventProps {
88
111
  event_type: EventName.handoffOption
89
- event_data: EventData
90
112
  }
91
113
 
92
- export interface EventHandoffSuccess {
114
+ export interface EventHandoffSuccess extends HtBaseEventProps {
93
115
  event_type: EventName.handoffSuccess
94
- event_data: EventData & {
95
- queue_open: boolean
96
- available_agents: boolean
97
- threshold_reached: boolean
98
- }
116
+ event_data: EventDataHandoff
99
117
  }
100
118
 
101
- export interface EventHandoffFail {
119
+ export interface EventHandoffFail extends HtBaseEventProps {
102
120
  event_type: EventName.handoffFail
103
- event_data: EventData & {
104
- queue_open: boolean
105
- available_agents: boolean
106
- threshold_reached: boolean
107
- }
121
+ event_data: EventDataHandoff
122
+ }
123
+
124
+ interface EventDataHandoff {
125
+ queue_open: boolean
126
+ available_agents: boolean
127
+ threshold_reached: boolean
108
128
  }
109
129
 
110
- export type HtEvent =
130
+ export type HtEventProps =
111
131
  | EventAgentRating
112
132
  | EventChannelRating
113
133
  | EventFaqUseful
@@ -121,3 +141,10 @@ export type HtEvent =
121
141
  | EventHandoffOption
122
142
  | EventHandoffSuccess
123
143
  | EventHandoffFail
144
+
145
+ export interface RequestData {
146
+ language: string
147
+ country: string
148
+ provider: PROVIDER
149
+ userId: string
150
+ }
package/tsconfig.esm.json DELETED
@@ -1,11 +0,0 @@
1
- {
2
- "extends": "./tsconfig.json",
3
- "include": ["src/"],
4
- "compilerOptions": {
5
- "baseUrl": ".",
6
- "outDir": "./lib/esm",
7
- "target": "ES2017",
8
- "module": "ES2020",
9
- "moduleResolution": "node"
10
- }
11
- }
package/tsconfig.json DELETED
@@ -1,13 +0,0 @@
1
- {
2
- "extends": "../../tsconfig.base.json",
3
- "include": ["src/"],
4
- "compilerOptions": {
5
- "jsx": "react",
6
- "experimentalDecorators": true,
7
- "baseUrl": ".",
8
- "outDir": "./lib/cjs",
9
- "esModuleInterop": true,
10
- "lib": ["es2015"],
11
- "skipLibCheck": true
12
- }
13
- }