@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.
@@ -45,7 +45,7 @@ const common_1 = require("../types/common");
45
45
  class PromotionService {
46
46
  constructor(client) {
47
47
  this.client = client;
48
- this.promotionApiUrl = "https://openapi.zalo.me/v2.0/oa/message/promotion";
48
+ this.promotionApiUrl = "https://openapi.zalo.me/v3.0/oa/message/promotion";
49
49
  }
50
50
  /**
51
51
  * Gửi tin nhắn truyền thông/quảng cáo
@@ -95,28 +95,71 @@ class PromotionService {
95
95
  type: "template",
96
96
  payload: {
97
97
  template_type: "promotion",
98
+ language: "VI",
98
99
  elements: [
100
+ // Banner element
99
101
  {
100
- title: promotionInfo.title,
101
- subtitle: promotionInfo.description,
102
- image_url: promotionInfo.imageUrl,
103
- default_action: {
104
- type: "web_url",
105
- url: promotionInfo.productUrl,
106
- },
107
- buttons: [
102
+ type: "banner",
103
+ ...(promotionInfo.attachmentId
104
+ ? { attachment_id: promotionInfo.attachmentId }
105
+ : { image_url: promotionInfo.imageUrl }),
106
+ },
107
+ // Header element
108
+ {
109
+ type: "header",
110
+ content: `💥💥 ${promotionInfo.title} 💥💥`,
111
+ align: "center",
112
+ },
113
+ // Description text
114
+ {
115
+ type: "text",
116
+ content: promotionInfo.description,
117
+ align: "left",
118
+ },
119
+ // Price table
120
+ {
121
+ type: "table",
122
+ content: [
123
+ {
124
+ key: "Giá gốc",
125
+ value: `${promotionInfo.originalPrice.toLocaleString('vi-VN')}đ`,
126
+ },
108
127
  {
109
- type: "web_url",
110
- title: "Mua ngay",
111
- url: promotionInfo.productUrl,
128
+ key: "Giá khuyến mãi",
129
+ value: `${promotionInfo.discountPrice.toLocaleString('vi-VN')}đ`,
112
130
  },
113
131
  {
114
- type: "postback",
115
- title: "Xem thêm",
116
- payload: `VIEW_PRODUCT_${Date.now()}`,
132
+ key: "Giảm giá",
133
+ value: `${promotionInfo.discountPercent}%`,
134
+ },
135
+ {
136
+ key: "Hạn sử dụng",
137
+ value: promotionInfo.validUntil,
117
138
  },
118
139
  ],
119
140
  },
141
+ // Footer text
142
+ {
143
+ type: "text",
144
+ content: "🛒 Nhanh tay đặt hàng để không bỏ lỡ ưu đãi!",
145
+ align: "center",
146
+ },
147
+ ],
148
+ buttons: [
149
+ {
150
+ title: "Mua ngay",
151
+ image_icon: "",
152
+ type: "oa.open.url",
153
+ payload: {
154
+ url: promotionInfo.productUrl,
155
+ },
156
+ },
157
+ {
158
+ title: "Xem thêm sản phẩm",
159
+ image_icon: "",
160
+ type: "oa.query.hide",
161
+ payload: "#xemthem",
162
+ },
120
163
  ],
121
164
  },
122
165
  },
@@ -142,28 +185,63 @@ class PromotionService {
142
185
  type: "template",
143
186
  payload: {
144
187
  template_type: "promotion",
188
+ language: "VI",
145
189
  elements: [
190
+ // Banner element
146
191
  {
147
- title: eventInfo.title,
148
- subtitle: `${eventInfo.description}\n📅 ${eventInfo.eventDate}\n📍 ${eventInfo.location}`,
149
- image_url: eventInfo.imageUrl,
150
- default_action: {
151
- type: "web_url",
152
- url: eventInfo.registrationUrl,
153
- },
154
- buttons: [
192
+ type: "banner",
193
+ ...(eventInfo.attachmentId
194
+ ? { attachment_id: eventInfo.attachmentId }
195
+ : { image_url: eventInfo.imageUrl }),
196
+ },
197
+ // Header element
198
+ {
199
+ type: "header",
200
+ content: `🎉 ${eventInfo.title} 🎉`,
201
+ align: "center",
202
+ },
203
+ // Description text
204
+ {
205
+ type: "text",
206
+ content: eventInfo.description,
207
+ align: "left",
208
+ },
209
+ // Event details table
210
+ {
211
+ type: "table",
212
+ content: [
155
213
  {
156
- type: "web_url",
157
- title: "Đăng ký tham gia",
158
- url: eventInfo.registrationUrl,
214
+ key: "Thời gian",
215
+ value: eventInfo.eventDate,
159
216
  },
160
217
  {
161
- type: "postback",
162
- title: "Chia sẻ",
163
- payload: `SHARE_EVENT_${Date.now()}`,
218
+ key: "Địa điểm",
219
+ value: eventInfo.location,
164
220
  },
165
221
  ],
166
222
  },
223
+ // Call to action text
224
+ {
225
+ type: "text",
226
+ content: "🎫 Đăng ký ngay để không bỏ lỡ sự kiện!",
227
+ align: "center",
228
+ },
229
+ ],
230
+ buttons: [
231
+ {
232
+ title: "Đăng ký tham gia",
233
+ image_icon: "",
234
+ type: "oa.open.url",
235
+ payload: {
236
+ url: eventInfo.registrationUrl,
237
+ },
238
+ },
239
+ {
240
+ title: "Chia sẻ sự kiện",
241
+ image_icon: "",
242
+ type: "oa.query.hide",
243
+ payload: "#chiase",
244
+ },
167
245
  ],
168
246
  },
169
247
  },
@@ -189,23 +267,58 @@ class PromotionService {
189
267
  type: "template",
190
268
  payload: {
191
269
  template_type: "promotion",
270
+ language: "VI",
192
271
  elements: [
272
+ // Banner element
193
273
  {
194
- title: newsletterInfo.title,
195
- subtitle: newsletterInfo.summary,
196
- image_url: newsletterInfo.imageUrl,
197
- buttons: [
198
- {
199
- type: "web_url",
200
- title: "Đọc toàn bộ",
201
- url: newsletterInfo.articles[0]?.url || "#",
202
- },
203
- {
204
- type: "web_url",
205
- title: "Hủy đăng ký",
206
- url: newsletterInfo.unsubscribeUrl,
207
- },
208
- ],
274
+ type: "banner",
275
+ ...(newsletterInfo.attachmentId
276
+ ? { attachment_id: newsletterInfo.attachmentId }
277
+ : { image_url: newsletterInfo.imageUrl }),
278
+ },
279
+ // Header element
280
+ {
281
+ type: "header",
282
+ content: `📰 ${newsletterInfo.title}`,
283
+ align: "center",
284
+ },
285
+ // Summary text
286
+ {
287
+ type: "text",
288
+ content: newsletterInfo.summary,
289
+ align: "left",
290
+ },
291
+ // Articles table
292
+ {
293
+ type: "table",
294
+ content: newsletterInfo.articles.slice(0, 5).map((article, index) => ({
295
+ key: `Bài viết ${index + 1}`,
296
+ value: article.title,
297
+ })),
298
+ },
299
+ // Footer text
300
+ {
301
+ type: "text",
302
+ content: "📖 Đọc ngay để cập nhật thông tin mới nhất!",
303
+ align: "center",
304
+ },
305
+ ],
306
+ buttons: [
307
+ {
308
+ title: "Đọc toàn bộ",
309
+ image_icon: "",
310
+ type: "oa.open.url",
311
+ payload: {
312
+ url: newsletterInfo.articles[0]?.url || "#",
313
+ },
314
+ },
315
+ {
316
+ title: "Hủy đăng ký",
317
+ image_icon: "",
318
+ type: "oa.open.url",
319
+ payload: {
320
+ url: newsletterInfo.unsubscribeUrl,
321
+ },
209
322
  },
210
323
  ],
211
324
  },
@@ -217,6 +330,71 @@ class PromotionService {
217
330
  throw new common_1.ZaloSDKError(`Failed to send newsletter: ${error.message}`, -1, error);
218
331
  }
219
332
  }
333
+ /**
334
+ * Tạo promotion message theo format chuẩn v3.0 (như trong docs)
335
+ * @param accessToken Access token của Official Account
336
+ * @param recipient Thông tin người nhận
337
+ * @param promotionData Dữ liệu promotion
338
+ * @returns Thông tin tin nhắn đã gửi
339
+ */
340
+ async sendCustomPromotion(accessToken, recipient, promotionData) {
341
+ try {
342
+ const elements = [
343
+ // Banner element
344
+ {
345
+ attachment_id: promotionData.attachmentId,
346
+ type: "banner",
347
+ },
348
+ // Header element
349
+ {
350
+ type: "header",
351
+ content: promotionData.headerContent,
352
+ },
353
+ // Text element
354
+ {
355
+ type: "text",
356
+ align: "left",
357
+ content: promotionData.textContent,
358
+ },
359
+ ];
360
+ // Add table if provided
361
+ if (promotionData.tableData && promotionData.tableData.length > 0) {
362
+ elements.push({
363
+ type: "table",
364
+ content: promotionData.tableData,
365
+ });
366
+ }
367
+ // Add footer text if provided
368
+ if (promotionData.footerText) {
369
+ elements.push({
370
+ type: "text",
371
+ align: "center",
372
+ content: promotionData.footerText,
373
+ });
374
+ }
375
+ const message = {
376
+ type: "promotion",
377
+ attachment: {
378
+ type: "template",
379
+ payload: {
380
+ template_type: "promotion",
381
+ language: promotionData.language || "VI",
382
+ elements,
383
+ buttons: promotionData.buttons.map(btn => ({
384
+ title: btn.title,
385
+ image_icon: btn.imageIcon || "",
386
+ type: btn.type,
387
+ payload: btn.payload,
388
+ })),
389
+ },
390
+ },
391
+ };
392
+ return this.sendPromotionMessage(accessToken, recipient, message);
393
+ }
394
+ catch (error) {
395
+ throw new common_1.ZaloSDKError(`Failed to send custom promotion: ${error.message}`, -1, error);
396
+ }
397
+ }
220
398
  /**
221
399
  * Validate promotion message format
222
400
  * @param message Promotion message to validate
@@ -231,6 +409,175 @@ class PromotionService {
231
409
  if (message.attachment.payload.template_type !== "promotion") {
232
410
  throw new common_1.ZaloSDKError("Promotion message must use promotion template type", -1);
233
411
  }
412
+ if (!message.attachment.payload.elements || message.attachment.payload.elements.length === 0) {
413
+ throw new common_1.ZaloSDKError("Promotion message must have at least one element", -1);
414
+ }
415
+ }
416
+ /**
417
+ * Gửi promotion message đến nhiều user_ids với callback tracking
418
+ * @param accessToken Access token của Official Account
419
+ * @param userIds Danh sách user IDs cần gửi
420
+ * @param promotionData Dữ liệu promotion
421
+ * @param options Tùy chọn gửi và tracking
422
+ * @returns Kết quả gửi đến tất cả users
423
+ */
424
+ async sendCustomPromotionToMultipleUsers(accessToken, userIds, promotionData, options) {
425
+ try {
426
+ // Validate inputs
427
+ if (!userIds || userIds.length === 0) {
428
+ throw new common_1.ZaloSDKError("User IDs array cannot be empty", -1);
429
+ }
430
+ // Remove duplicates
431
+ const uniqueUserIds = [...new Set(userIds)];
432
+ // Validate sending time
433
+ this.validateSendingTime();
434
+ const startTime = Date.now();
435
+ const results = [];
436
+ const mode = options?.mode || "sequential";
437
+ const delayMs = options?.delayMs || 1000;
438
+ const continueOnError = options?.continueOnError !== false;
439
+ // Initial progress callback
440
+ if (options?.onProgress) {
441
+ options.onProgress({
442
+ total: uniqueUserIds.length,
443
+ completed: 0,
444
+ successful: 0,
445
+ failed: 0,
446
+ currentUserId: null,
447
+ startTime,
448
+ estimatedTimeRemaining: null,
449
+ });
450
+ }
451
+ if (mode === "parallel") {
452
+ // Gửi song song
453
+ const promises = uniqueUserIds.map(async (userId) => {
454
+ try {
455
+ const result = await this.sendCustomPromotion(accessToken, { user_id: userId }, promotionData);
456
+ const userResult = {
457
+ userId,
458
+ success: true,
459
+ result,
460
+ error: null,
461
+ timestamp: new Date(),
462
+ };
463
+ // Callback cho từng user
464
+ if (options?.onUserComplete) {
465
+ options.onUserComplete(userResult);
466
+ }
467
+ return userResult;
468
+ }
469
+ catch (error) {
470
+ const userResult = {
471
+ userId,
472
+ success: false,
473
+ result: null,
474
+ error: error instanceof common_1.ZaloSDKError ? error : new common_1.ZaloSDKError(`Failed to send to user ${userId}: ${error.message}`, -1, error),
475
+ timestamp: new Date(),
476
+ };
477
+ // Callback cho từng user
478
+ if (options?.onUserComplete) {
479
+ options.onUserComplete(userResult);
480
+ }
481
+ if (!continueOnError) {
482
+ throw userResult.error;
483
+ }
484
+ return userResult;
485
+ }
486
+ });
487
+ const parallelResults = await Promise.all(promises);
488
+ results.push(...parallelResults);
489
+ }
490
+ else {
491
+ // Gửi tuần tự
492
+ for (let i = 0; i < uniqueUserIds.length; i++) {
493
+ const userId = uniqueUserIds[i];
494
+ try {
495
+ // Progress callback
496
+ if (options?.onProgress) {
497
+ const completed = i;
498
+ const successful = results.filter(r => r.success).length;
499
+ const failed = results.filter(r => !r.success).length;
500
+ const elapsed = Date.now() - startTime;
501
+ const avgTimePerUser = elapsed / Math.max(completed, 1);
502
+ const remaining = uniqueUserIds.length - completed;
503
+ const estimatedTimeRemaining = remaining * avgTimePerUser;
504
+ options.onProgress({
505
+ total: uniqueUserIds.length,
506
+ completed,
507
+ successful,
508
+ failed,
509
+ currentUserId: userId,
510
+ startTime,
511
+ estimatedTimeRemaining,
512
+ });
513
+ }
514
+ const result = await this.sendCustomPromotion(accessToken, { user_id: userId }, promotionData);
515
+ const userResult = {
516
+ userId,
517
+ success: true,
518
+ result,
519
+ error: null,
520
+ timestamp: new Date(),
521
+ };
522
+ results.push(userResult);
523
+ // Callback cho từng user
524
+ if (options?.onUserComplete) {
525
+ options.onUserComplete(userResult);
526
+ }
527
+ // Delay giữa các tin nhắn (trừ tin cuối cùng)
528
+ if (i < uniqueUserIds.length - 1 && delayMs > 0) {
529
+ await new Promise(resolve => setTimeout(resolve, delayMs));
530
+ }
531
+ }
532
+ catch (error) {
533
+ const userResult = {
534
+ userId,
535
+ success: false,
536
+ result: null,
537
+ error: error instanceof common_1.ZaloSDKError ? error : new common_1.ZaloSDKError(`Failed to send to user ${userId}: ${error.message}`, -1, error),
538
+ timestamp: new Date(),
539
+ };
540
+ results.push(userResult);
541
+ // Callback cho từng user
542
+ if (options?.onUserComplete) {
543
+ options.onUserComplete(userResult);
544
+ }
545
+ if (!continueOnError) {
546
+ throw userResult.error;
547
+ }
548
+ }
549
+ }
550
+ }
551
+ const endTime = Date.now();
552
+ const successful = results.filter(r => r.success);
553
+ const failed = results.filter(r => !r.success);
554
+ // Final progress callback
555
+ if (options?.onProgress) {
556
+ options.onProgress({
557
+ total: uniqueUserIds.length,
558
+ completed: uniqueUserIds.length,
559
+ successful: successful.length,
560
+ failed: failed.length,
561
+ currentUserId: null,
562
+ startTime,
563
+ estimatedTimeRemaining: 0,
564
+ });
565
+ }
566
+ return {
567
+ total: uniqueUserIds.length,
568
+ successful: successful.length,
569
+ failed: failed.length,
570
+ results,
571
+ executionTime: endTime - startTime,
572
+ mode,
573
+ startTime: new Date(startTime),
574
+ endTime: new Date(endTime),
575
+ successRate: (successful.length / uniqueUserIds.length) * 100,
576
+ };
577
+ }
578
+ catch (error) {
579
+ throw new common_1.ZaloSDKError(`Failed to send promotion to multiple users: ${error.message}`, -1, error);
580
+ }
234
581
  }
235
582
  /**
236
583
  * Validate sending time (8:00 - 22:00)
@@ -1 +1 @@
1
- {"version":3,"file":"promotion.service.js","sourceRoot":"","sources":["../../src/services/promotion.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"promotion.service.js","sourceRoot":"","sources":["../../src/services/promotion.service.ts"],"names":[],"mappings":"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"}
@@ -264,35 +264,91 @@ export interface TransactionMessage extends BaseMessage {
264
264
  };
265
265
  }
266
266
  /**
267
- * Promotion message types
267
+ * Promotion message element types for v3.0 API
268
+ */
269
+ export interface PromotionBannerElement {
270
+ type: "banner";
271
+ attachment_id?: string;
272
+ image_url?: string;
273
+ }
274
+ export interface PromotionHeaderElement {
275
+ type: "header";
276
+ content: string;
277
+ align?: "left" | "center" | "right";
278
+ }
279
+ export interface PromotionTextElement {
280
+ type: "text";
281
+ content: string;
282
+ align?: "left" | "center" | "right";
283
+ }
284
+ export interface PromotionTableElement {
285
+ type: "table";
286
+ content: Array<{
287
+ key: string;
288
+ value: string;
289
+ }>;
290
+ }
291
+ export type PromotionElement = PromotionBannerElement | PromotionHeaderElement | PromotionTextElement | PromotionTableElement;
292
+ /**
293
+ * Promotion message button for v3.0 API
294
+ */
295
+ export interface PromotionButton {
296
+ title: string;
297
+ image_icon?: string;
298
+ type: string;
299
+ payload: Record<string, any> | string;
300
+ }
301
+ /**
302
+ * Promotion message types for v3.0 API
268
303
  */
269
304
  export interface PromotionMessage extends BaseMessage {
270
305
  type: "promotion";
271
- template_id?: string;
272
- template_data?: Record<string, string>;
273
- mode?: "development" | "production";
274
- attachment?: {
275
- type: string;
306
+ attachment: {
307
+ type: "template";
276
308
  payload: {
277
- template_type: string;
278
- elements: Array<{
279
- title: string;
280
- subtitle?: string;
281
- image_url?: string;
282
- default_action?: {
283
- type: string;
284
- url: string;
285
- };
286
- buttons?: Array<{
287
- type: string;
288
- title: string;
289
- url?: string;
290
- payload?: string;
291
- }>;
292
- }>;
309
+ template_type: "promotion";
310
+ language?: "VI" | "EN";
311
+ elements: PromotionElement[];
312
+ buttons?: PromotionButton[];
293
313
  };
294
314
  };
295
315
  }
316
+ /**
317
+ * Result for individual user in multiple promotion sending
318
+ */
319
+ export interface PromotionUserResult {
320
+ userId: string;
321
+ success: boolean;
322
+ result: SendMessageResponse | null;
323
+ error: Error | null;
324
+ timestamp: Date;
325
+ }
326
+ /**
327
+ * Progress tracking for multiple promotion sending
328
+ */
329
+ export interface MultiplePromotionProgress {
330
+ total: number;
331
+ completed: number;
332
+ successful: number;
333
+ failed: number;
334
+ currentUserId: string | null;
335
+ startTime: number;
336
+ estimatedTimeRemaining: number | null;
337
+ }
338
+ /**
339
+ * Final result for multiple promotion sending
340
+ */
341
+ export interface MultiplePromotionResult {
342
+ total: number;
343
+ successful: number;
344
+ failed: number;
345
+ results: PromotionUserResult[];
346
+ executionTime: number;
347
+ mode: "sequential" | "parallel";
348
+ startTime: Date;
349
+ endTime: Date;
350
+ successRate: number;
351
+ }
296
352
  /**
297
353
  * Anonymous message types
298
354
  */