-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathindex.js
183 lines (149 loc) · 6.13 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
/*
* @author Yariv Rosenbach
* @repository https://github.com/yarivr/lp-labs-agent-sdk
* Copyright 2016 LivePerson Inc - MIT license
* https://github.com/yarivr/lp-labs-agent-sdk/LICENSE.md
*/
"use strict";
var _ = require('lodash');
let EventEmitter = require('events');
let util = require('util');
let config = require('./conf/conf.json');
let lpCSDS = require('./lib/lp-csds');
let SocketProtocol = require('./lib/ams/socket-protocol');
let GetUserProfile = require('./lib/ams/v2/GetUserProfile');
let GetClock = require('./lib/ams/v2/GetClock');
let SubscribeExConversations = require('./lib/ams/v2/SubscribeExConversations');
let AcceptRing = require('./lib/ams/v2/AcceptRing');
let PublishEvent = require('./lib/ams/v2/PublishEvent');
let TransferToSkill = require('./lib/ams/v2/TransferToSkill');
let ResolveConversation = require('./lib/ams/v2/ResolveConversation');
let QueryMessages = require('./lib/ams/v2/QueryMessages');
let ComposeEvent = require('./lib/ams/v2/ComposeEvent');
let ActiveEvent = require('./lib/ams/v2/ActiveEvent');
let amsEmit = require('./lib/ams/ams-emit');
let LoginError = require('./lib/errors').LoginError;
let UMSError = require('./lib/errors').UMSError;
class AgentSDK extends EventEmitter { // throws Error, UMSError, LoginError
constructor(brandid, key, secret, lastUpdateTime) {
super();
lpCSDS.getServices(brandid).then(services => {
this.amsUrl = services.asyncMessagingEnt;
this.adminAreaUrl = services.adminAreaUrl;
this.liveEngageUrl = services.liveEngageUrl;
this.brandid = brandid;
this.key = key;
this.secret = secret;
this.lastUpdateTime = lastUpdateTime;
this.userId = undefined;
let createSocket = () => {
this.sp = new SocketProtocol(brandid, key, secret, this.amsUrl, this.adminAreaUrl, this.liveEngageUrl);
this.sp.on('error', err => {
if (err instanceof LoginError) {
this.emit('error', err);
}
else {
let errMsg = err && err.message ? err.message : '';
this.emit('error', new UMSError(this.brandid, errMsg));
}
});
let getUid = () => {
if (this.userId) {
return Promise.resolve(this.userId);
}
else {
return this.sp.send('.ams.userprofile.GetUserProfile', {userId: ""}).then(agentProfile => {
this.userId = agentProfile.userId;
return this.userId;
});
}
};
this.sp.on('ws::connect', () => {
getUid().then(userId => {
let subscribeExReq = new SubscribeExConversations({
brandId: this.brandid,
minLastUpdatedTime: this.lastUpdateTime,
userId: userId
});
this.sp.send(subscribeExReq.getType(), subscribeExReq.getRequest()).catch((err) => {
this.sp.close();
});
/*
Consumer -> Agent
*/
this.sp.on('ams::data', data => { // consumer::ring, consumer::msg, consumer::accept, consumer::seen, consumer::compose, consumer::close
amsEmit(data, this);
});
});
});
};
createSocket();
}, (err) => {
//console.log("Error getting csds data");
this.emit("error", err);
});
}
/*
API's (Agent -> Consumer)
*/
acceptRing(ringId) {
let acceptRingReq = new AcceptRing({brandId: this.brandid, ringId: ringId });
return this.sp.send(acceptRingReq.getType(), acceptRingReq.getRequest());
}
getUserProfile(userId) {
let userProfileReq = new GetUserProfile({ userId: userId });
return this.sp.send(userProfileReq.getType(), userProfileReq.getRequest());
}
verifyConnection() {
let getClock = new GetClock();
return this.sp.send(getClock.getType(), getClock.getRequest());
}
queryMessages(convId, maxQuantity, olderThanSequence, newerThanSequence) {
let queryMessages = new QueryMessages({
"conversationId": convId,
"maxQuantity": maxQuantity,
"olderThanSequence": olderThanSequence,
"newerThanSequence": newerThanSequence
});
return this.sp.send(queryMessages.getType(), queryMessages.getRequest());
}
compose(convId) {
let composeEventReq = new ComposeEvent({convId: convId});
return this.sp.send(composeEventReq.getType(), composeEventReq.getRequest());
}
active(convId) {
let activeEventReq = new ActiveEvent({convId: convId});
return this.sp.send(activeEventReq.getType(), activeEventReq.getRequest());
}
sendText(convId, message) { // text, hosted file, external-link
let publishEventReq = new PublishEvent({convId: convId, message: message});
return this.sp.send(publishEventReq.getType(), publishEventReq.getRequest());
}
resolveConversation(convId) {
let resolveConvReq = new ResolveConversation({conversationId: convId});
return this.sp.send(resolveConvReq.getType(), resolveConvReq.getRequest());
}
transferToSkill(convId, skillId) {
let transferToSkillReq = new TransferToSkill({conversationId: convId, skillId: skillId, userId: this.userId });
return this.sp.send(transferToSkillReq.getType(), transferToSkillReq.getRequest());
}
// TBC - START
sendFile() {
}
sendLinkFile() {
}
resumeConversation() {
}
msgAcceptStatus() {
}
backToQueue() {
}
setAgentState() {
}
generateURLForUploadFile() {
}
generateURLForDownloadFile() {
}
// TBC - END
}
module.exports = AgentSDK;