@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 +56 -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/types/broadcast.d.ts +87 -0
- package/dist/types/broadcast.d.ts.map +1 -1
- package/docs/API_REFERENCE.md +14 -0
- package/docs/BROADCAST_SERVICE.md +86 -1
- package/examples/broadcast-example.ts +59 -2
- package/package.json +1 -1
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,
|
|
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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"}
|
|
@@ -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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"}
|
package/docs/API_REFERENCE.md
CHANGED
|
@@ -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.
|
|
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:
|
|
105
|
-
console.log("\n5.
|
|
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.
|
|
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",
|