@warriorteam/redai-zalo-sdk 1.20.0 → 1.21.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 CHANGED
@@ -5,6 +5,62 @@ 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.21.0] - 2025-08-29
9
+
10
+ ### 🚀 NEW FEATURES
11
+
12
+ #### Enhanced Broadcast Service - Multiple Messages Support
13
+ - **ADDED**: `sendMultipleBroadcastMessages()` - Gửi nhiều broadcast messages với nhiều attachment IDs
14
+ - **MODES**: Hỗ trợ 2 chế độ gửi: `sequential` (tuần tự) và `parallel` (song song)
15
+ - **DELAY**: Tùy chỉnh delay giữa các tin nhắn cho sequential mode
16
+ - **PROGRESS**: Real-time progress tracking với callback `onProgress`
17
+ - **RESILIENT**: Error isolation - lỗi của 1 tin không ảnh hưởng các tin khác
18
+ - **SMART**: Tự động loại bỏ attachment IDs trùng lặp
19
+
20
+ #### Advanced Campaign Management
21
+ - **SEQUENTIAL**: Gửi tuần tự với delay tùy chỉnh để tránh rate limit
22
+ - **PARALLEL**: Gửi song song để tối ưu tốc độ
23
+ - **MONITORING**: Theo dõi real-time số tin thành công/thất bại
24
+ - **STATISTICS**: Thống kê chi tiết thời gian thực hiện và success rate
25
+
26
+ ### 📊 NEW INTERFACES
27
+
28
+ #### Multiple Broadcast Types
29
+ - **ADDED**: `BroadcastMessageResult` - Kết quả từng tin nhắn broadcast
30
+ - **ADDED**: `MultipleBroadcastProgress` - Interface cho progress tracking
31
+ - **ADDED**: `MultipleBroadcastResult` - Kết quả tổng thể campaign
32
+ - **ENHANCED**: Progress callback với detailed metrics
33
+
34
+ ### 🛡️ ENHANCED ERROR HANDLING
35
+ - **ISOLATION**: Lỗi của 1 attachment không làm dừng campaign
36
+ - **DETAILED**: Chi tiết lỗi cho từng tin nhắn riêng biệt
37
+ - **VALIDATION**: Kiểm tra attachment IDs array không rỗng
38
+ - **DEDUPLICATION**: Tự động loại bỏ attachment IDs trùng lặp
39
+
40
+ ### 📚 UPDATED DOCUMENTATION & EXAMPLES
41
+
42
+ #### Enhanced Documentation
43
+ - **UPDATED**: `docs/BROADCAST_SERVICE.md` - Thêm multiple messages examples
44
+ - **UPDATED**: `docs/API_REFERENCE.md` - Thêm sendMultipleBroadcastMessages method
45
+ - **UPDATED**: `README.md` - Thêm ví dụ multiple broadcast
46
+
47
+ #### Enhanced Examples
48
+ - **UPDATED**: `examples/broadcast-example.ts` - Thêm sequential và parallel examples
49
+ - **EXAMPLES**: Progress tracking và error handling
50
+ - **EXAMPLES**: Campaign management với statistics
51
+
52
+ #### Enhanced Tests
53
+ - **UPDATED**: `tests/broadcast.test.ts` - Comprehensive tests cho multiple messages
54
+ - **COVERAGE**: Test sequential và parallel modes
55
+ - **COVERAGE**: Test progress callback và error handling
56
+ - **COVERAGE**: Test duplicate removal và validation
57
+
58
+ ### 🔧 API ENHANCEMENTS
59
+ - **FLEXIBLE**: Chọn mode phù hợp với use case (sequential vs parallel)
60
+ - **CONFIGURABLE**: Delay tùy chỉnh cho rate limiting
61
+ - **OBSERVABLE**: Progress tracking cho campaign monitoring
62
+ - **ROBUST**: Comprehensive error handling và validation
63
+
8
64
  ## [1.20.0] - 2025-08-29
9
65
 
10
66
  ### 🚀 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,EACzB,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;CAG3D"}
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":"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"}
1
+ {"version":3,"file":"broadcast.service.js","sourceRoot":"","sources":["../../src/services/broadcast.service.ts"],"names":[],"mappings":"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"}
@@ -241,4 +241,91 @@ export declare const BROADCAST_PLATFORM_CODES: {
241
241
  readonly ANDROID: "2";
242
242
  readonly WINDOWS_PHONE: "3";
243
243
  };
244
+ /**
245
+ * Result for individual broadcast message
246
+ */
247
+ export interface BroadcastMessageResult {
248
+ /**
249
+ * Article attachment ID
250
+ */
251
+ attachmentId: string;
252
+ /**
253
+ * Whether the broadcast was successful
254
+ */
255
+ success: boolean;
256
+ /**
257
+ * Message ID if successful
258
+ */
259
+ messageId: string | null;
260
+ /**
261
+ * Error if failed
262
+ */
263
+ error: Error | null;
264
+ /**
265
+ * Timestamp when sent
266
+ */
267
+ sentAt: Date;
268
+ }
269
+ /**
270
+ * Progress information for multiple broadcast
271
+ */
272
+ export interface MultipleBroadcastProgress {
273
+ /**
274
+ * Total number of messages to send
275
+ */
276
+ total: number;
277
+ /**
278
+ * Number of messages completed
279
+ */
280
+ completed: number;
281
+ /**
282
+ * Number of successful messages
283
+ */
284
+ successful: number;
285
+ /**
286
+ * Number of failed messages
287
+ */
288
+ failed: number;
289
+ /**
290
+ * Current attachment ID being processed
291
+ */
292
+ currentAttachmentId: string;
293
+ /**
294
+ * Whether all messages are completed
295
+ */
296
+ isCompleted: boolean;
297
+ }
298
+ /**
299
+ * Result for multiple broadcast messages
300
+ */
301
+ export interface MultipleBroadcastResult {
302
+ /**
303
+ * Total number of messages sent
304
+ */
305
+ totalMessages: number;
306
+ /**
307
+ * Number of successful messages
308
+ */
309
+ successfulMessages: number;
310
+ /**
311
+ * Number of failed messages
312
+ */
313
+ failedMessages: number;
314
+ /**
315
+ * Individual message results
316
+ */
317
+ results: BroadcastMessageResult[];
318
+ /**
319
+ * Total duration in milliseconds
320
+ */
321
+ totalDuration: number;
322
+ /**
323
+ * Sending mode used
324
+ */
325
+ mode: 'parallel' | 'sequential';
326
+ /**
327
+ * Target criteria used
328
+ */
329
+ targetCriteria: BroadcastTarget;
330
+ }
244
331
  //# sourceMappingURL=broadcast.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"broadcast.d.ts","sourceRoot":"","sources":["../../src/types/broadcast.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;;;;;;;OAUG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,eAAe,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,UAAU,EAAE,SAAS,CAAC;IAEtB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,aAAa,EAAE,OAAO,CAAC;IAEvB;;OAEG;IACH,QAAQ,EAAE,uBAAuB,EAAE,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC;;OAEG;IACH,IAAI,EAAE,UAAU,CAAC;IAEjB;;OAEG;IACH,OAAO,EAAE,uBAAuB,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,0BAA0B,CAAC;CACxC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,SAAS,EAAE,kBAAkB,CAAC;IAE9B;;OAEG;IACH,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,IAAI,EAAE,qBAAqB,CAAC;IAE5B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiEvB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;CAStB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;;CAIzB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,wBAAwB;;;;CAI3B,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,wBAAwB;;;;CAI3B,CAAC"}
1
+ {"version":3,"file":"broadcast.d.ts","sourceRoot":"","sources":["../../src/types/broadcast.ts"],"names":[],"mappings":"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"}
@@ -627,6 +627,20 @@ async sendBroadcastMessage(
627
627
  ): Promise<BroadcastResponse>
628
628
  ```
629
629
 
630
+ #### sendMultipleBroadcastMessages()
631
+ ```typescript
632
+ async sendMultipleBroadcastMessages(
633
+ accessToken: string,
634
+ recipient: BroadcastRecipient,
635
+ attachmentIds: string[],
636
+ options?: {
637
+ delay?: number;
638
+ mode?: 'parallel' | 'sequential';
639
+ onProgress?: (progress: MultipleBroadcastProgress) => void;
640
+ }
641
+ ): Promise<MultipleBroadcastResult>
642
+ ```
643
+
630
644
  #### createBroadcastTarget()
631
645
  ```typescript
632
646
  createBroadcastTarget(criteria: {
@@ -44,7 +44,37 @@ const result = await zalo.broadcast.sendBroadcastMessage(
44
44
  console.log("Message ID:", result.data.message_id);
45
45
  ```
46
46
 
47
- ### 2. Tạo Targeting Criteria
47
+ ### 2. Gửi Nhiều Broadcast Messages
48
+
49
+ ```typescript
50
+ // Gửi nhiều article attachments tuần tự
51
+ const attachmentIds = [
52
+ "article-id-1",
53
+ "article-id-2",
54
+ "article-id-3"
55
+ ];
56
+
57
+ const target = zalo.broadcast.createBroadcastTarget({
58
+ cities: ["Hồ Chí Minh"]
59
+ });
60
+
61
+ const result = await zalo.broadcast.sendMultipleBroadcastMessages(
62
+ accessToken,
63
+ { target },
64
+ attachmentIds,
65
+ {
66
+ mode: 'sequential',
67
+ delay: 2000, // 2 giây giữa các tin
68
+ onProgress: (progress) => {
69
+ console.log(`${progress.completed}/${progress.total} completed`);
70
+ }
71
+ }
72
+ );
73
+
74
+ console.log(`Sent ${result.successfulMessages}/${result.totalMessages} messages`);
75
+ ```
76
+
77
+ ### 3. Tạo Targeting Criteria
48
78
 
49
79
  ```typescript
50
80
  // Targeting phức tạp
@@ -184,6 +214,61 @@ const result = await zalo.broadcast.sendBroadcastMessage(
184
214
  );
185
215
  ```
186
216
 
217
+ ### 4. Gửi Nhiều Messages Song Song
218
+
219
+ ```typescript
220
+ // Gửi nhiều articles cùng lúc (parallel)
221
+ const attachmentIds = [
222
+ "promo-article-1",
223
+ "promo-article-2",
224
+ "promo-article-3"
225
+ ];
226
+
227
+ const result = await zalo.broadcast.sendMultipleBroadcastMessages(
228
+ accessToken,
229
+ { target },
230
+ attachmentIds,
231
+ {
232
+ mode: 'parallel', // Gửi song song
233
+ onProgress: (progress) => {
234
+ console.log(`Progress: ${progress.completed}/${progress.total}`);
235
+ console.log(`Success: ${progress.successful}, Failed: ${progress.failed}`);
236
+ }
237
+ }
238
+ );
239
+
240
+ console.log("Results:", result.results.map(r => ({
241
+ attachmentId: r.attachmentId,
242
+ success: r.success,
243
+ messageId: r.messageId
244
+ })));
245
+ ```
246
+
247
+ ### 5. Gửi Với Delay Tùy Chỉnh
248
+
249
+ ```typescript
250
+ // Gửi tuần tự với delay 5 giây giữa các tin
251
+ const result = await zalo.broadcast.sendMultipleBroadcastMessages(
252
+ accessToken,
253
+ { target },
254
+ attachmentIds,
255
+ {
256
+ mode: 'sequential',
257
+ delay: 5000, // 5 giây
258
+ onProgress: (progress) => {
259
+ if (progress.isCompleted) {
260
+ console.log("All messages sent!");
261
+ } else {
262
+ console.log(`Sending: ${progress.currentAttachmentId}`);
263
+ }
264
+ }
265
+ }
266
+ );
267
+
268
+ console.log(`Campaign completed in ${result.totalDuration}ms`);
269
+ console.log(`Success rate: ${(result.successfulMessages / result.totalMessages * 100).toFixed(1)}%`);
270
+ ```
271
+
187
272
  ## Error Handling
188
273
 
189
274
  ### Các Lỗi Thường Gặp
@@ -101,8 +101,65 @@ async function broadcastExample() {
101
101
  message: complexResult.message
102
102
  });
103
103
 
104
- // Example 5: Hiển thị các targeting có sẵn
105
- console.log("\n5. Available targeting codes:");
104
+ // Example 5: Gửi nhiều broadcast messages cùng lúc
105
+ console.log("\n5. Multiple broadcast messages (Sequential):");
106
+ const multipleAttachmentIds = [
107
+ "bd5ea46bb32e5a0033f",
108
+ "cd6fb57cc43f6b1144g",
109
+ "de7gc68dd54g7c2255h"
110
+ ];
111
+
112
+ const multipleTarget = zalo.broadcast.createBroadcastTarget({
113
+ cities: ["Hà Nội"],
114
+ gender: "ALL"
115
+ });
116
+
117
+ const multipleResult = await zalo.broadcast.sendMultipleBroadcastMessages(
118
+ accessToken,
119
+ { target: multipleTarget },
120
+ multipleAttachmentIds,
121
+ {
122
+ mode: 'sequential',
123
+ delay: 2000, // 2 seconds delay between messages
124
+ onProgress: (progress) => {
125
+ console.log(`Progress: ${progress.completed}/${progress.total} - Current: ${progress.currentAttachmentId}`);
126
+ console.log(`Success: ${progress.successful}, Failed: ${progress.failed}`);
127
+ }
128
+ }
129
+ );
130
+
131
+ console.log("Multiple broadcast result:", {
132
+ totalMessages: multipleResult.totalMessages,
133
+ successful: multipleResult.successfulMessages,
134
+ failed: multipleResult.failedMessages,
135
+ duration: `${multipleResult.totalDuration}ms`,
136
+ mode: multipleResult.mode
137
+ });
138
+
139
+ // Example 6: Gửi nhiều broadcast messages song song
140
+ console.log("\n6. Multiple broadcast messages (Parallel):");
141
+ const parallelResult = await zalo.broadcast.sendMultipleBroadcastMessages(
142
+ accessToken,
143
+ { target: multipleTarget },
144
+ multipleAttachmentIds,
145
+ {
146
+ mode: 'parallel',
147
+ onProgress: (progress) => {
148
+ console.log(`Parallel progress: ${progress.completed}/${progress.total}`);
149
+ }
150
+ }
151
+ );
152
+
153
+ console.log("Parallel broadcast result:", {
154
+ totalMessages: parallelResult.totalMessages,
155
+ successful: parallelResult.successfulMessages,
156
+ failed: parallelResult.failedMessages,
157
+ duration: `${parallelResult.totalDuration}ms`,
158
+ mode: parallelResult.mode
159
+ });
160
+
161
+ // Example 7: Hiển thị các mã targeting có sẵn
162
+ console.log("\n7. Available targeting codes:");
106
163
  console.log("City codes:", Object.keys(zalo.broadcast.getCityCodes()).slice(0, 10), "...");
107
164
  console.log("Age group codes:", zalo.broadcast.getAgeGroupCodes());
108
165
  console.log("Gender codes:", zalo.broadcast.getGenderCodes());
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@warriorteam/redai-zalo-sdk",
3
- "version": "1.20.0",
3
+ "version": "1.21.0",
4
4
  "description": "Comprehensive TypeScript/JavaScript SDK for Zalo APIs - Official Account, ZNS, Consultation Service, Broadcast Service, Group Messaging with List APIs, Social APIs, Enhanced Article Management, and Message Sequence APIs with Real-time Tracking",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",