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