@andrey4emk/npm-app-back-b24 0.9.7 → 1.0.1
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/README.md +382 -453
- package/dist/bitrix24/b24.d.ts +19 -0
- package/dist/bitrix24/b24.d.ts.map +1 -0
- package/{bitrix24 → dist/bitrix24}/b24.js +63 -65
- package/dist/bitrix24/eventGet.d.ts +8 -0
- package/dist/bitrix24/eventGet.d.ts.map +1 -0
- package/dist/bitrix24/eventGet.js +92 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/logs/logs.d.ts +9 -0
- package/dist/logs/logs.d.ts.map +1 -0
- package/{logs → dist/logs}/logs.js +8 -20
- package/dist/sendMessage/chatApp.d.ts +37 -0
- package/dist/sendMessage/chatApp.d.ts.map +1 -0
- package/{sendMessage → dist/sendMessage}/chatApp.js +80 -90
- package/dist/sendMessage/email.d.ts +20 -0
- package/dist/sendMessage/email.d.ts.map +1 -0
- package/{sendMessage → dist/sendMessage}/email.js +21 -20
- package/dist/sendMessage/smsgold.d.ts +21 -0
- package/dist/sendMessage/smsgold.d.ts.map +1 -0
- package/{sendMessage → dist/sendMessage}/smsgold.js +38 -35
- package/dist/sendMessage/wappi.d.ts +35 -0
- package/dist/sendMessage/wappi.d.ts.map +1 -0
- package/{sendMessage → dist/sendMessage}/wappi.js +101 -116
- package/dist/types/index.d.ts +226 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +4 -0
- package/package.json +25 -14
- package/bitrix24/eventGet.js +0 -98
- package/index.js +0 -8
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wappi.d.ts","sourceRoot":"","sources":["../../src/sendMessage/wappi.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE1F,UAAU,aAAa;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,qBAAa,KAAK;IACd,OAAO,CAAC,OAAO,CAAY;IAC3B,OAAO,CAAC,UAAU,CAAY;IAC9B,OAAO,CAAC,YAAY,CAAY;gBAEpB,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS;IAOxE,gBAAgB,CAAC,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAuD3G,aAAa,CAAC,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAqGxG,eAAe,CAAC,aAAa,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAuE/F,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAkCzE,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAyCzE,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;CAgBrE"}
|
|
@@ -1,44 +1,39 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Wappi API integration class
|
|
3
3
|
* инициализация класса Wappi initWappi
|
|
4
|
-
* @param {
|
|
5
|
-
* @param {
|
|
4
|
+
* @param {WappiAuth} maxAuth - Wappi auth для Max
|
|
5
|
+
* @param {WappiAuth} telegaAuth - Wappi auth для Telegram
|
|
6
|
+
* @param {WappiAuth} whatsAppAuth - Wappi auth для WhatsApp
|
|
6
7
|
* методы класса:
|
|
7
8
|
* sendMessageWappi(messangerType, messageData) - отправка сообщения
|
|
8
9
|
* sendFileWappi(messangerType, messageData) - отправка файла
|
|
9
10
|
* phoneCheckWappi(messangerType, phone) - проверка номера телефона
|
|
10
|
-
* @param {string} messangerType - тип мессенджера (whatsApp, telegram, max)
|
|
11
|
-
* @param {object} messageData - данные сообщения {phone: string, message: string, fileUrl?: string, fileName?: string}
|
|
12
|
-
* @return {object} - результат выполнения метода {error: boolean, message: string, data: object}
|
|
13
|
-
* @return {error: boolean, message: string, data: object} - ошибка выполнения метода
|
|
14
|
-
* @return {data.detail: boolean} - результат выполнения метода phoneCheckWappi(messangerType, phone) (существует ли номер в мессенджере true/false)
|
|
15
11
|
*/
|
|
16
|
-
|
|
17
12
|
export class Wappi {
|
|
13
|
+
maxAuth;
|
|
14
|
+
telegaAuth;
|
|
15
|
+
whatsAppAuth;
|
|
18
16
|
constructor(maxAuth, telegaAuth, whatsAppAuth) {
|
|
19
17
|
this.maxAuth = maxAuth;
|
|
20
18
|
this.telegaAuth = telegaAuth;
|
|
21
19
|
this.whatsAppAuth = whatsAppAuth;
|
|
22
20
|
}
|
|
23
|
-
|
|
24
21
|
// bot_id=1 нужно чтобы сообщение отображалось в открытой линии Битрикс24
|
|
25
22
|
async sendMessageWappi(messangerType, messageData) {
|
|
26
|
-
if (!["whatsApp"
|
|
27
|
-
return { error: true, message: "Неверный тип мессенджера", data:
|
|
23
|
+
if (!["whatsApp", "telegram", "max"].includes(messangerType)) {
|
|
24
|
+
return { error: true, message: "Неверный тип мессенджера", data: undefined };
|
|
28
25
|
}
|
|
29
26
|
if (!messageData.phone || !messageData.message) {
|
|
30
|
-
return { error: true, message: "Отсутствует phone или message", data:
|
|
27
|
+
return { error: true, message: "Отсутствует phone или message", data: undefined };
|
|
31
28
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
let url;
|
|
35
|
-
let token;
|
|
36
|
-
let profile_id;
|
|
37
|
-
|
|
29
|
+
const phone = messageData.phone;
|
|
30
|
+
const message = messageData.message;
|
|
31
|
+
let url = "";
|
|
32
|
+
let token = "";
|
|
33
|
+
let profile_id = "";
|
|
38
34
|
// Отображаем в открытой линии или нет (по умолчанию true)
|
|
39
|
-
|
|
40
|
-
sendOpenLine =
|
|
41
|
-
|
|
35
|
+
const sendOpenLineFlag = messageData.sendOpenLine ?? true;
|
|
36
|
+
const sendOpenLine = sendOpenLineFlag ? "bot_id=1&" : "";
|
|
42
37
|
if (messangerType === "whatsApp") {
|
|
43
38
|
token = this.whatsAppAuth.token;
|
|
44
39
|
profile_id = this.whatsAppAuth.profile_id;
|
|
@@ -54,60 +49,57 @@ export class Wappi {
|
|
|
54
49
|
profile_id = this.maxAuth.profile_id;
|
|
55
50
|
url = `https://wappi.pro/maxapi/sync/message/send?${sendOpenLine}profile_id=${profile_id}`;
|
|
56
51
|
}
|
|
57
|
-
|
|
52
|
+
const res = await fetch(url, {
|
|
58
53
|
method: "POST",
|
|
59
54
|
headers: {
|
|
60
55
|
"Content-Type": "application/json",
|
|
61
56
|
Authorization: token,
|
|
62
57
|
},
|
|
63
|
-
|
|
64
58
|
body: JSON.stringify({
|
|
65
59
|
recipient: phone,
|
|
66
60
|
body: message,
|
|
67
61
|
}),
|
|
68
62
|
});
|
|
69
|
-
|
|
70
|
-
if (data.status
|
|
63
|
+
const data = (await res.json());
|
|
64
|
+
if (data.status !== "done") {
|
|
71
65
|
return { error: true, message: `Ошибка при отправке сообщения в ChatApp через ${messangerType}`, data: data };
|
|
72
|
-
}
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
73
68
|
return { error: false, message: `Сообщение успешно отправлено в ChatApp через ${messangerType}`, data: data };
|
|
74
69
|
}
|
|
75
70
|
}
|
|
76
|
-
|
|
77
71
|
async sendFileWappi(messangerType, messageData) {
|
|
78
|
-
if (!["whatsApp"
|
|
79
|
-
return { error: true, message: "Неверный тип мессенджера", data:
|
|
72
|
+
if (!["whatsApp", "telegram", "max"].includes(messangerType)) {
|
|
73
|
+
return { error: true, message: "Неверный тип мессенджера", data: undefined };
|
|
80
74
|
}
|
|
81
75
|
if (!messageData.phone || !messageData.message) {
|
|
82
|
-
return { error: true, message: "Отсутствует phone или message", data:
|
|
76
|
+
return { error: true, message: "Отсутствует phone или message", data: undefined };
|
|
83
77
|
}
|
|
84
78
|
if (!messageData.fileUrl || !messageData.fileName) {
|
|
85
|
-
return { error: true, message: "Отсутствует fileUrl или fileName", data:
|
|
79
|
+
return { error: true, message: "Отсутствует fileUrl или fileName", data: undefined };
|
|
86
80
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
let url;
|
|
92
|
-
let token;
|
|
93
|
-
let profile_id;
|
|
94
|
-
let base64;
|
|
95
|
-
|
|
81
|
+
const phone = messageData.phone;
|
|
82
|
+
const message = messageData.message;
|
|
83
|
+
const fileUrl = messageData.fileUrl;
|
|
84
|
+
const fileName = messageData.fileName;
|
|
85
|
+
let url = "";
|
|
86
|
+
let token = "";
|
|
87
|
+
let profile_id = "";
|
|
88
|
+
let base64 = "";
|
|
96
89
|
// Отображаем в открытой линии или нет (по умолчанию true)
|
|
97
|
-
|
|
98
|
-
sendOpenLine =
|
|
99
|
-
|
|
90
|
+
const sendOpenLineFlag = messageData.sendOpenLine ?? true;
|
|
91
|
+
const sendOpenLine = sendOpenLineFlag ? "bot_id=1&" : "";
|
|
100
92
|
if (messangerType === "whatsApp") {
|
|
101
93
|
token = this.whatsAppAuth.token;
|
|
102
94
|
profile_id = this.whatsAppAuth.profile_id;
|
|
103
95
|
// скачивам файл и конвертируем в base64
|
|
104
|
-
|
|
96
|
+
const resConvert = await this.convertToBase64(fileUrl);
|
|
105
97
|
if (resConvert.error) {
|
|
106
|
-
return { error: true, message: `Ошибка при конвертации файла в base64 для WhatsApp: ${resConvert.message}`, data:
|
|
107
|
-
}
|
|
108
|
-
|
|
98
|
+
return { error: true, message: `Ошибка при конвертации файла в base64 для WhatsApp: ${resConvert.message}`, data: undefined };
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
base64 = resConvert.data || "";
|
|
109
102
|
}
|
|
110
|
-
|
|
111
103
|
if (fileName.includes(".pdf")) {
|
|
112
104
|
url = `https://wappi.pro/api/async/message/document/send?${sendOpenLine}profile_id=${profile_id}`;
|
|
113
105
|
}
|
|
@@ -120,13 +112,13 @@ export class Wappi {
|
|
|
120
112
|
token = this.telegaAuth.token;
|
|
121
113
|
profile_id = this.telegaAuth.profile_id;
|
|
122
114
|
// скачивам файл и конвертируем в base64
|
|
123
|
-
|
|
115
|
+
const resConvert = await this.convertToBase64(fileUrl);
|
|
124
116
|
if (resConvert.error) {
|
|
125
|
-
return { error: true, message: `Ошибка при конвертации файла в base64 для Telegram: ${resConvert.message}`, data:
|
|
126
|
-
}
|
|
127
|
-
|
|
117
|
+
return { error: true, message: `Ошибка при конвертации файла в base64 для Telegram: ${resConvert.message}`, data: undefined };
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
base64 = resConvert.data || "";
|
|
128
121
|
}
|
|
129
|
-
|
|
130
122
|
if (fileName.includes(".pdf")) {
|
|
131
123
|
url = `https://wappi.pro/tapi/sync/message/document/send?${sendOpenLine}profile_id=${profile_id}`;
|
|
132
124
|
}
|
|
@@ -140,19 +132,16 @@ export class Wappi {
|
|
|
140
132
|
profile_id = this.maxAuth.profile_id;
|
|
141
133
|
url = `https://wappi.pro/maxapi/async/message/file/url/send?${sendOpenLine}profile_id=${profile_id}`;
|
|
142
134
|
}
|
|
143
|
-
|
|
144
135
|
// Max при отправке pdf не прикрепляет сообщение caption: message, поэтому отправляем его отдельно
|
|
145
136
|
if (fileName.includes(".pdf") && messangerType === "max") {
|
|
146
137
|
await this.sendMessageWappi(messangerType, { phone: phone, message: message });
|
|
147
138
|
}
|
|
148
|
-
|
|
149
|
-
let res = await fetch(url, {
|
|
139
|
+
const res = await fetch(url, {
|
|
150
140
|
method: "POST",
|
|
151
141
|
headers: {
|
|
152
142
|
"Content-Type": "application/json",
|
|
153
143
|
Authorization: token,
|
|
154
144
|
},
|
|
155
|
-
|
|
156
145
|
body: JSON.stringify({
|
|
157
146
|
recipient: phone,
|
|
158
147
|
url: fileUrl,
|
|
@@ -161,24 +150,24 @@ export class Wappi {
|
|
|
161
150
|
b64_file: base64,
|
|
162
151
|
}),
|
|
163
152
|
});
|
|
164
|
-
|
|
165
|
-
if (data.status
|
|
153
|
+
const data = (await res.json());
|
|
154
|
+
if (data.status !== "done") {
|
|
166
155
|
return { error: true, message: `Ошибка при отправке файла в ChatApp через ${messangerType}`, data: data };
|
|
167
|
-
}
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
168
158
|
return { error: false, message: `Файл успешно отправлен в ChatApp через ${messangerType}`, data: data };
|
|
169
159
|
}
|
|
170
160
|
}
|
|
171
|
-
|
|
172
161
|
async phoneCheckWappi(messangerType, phone) {
|
|
173
|
-
if (!["whatsApp"
|
|
174
|
-
return { error: true, message: "Неверный тип мессенджера", data:
|
|
162
|
+
if (!["whatsApp", "telegram", "max"].includes(messangerType)) {
|
|
163
|
+
return { error: true, message: "Неверный тип мессенджера", data: undefined };
|
|
175
164
|
}
|
|
176
165
|
if (!phone) {
|
|
177
|
-
return { error: true, message: "Отсутствует phone ", data:
|
|
166
|
+
return { error: true, message: "Отсутствует phone ", data: undefined };
|
|
178
167
|
}
|
|
179
|
-
let url;
|
|
180
|
-
let token;
|
|
181
|
-
let profile_id;
|
|
168
|
+
let url = "";
|
|
169
|
+
let token = "";
|
|
170
|
+
let profile_id = "";
|
|
182
171
|
if (messangerType === "whatsApp") {
|
|
183
172
|
token = this.whatsAppAuth.token;
|
|
184
173
|
profile_id = this.whatsAppAuth.profile_id;
|
|
@@ -186,22 +175,22 @@ export class Wappi {
|
|
|
186
175
|
}
|
|
187
176
|
if (messangerType === "telegram") {
|
|
188
177
|
// 1 Проверяем существует контакт или нет.
|
|
189
|
-
|
|
190
|
-
|
|
178
|
+
const contactCheck = await this.getContactTelegramWappi(phone);
|
|
191
179
|
// 2 Если существует, то номер в телеге есть, можем отправлять сообщение
|
|
192
|
-
if (!contactCheck.error && contactCheck.data
|
|
193
|
-
|
|
194
|
-
|
|
180
|
+
if (!contactCheck.error && contactCheck.data?.haveContact) {
|
|
181
|
+
const data = contactCheck.data;
|
|
182
|
+
data.check = true;
|
|
183
|
+
return { error: false, message: `Номер ${phone} проверен для мессенджера ${messangerType}`, data: data };
|
|
195
184
|
}
|
|
196
|
-
|
|
197
185
|
// 3 Если не существует, то номера в телеге нет, пробуем создать
|
|
198
|
-
|
|
199
|
-
|
|
186
|
+
const addContactResult = await this.addContactTelegramWappi(phone);
|
|
200
187
|
if (!addContactResult.error) {
|
|
201
188
|
// Если получается создать, отправляем информацию
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
189
|
+
const data = addContactResult.data;
|
|
190
|
+
data.check = true;
|
|
191
|
+
return { error: false, message: `Номер ${phone} успешно добавлен и проверен для мессенджера ${messangerType}`, data: data };
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
205
194
|
// Если не получается, то отправляем информацию об ошибке
|
|
206
195
|
return { error: true, message: `Не удалось проверить и добавить номер ${phone} в Telegram: ${addContactResult.message}`, data: addContactResult.data };
|
|
207
196
|
}
|
|
@@ -211,17 +200,18 @@ export class Wappi {
|
|
|
211
200
|
profile_id = this.maxAuth.profile_id;
|
|
212
201
|
url = `https://wappi.pro/maxapi/sync/contact/check?profile_id=${profile_id}&phone=${phone}`;
|
|
213
202
|
}
|
|
214
|
-
|
|
203
|
+
const res = await fetch(url, {
|
|
215
204
|
method: "GET",
|
|
216
205
|
headers: {
|
|
217
206
|
"Content-Type": "application/json",
|
|
218
207
|
Authorization: token,
|
|
219
208
|
},
|
|
220
209
|
});
|
|
221
|
-
|
|
222
|
-
if (data.status
|
|
210
|
+
const data = (await res.json());
|
|
211
|
+
if (data.status !== "done") {
|
|
223
212
|
return { error: true, message: `Ошибка проверки номера ${phone} ${messangerType}`, data: data };
|
|
224
|
-
}
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
225
215
|
// Проверяем нашли max или нет
|
|
226
216
|
data.check = false;
|
|
227
217
|
if (data.detail === "found" || data.on_max || data.on_whatsapp) {
|
|
@@ -232,52 +222,46 @@ export class Wappi {
|
|
|
232
222
|
}
|
|
233
223
|
async getContactTelegramWappi(phone) {
|
|
234
224
|
if (!phone) {
|
|
235
|
-
return { error: true, message: "Отсутствует phone", data:
|
|
225
|
+
return { error: true, message: "Отсутствует phone", data: undefined };
|
|
236
226
|
}
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
227
|
+
const token = this.telegaAuth.token;
|
|
228
|
+
const profile_id = this.telegaAuth.profile_id;
|
|
229
|
+
const url = `https://wappi.pro/tapi/sync/contact/get?profile_id=${profile_id}&phone=${phone}`;
|
|
241
230
|
try {
|
|
242
|
-
|
|
231
|
+
const res = await fetch(url, {
|
|
243
232
|
method: "GET",
|
|
244
233
|
headers: {
|
|
245
234
|
"Content-Type": "application/json",
|
|
246
235
|
Authorization: token,
|
|
247
236
|
},
|
|
248
237
|
});
|
|
249
|
-
|
|
250
|
-
let data = await res.json();
|
|
251
|
-
|
|
238
|
+
const data = (await res.json());
|
|
252
239
|
if (data.status !== "done") {
|
|
253
240
|
return { error: true, message: `Ошибка получения контакта ${phone} из Telegram`, data: data };
|
|
254
|
-
}
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
255
243
|
// Проверяем найден ли контакт
|
|
256
244
|
data.haveContact = data.contact ? true : false;
|
|
257
|
-
|
|
258
245
|
return { error: false, message: `Контакт ${phone} получен из Telegram`, data: data };
|
|
259
246
|
}
|
|
260
|
-
}
|
|
261
|
-
|
|
247
|
+
}
|
|
248
|
+
catch (error) {
|
|
249
|
+
const err = error;
|
|
250
|
+
return { error: true, message: `Ошибка при запросе контакта: ${err.message}`, data: undefined };
|
|
262
251
|
}
|
|
263
252
|
}
|
|
264
|
-
|
|
265
253
|
async addContactTelegramWappi(phone) {
|
|
266
254
|
if (!phone) {
|
|
267
|
-
return { error: true, message: "Отсутствует phone", data:
|
|
255
|
+
return { error: true, message: "Отсутствует phone", data: undefined };
|
|
268
256
|
}
|
|
269
|
-
|
|
270
257
|
// Генерируем случайную строку из четырех символов
|
|
271
258
|
const randomString = Math.random().toString(36).substring(2, 6).toUpperCase();
|
|
272
259
|
const contactName = `${phone}_${randomString}`;
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
let url = `https://wappi.pro/tapi/sync/contact/add?profile_id=${profile_id}`;
|
|
277
|
-
// console.log("addContactTelegramWappi token,profile_id и url:");
|
|
278
|
-
// console.log(token, profile_id, url);
|
|
260
|
+
const token = this.telegaAuth.token;
|
|
261
|
+
const profile_id = this.telegaAuth.profile_id;
|
|
262
|
+
const url = `https://wappi.pro/tapi/sync/contact/add?profile_id=${profile_id}`;
|
|
279
263
|
try {
|
|
280
|
-
|
|
264
|
+
const res = await fetch(url, {
|
|
281
265
|
method: "POST",
|
|
282
266
|
headers: {
|
|
283
267
|
"Content-Type": "application/json",
|
|
@@ -288,20 +272,20 @@ export class Wappi {
|
|
|
288
272
|
name: contactName,
|
|
289
273
|
}),
|
|
290
274
|
});
|
|
291
|
-
|
|
292
|
-
let data = await res.json();
|
|
293
|
-
// console.log("addContactTelegramWappi data:", data);
|
|
275
|
+
const data = (await res.json());
|
|
294
276
|
if (data.status !== "done") {
|
|
295
277
|
return { error: true, message: `Ошибка создания контакта ${phone} в Telegram`, data: data };
|
|
296
|
-
}
|
|
278
|
+
}
|
|
279
|
+
else {
|
|
297
280
|
data.haveContact = true;
|
|
298
281
|
return { error: false, message: `Контакт ${phone} успешно создан в Telegram`, data: data };
|
|
299
282
|
}
|
|
300
|
-
}
|
|
301
|
-
|
|
283
|
+
}
|
|
284
|
+
catch (error) {
|
|
285
|
+
const err = error;
|
|
286
|
+
return { error: true, message: `Ошибка при создании контакта: ${err.message}`, data: undefined };
|
|
302
287
|
}
|
|
303
288
|
}
|
|
304
|
-
|
|
305
289
|
// Скачиваем файл по ссылке и конвертируем в base64
|
|
306
290
|
async convertToBase64(fileUrl) {
|
|
307
291
|
try {
|
|
@@ -311,11 +295,12 @@ export class Wappi {
|
|
|
311
295
|
}
|
|
312
296
|
const arrayBuffer = await response.arrayBuffer();
|
|
313
297
|
const buffer = Buffer.from(arrayBuffer);
|
|
314
|
-
|
|
315
298
|
const base64String = buffer.toString("base64");
|
|
316
|
-
return { error: false, data: base64String };
|
|
317
|
-
}
|
|
318
|
-
|
|
299
|
+
return { error: false, data: base64String, message: "Файл конвертирован в base64." };
|
|
300
|
+
}
|
|
301
|
+
catch (error) {
|
|
302
|
+
const err = error;
|
|
303
|
+
return { error: true, message: `Ошибка при скачивании и конвертировании в base64 файла по fileUrl: ${err.message}` };
|
|
319
304
|
}
|
|
320
305
|
}
|
|
321
306
|
}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Универсальный результат операций API
|
|
3
|
+
*/
|
|
4
|
+
export interface ApiResult<T = unknown> {
|
|
5
|
+
error: boolean;
|
|
6
|
+
message: string;
|
|
7
|
+
data?: T;
|
|
8
|
+
result?: T;
|
|
9
|
+
status?: string;
|
|
10
|
+
info?: T;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Конфигурация авторизации Bitrix24
|
|
14
|
+
*/
|
|
15
|
+
export interface B24AuthConfig {
|
|
16
|
+
domain: string;
|
|
17
|
+
access_token: string;
|
|
18
|
+
refresh_token: string;
|
|
19
|
+
expires_in: number;
|
|
20
|
+
member_id: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Параметры авторизации для SDK Bitrix24
|
|
24
|
+
*/
|
|
25
|
+
export interface B24AuthParams {
|
|
26
|
+
applicationToken: string;
|
|
27
|
+
userId: number;
|
|
28
|
+
memberId: string;
|
|
29
|
+
accessToken: string;
|
|
30
|
+
refreshToken: string;
|
|
31
|
+
expires: number;
|
|
32
|
+
expiresIn: number;
|
|
33
|
+
scope: string;
|
|
34
|
+
domain: string;
|
|
35
|
+
clientEndpoint: string;
|
|
36
|
+
serverEndpoint: string;
|
|
37
|
+
status: string;
|
|
38
|
+
issuer: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Секреты приложения Bitrix24
|
|
42
|
+
*/
|
|
43
|
+
export interface B24Secret {
|
|
44
|
+
clientId: string;
|
|
45
|
+
clientSecret: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Данные для создания задачи в Bitrix24
|
|
49
|
+
*/
|
|
50
|
+
export interface TaskData {
|
|
51
|
+
title: string;
|
|
52
|
+
description?: string;
|
|
53
|
+
createdBy?: number;
|
|
54
|
+
responsibleId?: number;
|
|
55
|
+
deadline?: string;
|
|
56
|
+
groupId?: number | null;
|
|
57
|
+
accomplices?: number[];
|
|
58
|
+
maxTasks?: number;
|
|
59
|
+
entityTypeAbbr?: string;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Интерфейс клиента Bitrix24 SDK
|
|
63
|
+
*/
|
|
64
|
+
export interface B24Client {
|
|
65
|
+
callMethod(method: string, params?: Record<string, unknown>): Promise<B24Response>;
|
|
66
|
+
auth: {
|
|
67
|
+
getAuthData(): Promise<B24AuthConfig | null>;
|
|
68
|
+
refreshAuth(): Promise<B24AuthConfig>;
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Ответ от Bitrix24 API
|
|
73
|
+
*/
|
|
74
|
+
export interface B24Response {
|
|
75
|
+
getData(): {
|
|
76
|
+
result: unknown;
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Сообщение события с ID сущности
|
|
81
|
+
*/
|
|
82
|
+
export interface EventMessage {
|
|
83
|
+
messageId: string;
|
|
84
|
+
entityId: number;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Результат получения событий (для сделок/смарт-процессов)
|
|
88
|
+
*/
|
|
89
|
+
export interface EventsResult {
|
|
90
|
+
processId: string | null;
|
|
91
|
+
entitysId: number[];
|
|
92
|
+
arrMessageIdAndEntityId: EventMessage[];
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Сообщение из коннектора открытой линии
|
|
96
|
+
*/
|
|
97
|
+
export interface ConnectorMessage {
|
|
98
|
+
connectorId: string;
|
|
99
|
+
lineId: string;
|
|
100
|
+
chatId: number;
|
|
101
|
+
text: string | null;
|
|
102
|
+
file: unknown | null;
|
|
103
|
+
attachments: unknown | null;
|
|
104
|
+
im: unknown | null;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Результат получения событий коннектора
|
|
108
|
+
*/
|
|
109
|
+
export interface ConnectorEventsResult {
|
|
110
|
+
processId: string | null;
|
|
111
|
+
message: ConnectorMessage[];
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Авторизация Wappi
|
|
115
|
+
*/
|
|
116
|
+
export interface WappiAuth {
|
|
117
|
+
token: string;
|
|
118
|
+
profile_id: string;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Данные сообщения для отправки
|
|
122
|
+
*/
|
|
123
|
+
export interface MessageData {
|
|
124
|
+
phone: string;
|
|
125
|
+
message: string;
|
|
126
|
+
fileUrl?: string;
|
|
127
|
+
fileName?: string;
|
|
128
|
+
sendOpenLine?: boolean;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Тип мессенджера
|
|
132
|
+
*/
|
|
133
|
+
export type MessengerType = "whatsApp" | "telegram" | "max";
|
|
134
|
+
/**
|
|
135
|
+
* Тип мессенджера ChatApp (без max)
|
|
136
|
+
*/
|
|
137
|
+
export type ChatAppMessengerType = "whatsApp" | "telegram";
|
|
138
|
+
/**
|
|
139
|
+
* Параметры для создания токена ChatApp
|
|
140
|
+
*/
|
|
141
|
+
export interface ChatAppMakeParams {
|
|
142
|
+
email: string;
|
|
143
|
+
pass: string;
|
|
144
|
+
appId: string;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Параметры авторизации ChatApp
|
|
148
|
+
*/
|
|
149
|
+
export interface ChatAppAuthParams {
|
|
150
|
+
accessToken: string;
|
|
151
|
+
accessTokenEndTime: string;
|
|
152
|
+
refreshToken: string;
|
|
153
|
+
refreshTokenEndTime: string;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Параметры типов мессенджеров ChatApp
|
|
157
|
+
*/
|
|
158
|
+
export interface ChatAppTypeParams {
|
|
159
|
+
whatsApp: {
|
|
160
|
+
licenseId: string;
|
|
161
|
+
messenger: Array<{
|
|
162
|
+
type: string;
|
|
163
|
+
}>;
|
|
164
|
+
};
|
|
165
|
+
telegram: {
|
|
166
|
+
licenseId: string;
|
|
167
|
+
messenger: Array<{
|
|
168
|
+
type: string;
|
|
169
|
+
}>;
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Авторизация Email
|
|
174
|
+
*/
|
|
175
|
+
export interface EmailAuth {
|
|
176
|
+
user: string;
|
|
177
|
+
pass: string;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Данные для отправки email
|
|
181
|
+
*/
|
|
182
|
+
export interface EmailData {
|
|
183
|
+
to: string;
|
|
184
|
+
subject: string;
|
|
185
|
+
text?: string;
|
|
186
|
+
html?: string;
|
|
187
|
+
fileUrl?: string;
|
|
188
|
+
fileName?: string;
|
|
189
|
+
attachments?: Array<{
|
|
190
|
+
filename: string;
|
|
191
|
+
content: Buffer;
|
|
192
|
+
}> | null;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Авторизация SMSGold
|
|
196
|
+
*/
|
|
197
|
+
export interface SmsgoldAuth {
|
|
198
|
+
user: string;
|
|
199
|
+
pass: string;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Данные для отправки SMS
|
|
203
|
+
*/
|
|
204
|
+
export interface SmsData {
|
|
205
|
+
phone: string;
|
|
206
|
+
message: string;
|
|
207
|
+
fileUrl?: string;
|
|
208
|
+
fileName?: string;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Уровень логирования
|
|
212
|
+
*/
|
|
213
|
+
export type LogLevel = "debug" | "info" | "error";
|
|
214
|
+
/**
|
|
215
|
+
* Конфигурация уровня логирования
|
|
216
|
+
*/
|
|
217
|
+
export interface LogConfig {
|
|
218
|
+
enabled: boolean;
|
|
219
|
+
color: string;
|
|
220
|
+
json: boolean;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Полная конфигурация логирования
|
|
224
|
+
*/
|
|
225
|
+
export type LogFullConfig = Record<LogLevel, LogConfig>;
|
|
226
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|