@unboundcx/sdk 4.13.30 → 4.13.31
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/index.js +3 -0
- package/package.json +1 -1
- package/services/messageTemplates.js +241 -0
- package/services/webchat/VisitorService.js +42 -2
package/index.js
CHANGED
|
@@ -22,6 +22,7 @@ import { PortalsService } from './services/portals.js';
|
|
|
22
22
|
import { DealRegistrationsService } from './services/dealRegistrations.js';
|
|
23
23
|
import { SipEndpointsService } from './services/sipEndpoints.js';
|
|
24
24
|
import { WebchatService } from './services/webchat.js';
|
|
25
|
+
import { MessageTemplatesService } from './services/messageTemplates.js';
|
|
25
26
|
import { ExternalOAuthService } from './services/externalOAuth.js';
|
|
26
27
|
import { GoogleCalendarService } from './services/googleCalendar.js';
|
|
27
28
|
import { DriveService } from './services/drive.js';
|
|
@@ -109,6 +110,7 @@ class UnboundSDK extends BaseSDK {
|
|
|
109
110
|
this.dealRegistrations = new DealRegistrationsService(this);
|
|
110
111
|
this.sipEndpoints = new SipEndpointsService(this);
|
|
111
112
|
this.webchat = new WebchatService(this);
|
|
113
|
+
this.messageTemplates = new MessageTemplatesService(this);
|
|
112
114
|
this.externalOAuth = new ExternalOAuthService(this);
|
|
113
115
|
this.googleCalendar = new GoogleCalendarService(this);
|
|
114
116
|
this.drive = new DriveService(this);
|
|
@@ -303,6 +305,7 @@ export { PortalsService } from './services/portals.js';
|
|
|
303
305
|
export { DealRegistrationsService } from './services/dealRegistrations.js';
|
|
304
306
|
export { SipEndpointsService } from './services/sipEndpoints.js';
|
|
305
307
|
export { WebchatService, WebchatWidgetsService } from './services/webchat.js';
|
|
308
|
+
export { MessageTemplatesService } from './services/messageTemplates.js';
|
|
306
309
|
export { WebchatVisitorService } from './services/webchat/VisitorService.js';
|
|
307
310
|
export { ExternalOAuthService } from './services/externalOAuth.js';
|
|
308
311
|
export { GoogleCalendarService } from './services/googleCalendar.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unboundcx/sdk",
|
|
3
|
-
"version": "4.13.
|
|
3
|
+
"version": "4.13.31",
|
|
4
4
|
"description": "Official JavaScript SDK for the Unbound API - A comprehensive toolkit for integrating with Unbound's communication, AI, and data management services",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import { internalRequest } from '../base.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Account-level stored message template groups. Distinct from SMS
|
|
5
|
+
* `/messaging/templates/` (messagesSmsMmsTemplates) and email campaign
|
|
6
|
+
* templates. Widget enablement is `sdk.webchat.widgets.update(widgetId,
|
|
7
|
+
* { slashConfig })` — two-arg; no extra widget method here.
|
|
8
|
+
*/
|
|
9
|
+
export class MessageTemplateGroupsService {
|
|
10
|
+
constructor(sdk) {
|
|
11
|
+
this.sdk = sdk;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* List stored message template groups (ACL-filtered).
|
|
16
|
+
* @returns {Promise<{results: Object[]}>}
|
|
17
|
+
*/
|
|
18
|
+
async list() {
|
|
19
|
+
return internalRequest(this.sdk, '/messageTemplates/groups', 'GET');
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Get a stored message template group by id.
|
|
24
|
+
* @param {string} id
|
|
25
|
+
* @returns {Promise<Object>}
|
|
26
|
+
*/
|
|
27
|
+
async get(id) {
|
|
28
|
+
this.sdk.validateParams({ id }, { id: { type: 'string', required: true } });
|
|
29
|
+
return internalRequest(this.sdk, `/messageTemplates/groups/${id}`, 'GET');
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Create a stored message template group.
|
|
34
|
+
* @param {Object} options
|
|
35
|
+
* @param {string} options.name
|
|
36
|
+
* @param {'active'|'archived'} [options.status]
|
|
37
|
+
* @param {number} [options.sortOrder]
|
|
38
|
+
* @param {string|null} [options.recordTypeId]
|
|
39
|
+
* @returns {Promise<Object>}
|
|
40
|
+
*/
|
|
41
|
+
async create(options) {
|
|
42
|
+
this.sdk.validateParams(
|
|
43
|
+
{ name: options?.name },
|
|
44
|
+
{ name: { type: 'string', required: true } },
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
return internalRequest(this.sdk, '/messageTemplates/groups', 'POST', {
|
|
48
|
+
body: { ...options },
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Update a stored message template group. Changing recordTypeId
|
|
54
|
+
* cascades to child templates on the API.
|
|
55
|
+
* @param {string} id
|
|
56
|
+
* @param {Object} options
|
|
57
|
+
* @returns {Promise<Object>}
|
|
58
|
+
*/
|
|
59
|
+
async update(id, options) {
|
|
60
|
+
this.sdk.validateParams({ id }, { id: { type: 'string', required: true } });
|
|
61
|
+
|
|
62
|
+
return internalRequest(this.sdk, `/messageTemplates/groups/${id}`, 'PUT', {
|
|
63
|
+
body: { ...options },
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Soft-delete a group and cascade-soft-delete its templates.
|
|
69
|
+
* @param {string} id
|
|
70
|
+
* @returns {Promise<{id: string, deleted: boolean}>}
|
|
71
|
+
*/
|
|
72
|
+
async delete(id) {
|
|
73
|
+
this.sdk.validateParams({ id }, { id: { type: 'string', required: true } });
|
|
74
|
+
return internalRequest(
|
|
75
|
+
this.sdk,
|
|
76
|
+
`/messageTemplates/groups/${id}`,
|
|
77
|
+
'DELETE',
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Stored message templates (composer slash replies). Bodies are included
|
|
84
|
+
* on CRUD; the slash catalog omits them — use expand() to interpolate.
|
|
85
|
+
*/
|
|
86
|
+
export class MessageTemplatesCrudService {
|
|
87
|
+
constructor(sdk) {
|
|
88
|
+
this.sdk = sdk;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* List stored message templates (ACL-filtered).
|
|
93
|
+
* @param {Object} [options]
|
|
94
|
+
* @param {string} [options.groupId]
|
|
95
|
+
* @returns {Promise<{results: Object[]}>}
|
|
96
|
+
*/
|
|
97
|
+
async list(options = {}) {
|
|
98
|
+
const { groupId } = options;
|
|
99
|
+
return internalRequest(this.sdk, '/messageTemplates/templates', 'GET', {
|
|
100
|
+
query: { groupId },
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Get a stored message template by id (includes body).
|
|
106
|
+
* @param {string} id
|
|
107
|
+
* @returns {Promise<Object>}
|
|
108
|
+
*/
|
|
109
|
+
async get(id) {
|
|
110
|
+
this.sdk.validateParams({ id }, { id: { type: 'string', required: true } });
|
|
111
|
+
return internalRequest(
|
|
112
|
+
this.sdk,
|
|
113
|
+
`/messageTemplates/templates/${id}`,
|
|
114
|
+
'GET',
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Create a stored message template. slug must be unique among
|
|
120
|
+
* non-deleted templates account-wide.
|
|
121
|
+
* @param {Object} options
|
|
122
|
+
* @param {string} options.groupId
|
|
123
|
+
* @param {string} options.name
|
|
124
|
+
* @param {string} options.slug
|
|
125
|
+
* @param {string} options.body
|
|
126
|
+
* @param {'draft'|'active'} [options.status]
|
|
127
|
+
* @param {number} [options.sortOrder]
|
|
128
|
+
* @returns {Promise<Object>}
|
|
129
|
+
*/
|
|
130
|
+
async create(options) {
|
|
131
|
+
this.sdk.validateParams(
|
|
132
|
+
{
|
|
133
|
+
groupId: options?.groupId,
|
|
134
|
+
name: options?.name,
|
|
135
|
+
slug: options?.slug,
|
|
136
|
+
body: options?.body,
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
groupId: { type: 'string', required: true },
|
|
140
|
+
name: { type: 'string', required: true },
|
|
141
|
+
slug: { type: 'string', required: true },
|
|
142
|
+
body: { type: 'string', required: true },
|
|
143
|
+
},
|
|
144
|
+
);
|
|
145
|
+
|
|
146
|
+
return internalRequest(this.sdk, '/messageTemplates/templates', 'POST', {
|
|
147
|
+
body: { ...options },
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Update a stored message template.
|
|
153
|
+
* @param {string} id
|
|
154
|
+
* @param {Object} options
|
|
155
|
+
* @returns {Promise<Object>}
|
|
156
|
+
*/
|
|
157
|
+
async update(id, options) {
|
|
158
|
+
this.sdk.validateParams({ id }, { id: { type: 'string', required: true } });
|
|
159
|
+
|
|
160
|
+
return internalRequest(
|
|
161
|
+
this.sdk,
|
|
162
|
+
`/messageTemplates/templates/${id}`,
|
|
163
|
+
'PUT',
|
|
164
|
+
{ body: { ...options } },
|
|
165
|
+
);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Soft-delete a stored message template.
|
|
170
|
+
* @param {string} id
|
|
171
|
+
* @returns {Promise<{id: string, deleted: boolean}>}
|
|
172
|
+
*/
|
|
173
|
+
async delete(id) {
|
|
174
|
+
this.sdk.validateParams({ id }, { id: { type: 'string', required: true } });
|
|
175
|
+
return internalRequest(
|
|
176
|
+
this.sdk,
|
|
177
|
+
`/messageTemplates/templates/${id}`,
|
|
178
|
+
'DELETE',
|
|
179
|
+
);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
export class MessageTemplatesService {
|
|
184
|
+
constructor(sdk) {
|
|
185
|
+
this.sdk = sdk;
|
|
186
|
+
this.groups = new MessageTemplateGroupsService(sdk);
|
|
187
|
+
this.templates = new MessageTemplatesCrudService(sdk);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Agent slash palette for a surface. Catalog rows omit body.
|
|
192
|
+
* Webchat requires engagementSessionId and widget match.
|
|
193
|
+
* @param {Object} options
|
|
194
|
+
* @param {'webchat'|'sms'|'email'|'whatsapp'} options.channel
|
|
195
|
+
* @param {string} options.configId
|
|
196
|
+
* @param {string} options.engagementSessionId
|
|
197
|
+
* @returns {Promise<{commands: Object[], templates: Object[]}>}
|
|
198
|
+
*/
|
|
199
|
+
async slashCatalog({ channel, configId, engagementSessionId }) {
|
|
200
|
+
this.sdk.validateParams(
|
|
201
|
+
{ channel, configId, engagementSessionId },
|
|
202
|
+
{
|
|
203
|
+
channel: { type: 'string', required: true },
|
|
204
|
+
configId: { type: 'string', required: true },
|
|
205
|
+
engagementSessionId: { type: 'string', required: true },
|
|
206
|
+
},
|
|
207
|
+
);
|
|
208
|
+
|
|
209
|
+
return internalRequest(this.sdk, '/messageTemplates/slash-catalog', 'POST', {
|
|
210
|
+
body: { channel, configId, engagementSessionId },
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* Interpolate a catalog-visible template for a surface/session.
|
|
216
|
+
* @param {Object} options
|
|
217
|
+
* @param {'webchat'|'sms'|'email'|'whatsapp'} options.channel
|
|
218
|
+
* @param {string} options.configId
|
|
219
|
+
* @param {string} options.templateId
|
|
220
|
+
* @param {string} options.engagementSessionId
|
|
221
|
+
* @returns {Promise<{body: string}>}
|
|
222
|
+
*/
|
|
223
|
+
async expand({ channel, configId, templateId, engagementSessionId }) {
|
|
224
|
+
this.sdk.validateParams(
|
|
225
|
+
{ channel, configId, templateId, engagementSessionId },
|
|
226
|
+
{
|
|
227
|
+
channel: { type: 'string', required: true },
|
|
228
|
+
configId: { type: 'string', required: true },
|
|
229
|
+
templateId: { type: 'string', required: true },
|
|
230
|
+
engagementSessionId: { type: 'string', required: true },
|
|
231
|
+
},
|
|
232
|
+
);
|
|
233
|
+
|
|
234
|
+
return internalRequest(
|
|
235
|
+
this.sdk,
|
|
236
|
+
`/messageTemplates/templates/${templateId}/expand`,
|
|
237
|
+
'POST',
|
|
238
|
+
{ body: { channel, configId, engagementSessionId } },
|
|
239
|
+
);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
@@ -37,7 +37,14 @@ class WebchatVisitorSessionService {
|
|
|
37
37
|
* @param {string} [params.pageUrl]
|
|
38
38
|
* @returns {Promise<{engagementSessionId:string, token:string, resumeToken:string, status:'created'}>}
|
|
39
39
|
*/
|
|
40
|
-
async create({
|
|
40
|
+
async create({
|
|
41
|
+
widgetId,
|
|
42
|
+
embedGrant,
|
|
43
|
+
visitorData,
|
|
44
|
+
pageUrl,
|
|
45
|
+
trackingId,
|
|
46
|
+
initialMessage,
|
|
47
|
+
} = {}) {
|
|
41
48
|
this.sdk.validateParams(
|
|
42
49
|
{ widgetId, embedGrant },
|
|
43
50
|
{
|
|
@@ -49,7 +56,40 @@ class WebchatVisitorSessionService {
|
|
|
49
56
|
this.sdk,
|
|
50
57
|
`/webchat/${widgetId}/session`,
|
|
51
58
|
'POST',
|
|
52
|
-
{
|
|
59
|
+
{
|
|
60
|
+
body: {
|
|
61
|
+
embedGrant,
|
|
62
|
+
visitorData,
|
|
63
|
+
pageUrl,
|
|
64
|
+
trackingId,
|
|
65
|
+
initialMessage,
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
true,
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Prefill the pre-chat form from a marketing `_tid` cookie.
|
|
74
|
+
* @param {Object} params
|
|
75
|
+
* @param {string} params.widgetId
|
|
76
|
+
* @param {string} params.embedGrant
|
|
77
|
+
* @param {string} [params.trackingId]
|
|
78
|
+
* @returns {Promise<{values: Object}>}
|
|
79
|
+
*/
|
|
80
|
+
async profile({ widgetId, embedGrant, trackingId } = {}) {
|
|
81
|
+
this.sdk.validateParams(
|
|
82
|
+
{ widgetId, embedGrant },
|
|
83
|
+
{
|
|
84
|
+
widgetId: { type: 'string', required: true },
|
|
85
|
+
embedGrant: { type: 'string', required: true },
|
|
86
|
+
},
|
|
87
|
+
);
|
|
88
|
+
return internalRequest(
|
|
89
|
+
this.sdk,
|
|
90
|
+
`/webchat/${widgetId}/visitor-profile`,
|
|
91
|
+
'POST',
|
|
92
|
+
{ body: { embedGrant, trackingId } },
|
|
53
93
|
true,
|
|
54
94
|
);
|
|
55
95
|
}
|