@tiledesk/tiledesk-whatsapp-connector 1.0.21 → 1.0.23
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/.env +1 -1
- package/index.js +20 -7
- package/package.json +1 -1
- package/tiledesk/TiledeskChannel.js +23 -16
- package/utils/utils.js +46 -0
package/.env
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# CUSTOM ENV
|
|
2
|
-
NPM_PUBLISH_TOKEN=
|
|
2
|
+
NPM_PUBLISH_TOKEN=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
|
package/index.js
CHANGED
|
@@ -878,9 +878,14 @@ router.post('/webhook', async (req, res) => {
|
|
|
878
878
|
|
|
879
879
|
if (tiledeskJsonMessage) {
|
|
880
880
|
winston.verbose("(wab) tiledeskJsonMessage: ", tiledeskJsonMessage);
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
881
|
+
|
|
882
|
+
try {
|
|
883
|
+
const response = await tdChannel.send(tiledeskJsonMessage, message_info, settings.department_id);
|
|
884
|
+
winston.verbose("(wab) Message sent to Tiledesk!");
|
|
885
|
+
winston.debug("(wab) response: ", response);
|
|
886
|
+
} catch (err) {
|
|
887
|
+
winston.error("(wab) send message error: ", err);
|
|
888
|
+
}
|
|
884
889
|
} else {
|
|
885
890
|
winston.verbose("(wab) tiledeskJsonMessage is undefined");
|
|
886
891
|
}
|
|
@@ -1017,6 +1022,14 @@ router.post("/webhook/:project_id", async (req, res) => {
|
|
|
1017
1022
|
|
|
1018
1023
|
let firstname = message_info.whatsapp.firstname;
|
|
1019
1024
|
|
|
1025
|
+
let userToken;
|
|
1026
|
+
try {
|
|
1027
|
+
userToken = await getUserToken(tdChannel, message_info.whatsapp, settings);
|
|
1028
|
+
message_info.userToken = userToken;
|
|
1029
|
+
} catch (err) {
|
|
1030
|
+
winston.error("(wab) get user token error: ", err);
|
|
1031
|
+
}
|
|
1032
|
+
|
|
1020
1033
|
let tiledeskJsonMessage;
|
|
1021
1034
|
|
|
1022
1035
|
if (
|
|
@@ -1041,7 +1054,7 @@ router.post("/webhook/:project_id", async (req, res) => {
|
|
|
1041
1054
|
}
|
|
1042
1055
|
|
|
1043
1056
|
let file_path = path.join(__dirname, "tmp", filename);
|
|
1044
|
-
const image_url = await util.uploadMedia(file_path, settings.project_id,
|
|
1057
|
+
const image_url = await util.uploadMedia(file_path, settings.project_id, userToken);
|
|
1045
1058
|
winston.debug("(wab) image_url: " + image_url);
|
|
1046
1059
|
|
|
1047
1060
|
tiledeskJsonMessage = await tlr.toTiledesk(whatsappChannelMessage, firstname, image_url);
|
|
@@ -1057,7 +1070,7 @@ router.post("/webhook/:project_id", async (req, res) => {
|
|
|
1057
1070
|
}
|
|
1058
1071
|
let file_path = path.join(__dirname, "tmp", filename);
|
|
1059
1072
|
|
|
1060
|
-
const media_url = await util.uploadMedia(file_path, settings.project_id,
|
|
1073
|
+
const media_url = await util.uploadMedia(file_path, settings.project_id, userToken);
|
|
1061
1074
|
winston.debug("(wab) media_url: " + media_url);
|
|
1062
1075
|
|
|
1063
1076
|
tiledeskJsonMessage = await tlr.toTiledesk(whatsappChannelMessage, firstname, media_url);
|
|
@@ -1073,7 +1086,7 @@ router.post("/webhook/:project_id", async (req, res) => {
|
|
|
1073
1086
|
}
|
|
1074
1087
|
let file_path = path.join(__dirname, "tmp", filename);
|
|
1075
1088
|
|
|
1076
|
-
const media_url = await util.uploadMedia(file_path, settings.project_id,
|
|
1089
|
+
const media_url = await util.uploadMedia(file_path, settings.project_id, userToken);
|
|
1077
1090
|
winston.debug("(wab) media_url: " + media_url);
|
|
1078
1091
|
|
|
1079
1092
|
tiledeskJsonMessage = await tlr.toTiledesk(whatsappChannelMessage, firstname, media_url);
|
|
@@ -1089,7 +1102,7 @@ router.post("/webhook/:project_id", async (req, res) => {
|
|
|
1089
1102
|
}
|
|
1090
1103
|
let file_path = path.join(__dirname, "tmp", filename);
|
|
1091
1104
|
|
|
1092
|
-
const media_url = await util.uploadMedia(file_path, settings.project_id,
|
|
1105
|
+
const media_url = await util.uploadMedia(file_path, settings.project_id, userToken);
|
|
1093
1106
|
winston.debug("(wab) media_url: " + media_url);
|
|
1094
1107
|
|
|
1095
1108
|
tiledeskJsonMessage = await tlr.toTiledesk(whatsappChannelMessage, firstname, media_url);
|
package/package.json
CHANGED
|
@@ -53,6 +53,7 @@ class TiledeskChannel {
|
|
|
53
53
|
async send(tiledeskMessage, messageInfo, department_id) {
|
|
54
54
|
|
|
55
55
|
let channel;
|
|
56
|
+
let request_id;
|
|
56
57
|
let new_request_id;
|
|
57
58
|
|
|
58
59
|
if (department_id) {
|
|
@@ -85,7 +86,6 @@ class TiledeskChannel {
|
|
|
85
86
|
const requestsResponse = await this.getRequests(messageInfo.channel, token);
|
|
86
87
|
winston.debug("(wab) [TiledeskChannel] get request response: ", requestsResponse.data);
|
|
87
88
|
|
|
88
|
-
let request_id;
|
|
89
89
|
if (requestsResponse.data.requests[0]) {
|
|
90
90
|
request_id = requestsResponse.data.requests[0].request_id;
|
|
91
91
|
winston.debug("(wab) [TiledeskChannel] Old request_id: " + request_id);
|
|
@@ -94,20 +94,24 @@ class TiledeskChannel {
|
|
|
94
94
|
winston.debug("(wab) [TiledeskChannel] New request_id: " + request_id);
|
|
95
95
|
}
|
|
96
96
|
|
|
97
|
-
winston.debug("(wab) [TiledeskChannel] tiledeskMessage:", tiledeskMessage);
|
|
98
|
-
|
|
99
|
-
try {
|
|
100
|
-
const sendResponse = await this.sendMessage(request_id, tiledeskMessage, token);
|
|
101
|
-
winston.debug("(wab) [TiledeskChannel] send message response: ", sendResponse.data);
|
|
102
|
-
return sendResponse.data;
|
|
103
|
-
} catch (err) {
|
|
104
|
-
winston.error("(wab) [TiledeskChannel] send message error: ", err);
|
|
105
|
-
throw err;
|
|
106
|
-
}
|
|
107
97
|
} catch (err) {
|
|
108
|
-
|
|
109
|
-
|
|
98
|
+
const errorMessage = utils._extractErrorMessage(err);
|
|
99
|
+
winston.error("(wab) [TiledeskChannel] get requests error: " + errorMessage);
|
|
100
|
+
throw new Error(errorMessage);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
winston.debug("(wab) [TiledeskChannel] tiledeskMessage:", tiledeskMessage);
|
|
104
|
+
|
|
105
|
+
try {
|
|
106
|
+
const sendResponse = await this.sendMessage(request_id, tiledeskMessage, token);
|
|
107
|
+
winston.debug("(wab) [TiledeskChannel] send message response: ", sendResponse.data);
|
|
108
|
+
return sendResponse.data;
|
|
109
|
+
} catch (err) {
|
|
110
|
+
const errorMessage = utils._extractErrorMessage(err);
|
|
111
|
+
winston.error("(wab) [TiledeskChannel] send message error: " + errorMessage);
|
|
112
|
+
throw new Error(errorMessage);
|
|
110
113
|
}
|
|
114
|
+
|
|
111
115
|
}
|
|
112
116
|
|
|
113
117
|
/**
|
|
@@ -227,10 +231,12 @@ class TiledeskChannel {
|
|
|
227
231
|
}).then((response) => {
|
|
228
232
|
return response.data
|
|
229
233
|
}).catch((err) => {
|
|
230
|
-
|
|
234
|
+
const errorMessage = utils._extractErrorMessage(err);
|
|
235
|
+
winston.error("(wab) [TiledeskChannel] send message (open conversation) error: " + errorMessage);
|
|
231
236
|
})
|
|
232
237
|
}).catch((err) => {
|
|
233
|
-
|
|
238
|
+
const errorMessage = utils._extractErrorMessage(err);
|
|
239
|
+
winston.error("(wab) [TiledeskChannel] sign in error: " + errorMessage);
|
|
234
240
|
})
|
|
235
241
|
}
|
|
236
242
|
|
|
@@ -250,7 +256,8 @@ class TiledeskChannel {
|
|
|
250
256
|
}).then((response) => {
|
|
251
257
|
return this.checkPlan(response.data);
|
|
252
258
|
}).catch((err) => {
|
|
253
|
-
|
|
259
|
+
const errorMessage = utils._extractErrorMessage(err);
|
|
260
|
+
winston.error("(wab) [TiledeskChannel] get project detail error: " + errorMessage);
|
|
254
261
|
return null;
|
|
255
262
|
})
|
|
256
263
|
}
|
package/utils/utils.js
CHANGED
|
@@ -35,6 +35,50 @@ class Utils {
|
|
|
35
35
|
}
|
|
36
36
|
return phonePrefixes[matchedPrefix];
|
|
37
37
|
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Extract error message from axios error, converting it to a string
|
|
41
|
+
* @param {Error} err - The error object
|
|
42
|
+
* @returns {string} - A string representation of the error
|
|
43
|
+
*/
|
|
44
|
+
_extractErrorMessage(err) {
|
|
45
|
+
if (!err) {
|
|
46
|
+
return 'Unknown error';
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// If it's an axios error with a response
|
|
50
|
+
if (err.response) {
|
|
51
|
+
const status = err.response.status;
|
|
52
|
+
const statusText = err.response.statusText;
|
|
53
|
+
const data = err.response.data;
|
|
54
|
+
|
|
55
|
+
// Try to extract a meaningful message from response.data
|
|
56
|
+
let message = '';
|
|
57
|
+
if (typeof data === 'string') {
|
|
58
|
+
message = data;
|
|
59
|
+
} else if (data && typeof data === 'object') {
|
|
60
|
+
// Try common error message fields
|
|
61
|
+
message = data.message || data.error?.message || data.error || JSON.stringify(data);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return `HTTP ${status} ${statusText}${message ? ': ' + message : ''}`;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// If it's an axios error without response (network error, timeout, etc.)
|
|
68
|
+
if (err.request) {
|
|
69
|
+
const code = err.code || '';
|
|
70
|
+
const message = err.message || 'Network error';
|
|
71
|
+
return code ? `${message} (${code})` : message;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// For other errors, use the message or convert to string
|
|
75
|
+
if (err.message) {
|
|
76
|
+
return err.message;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Last resort: convert to string
|
|
80
|
+
return String(err);
|
|
81
|
+
}
|
|
38
82
|
|
|
39
83
|
}
|
|
40
84
|
|
|
@@ -46,6 +90,8 @@ function fixNumber(phone_number) {
|
|
|
46
90
|
}
|
|
47
91
|
}
|
|
48
92
|
|
|
93
|
+
|
|
94
|
+
|
|
49
95
|
let utils = new Utils();
|
|
50
96
|
|
|
51
97
|
module.exports = utils;
|