@andrey4emk/npm-app-back-b24 1.0.5 → 1.0.6

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 CHANGED
@@ -2,26 +2,19 @@
2
2
 
3
3
  Утилиты для работы с Bitrix24 OAuth на основе `@bitrix24/b24jssdk`.
4
4
 
5
- **TypeScript-ready** — пакет полностью написан на TypeScript и включает типы.
6
-
7
5
  ## Содержание
8
6
 
9
- - [Установка](#установка)
10
- - [Использование](#использование)
11
- - [TypeScript](#typescript)
12
- - [API](#api)
13
- - [B24Prepared](#b24prepared)
14
- - [errTask](#errtask)
15
- - [Event](#event)
16
- - [ChatApp](#chatapp)
17
- - [Wappi](#wappi)
18
- - [Email](#email)
19
- - [Smsgold](#smsgold)
20
- - [Logs](#logs)
21
- - [Типы](#типы)
22
- - [Переменные окружения](#переменные-окружения)
23
- - [Скрипты](#скрипты)
24
- - [Лицензия](#лицензия)
7
+ - [Установка](#установка)
8
+ - [Использование](#использование)
9
+ - [API](#api)
10
+ - [OAuth функции](#oauth-функции)
11
+ - [Утилиты](#утилиты)
12
+ - [События](#события)
13
+ - [ChatApp](#chatapp)
14
+ - [Smsgold](#smsgold)
15
+ - [Переменные окружения](#переменные-окружения)
16
+ - [Скрипты](#скрипты)
17
+ - [Лицензия](#лицензия)
25
18
 
26
19
  ## Установка
27
20
 
@@ -31,431 +24,509 @@ npm install @andrey4emk/npm-app-back-b24
31
24
 
32
25
  ## Использование
33
26
 
34
- ```typescript
35
- import { B24Prepared, errTask, Event, ChatApp, Wappi, Email, Smsgold, logs } from "@andrey4emk/npm-app-back-b24";
36
-
37
- // Импорт типов
38
- import type { B24Client, TaskData, MessageData, ApiResult } from "@andrey4emk/npm-app-back-b24";
39
- ```
40
-
41
- ### Пример работы с Bitrix24
42
-
43
- ```typescript
44
- import { B24Prepared, errTask, Event } from "@andrey4emk/npm-app-back-b24";
45
- import { B24OAuth } from "@bitrix24/b24jssdk";
46
-
47
- // Подготовка авторизации
48
- const b24Prepared = new B24Prepared();
49
- const authResult = await b24Prepared.makeAuthParams();
27
+ ```js
28
+ import { create, refresh, save, errTask, Event } from "@andrey4emk/npm-app-back-b24";
29
+ import { chatApp, smsgold } from "@andrey4emk/npm-app-back-b24";
30
+ import { AuthB24Model } from "./models/AuthB24.js"; // пример модели
50
31
 
51
- if (authResult.error) {
52
- console.error(authResult.message);
53
- process.exit(1);
54
- }
32
+ // OAuth функции
33
+ const b24Client = await create(AuthB24Model);
34
+ const refreshResult = await refresh(AuthB24Model);
55
35
 
56
- const { AuthParams, secret } = authResult.data!;
36
+ app.post("/b24/auth", (req, res) => save(req, res, AuthB24Model));
57
37
 
58
- // Создание клиента B24
59
- const $b24 = new B24OAuth(AuthParams, secret);
60
- await $b24.init();
61
-
62
- // Создание задачи при ошибке
63
- await errTask($b24, {
38
+ // Создание служебной задачи при ошибке
39
+ await errTask(b24Client, {
64
40
  title: "Ошибка синхронизации",
65
- description: "Детали ошибки",
66
- responsibleId: 1,
41
+ description: "Детали ошибки здесь",
67
42
  });
68
43
 
69
44
  // Работа с событиями
70
- const eventHandler = new Event($b24);
71
- const result = await eventHandler.get("ONCRMDYNAMICITEMUPDATE_149");
45
+ const eventHandler = new Event(b24Client);
46
+ const { error, events } = await eventHandler.get("ONCRMDYNAMICITEMUPDATE_149");
72
47
 
73
- if (!result.error && result.data) {
74
- console.log("ID сущностей:", result.data.entitysId);
75
- }
76
- ```
48
+ // Работа с ChatApp
49
+ await chatApp.makeTokenChatApp();
50
+ const result = await chatApp.sendMessageChatApp("whatsApp", {
51
+ phone: "+1234567890",
52
+ message: "Привет!",
53
+ });
77
54
 
78
- ## TypeScript
79
-
80
- Пакет полностью типизирован. Все типы экспортируются из главного модуля:
81
-
82
- ```typescript
83
- import type {
84
- // Общие
85
- ApiResult,
86
-
87
- // Bitrix24
88
- B24AuthConfig,
89
- B24AuthParams,
90
- B24Secret,
91
- B24Client,
92
- TaskData,
93
-
94
- // События
95
- EventMessage,
96
- EventsResult,
97
- ConnectorMessage,
98
- ConnectorEventsResult,
99
-
100
- // Wappi
101
- WappiAuth,
102
- MessageData,
103
- MessengerType,
104
-
105
- // ChatApp
106
- ChatAppMakeParams,
107
- ChatAppAuthParams,
108
- ChatAppTypeParams,
109
- ChatAppMessengerType,
110
-
111
- // Email
112
- EmailAuth,
113
- EmailData,
114
-
115
- // SMSGold
116
- SmsgoldAuth,
117
- SmsData,
118
-
119
- // Logs
120
- LogLevel,
121
- LogConfig,
122
- } from "@andrey4emk/npm-app-back-b24";
55
+ // Работа с SMSGold
56
+ await smsgold.sendSms("+1234567890", "Привет из SMSGold!");
123
57
  ```
124
58
 
125
59
  ## API
126
60
 
127
- ### B24Prepared
61
+ ### OAuth функции
128
62
 
129
- Класс для подготовки авторизации Bitrix24.
63
+ - **`create(AuthB24Model)`** создаёт клиента `B24OAuth` с использованием сохранённых в БД токенов.
130
64
 
131
- ```typescript
132
- import { B24Prepared } from "@andrey4emk/npm-app-back-b24";
65
+ - **Параметры:**
66
+ - `AuthB24Model` (Sequelize Model) модель для получения данных авторизации из БД.
67
+ - **Возвращает:** промис с экземпляром `B24OAuth`, готовым к вызовам REST API.
68
+ - **Ошибки:** выбрасывает `Error` если запись авторизации не найдена в БД.
133
69
 
134
- const b24Prepared = new B24Prepared();
135
- ```
136
-
137
- **Методы:**
70
+ ```js
71
+ const b24 = await create(AuthB24Model);
72
+ const result = await b24.callMethod("crm.contact.list", { limit: 5 });
73
+ ```
138
74
 
139
- - **`makeAuthParams()`** — формирует параметры авторизации из конфига.
75
+ - **`refresh(AuthB24Model)`** — продлевает токены через Bitrix24 и обновляет запись в БД.
140
76
 
141
- ```typescript
142
- const result = await b24Prepared.makeAuthParams();
143
- // result: ApiResult<{ AuthParams: B24AuthParams; secret: B24Secret }>
77
+ - **Параметры:**
78
+ - `AuthB24Model` (Sequelize Model) модель для обновления токенов.
79
+ - **Возвращает:** промис с объектом `{ error: boolean, message: string }`.
144
80
 
81
+ ```js
82
+ const result = await refresh(AuthB24Model);
145
83
  if (!result.error) {
146
- const { AuthParams, secret } = result.data!;
147
- // Используйте с @bitrix24/b24jssdk
84
+ console.log("Токены обновлены:", result.message);
148
85
  }
149
86
  ```
150
87
 
151
- - **`save(req, res, $b24)`** — сохраняет токены из фронта или обновляет из бэка.
152
-
153
- ```typescript
154
- // Из Express endpoint
155
- app.post("/b24/auth", (req, res) => b24Prepared.save(req, res));
156
-
157
- // Из бэка для пересохранения
158
- await b24Prepared.save(null, null, $b24);
88
+ - **`save(req, res, AuthB24Model)`** — HTTP-обработчик для сохранения набора токенов из `req.body`.
89
+
90
+ - **Параметры:**
91
+ - `req` (Express Request) — объект запроса с полем `body`.
92
+ - `res` (Express Response) объект ответа.
93
+ - `AuthB24Model` (Sequelize Model) — модель для сохранения.
94
+ - **Тело запроса (req.body):**
95
+ ```json
96
+ {
97
+ "access_token": "string",
98
+ "refresh_token": "string",
99
+ "domain": "string",
100
+ "expires_in": "number",
101
+ "member_id": "number"
102
+ }
103
+ ```
104
+ - **Возвращает:** HTTP-ответ с JSON `{ status, message }` (код `201` при успехе, `400`/`500` при ошибках).
105
+
106
+ ```js
107
+ app.post("/b24/auth", (req, res) => save(req, res, AuthB24Model));
159
108
  ```
160
109
 
161
- ### errTask
162
-
163
- Создаёт служебную задачу в Bitrix24 при ошибках.
164
-
165
- ```typescript
166
- import { errTask } from "@andrey4emk/npm-app-back-b24";
167
- import type { TaskData, B24Client } from "@andrey4emk/npm-app-back-b24";
168
-
169
- const taskData: TaskData = {
170
- title: "Ошибка синхронизации",
171
- description: "Не удалось подключиться к API",
172
- responsibleId: 42,
173
- maxTasks: 50,
174
- };
175
-
176
- const result = await errTask($b24, taskData);
177
- ```
178
-
179
- **Параметры `TaskData`:**
180
-
181
- | Параметр | Тип | По умолчанию | Описание |
182
- | ---------------- | -------------- | --------------- | -------------------------------- |
183
- | `title` | `string` | **обязательно** | Заголовок задачи |
184
- | `description` | `string` | `""` | Описание задачи |
185
- | `createdBy` | `number` | `138` | ID создателя |
186
- | `responsibleId` | `number` | `1` | ID ответственного |
187
- | `deadline` | `string` | `+1 день` | Дедлайн в ISO формате |
188
- | `groupId` | `number\|null` | `null` | ID группы |
189
- | `accomplices` | `number[]` | `[]` | Массив ID соисполнителей |
190
- | `maxTasks` | `number` | `100` | Макс. задач с таким названием |
191
- | `entityTypeAbbr` | `string` | `""` | Код CRM сущности для UF_CRM_TASK |
192
-
193
- ### Event
194
-
195
- Класс для работы с офлайн-событиями Bitrix24.
196
-
197
- ```typescript
198
- import { Event } from "@andrey4emk/npm-app-back-b24";
199
-
200
- const eventHandler = new Event($b24);
110
+ ### Утилиты
111
+
112
+ - **`errTask(b24, dataTask)`** — создаёт служебную задачу в Bitrix24 при ошибках/событиях.
113
+
114
+ - **Алгоритм:**
115
+
116
+ 1. Сначала проверяет, сколько задач с таким `TITLE` уже создано (через `tasks.task.list`).
117
+ 2. Если их меньше чем `maxTasks`, создаёт новую задачу (`tasks.task.add`).
118
+
119
+ - **Параметры:**
120
+
121
+ - `b24` (B24OAuth) — экземпляр клиента Bitrix24.
122
+ - `dataTask` (object) — объект с параметрами задачи (см. ниже).
123
+
124
+ - **Возвращает:** промис с объектом:
125
+ ```js
126
+ {
127
+ error: false,
128
+ message: "Задача создана в Битрикс24.",
129
+ result: { /* API response */ }
130
+ }
131
+ ```
132
+ или при превышении лимита:
133
+ ```js
134
+ {
135
+ error: false,
136
+ message: "Превышено максимальное количество задач с таким названием (100). Новая задача не создана."
137
+ }
138
+ ```
139
+ или при ошибке:
140
+ ```js
141
+ {
142
+ error: true,
143
+ message: "Не удалось создать задачу в Битрикс24: <текст ошибки>"
144
+ }
145
+ ```
146
+
147
+ **Параметры `dataTask`:**
148
+
149
+ | Параметр | Тип | По умолчанию | Описание |
150
+ | ---------------- | ------------ | ------------------------- | --------------------------------------------- |
151
+ | `title` | string | **обязательно** | Заголовок задачи |
152
+ | `description` | string | `""` | Описание задачи |
153
+ | `createdBy` | number | `138` | ID создателя |
154
+ | `responsibleId` | number | `1` | ID ответственного |
155
+ | `deadline` | ISO string | `DateTime.now() + 1 день` | Дедлайн в ISO формате |
156
+ | `groupId` | number\|null | `null` | ID группы (опционально) |
157
+ | `accomplices` | array | `[]` | Массив ID соисполнителей |
158
+ | `maxTasks` | number | `100` | Максимум существующих задач с таким названием |
159
+ | `entityTypeAbbr` | string | `""` | Код CRM сущности для `UF_CRM_TASK` |
160
+
161
+ ```js
162
+ await errTask(b24, {
163
+ title: "Ошибка синхронизации",
164
+ description: "Не удалось подключиться к API",
165
+ responsibleId: 42,
166
+ deadline: new Date(Date.now() + 2 * 24 * 60 * 60 * 1000).toISOString(),
167
+ maxTasks: 50,
168
+ });
169
+ ```
201
170
 
202
- // Получить события
203
- const result = await eventHandler.get("ONCRMDYNAMICITEMUPDATE_149");
171
+ ### События
204
172
 
205
- if (!result.error && result.data) {
206
- const events = result.data;
207
- console.log("Process ID:", events.processId);
208
- console.log("Entity IDs:", events.entitysId);
173
+ - **`Event`** класс для работы с офлайн-событиями Bitrix24.
209
174
 
210
- // Очистить события
211
- if (events.processId) {
212
- const messageIds = events.arrMessageIdAndEntityId.map((e) => e.messageId);
213
- await eventHandler.clear(events.processId, messageIds);
214
- }
215
- }
216
- ```
175
+ ```js
176
+ import { Event } from "@andrey4emk/npm-app-back-b24";
217
177
 
218
- **Методы:**
178
+ const eventHandler = new Event(b24);
179
+ ```
219
180
 
220
- - **`get(eventName)`** — получить события по названию
221
- - **`clear(processId, messageId)`** — очистить события в Bitrix24
181
+ **Методы:**
182
+
183
+ - **`get(eventName)`** — получить события по названию.
184
+
185
+ - **Параметры:**
186
+
187
+ - `eventName` (string) — название события (например, `'ONCRMDYNAMICITEMUPDATE_149'`).
188
+
189
+ - **Возвращает:** промис с объектом:
190
+
191
+ ```js
192
+ {
193
+ error: false,
194
+ events: {
195
+ processId: "12345",
196
+ entitysId: [101, 102, 103],
197
+ arrMessageIdAndEntityId: [
198
+ { messageId: "msg_1", entityId: 101 },
199
+ { messageId: "msg_2", entityId: 102 },
200
+ { messageId: "msg_3", entityId: 103 }
201
+ ]
202
+ }
203
+ }
204
+ ```
205
+
206
+ или при ошибке:
207
+
208
+ ```js
209
+ {
210
+ error: true,
211
+ status: "error",
212
+ message: "Не удалось получить события. <текст ошибки>"
213
+ }
214
+ ```
215
+
216
+ - **Особенности:**
217
+ - Автоматически фильтрует и удаляет события от пользователя с `user_id: '138'`.
218
+ - Если событий нет, возвращает `events` с пустыми массивами.
219
+
220
+ ```js
221
+ const { error, events } = await eventHandler.get("ONCRMDYNAMICITEMUPDATE_149");
222
+ if (!error && events.entitysId.length > 0) {
223
+ console.log("Обработанные ID сущностей:", events.entitysId);
224
+ // events.processId — идентификатор процесса для очистки
225
+ // events.arrMessageIdAndEntityId — данные для методов clear() и deleteMessageId()
226
+ }
227
+ ```
228
+
229
+ - **`clear(processId, messageId)`** — очистить события в Bitrix24.
230
+
231
+ - **Параметры:**
232
+
233
+ - `processId` (string|number) — ID процесса (получен из `get()`).
234
+ - `messageId` (array|string) — ID или массив ID сообщений для очистки.
235
+
236
+ - **Возвращает:** промис с объектом:
237
+ ```js
238
+ {
239
+ error: false;
240
+ }
241
+ ```
242
+ или при ошибке:
243
+ ```js
244
+ {
245
+ error: true,
246
+ status: "error",
247
+ message: "Не удалось очистить события. <текст ошибки>"
248
+ }
249
+ ```
250
+
251
+ ```js
252
+ const { events } = await eventHandler.get("ONCRMDYNAMICITEMUPDATE_149");
253
+ if (events.processId) {
254
+ const messageIds = events.arrMessageIdAndEntityId.map((item) => item.messageId);
255
+ await eventHandler.clear(events.processId, messageIds);
256
+ }
257
+ ```
258
+
259
+ - **`deleteMessageId(entityId, arrMessageIdAndEntityId)`** — удалить запись события из массива (локально).
260
+
261
+ - **Параметры:**
262
+
263
+ - `entityId` (number) — ID сущности для удаления.
264
+ - `arrMessageIdAndEntityId` (array) — исходный массив событий.
265
+
266
+ - **Возвращает:** обновлённый массив без записей с указанным `entityId`.
267
+
268
+ ```js
269
+ const { events } = await eventHandler.get("ONCRMDYNAMICITEMUPDATE_149");
270
+ const updated = eventHandler.deleteMessageId(101, events.arrMessageIdAndEntityId);
271
+ // updated содержит все события, кроме entityId: 101
272
+ ```
222
273
 
223
274
  ### ChatApp
224
275
 
225
- Класс для работы с мессенджерами через ChatApp Online.
226
-
227
- ```typescript
228
- import { ChatApp } from "@andrey4emk/npm-app-back-b24";
229
- import type { ChatAppMakeParams, ChatAppAuthParams, ChatAppTypeParams } from "@andrey4emk/npm-app-back-b24";
230
-
231
- const makeParams: ChatAppMakeParams = {
232
- email: "your-email@example.com",
233
- pass: "your-password",
234
- appId: "your-app-id",
235
- };
236
-
237
- const authParams: ChatAppAuthParams = {
238
- accessToken: "",
239
- accessTokenEndTime: "",
240
- refreshToken: "",
241
- refreshTokenEndTime: "",
242
- };
243
-
244
- const typeParams: ChatAppTypeParams = {
245
- whatsApp: {
246
- licenseId: "12345",
247
- messenger: [{ type: "grWhatsApp" }],
248
- },
249
- telegram: {
250
- licenseId: "67890",
251
- messenger: [{ type: "telegram" }],
252
- },
253
- };
254
-
255
- const chatApp = new ChatApp(makeParams, authParams, typeParams);
256
-
257
- // Отправка сообщения
258
- const result = await chatApp.sendMessageChatApp("whatsApp", {
259
- phone: "+1234567890",
260
- message: "Привет!",
261
- });
262
-
263
- // Отправка файла
264
- await chatApp.sendFileChatApp("telegram", {
265
- phone: "123456789",
266
- message: "Документ",
267
- fileUrl: "https://example.com/file.pdf",
268
- fileName: "document.pdf",
269
- });
270
-
271
- // Проверка номера
272
- const check = await chatApp.phoneCheckChatApp("whatsApp", "+1234567890");
273
- ```
274
-
275
- ### Wappi
276
-
277
- Класс для работы с Wappi API (WhatsApp, Telegram, Max).
278
-
279
- ```typescript
280
- import { Wappi } from "@andrey4emk/npm-app-back-b24";
281
- import type { WappiAuth, MessengerType } from "@andrey4emk/npm-app-back-b24";
282
-
283
- const whatsAppAuth: WappiAuth = { token: "xxx", profile_id: "123" };
284
- const telegramAuth: WappiAuth = { token: "yyy", profile_id: "456" };
285
- const maxAuth: WappiAuth = { token: "zzz", profile_id: "789" };
286
-
287
- const wappi = new Wappi(maxAuth, telegramAuth, whatsAppAuth);
276
+ - **`chatApp`** — готовый экземпляр класса `ChatApp` для работы с мессенджерами через платформу ChatApp Online.
288
277
 
289
- // Отправка сообщения
290
- const result = await wappi.sendMessageWappi("whatsApp", {
291
- phone: "+1234567890",
292
- message: "Привет!",
293
- sendOpenLine: true, // Отображать в открытой линии Б24
294
- });
295
-
296
- // Отправка файла
297
- await wappi.sendFileWappi("telegram", {
298
- phone: "+1234567890",
299
- message: "Документ",
300
- fileUrl: "https://example.com/file.pdf",
301
- fileName: "document.pdf",
302
- });
303
-
304
- // Проверка номера
305
- const check = await wappi.phoneCheckWappi("whatsApp", "+1234567890");
306
- if (!check.error && check.data?.check) {
307
- console.log("Номер существует в WhatsApp");
308
- }
309
- ```
310
-
311
- **Поддерживаемые мессенджеры (`MessengerType`):**
312
-
313
- - `"whatsApp"`
314
- - `"telegram"`
315
- - `"max"`
316
-
317
- ### Email
318
-
319
- Класс для отправки email через Yandex SMTP.
320
-
321
- ```typescript
322
- import { Email } from "@andrey4emk/npm-app-back-b24";
323
- import type { EmailAuth, EmailData } from "@andrey4emk/npm-app-back-b24";
278
+ ```js
279
+ import { chatApp } from "@andrey4emk/npm-app-back-b24";
280
+ ```
324
281
 
325
- const auth: EmailAuth = {
326
- user: "your-email@yandex.ru",
327
- pass: "app-password",
328
- };
282
+ **Методы:**
329
283
 
330
- const email = new Email(auth);
284
+ - **`makeTokenChatApp()`** получить токены доступа для ChatApp API.
285
+
286
+ - **Возвращает:** промис с объектом:
331
287
 
332
- const result = await email.send({
333
- to: "recipient@example.com",
334
- subject: "Тема письма",
335
- text: "Текст письма",
336
- html: "<p>HTML версия</p>",
337
- fileUrl: "https://example.com/file.pdf", // Опционально
338
- fileName: "document.pdf",
339
- });
340
- ```
288
+ ```js
289
+ {
290
+ error: false;
291
+ }
292
+ ```
293
+
294
+ или при ошибке:
295
+
296
+ ```js
297
+ {
298
+ error: true,
299
+ message: "Не удалось получить токен ChatApp",
300
+ data: { /* API response */ }
301
+ }
302
+ ```
303
+
304
+ - **Особенности:**
305
+ - Сохраняет полученные токены в свойствах экземпляра (`accessToken`, `refreshToken` и т.д.).
306
+ - Требует переменные окружения: `CHATAPP_EMAIL`, `CHATAPP_PASS`, `CHATAPP_APP_ID`.
307
+
308
+ ```js
309
+ const result = await chatApp.makeTokenChatApp();
310
+ if (!result.error) {
311
+ console.log("Токены успешно получены");
312
+ }
313
+ ```
314
+
315
+ - **`refreshTokenChatApp()`** — обновить токены доступа.
316
+
317
+ - **Возвращает:** промис с объектом:
318
+
319
+ ```js
320
+ {
321
+ error: false;
322
+ }
323
+ ```
324
+
325
+ или при ошибке:
326
+
327
+ ```js
328
+ {
329
+ error: true,
330
+ message: "Не удалось обновить токен ChatApp",
331
+ data: { /* API response */ }
332
+ }
333
+ ```
334
+
335
+ - **Алгоритм:**
336
+ 1. Пытается обновить токены через API.
337
+ 2. Если обновление не удалось, автоматически получает новые токены через `makeTokenChatApp()`.
338
+
339
+ ```js
340
+ const result = await chatApp.refreshTokenChatApp();
341
+ if (!result.error) {
342
+ console.log("Токены обновлены");
343
+ }
344
+ ```
345
+
346
+ - **`checkTokenChatApp()`** — проверить валидность текущего токена.
347
+
348
+ - **Возвращает:** промис с объектом:
349
+
350
+ ```js
351
+ {
352
+ error: false,
353
+ message: "Токен действителен" // или "Токен обновлен"
354
+ }
355
+ ```
356
+
357
+ или при ошибке:
358
+
359
+ ```js
360
+ {
361
+ error: true,
362
+ message: "<текст ошибки>",
363
+ data: null
364
+ }
365
+ ```
366
+
367
+ - **Особенности:**
368
+ - Если токен невалидный, автоматически вызывает `refreshTokenChatApp()`.
369
+
370
+ ```js
371
+ const result = await chatApp.checkTokenChatApp();
372
+ console.log(result.message);
373
+ ```
374
+
375
+ - **`getLicensesChatApp()`** — получить список лицензий для текущего аккаунта.
376
+
377
+ - **Возвращает:** промис с объектом:
378
+
379
+ ```js
380
+ {
381
+ error: false,
382
+ message: "Лицензии успешно получены",
383
+ data: [ /* массив лицензий */ ]
384
+ }
385
+ ```
386
+
387
+ или при ошибке:
388
+
389
+ ```js
390
+ {
391
+ error: true,
392
+ message: "Не удалось получить лицензии ChatApp",
393
+ data: null
394
+ }
395
+ ```
396
+
397
+ - **Структура лицензии в массиве:**
398
+ ```js
399
+ {
400
+ id: 15779,
401
+ licenseName: "*5787",
402
+ messengers: [
403
+ { type: "grWhatsApp", name: "[WEB] WhatsApp" }
404
+ ]
405
+ }
406
+ ```
407
+
408
+ ```js
409
+ const result = await chatApp.getLicensesChatApp();
410
+ if (!result.error) {
411
+ console.log("Доступные лицензии:", result.data);
412
+ }
413
+ ```
414
+
415
+ - **`sendMessageChatApp(messengerType, messageData)`** — отправить сообщение через мессенджер.
416
+
417
+ - **Параметры:**
418
+
419
+ - `messengerType` (string) — тип мессенджера: `"whatsApp"` или `"telegram"`.
420
+ - `messageData` (object) — объект с данными сообщения:
421
+ - `phone` (string) — номер телефона или ID чата получателя.
422
+ - `message` (string) — текст сообщения.
423
+
424
+ - **Возвращает:** промис с объектом:
425
+
426
+ ```js
427
+ {
428
+ error: false,
429
+ message: "Сообщение успешно отправлено в ChatApp через whatsApp",
430
+ data: null
431
+ }
432
+ ```
433
+
434
+ или при ошибке:
435
+
436
+ ```js
437
+ {
438
+ error: true,
439
+ message: "Ошибка при отправке сообщения в ChatApp через whatsApp",
440
+ data: null
441
+ }
442
+ ```
443
+
444
+ - **Особенности:**
445
+ - Перед отправкой автоматически проверяет токен через `checkTokenChatApp()`.
446
+ - Использует конфигурацию из [config.js](config.js) для получения ID лицензий и типов мессенджеров.
447
+ - Поддерживает отправку сообщений в WhatsApp и Telegram.
448
+
449
+ ```js
450
+ const result = await chatApp.sendMessageChatApp("whatsApp", {
451
+ phone: "+1234567890",
452
+ message: "Это тестовое сообщение",
453
+ });
454
+
455
+ if (!result.error) {
456
+ console.log(result.message);
457
+ } else {
458
+ console.error(result.message);
459
+ }
460
+ ```
461
+
462
+ **Пример отправки в Telegram:**
463
+
464
+ ```js
465
+ const result = await chatApp.sendMessageChatApp("telegram", {
466
+ phone: "123456789", // ID чата в Telegram
467
+ message: "Привет из приложения!",
468
+ });
469
+ ```
341
470
 
342
471
  ### Smsgold
343
472
 
344
- Класс для отправки SMS через SMSGold.
345
-
346
- ```typescript
347
- import { Smsgold } from "@andrey4emk/npm-app-back-b24";
348
- import type { SmsgoldAuth, SmsData } from "@andrey4emk/npm-app-back-b24";
349
-
350
- const auth: SmsgoldAuth = {
351
- user: "login",
352
- pass: "password",
353
- };
354
-
355
- // Без Bitrix24 (без прикрепления файлов)
356
- const smsgold = new Smsgold(auth);
357
-
358
- // С Bitrix24 (для прикрепления файлов через диск)
359
- const smsgoldWithB24 = new Smsgold(auth, $b24);
360
-
361
- const result = await smsgold.sendSms({
362
- phone: "+79990000000",
363
- message: "Готово!",
364
- });
365
-
366
- // С файлом (требуется $b24)
367
- await smsgoldWithB24.sendSms({
368
- phone: "+79990000000",
369
- message: "Ваш документ",
370
- fileUrl: "https://example.com/file.pdf",
371
- fileName: "document.pdf",
372
- });
373
- ```
374
-
375
- ### Logs
376
-
377
- Логирование с цветами и настройками.
378
-
379
- ```typescript
380
- import { logs } from "@andrey4emk/npm-app-back-b24";
381
-
382
- logs.add("Информационное сообщение", "info");
383
- logs.add("Отладочная информация", "debug", { key: "value" });
384
- logs.add("Ошибка!", "error");
385
- ```
386
-
387
- **Уровни логирования (`LogLevel`):**
388
-
389
- - `"info"` — зелёный (включен по умолчанию)
390
- - `"debug"` — серый (выключен по умолчанию)
391
- - `"error"` — красный (включен по умолчанию)
392
-
393
- Настройки хранятся в `config/log.json`.
394
-
395
- ## Типы
396
-
397
- ### ApiResult
473
+ - **`smsgold.sendSms(phone, message)`** отправляет SMS через сервис SMSGold.
398
474
 
399
- Универсальный результат операций:
475
+ ```js
476
+ import { smsgold } from "@andrey4emk/npm-app-back-b24";
400
477
 
401
- ```typescript
402
- interface ApiResult<T = unknown> {
403
- error: boolean;
404
- message: string;
405
- data?: T;
406
- result?: T;
407
- status?: string;
408
- info?: T;
409
- }
410
- ```
478
+ const result = await smsgold.sendSms("+79990000000", "Готово!");
479
+ if (!result.error) {
480
+ console.log(result.message);
481
+ } else {
482
+ console.error(result.result);
483
+ }
484
+ ```
411
485
 
412
- ### MessageData
486
+ **Требуемые переменные окружения:**
413
487
 
414
- Данные сообщения для Wappi/ChatApp:
488
+ | Переменная | Назначение |
489
+ | -------------- | ---------------- |
490
+ | `SMSGOLD_USER` | Логин в SMSGold |
491
+ | `SMSGOLD_PASS` | Пароль в SMSGold |
415
492
 
416
- ```typescript
417
- interface MessageData {
418
- phone: string;
419
- message: string;
420
- fileUrl?: string;
421
- fileName?: string;
422
- sendOpenLine?: boolean;
423
- }
424
- ```
493
+ Метод возвращает объект `{ error, message, result }`, где в `result` содержатся статус-код HTTP и тело ответа сервиса.
425
494
 
426
495
  ## Переменные окружения
427
496
 
428
- | Переменная | Назначение |
429
- | --------------------------- | ---------------------------- |
430
- | `APP_ENV` | Окружение (`DEV` или `PROD`) |
431
- | `APP_NAME` | Название приложения |
432
- | `CONFIG_DIR` | Путь к папке с конфигами |
433
- | `APP_B24_CLIENT_ID` | Client ID для production |
434
- | `APP_B24_CLIENT_SECRET` | Client Secret для production |
435
- | `APP_B24_CLIENT_ID_DEV` | Client ID для DEV |
436
- | `APP_B24_CLIENT_SECRET_DEV` | Client Secret для DEV |
497
+ | Переменная | Назначение |
498
+ | --------------------------- | ------------------------------------------------------------- |
499
+ | `APP_B24_DOMEN` | Домен Bitrix24, для которого хранится запись авторизации в БД |
500
+ | `APP_B24_CLIENT_ID` | Client ID для production |
501
+ | `APP_B24_CLIENT_SECRET` | Client Secret для production |
502
+ | `APP_B24_CLIENT_ID_DEV` | Client ID для DEV окружения |
503
+ | `APP_B24_CLIENT_SECRET_DEV` | Client Secret для DEV окружения |
504
+ | `APP_ENV` | Определяет окружение (`DEV` или production) |
505
+ | `APP_NAME` | Название приложения (используется в описании задач) |
506
+ | `CHATAPP_EMAIL` | Email аккаунта ChatApp |
507
+ | `CHATAPP_PASS` | Пароль аккаунта ChatApp |
508
+ | `CHATAPP_APP_ID` | ID приложения в ChatApp |
437
509
 
438
510
  **Пример `.env`:**
439
511
 
440
512
  ```env
513
+ APP_B24_DOMEN=mycompany.bitrix24.ru
441
514
  APP_ENV=DEV
442
- APP_NAME=MyApp
443
- CONFIG_DIR=../config
444
-
445
515
  APP_B24_CLIENT_ID_DEV=xxx
446
516
  APP_B24_CLIENT_SECRET_DEV=yyy
447
517
  APP_B24_CLIENT_ID=aaa
448
518
  APP_B24_CLIENT_SECRET=bbb
519
+ APP_NAME=MyApp
520
+
521
+ CHATAPP_EMAIL=your-email@example.com
522
+ CHATAPP_PASS=your-password
523
+ CHATAPP_APP_ID=your-app-id
449
524
  ```
450
525
 
451
526
  ## Скрипты
452
527
 
453
- ```bash
454
- npm run build # Компиляция TypeScript
455
- npm run build:watch # Компиляция в watch-режиме
456
- npm run pack:dry # Предпросмотр содержимого пакета
457
- npm test # Запуск тестов
458
- ```
528
+ - `npm run test` — запуск тестов (заглушка).
529
+ - `npm run pack:dry` предпросмотр содержимого пакета перед публикацией.
459
530
 
460
531
  ## Лицензия
461
532