1 | ;
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | var objectMapper = require("object-mapper");
|
4 | var MessageProcessor = /** @class */ (function () {
|
5 | function MessageProcessor(botId, platform) {
|
6 | this.botId = botId;
|
7 | this.platform = platform;
|
8 | }
|
9 | MessageProcessor.prototype.convert = function (body) {
|
10 | var _this = this;
|
11 | var platforms = [
|
12 | "telegram",
|
13 | "twilio",
|
14 | "wechat",
|
15 | "sendbird",
|
16 | "slack",
|
17 | "facebook",
|
18 | "viber",
|
19 | "kik",
|
20 | "bot-framework"
|
21 | ];
|
22 | if (platforms.indexOf(this.platform) >= 0) {
|
23 | var message = {
|
24 | rawBody: body,
|
25 | timestamp: new Date().getTime(),
|
26 | event: {}
|
27 | };
|
28 | var metadata = {
|
29 | "bot-framework": {
|
30 | "conversation.id": "sender",
|
31 | text: "text"
|
32 | },
|
33 | facebook: {
|
34 | "sender.id": "sender",
|
35 | "message.text": "text",
|
36 | "messsage.nlp": "nlp"
|
37 | },
|
38 | telegram: {
|
39 | "message.from.id": "sender",
|
40 | "message.text": "text"
|
41 | },
|
42 | twilio: {
|
43 | Body: "text",
|
44 | From: "sender"
|
45 | },
|
46 | wechat: {
|
47 | FromUserName: "sender",
|
48 | Content: "text"
|
49 | },
|
50 | sendbird: {
|
51 | "sender.user_id": "sender",
|
52 | "message.text": "text"
|
53 | },
|
54 | slack: {
|
55 | "event.user": "sender",
|
56 | "event.text": "text"
|
57 | },
|
58 | viber: {
|
59 | "sender.id": "sender",
|
60 | "message.text": "text",
|
61 | event: "event.name"
|
62 | },
|
63 | kik: {
|
64 | from: "sender",
|
65 | body: "text"
|
66 | }
|
67 | };
|
68 | var result = objectMapper(body, metadata[this.platform]);
|
69 | message.text = result.text;
|
70 | message.sender = result.sender;
|
71 | var normalizePayload = function (payload) {
|
72 | var regExp = new RegExp(_this.botId + "-", "ig");
|
73 | // text
|
74 | if (payload.match(regExp)) {
|
75 | return payload.replace(regExp, "");
|
76 | }
|
77 | return payload;
|
78 | };
|
79 | switch (this.platform) {
|
80 | case "bot-framework": {
|
81 | if (body.type === "conversationUpdate" ||
|
82 | (body.type === "contactRelationUpdate" && body.action === "add")) {
|
83 | message.event = {
|
84 | name: "start"
|
85 | };
|
86 | delete message["text"];
|
87 | }
|
88 | else {
|
89 | switch (body.channelId) {
|
90 | case "facebook": {
|
91 | if (body.channelData && body.channelData.postback) {
|
92 | message.event = {
|
93 | name: normalizePayload(body.channelData.postback.payload)
|
94 | };
|
95 | delete message["text"];
|
96 | }
|
97 | break;
|
98 | }
|
99 | default: {
|
100 | var regExp = new RegExp(this.botId + "-", "ig");
|
101 | // text
|
102 | if (message.text && message.text.match(regExp)) {
|
103 | message.event = {
|
104 | name: message.text.replace(regExp, "")
|
105 | };
|
106 | delete message["text"];
|
107 | }
|
108 | }
|
109 | }
|
110 | }
|
111 | break;
|
112 | }
|
113 | case "facebook": {
|
114 | if (body.referral) {
|
115 | message.event = {
|
116 | name: body.referral.ref || 'start',
|
117 | };
|
118 | }
|
119 | else if (body.postback) {
|
120 | message.event = {
|
121 | name: body.postback.payload,
|
122 | };
|
123 | }
|
124 | if (body.message && body.message.attachments) {
|
125 | message.attachments = body.message.attachments;
|
126 | switch (message.attachments[0].type) {
|
127 | case "location": {
|
128 | if (message.attachments[0].payload) {
|
129 | var location_1 = message.attachments[0].payload.coordinates;
|
130 | message.location = {
|
131 | lat: location_1.lat,
|
132 | long: location_1.long
|
133 | };
|
134 | // set it as event.
|
135 | message.event = {
|
136 | name: message.attachments[0].type
|
137 | };
|
138 | }
|
139 | break;
|
140 | }
|
141 | default: {
|
142 | message.event = {
|
143 | name: "default"
|
144 | };
|
145 | }
|
146 | }
|
147 | }
|
148 | else if (body.message && body.message.quick_reply) {
|
149 | var quick_reply = body.message.quick_reply;
|
150 | message.event = {
|
151 | name: quick_reply.payload
|
152 | };
|
153 | }
|
154 | break;
|
155 | }
|
156 | case "viber": {
|
157 | console.log('event', body.event);
|
158 | console.log('body', JSON.stringify(body));
|
159 | if (body.event !== "message") {
|
160 | message.event = {
|
161 | name: body.context || body.event.replace(/^conversation_started$/gi, "start")
|
162 | };
|
163 | }
|
164 | // location.
|
165 | if (body.message && body.message.location) {
|
166 | var location_2 = body.message.location;
|
167 | message.location = {
|
168 | lat: location_2.lat,
|
169 | long: location_2.lon
|
170 | };
|
171 | message.event = {
|
172 | name: "location"
|
173 | };
|
174 | }
|
175 | // hack for user
|
176 | if (body.user) {
|
177 | message.sender = body.user.id;
|
178 | }
|
179 | var regExp = new RegExp(this.botId + "-", "ig");
|
180 | if (message.text && message.text.match(regExp)) {
|
181 | message.event = {
|
182 | name: message.text.replace(regExp, "")
|
183 | };
|
184 | delete message['text'];
|
185 | }
|
186 | console.log('viber message', JSON.stringify(message));
|
187 | break;
|
188 | }
|
189 | case "telegram": {
|
190 | var regExp = new RegExp("/[A-Za-z0-9]+", "ig");
|
191 | // text
|
192 | if (message.text) {
|
193 | if (message.text.match(regExp)) {
|
194 | message.event = {
|
195 | name: message.text.replace(/\//gi, "")
|
196 | };
|
197 | }
|
198 | }
|
199 | else if (body.message && body.message.chat.type === 'group') {
|
200 | message.event = {
|
201 | name: 'start'
|
202 | };
|
203 | }
|
204 | // process location.
|
205 | if (body.message && body.message.location) {
|
206 | message.location = {
|
207 | lat: body.message.location.latitude,
|
208 | long: body.message.location.longitude
|
209 | };
|
210 | message.event = {
|
211 | name: "location"
|
212 | };
|
213 | }
|
214 | if (body.data) {
|
215 | message.event = {
|
216 | name: body.data
|
217 | };
|
218 | // store as string
|
219 | message.sender = body.from.id;
|
220 | }
|
221 | message.sender = new Number(message.sender).toString();
|
222 | break;
|
223 | }
|
224 | case "slack": {
|
225 | message.event = {
|
226 | name: body.event.type
|
227 | };
|
228 | break;
|
229 | }
|
230 | case "wechat": {
|
231 | if (body.Event && body.Event === "subscribe") {
|
232 | message.event = {
|
233 | name: "start"
|
234 | };
|
235 | }
|
236 | else if (body.MsgType === "event" && body.EventKey) {
|
237 | message.event = {
|
238 | name: body.EventKey
|
239 | };
|
240 | }
|
241 | break;
|
242 | }
|
243 | case "kik": {
|
244 | break;
|
245 | }
|
246 | }
|
247 | return message;
|
248 | }
|
249 | var empty = new Object();
|
250 | body.event = body.event || empty;
|
251 | body.meta = body.meta || empty;
|
252 | body.timestamp = new Date().getTime();
|
253 | return body;
|
254 | };
|
255 | return MessageProcessor;
|
256 | }());
|
257 | exports.MessageProcessor = MessageProcessor;
|