@warriorteam/redai-zalo-sdk 1.21.0 → 1.23.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.
@@ -1 +1 @@
1
- {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../src/types/message.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../src/types/message.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,210 @@
1
+ # Multiple Users Promotion - Gửi Promotion đến nhiều Users với Tracking
2
+
3
+ ## Tổng quan
4
+
5
+ Method `sendCustomPromotionToMultipleUsers()` cho phép gửi promotion message đến nhiều user IDs cùng lúc với tính năng tracking real-time và error handling nâng cao.
6
+
7
+ ## Tính năng chính
8
+
9
+ ### 🚀 **Dual Sending Modes**
10
+ - **Sequential**: Gửi tuần tự với delay tùy chỉnh để tránh rate limit
11
+ - **Parallel**: Gửi song song để tối ưu tốc độ
12
+
13
+ ### 📊 **Real-time Tracking**
14
+ - Progress callback theo thời gian thực
15
+ - Estimated time remaining
16
+ - Success/failure statistics
17
+ - Current user being processed
18
+
19
+ ### 🛡️ **Error Handling**
20
+ - Error isolation - lỗi của 1 user không ảnh hưởng các user khác
21
+ - Continue on error option
22
+ - Detailed error information cho từng user
23
+ - Success rate calculation
24
+
25
+ ### 📈 **Performance Metrics**
26
+ - Execution time tracking
27
+ - Success rate percentage
28
+ - Detailed results cho từng user
29
+ - Start/end timestamps
30
+
31
+ ## Cách sử dụng
32
+
33
+ ### Basic Usage
34
+
35
+ ```typescript
36
+ import { PromotionService } from './services/promotion.service';
37
+
38
+ const promotionService = new PromotionService(zaloClient);
39
+
40
+ const result = await promotionService.sendCustomPromotionToMultipleUsers(
41
+ accessToken,
42
+ ["user1", "user2", "user3"],
43
+ {
44
+ attachmentId: "your_attachment_id",
45
+ headerContent: "🎉 Khuyến mãi đặc biệt!",
46
+ textContent: "Ưu đãi độc quyền dành riêng cho bạn",
47
+ tableData: [
48
+ { key: "Mã giảm giá", value: "SAVE50" },
49
+ { key: "Giảm giá", value: "50%" }
50
+ ],
51
+ buttons: [
52
+ {
53
+ title: "Mua ngay",
54
+ type: "oa.open.url",
55
+ payload: { url: "https://shop.example.com" }
56
+ }
57
+ ]
58
+ }
59
+ );
60
+
61
+ console.log(`Sent to ${result.successful}/${result.total} users`);
62
+ ```
63
+
64
+ ### Advanced Usage với Tracking
65
+
66
+ ```typescript
67
+ const result = await promotionService.sendCustomPromotionToMultipleUsers(
68
+ accessToken,
69
+ userIds,
70
+ promotionData,
71
+ {
72
+ mode: "sequential",
73
+ delayMs: 2000,
74
+ continueOnError: true,
75
+
76
+ // Real-time progress tracking
77
+ onProgress: (progress) => {
78
+ const percent = Math.round((progress.completed / progress.total) * 100);
79
+ console.log(`📊 Progress: ${percent}% (${progress.completed}/${progress.total})`);
80
+ console.log(`✅ Success: ${progress.successful} | ❌ Failed: ${progress.failed}`);
81
+
82
+ if (progress.currentUserId) {
83
+ console.log(`🔄 Processing: ${progress.currentUserId}`);
84
+ }
85
+
86
+ if (progress.estimatedTimeRemaining) {
87
+ const eta = Math.round(progress.estimatedTimeRemaining / 1000);
88
+ console.log(`⏱️ ETA: ~${eta}s`);
89
+ }
90
+ },
91
+
92
+ // Callback cho từng user
93
+ onUserComplete: (userResult) => {
94
+ if (userResult.success) {
95
+ console.log(`✅ ${userResult.userId}: ${userResult.result?.message_id}`);
96
+ } else {
97
+ console.log(`❌ ${userResult.userId}: ${userResult.error?.message}`);
98
+ }
99
+ }
100
+ }
101
+ );
102
+ ```
103
+
104
+ ### Parallel Mode
105
+
106
+ ```typescript
107
+ const result = await promotionService.sendCustomPromotionToMultipleUsers(
108
+ accessToken,
109
+ userIds,
110
+ promotionData,
111
+ {
112
+ mode: "parallel", // Gửi tất cả cùng lúc
113
+ continueOnError: true,
114
+ onProgress: (progress) => {
115
+ console.log(`⚡ Parallel: ${progress.completed}/${progress.total}`);
116
+ }
117
+ }
118
+ );
119
+
120
+ console.log(`⚡ Completed in ${result.executionTime}ms`);
121
+ ```
122
+
123
+ ## Options Parameters
124
+
125
+ ### SendingOptions
126
+
127
+ ```typescript
128
+ interface SendingOptions {
129
+ mode?: "sequential" | "parallel"; // Chế độ gửi (default: "sequential")
130
+ delayMs?: number; // Delay giữa tin nhắn (default: 1000ms)
131
+ continueOnError?: boolean; // Tiếp tục khi có lỗi (default: true)
132
+ onProgress?: (progress: MultiplePromotionProgress) => void;
133
+ onUserComplete?: (result: PromotionUserResult) => void;
134
+ }
135
+ ```
136
+
137
+ ### Progress Tracking Interface
138
+
139
+ ```typescript
140
+ interface MultiplePromotionProgress {
141
+ total: number; // Tổng số users
142
+ completed: number; // Số users đã xử lý
143
+ successful: number; // Số users gửi thành công
144
+ failed: number; // Số users gửi thất bại
145
+ currentUserId: string | null; // User ID đang xử lý (sequential mode)
146
+ startTime: number; // Timestamp bắt đầu
147
+ estimatedTimeRemaining: number | null; // Thời gian còn lại (ms)
148
+ }
149
+ ```
150
+
151
+ ### Result Interface
152
+
153
+ ```typescript
154
+ interface MultiplePromotionResult {
155
+ total: number; // Tổng số users
156
+ successful: number; // Số users thành công
157
+ failed: number; // Số users thất bại
158
+ results: PromotionUserResult[]; // Chi tiết kết quả từng user
159
+ executionTime: number; // Thời gian thực hiện (ms)
160
+ mode: "sequential" | "parallel"; // Chế độ đã sử dụng
161
+ startTime: Date; // Thời gian bắt đầu
162
+ endTime: Date; // Thời gian kết thúc
163
+ successRate: number; // Tỷ lệ thành công (%)
164
+ }
165
+ ```
166
+
167
+ ## Best Practices
168
+
169
+ ### 1. **Chọn Mode phù hợp**
170
+ - **Sequential**: Cho campaigns lớn, tránh rate limit
171
+ - **Parallel**: Cho urgent notifications, tối ưu tốc độ
172
+
173
+ ### 2. **Delay Configuration**
174
+ - Minimum 1000ms để tránh rate limit
175
+ - Tăng delay nếu gặp rate limit errors
176
+ - Test với số lượng nhỏ trước khi scale
177
+
178
+ ### 3. **Error Handling**
179
+ - Luôn set `continueOnError: true` cho campaigns lớn
180
+ - Log chi tiết errors để debug
181
+ - Retry failed users nếu cần
182
+
183
+ ### 4. **Performance Monitoring**
184
+ - Sử dụng `onProgress` để monitor real-time
185
+ - Track success rate và adjust strategy
186
+ - Monitor execution time cho optimization
187
+
188
+ ## Error Codes
189
+
190
+ - **2001**: Ngoài khung giờ cho phép (8:00-22:00)
191
+ - **2002**: User đã từ chối nhận tin truyền thông
192
+ - **2003**: Vượt quá giới hạn 1 tin/ngày
193
+ - **2004**: Template chưa được phê duyệt
194
+ - **2005**: Nội dung vi phạm chính sách
195
+ - **2006**: OA chưa có quyền gửi tin truyền thông
196
+
197
+ ## Examples
198
+
199
+ Xem file `examples/promotion-examples.ts` để có ví dụ chi tiết về:
200
+ - Sequential sending với progress tracking
201
+ - Parallel sending cho tốc độ
202
+ - Error handling và retry logic
203
+ - Performance monitoring và optimization
204
+
205
+ ## Rate Limits
206
+
207
+ - **Sending Time**: 8:00 - 22:00 hàng ngày
208
+ - **Frequency**: Tối đa 1 tin truyền thông/ngày/user
209
+ - **Concurrent**: Khuyến nghị sequential mode cho campaigns lớn
210
+ - **Delay**: Minimum 1000ms giữa các tin nhắn
@@ -0,0 +1,320 @@
1
+ # Zalo Promotion API v3.0 Migration Guide
2
+
3
+ ## Tổng quan thay đổi
4
+
5
+ Promotion Service đã được cập nhật để tương thích với **Zalo Official Account API v3.0**. Đây là những thay đổi chính:
6
+
7
+ ### 🔄 Thay đổi URL API
8
+ - **Cũ**: `https://openapi.zalo.me/v2.0/oa/message/promotion`
9
+ - **Mới**: `https://openapi.zalo.me/v3.0/oa/message/promotion`
10
+
11
+ ### 🏗️ Cấu trúc Message Elements hoàn toàn mới
12
+
13
+ #### Cũ (v2.0):
14
+ ```typescript
15
+ elements: [{
16
+ title: string;
17
+ subtitle?: string;
18
+ image_url?: string;
19
+ buttons?: Array<{...}>;
20
+ }]
21
+ ```
22
+
23
+ #### Mới (v3.0):
24
+ ```typescript
25
+ elements: [
26
+ {
27
+ type: "banner",
28
+ attachment_id: "...", // hoặc image_url
29
+ },
30
+ {
31
+ type: "header",
32
+ content: "💥💥Ưu đãi thành viên Platinum💥💥"
33
+ },
34
+ {
35
+ type: "text",
36
+ align: "left",
37
+ content: "Nội dung chi tiết..."
38
+ },
39
+ {
40
+ type: "table",
41
+ content: [
42
+ { key: "Voucher", value: "VC09279222" },
43
+ { key: "Hạn sử dụng", value: "30/12/2023" }
44
+ ]
45
+ }
46
+ ]
47
+ ```
48
+
49
+ ### 🎯 Các Element Types được hỗ trợ
50
+
51
+ 1. **Banner Element**
52
+ ```typescript
53
+ {
54
+ type: "banner",
55
+ attachment_id?: string, // ID từ API upload ảnh
56
+ image_url?: string // URL trực tiếp (chỉ dùng 1 trong 2)
57
+ }
58
+ ```
59
+
60
+ 2. **Header Element**
61
+ ```typescript
62
+ {
63
+ type: "header",
64
+ content: string, // Tối đa 100 ký tự
65
+ align?: "left" | "center" | "right" // Mặc định: left
66
+ }
67
+ ```
68
+
69
+ 3. **Text Element**
70
+ ```typescript
71
+ {
72
+ type: "text",
73
+ content: string, // Tối đa 1000 ký tự
74
+ align?: "left" | "center" | "right" // Mặc định: left
75
+ }
76
+ ```
77
+
78
+ 4. **Table Element**
79
+ ```typescript
80
+ {
81
+ type: "table",
82
+ content: Array<{
83
+ key: string, // Tối đa 25 ký tự
84
+ value: string // Tối đa 100 ký tự
85
+ }> // Tối đa 5 phần tử
86
+ }
87
+ ```
88
+
89
+ ### 🔘 Cấu trúc Buttons mới
90
+
91
+ #### Cũ (v2.0):
92
+ ```typescript
93
+ buttons: [{
94
+ type: string;
95
+ title: string;
96
+ url?: string;
97
+ payload?: string;
98
+ }]
99
+ ```
100
+
101
+ #### Mới (v3.0):
102
+ ```typescript
103
+ buttons: [{
104
+ title: string, // Tối đa 35 ký tự
105
+ image_icon?: string, // URL hoặc attachment_id hoặc "default"
106
+ type: string, // VD: "oa.open.url", "oa.query.hide"
107
+ payload: object | string // Tùy thuộc vào type
108
+ }]
109
+ ```
110
+
111
+ **Payload format theo type:**
112
+ - `oa.open.url`: `{ url: "https://..." }`
113
+ - `oa.query.show`: `"#callback_data"` (string)
114
+ - `oa.query.hide`: `"#callback_data"` (string)
115
+ - `oa.open.sms`: `{ content: "text", phone_code: "84xxx" }`
116
+ - `oa.open.phone`: `{ phone_code: "84xxx" }`
117
+
118
+ ### 🌐 Hỗ trợ đa ngôn ngữ
119
+
120
+ Thêm thuộc tính `language` trong payload:
121
+ ```typescript
122
+ {
123
+ template_type: "promotion",
124
+ language: "VI" | "EN", // Mặc định: VI
125
+ elements: [...],
126
+ buttons: [...]
127
+ }
128
+ ```
129
+
130
+ ### 🚀 Tính năng mới: Multiple Users với Tracking
131
+
132
+ #### Gửi đến nhiều users cùng lúc
133
+ - **Sequential Mode**: Gửi tuần tự với delay tùy chỉnh
134
+ - **Parallel Mode**: Gửi song song để tối ưu tốc độ
135
+ - **Real-time Tracking**: Callback progress theo thời gian thực
136
+ - **Error Isolation**: Lỗi của 1 user không ảnh hưởng các user khác
137
+ - **Statistics**: Thống kê chi tiết success rate và execution time
138
+
139
+ #### Callback Tracking
140
+ ```typescript
141
+ {
142
+ onProgress: (progress) => {
143
+ // Real-time progress: completed/total, success/failed
144
+ // Estimated time remaining, current user ID
145
+ },
146
+ onUserComplete: (userResult) => {
147
+ // Callback cho từng user hoàn thành
148
+ // Success/failure status, message ID, error details
149
+ }
150
+ }
151
+ ```
152
+
153
+ ## 📝 Cách sử dụng mới
154
+
155
+ ### 1. Gửi Promotion theo format chuẩn docs
156
+
157
+ ```typescript
158
+ import { PromotionService } from "./services/promotion.service";
159
+
160
+ const promotionService = new PromotionService(zaloClient);
161
+
162
+ // Gửi promotion message theo đúng format docs v3.0
163
+ await promotionService.sendCustomPromotion(
164
+ accessToken,
165
+ { user_id: "user_id" },
166
+ {
167
+ attachmentId: "your_attachment_id",
168
+ headerContent: "💥💥Ưu đãi thành viên Platinum💥💥",
169
+ textContent: "Ưu đãi dành riêng cho khách hàng...",
170
+ tableData: [
171
+ { key: "Voucher", value: "VC09279222" },
172
+ { key: "Hạn sử dụng", value: "30/12/2023" }
173
+ ],
174
+ footerText: "Áp dụng tất cả cửa hàng trên toàn quốc",
175
+ buttons: [
176
+ {
177
+ title: "Tham khảo chương trình",
178
+ type: "oa.open.url",
179
+ payload: { url: "https://oa.zalo.me/home" }
180
+ }
181
+ ],
182
+ language: "VI"
183
+ }
184
+ );
185
+ ```
186
+
187
+ ### 2. Gửi Product Promotion (đã cập nhật)
188
+
189
+ ```typescript
190
+ await promotionService.sendProductPromotion(
191
+ accessToken,
192
+ { user_id: "user_id" },
193
+ {
194
+ title: "iPhone 15 Pro Max",
195
+ description: "Siêu phẩm công nghệ mới nhất...",
196
+ attachmentId: "product_image_id", // Thay vì imageUrl
197
+ originalPrice: 34990000,
198
+ discountPrice: 29990000,
199
+ discountPercent: 14,
200
+ validUntil: "31/12/2024",
201
+ productUrl: "https://example.com/product"
202
+ }
203
+ );
204
+ ```
205
+
206
+ ### 3. Gửi Event Notification (đã cập nhật)
207
+
208
+ ```typescript
209
+ await promotionService.sendEventNotification(
210
+ accessToken,
211
+ { user_id: "user_id" },
212
+ {
213
+ title: "Hội thảo Digital Marketing 2024",
214
+ description: "Khám phá xu hướng marketing...",
215
+ attachmentId: "event_image_id",
216
+ eventDate: "15/01/2024 - 9:00 AM",
217
+ location: "Trung tâm Hội nghị Quốc gia, Hà Nội",
218
+ registrationUrl: "https://example.com/register"
219
+ }
220
+ );
221
+ ```
222
+
223
+ ### 4. Gửi Promotion đến nhiều Users với Tracking
224
+
225
+ ```typescript
226
+ // Gửi tuần tự với tracking
227
+ const result = await promotionService.sendCustomPromotionToMultipleUsers(
228
+ accessToken,
229
+ ["user1", "user2", "user3", "user4"],
230
+ {
231
+ attachmentId: "your_attachment_id",
232
+ headerContent: "🎉 Khuyến mãi đặc biệt!",
233
+ textContent: "Ưu đãi độc quyền dành riêng cho bạn",
234
+ tableData: [
235
+ { key: "Mã giảm giá", value: "SAVE50" },
236
+ { key: "Giảm giá", value: "50%" }
237
+ ],
238
+ buttons: [
239
+ {
240
+ title: "Mua ngay",
241
+ type: "oa.open.url",
242
+ payload: { url: "https://shop.example.com" }
243
+ }
244
+ ]
245
+ },
246
+ {
247
+ mode: "sequential", // hoặc "parallel"
248
+ delayMs: 2000, // Delay 2s giữa các tin
249
+ continueOnError: true,
250
+
251
+ // Real-time progress tracking
252
+ onProgress: (progress) => {
253
+ console.log(`Progress: ${progress.completed}/${progress.total}`);
254
+ console.log(`Success: ${progress.successful}, Failed: ${progress.failed}`);
255
+ },
256
+
257
+ // Callback cho từng user
258
+ onUserComplete: (userResult) => {
259
+ if (userResult.success) {
260
+ console.log(`✅ Sent to ${userResult.userId}`);
261
+ } else {
262
+ console.log(`❌ Failed to ${userResult.userId}: ${userResult.error?.message}`);
263
+ }
264
+ }
265
+ }
266
+ );
267
+
268
+ console.log(`📊 Final Result:`);
269
+ console.log(`Total: ${result.total}, Success: ${result.successful}, Failed: ${result.failed}`);
270
+ console.log(`Success Rate: ${result.successRate}%, Time: ${result.executionTime}ms`);
271
+ ```
272
+
273
+ ### 5. Gửi Song Song (Parallel Mode)
274
+
275
+ ```typescript
276
+ // Gửi song song để tối ưu tốc độ
277
+ const result = await promotionService.sendCustomPromotionToMultipleUsers(
278
+ accessToken,
279
+ userIds,
280
+ promotionData,
281
+ {
282
+ mode: "parallel", // Gửi tất cả cùng lúc
283
+ continueOnError: true,
284
+ onProgress: (progress) => {
285
+ console.log(`⚡ Parallel: ${progress.completed}/${progress.total}`);
286
+ }
287
+ }
288
+ );
289
+ ```
290
+
291
+ ## ⚠️ Breaking Changes
292
+
293
+ 1. **URL API**: Phải cập nhật từ v2.0 lên v3.0
294
+ 2. **Elements Structure**: Hoàn toàn khác, không tương thích ngược
295
+ 3. **Buttons Payload**: Từ `string` thành `object`
296
+ 4. **Image Handling**: Ưu tiên `attachment_id` thay vì `image_url`
297
+ 5. **Validation**: Thêm validation cho elements và buttons
298
+
299
+ ## 🔍 Validation Rules
300
+
301
+ - **Header content**: Tối đa 100 ký tự
302
+ - **Text content**: Tối đa 1000 ký tự mỗi đoạn, tối đa 2 đoạn text
303
+ - **Table**: Tối đa 5 phần tử, key ≤ 25 ký tự, value ≤ 100 ký tự
304
+ - **Button title**: Tối đa 35 ký tự, tối đa 4 buttons
305
+ - **Sending time**: Chỉ từ 8:00 - 22:00 hàng ngày
306
+
307
+ ## 📚 Examples
308
+
309
+ Xem file `examples/promotion-examples.ts` để có ví dụ chi tiết về cách sử dụng tất cả các tính năng mới.
310
+
311
+ ## 🚀 Migration Checklist
312
+
313
+ - [ ] Cập nhật URL API từ v2.0 lên v3.0
314
+ - [ ] Thay đổi cấu trúc elements theo format mới
315
+ - [ ] Cập nhật cấu trúc buttons với payload object
316
+ - [ ] Thêm support cho attachment_id
317
+ - [ ] Thêm language parameter
318
+ - [ ] Test với các element types khác nhau
319
+ - [ ] Kiểm tra validation rules mới
320
+ - [ ] Cập nhật documentation và examples