@warriorteam/redai-zalo-sdk 1.20.0 → 1.22.0
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/CHANGELOG.md +108 -0
- package/README.md +18 -0
- package/dist/services/broadcast.service.d.ts +19 -1
- package/dist/services/broadcast.service.d.ts.map +1 -1
- package/dist/services/broadcast.service.js +150 -0
- package/dist/services/broadcast.service.js.map +1 -1
- package/dist/services/promotion.service.d.ts +30 -3
- package/dist/services/promotion.service.d.ts.map +1 -1
- package/dist/services/promotion.service.js +225 -44
- package/dist/services/promotion.service.js.map +1 -1
- package/dist/types/broadcast.d.ts +87 -0
- package/dist/types/broadcast.d.ts.map +1 -1
- package/dist/types/message.d.ts +42 -22
- package/dist/types/message.d.ts.map +1 -1
- package/docs/API_REFERENCE.md +14 -0
- package/docs/BROADCAST_SERVICE.md +86 -1
- package/docs/PROMOTION_API_V3_MIGRATION.md +229 -0
- package/examples/broadcast-example.ts +59 -2
- package/examples/promotion-examples.ts +250 -0
- package/package.json +10 -3
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,114 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.22.0] - 2025-08-29
|
|
9
|
+
|
|
10
|
+
### 🚀 MAJOR UPDATE - Promotion Service v3.0
|
|
11
|
+
|
|
12
|
+
#### ⬆️ API Version Upgrade
|
|
13
|
+
- **UPGRADED**: Promotion Service từ v2.0 lên **v3.0** API
|
|
14
|
+
- **URL**: Cập nhật endpoint từ `/v2.0/oa/message/promotion` lên `/v3.0/oa/message/promotion`
|
|
15
|
+
- **BREAKING**: Cấu trúc message elements hoàn toàn mới, không tương thích ngược
|
|
16
|
+
|
|
17
|
+
#### 🏗️ New Message Elements Structure
|
|
18
|
+
- **BANNER**: Element với `attachment_id` hoặc `image_url`, type="banner"
|
|
19
|
+
- **HEADER**: Element với `content` và `align`, type="header" (tối đa 100 ký tự)
|
|
20
|
+
- **TEXT**: Element với `content` và `align`, type="text" (tối đa 1000 ký tự, tối đa 2 đoạn)
|
|
21
|
+
- **TABLE**: Element với `content` array, type="table" (tối đa 5 items, key ≤ 25 chars, value ≤ 100 chars)
|
|
22
|
+
|
|
23
|
+
#### 🔘 Enhanced Button System
|
|
24
|
+
- **PAYLOAD**: Hỗ trợ cả object và string tùy theo button type
|
|
25
|
+
- **TYPES**: `oa.open.url`, `oa.query.show`, `oa.query.hide`, `oa.open.sms`, `oa.open.phone`
|
|
26
|
+
- **VALIDATION**: Title tối đa 35 ký tự, tối đa 4 buttons
|
|
27
|
+
- **ICONS**: Hỗ trợ `image_icon` với URL/attachment_id/"default"
|
|
28
|
+
|
|
29
|
+
#### 🌐 Multi-language Support
|
|
30
|
+
- **LANGUAGE**: Thêm thuộc tính `language: "VI" | "EN"`
|
|
31
|
+
- **LOCALIZATION**: Nội dung mặc định tự động chuyển ngôn ngữ
|
|
32
|
+
|
|
33
|
+
#### 🆕 New Methods & Features
|
|
34
|
+
- **ADDED**: `sendCustomPromotion()` - Gửi promotion theo format chuẩn docs v3.0
|
|
35
|
+
- **ENHANCED**: `sendProductPromotion()` - Cập nhật với elements structure mới
|
|
36
|
+
- **ENHANCED**: `sendEventNotification()` - Cập nhật với table và text elements
|
|
37
|
+
- **ENHANCED**: `sendNewsletter()` - Cập nhật với banner và table elements
|
|
38
|
+
- **VALIDATION**: Nâng cao validation cho elements và buttons
|
|
39
|
+
|
|
40
|
+
#### 📚 Comprehensive Documentation & Examples
|
|
41
|
+
- **ADDED**: `docs/PROMOTION_API_V3_MIGRATION.md` - Hướng dẫn migration chi tiết
|
|
42
|
+
- **ADDED**: `examples/promotion-examples.ts` - Examples đầy đủ cho tất cả tính năng
|
|
43
|
+
- **EXAMPLES**: Demo 5 button types với payload format đúng
|
|
44
|
+
- **MIGRATION**: Breaking changes và checklist migration
|
|
45
|
+
|
|
46
|
+
#### 🛡️ Enhanced Validation & Error Handling
|
|
47
|
+
- **TIME**: Kiểm tra sending time (8:00-22:00)
|
|
48
|
+
- **ELEMENTS**: Validate structure và content length
|
|
49
|
+
- **BUTTONS**: Validate payload format theo từng type
|
|
50
|
+
- **ERRORS**: Error codes cụ thể cho từng violation
|
|
51
|
+
|
|
52
|
+
### 🔧 BREAKING CHANGES
|
|
53
|
+
- **Elements Structure**: Hoàn toàn khác v2.0, cần migration
|
|
54
|
+
- **Button Payload**: Từ string thành object/string tùy type
|
|
55
|
+
- **Image Handling**: Ưu tiên `attachment_id` thay vì `image_url`
|
|
56
|
+
- **API URL**: Phải cập nhật từ v2.0 lên v3.0
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## [1.21.0] - 2025-08-29
|
|
61
|
+
|
|
62
|
+
### 🚀 NEW FEATURES
|
|
63
|
+
|
|
64
|
+
#### Enhanced Broadcast Service - Multiple Messages Support
|
|
65
|
+
- **ADDED**: `sendMultipleBroadcastMessages()` - Gửi nhiều broadcast messages với nhiều attachment IDs
|
|
66
|
+
- **MODES**: Hỗ trợ 2 chế độ gửi: `sequential` (tuần tự) và `parallel` (song song)
|
|
67
|
+
- **DELAY**: Tùy chỉnh delay giữa các tin nhắn cho sequential mode
|
|
68
|
+
- **PROGRESS**: Real-time progress tracking với callback `onProgress`
|
|
69
|
+
- **RESILIENT**: Error isolation - lỗi của 1 tin không ảnh hưởng các tin khác
|
|
70
|
+
- **SMART**: Tự động loại bỏ attachment IDs trùng lặp
|
|
71
|
+
|
|
72
|
+
#### Advanced Campaign Management
|
|
73
|
+
- **SEQUENTIAL**: Gửi tuần tự với delay tùy chỉnh để tránh rate limit
|
|
74
|
+
- **PARALLEL**: Gửi song song để tối ưu tốc độ
|
|
75
|
+
- **MONITORING**: Theo dõi real-time số tin thành công/thất bại
|
|
76
|
+
- **STATISTICS**: Thống kê chi tiết thời gian thực hiện và success rate
|
|
77
|
+
|
|
78
|
+
### 📊 NEW INTERFACES
|
|
79
|
+
|
|
80
|
+
#### Multiple Broadcast Types
|
|
81
|
+
- **ADDED**: `BroadcastMessageResult` - Kết quả từng tin nhắn broadcast
|
|
82
|
+
- **ADDED**: `MultipleBroadcastProgress` - Interface cho progress tracking
|
|
83
|
+
- **ADDED**: `MultipleBroadcastResult` - Kết quả tổng thể campaign
|
|
84
|
+
- **ENHANCED**: Progress callback với detailed metrics
|
|
85
|
+
|
|
86
|
+
### 🛡️ ENHANCED ERROR HANDLING
|
|
87
|
+
- **ISOLATION**: Lỗi của 1 attachment không làm dừng campaign
|
|
88
|
+
- **DETAILED**: Chi tiết lỗi cho từng tin nhắn riêng biệt
|
|
89
|
+
- **VALIDATION**: Kiểm tra attachment IDs array không rỗng
|
|
90
|
+
- **DEDUPLICATION**: Tự động loại bỏ attachment IDs trùng lặp
|
|
91
|
+
|
|
92
|
+
### 📚 UPDATED DOCUMENTATION & EXAMPLES
|
|
93
|
+
|
|
94
|
+
#### Enhanced Documentation
|
|
95
|
+
- **UPDATED**: `docs/BROADCAST_SERVICE.md` - Thêm multiple messages examples
|
|
96
|
+
- **UPDATED**: `docs/API_REFERENCE.md` - Thêm sendMultipleBroadcastMessages method
|
|
97
|
+
- **UPDATED**: `README.md` - Thêm ví dụ multiple broadcast
|
|
98
|
+
|
|
99
|
+
#### Enhanced Examples
|
|
100
|
+
- **UPDATED**: `examples/broadcast-example.ts` - Thêm sequential và parallel examples
|
|
101
|
+
- **EXAMPLES**: Progress tracking và error handling
|
|
102
|
+
- **EXAMPLES**: Campaign management với statistics
|
|
103
|
+
|
|
104
|
+
#### Enhanced Tests
|
|
105
|
+
- **UPDATED**: `tests/broadcast.test.ts` - Comprehensive tests cho multiple messages
|
|
106
|
+
- **COVERAGE**: Test sequential và parallel modes
|
|
107
|
+
- **COVERAGE**: Test progress callback và error handling
|
|
108
|
+
- **COVERAGE**: Test duplicate removal và validation
|
|
109
|
+
|
|
110
|
+
### 🔧 API ENHANCEMENTS
|
|
111
|
+
- **FLEXIBLE**: Chọn mode phù hợp với use case (sequential vs parallel)
|
|
112
|
+
- **CONFIGURABLE**: Delay tùy chỉnh cho rate limiting
|
|
113
|
+
- **OBSERVABLE**: Progress tracking cho campaign monitoring
|
|
114
|
+
- **ROBUST**: Comprehensive error handling và validation
|
|
115
|
+
|
|
8
116
|
## [1.20.0] - 2025-08-29
|
|
9
117
|
|
|
10
118
|
### 🚀 NEW FEATURES
|
package/README.md
CHANGED
|
@@ -408,6 +408,24 @@ await zalo.broadcast.sendBroadcastMessage(
|
|
|
408
408
|
{ target: hcmTarget },
|
|
409
409
|
"article-id"
|
|
410
410
|
);
|
|
411
|
+
|
|
412
|
+
// Send multiple broadcast messages
|
|
413
|
+
const attachmentIds = ["article-1", "article-2", "article-3"];
|
|
414
|
+
|
|
415
|
+
const multipleResult = await zalo.broadcast.sendMultipleBroadcastMessages(
|
|
416
|
+
accessToken,
|
|
417
|
+
{ target: hcmTarget },
|
|
418
|
+
attachmentIds,
|
|
419
|
+
{
|
|
420
|
+
mode: 'sequential',
|
|
421
|
+
delay: 2000, // 2 seconds between messages
|
|
422
|
+
onProgress: (progress) => {
|
|
423
|
+
console.log(`Progress: ${progress.completed}/${progress.total}`);
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
);
|
|
427
|
+
|
|
428
|
+
console.log(`Sent ${multipleResult.successfulMessages}/${multipleResult.totalMessages} messages`);
|
|
411
429
|
```
|
|
412
430
|
|
|
413
431
|
### Consultation Service (Customer Support)
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
* - 3005: Nội dung vi phạm chính sách
|
|
31
31
|
*/
|
|
32
32
|
import { ZaloClient } from '../clients/zalo-client';
|
|
33
|
-
import { BroadcastResponse, BroadcastTarget, BroadcastRecipient, BROADCAST_CITY_CODES, BROADCAST_AGE_CODES, BROADCAST_GENDER_CODES, BROADCAST_LOCATION_CODES, BROADCAST_PLATFORM_CODES } from '../types/broadcast';
|
|
33
|
+
import { BroadcastResponse, BroadcastTarget, BroadcastRecipient, BROADCAST_CITY_CODES, BROADCAST_AGE_CODES, BROADCAST_GENDER_CODES, BROADCAST_LOCATION_CODES, BROADCAST_PLATFORM_CODES, MultipleBroadcastResult, MultipleBroadcastProgress } from '../types/broadcast';
|
|
34
34
|
export declare class BroadcastService {
|
|
35
35
|
private readonly client;
|
|
36
36
|
private readonly broadcastApiUrl;
|
|
@@ -86,5 +86,23 @@ export declare class BroadcastService {
|
|
|
86
86
|
* @returns Object mapping platforms to codes
|
|
87
87
|
*/
|
|
88
88
|
getPlatformCodes(): typeof BROADCAST_PLATFORM_CODES;
|
|
89
|
+
/**
|
|
90
|
+
* Gửi nhiều tin nhắn broadcast với nhiều attachment IDs
|
|
91
|
+
* @param accessToken Access token của Official Account
|
|
92
|
+
* @param recipient Thông tin targeting người nhận
|
|
93
|
+
* @param attachmentIds Danh sách các article attachment IDs
|
|
94
|
+
* @param options Tùy chọn gửi (delay giữa các tin, parallel/sequential)
|
|
95
|
+
* @returns Danh sách kết quả gửi broadcast
|
|
96
|
+
*/
|
|
97
|
+
sendMultipleBroadcastMessages(accessToken: string, recipient: BroadcastRecipient, attachmentIds: string[], options?: {
|
|
98
|
+
delay?: number;
|
|
99
|
+
mode?: 'parallel' | 'sequential';
|
|
100
|
+
onProgress?: (progress: MultipleBroadcastProgress) => void;
|
|
101
|
+
}): Promise<MultipleBroadcastResult>;
|
|
102
|
+
/**
|
|
103
|
+
* Sleep utility for delays
|
|
104
|
+
* @param ms Milliseconds to sleep
|
|
105
|
+
*/
|
|
106
|
+
private sleep;
|
|
89
107
|
}
|
|
90
108
|
//# sourceMappingURL=broadcast.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broadcast.service.d.ts","sourceRoot":"","sources":["../../src/services/broadcast.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,EAEL,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAGlB,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,wBAAwB,EACxB,wBAAwB,
|
|
1
|
+
{"version":3,"file":"broadcast.service.d.ts","sourceRoot":"","sources":["../../src/services/broadcast.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,EAEL,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAGlB,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,wBAAwB,EACxB,wBAAwB,EACxB,uBAAuB,EACvB,yBAAyB,EAE1B,MAAM,oBAAoB,CAAC;AAE5B,qBAAa,gBAAgB;IAIf,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA6C;gBAEhD,MAAM,EAAE,UAAU;IAE/C;;;;;;OAMG;IACU,oBAAoB,CAC/B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,kBAAkB,EAC7B,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,iBAAiB,CAAC;IA2D7B;;;;OAIG;IACI,qBAAqB,CAAC,QAAQ,EAAE;QACrC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC;QACnC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,SAAS,CAAC,EAAE,CAAC,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC,EAAE,CAAC;QAC9C,SAAS,CAAC,EAAE,CAAC,KAAK,GAAG,SAAS,GAAG,eAAe,CAAC,EAAE,CAAC;KACrD,GAAG,eAAe;IA+DnB;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;IA2BhC;;;OAGG;IACI,YAAY,IAAI,OAAO,oBAAoB;IAIlD;;;OAGG;IACI,gBAAgB,IAAI,OAAO,mBAAmB;IAIrD;;;OAGG;IACI,cAAc,IAAI,OAAO,sBAAsB;IAItD;;;OAGG;IACI,gBAAgB,IAAI,OAAO,wBAAwB;IAI1D;;;OAGG;IACI,gBAAgB,IAAI,OAAO,wBAAwB;IAI1D;;;;;;;OAOG;IACU,6BAA6B,CACxC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,kBAAkB,EAC7B,aAAa,EAAE,MAAM,EAAE,EACvB,OAAO,CAAC,EAAE;QACR,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;QACjC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,yBAAyB,KAAK,IAAI,CAAC;KAC5D,GACA,OAAO,CAAC,uBAAuB,CAAC;IAqKnC;;;OAGG;IACH,OAAO,CAAC,KAAK;CAGd"}
|
|
@@ -206,6 +206,156 @@ class BroadcastService {
|
|
|
206
206
|
getPlatformCodes() {
|
|
207
207
|
return broadcast_1.BROADCAST_PLATFORM_CODES;
|
|
208
208
|
}
|
|
209
|
+
/**
|
|
210
|
+
* Gửi nhiều tin nhắn broadcast với nhiều attachment IDs
|
|
211
|
+
* @param accessToken Access token của Official Account
|
|
212
|
+
* @param recipient Thông tin targeting người nhận
|
|
213
|
+
* @param attachmentIds Danh sách các article attachment IDs
|
|
214
|
+
* @param options Tùy chọn gửi (delay giữa các tin, parallel/sequential)
|
|
215
|
+
* @returns Danh sách kết quả gửi broadcast
|
|
216
|
+
*/
|
|
217
|
+
async sendMultipleBroadcastMessages(accessToken, recipient, attachmentIds, options) {
|
|
218
|
+
try {
|
|
219
|
+
// Validate input
|
|
220
|
+
if (!attachmentIds || attachmentIds.length === 0) {
|
|
221
|
+
throw new common_1.ZaloSDKError("At least one attachment ID is required", -1);
|
|
222
|
+
}
|
|
223
|
+
// Remove duplicates
|
|
224
|
+
const uniqueAttachmentIds = [...new Set(attachmentIds)];
|
|
225
|
+
const startTime = Date.now();
|
|
226
|
+
const results = [];
|
|
227
|
+
const mode = options?.mode || 'sequential';
|
|
228
|
+
const delay = options?.delay || 0;
|
|
229
|
+
if (mode === 'parallel') {
|
|
230
|
+
// Gửi song song tất cả
|
|
231
|
+
const promises = uniqueAttachmentIds.map(async (attachmentId, index) => {
|
|
232
|
+
try {
|
|
233
|
+
const result = await this.sendBroadcastMessage(accessToken, recipient, attachmentId);
|
|
234
|
+
const messageResult = {
|
|
235
|
+
attachmentId,
|
|
236
|
+
success: true,
|
|
237
|
+
messageId: result.data.message_id,
|
|
238
|
+
error: null,
|
|
239
|
+
sentAt: new Date()
|
|
240
|
+
};
|
|
241
|
+
// Report progress
|
|
242
|
+
if (options?.onProgress) {
|
|
243
|
+
options.onProgress({
|
|
244
|
+
total: uniqueAttachmentIds.length,
|
|
245
|
+
completed: index + 1,
|
|
246
|
+
successful: results.filter(r => r.success).length + 1,
|
|
247
|
+
failed: results.filter(r => !r.success).length,
|
|
248
|
+
currentAttachmentId: attachmentId,
|
|
249
|
+
isCompleted: index === uniqueAttachmentIds.length - 1
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
return messageResult;
|
|
253
|
+
}
|
|
254
|
+
catch (error) {
|
|
255
|
+
const messageResult = {
|
|
256
|
+
attachmentId,
|
|
257
|
+
success: false,
|
|
258
|
+
messageId: null,
|
|
259
|
+
error: error instanceof common_1.ZaloSDKError ? error : new common_1.ZaloSDKError(error.message, -1),
|
|
260
|
+
sentAt: new Date()
|
|
261
|
+
};
|
|
262
|
+
// Report progress
|
|
263
|
+
if (options?.onProgress) {
|
|
264
|
+
options.onProgress({
|
|
265
|
+
total: uniqueAttachmentIds.length,
|
|
266
|
+
completed: index + 1,
|
|
267
|
+
successful: results.filter(r => r.success).length,
|
|
268
|
+
failed: results.filter(r => !r.success).length + 1,
|
|
269
|
+
currentAttachmentId: attachmentId,
|
|
270
|
+
isCompleted: index === uniqueAttachmentIds.length - 1
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
return messageResult;
|
|
274
|
+
}
|
|
275
|
+
});
|
|
276
|
+
const parallelResults = await Promise.all(promises);
|
|
277
|
+
results.push(...parallelResults);
|
|
278
|
+
}
|
|
279
|
+
else {
|
|
280
|
+
// Gửi tuần tự
|
|
281
|
+
for (let i = 0; i < uniqueAttachmentIds.length; i++) {
|
|
282
|
+
const attachmentId = uniqueAttachmentIds[i];
|
|
283
|
+
try {
|
|
284
|
+
const result = await this.sendBroadcastMessage(accessToken, recipient, attachmentId);
|
|
285
|
+
const messageResult = {
|
|
286
|
+
attachmentId,
|
|
287
|
+
success: true,
|
|
288
|
+
messageId: result.data.message_id,
|
|
289
|
+
error: null,
|
|
290
|
+
sentAt: new Date()
|
|
291
|
+
};
|
|
292
|
+
results.push(messageResult);
|
|
293
|
+
// Report progress
|
|
294
|
+
if (options?.onProgress) {
|
|
295
|
+
options.onProgress({
|
|
296
|
+
total: uniqueAttachmentIds.length,
|
|
297
|
+
completed: i + 1,
|
|
298
|
+
successful: results.filter(r => r.success).length,
|
|
299
|
+
failed: results.filter(r => !r.success).length,
|
|
300
|
+
currentAttachmentId: attachmentId,
|
|
301
|
+
isCompleted: i === uniqueAttachmentIds.length - 1
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
catch (error) {
|
|
306
|
+
const messageResult = {
|
|
307
|
+
attachmentId,
|
|
308
|
+
success: false,
|
|
309
|
+
messageId: null,
|
|
310
|
+
error: error instanceof common_1.ZaloSDKError ? error : new common_1.ZaloSDKError(error.message, -1),
|
|
311
|
+
sentAt: new Date()
|
|
312
|
+
};
|
|
313
|
+
results.push(messageResult);
|
|
314
|
+
// Report progress
|
|
315
|
+
if (options?.onProgress) {
|
|
316
|
+
options.onProgress({
|
|
317
|
+
total: uniqueAttachmentIds.length,
|
|
318
|
+
completed: i + 1,
|
|
319
|
+
successful: results.filter(r => r.success).length,
|
|
320
|
+
failed: results.filter(r => !r.success).length,
|
|
321
|
+
currentAttachmentId: attachmentId,
|
|
322
|
+
isCompleted: i === uniqueAttachmentIds.length - 1
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
// Delay before next message (except for last one)
|
|
327
|
+
if (delay > 0 && i < uniqueAttachmentIds.length - 1) {
|
|
328
|
+
await this.sleep(delay);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
const totalDuration = Date.now() - startTime;
|
|
333
|
+
const successful = results.filter(r => r.success).length;
|
|
334
|
+
const failed = results.filter(r => !r.success).length;
|
|
335
|
+
return {
|
|
336
|
+
totalMessages: uniqueAttachmentIds.length,
|
|
337
|
+
successfulMessages: successful,
|
|
338
|
+
failedMessages: failed,
|
|
339
|
+
results,
|
|
340
|
+
totalDuration,
|
|
341
|
+
mode,
|
|
342
|
+
targetCriteria: recipient.target
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
catch (error) {
|
|
346
|
+
if (error instanceof common_1.ZaloSDKError) {
|
|
347
|
+
throw error;
|
|
348
|
+
}
|
|
349
|
+
throw new common_1.ZaloSDKError(`Failed to send multiple broadcast messages: ${error.message}`, -1, error);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Sleep utility for delays
|
|
354
|
+
* @param ms Milliseconds to sleep
|
|
355
|
+
*/
|
|
356
|
+
sleep(ms) {
|
|
357
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
358
|
+
}
|
|
209
359
|
}
|
|
210
360
|
exports.BroadcastService = BroadcastService;
|
|
211
361
|
//# sourceMappingURL=broadcast.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broadcast.service.js","sourceRoot":"","sources":["../../src/services/broadcast.service.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;;;AAGH,4CAA6D;AAC7D,
|
|
1
|
+
{"version":3,"file":"broadcast.service.js","sourceRoot":"","sources":["../../src/services/broadcast.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -62,7 +62,8 @@ export declare class PromotionService {
|
|
|
62
62
|
sendProductPromotion(accessToken: string, recipient: MessageRecipient, promotionInfo: {
|
|
63
63
|
title: string;
|
|
64
64
|
description: string;
|
|
65
|
-
imageUrl
|
|
65
|
+
imageUrl?: string;
|
|
66
|
+
attachmentId?: string;
|
|
66
67
|
originalPrice: number;
|
|
67
68
|
discountPrice: number;
|
|
68
69
|
discountPercent: number;
|
|
@@ -79,7 +80,8 @@ export declare class PromotionService {
|
|
|
79
80
|
sendEventNotification(accessToken: string, recipient: MessageRecipient, eventInfo: {
|
|
80
81
|
title: string;
|
|
81
82
|
description: string;
|
|
82
|
-
imageUrl
|
|
83
|
+
imageUrl?: string;
|
|
84
|
+
attachmentId?: string;
|
|
83
85
|
eventDate: string;
|
|
84
86
|
location: string;
|
|
85
87
|
registrationUrl: string;
|
|
@@ -94,13 +96,38 @@ export declare class PromotionService {
|
|
|
94
96
|
sendNewsletter(accessToken: string, recipient: MessageRecipient, newsletterInfo: {
|
|
95
97
|
title: string;
|
|
96
98
|
summary: string;
|
|
97
|
-
imageUrl
|
|
99
|
+
imageUrl?: string;
|
|
100
|
+
attachmentId?: string;
|
|
98
101
|
articles: Array<{
|
|
99
102
|
title: string;
|
|
100
103
|
url: string;
|
|
101
104
|
}>;
|
|
102
105
|
unsubscribeUrl: string;
|
|
103
106
|
}): Promise<SendMessageResponse>;
|
|
107
|
+
/**
|
|
108
|
+
* Tạo promotion message theo format chuẩn v3.0 (như trong docs)
|
|
109
|
+
* @param accessToken Access token của Official Account
|
|
110
|
+
* @param recipient Thông tin người nhận
|
|
111
|
+
* @param promotionData Dữ liệu promotion
|
|
112
|
+
* @returns Thông tin tin nhắn đã gửi
|
|
113
|
+
*/
|
|
114
|
+
sendCustomPromotion(accessToken: string, recipient: MessageRecipient, promotionData: {
|
|
115
|
+
attachmentId: string;
|
|
116
|
+
headerContent: string;
|
|
117
|
+
textContent: string;
|
|
118
|
+
tableData: Array<{
|
|
119
|
+
key: string;
|
|
120
|
+
value: string;
|
|
121
|
+
}>;
|
|
122
|
+
footerText?: string;
|
|
123
|
+
buttons: Array<{
|
|
124
|
+
title: string;
|
|
125
|
+
imageIcon?: string;
|
|
126
|
+
type: string;
|
|
127
|
+
payload: Record<string, any> | string;
|
|
128
|
+
}>;
|
|
129
|
+
language?: "VI" | "EN";
|
|
130
|
+
}): Promise<SendMessageResponse>;
|
|
104
131
|
/**
|
|
105
132
|
* Validate promotion message format
|
|
106
133
|
* @param message Promotion message to validate
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promotion.service.d.ts","sourceRoot":"","sources":["../../src/services/promotion.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,kBAAkB,CAAC;AAG1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,qBAAa,gBAAgB;IAIf,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHnC,OAAO,CAAC,QAAQ,CAAC,eAAe,CACsB;gBAEzB,MAAM,EAAE,UAAU;IAE/C;;;;;;OAMG;IACU,oBAAoB,CAC/B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,gBAAgB,EAC3B,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,mBAAmB,CAAC;IAyC/B;;;;;;OAMG;IACU,oBAAoB,CAC/B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,gBAAgB,EAC3B,aAAa,EAAE;QACb,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"promotion.service.d.ts","sourceRoot":"","sources":["../../src/services/promotion.service.ts"],"names":[],"mappings":"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"}
|