UNPKG

10.2 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3var objectMapper = require("object-mapper");
4var 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}());
257exports.MessageProcessor = MessageProcessor;