@warriorteam/redai-zalo-sdk 1.1.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/LICENSE +21 -0
- package/README.md +448 -0
- package/dist/clients/base-client.d.ts +67 -0
- package/dist/clients/base-client.d.ts.map +1 -0
- package/dist/clients/base-client.js +297 -0
- package/dist/clients/base-client.js.map +1 -0
- package/dist/clients/zalo-client.d.ts +131 -0
- package/dist/clients/zalo-client.d.ts.map +1 -0
- package/dist/clients/zalo-client.js +215 -0
- package/dist/clients/zalo-client.js.map +1 -0
- package/dist/index.d.ts +40 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +82 -0
- package/dist/index.js.map +1 -0
- package/dist/services/article.service.d.ts +144 -0
- package/dist/services/article.service.d.ts.map +1 -0
- package/dist/services/article.service.js +518 -0
- package/dist/services/article.service.js.map +1 -0
- package/dist/services/auth.service.d.ts +55 -0
- package/dist/services/auth.service.d.ts.map +1 -0
- package/dist/services/auth.service.js +269 -0
- package/dist/services/auth.service.js.map +1 -0
- package/dist/services/consultation.service.d.ts +73 -0
- package/dist/services/consultation.service.d.ts.map +1 -0
- package/dist/services/consultation.service.js +208 -0
- package/dist/services/consultation.service.js.map +1 -0
- package/dist/services/general-message.service.d.ts +85 -0
- package/dist/services/general-message.service.d.ts.map +1 -0
- package/dist/services/general-message.service.js +248 -0
- package/dist/services/general-message.service.js.map +1 -0
- package/dist/services/group-management.service.d.ts +220 -0
- package/dist/services/group-management.service.d.ts.map +1 -0
- package/dist/services/group-management.service.js +562 -0
- package/dist/services/group-management.service.js.map +1 -0
- package/dist/services/group-message.service.d.ts +102 -0
- package/dist/services/group-message.service.d.ts.map +1 -0
- package/dist/services/group-message.service.js +233 -0
- package/dist/services/group-message.service.js.map +1 -0
- package/dist/services/message-management.service.d.ts +135 -0
- package/dist/services/message-management.service.d.ts.map +1 -0
- package/dist/services/message-management.service.js +237 -0
- package/dist/services/message-management.service.js.map +1 -0
- package/dist/services/oa.service.d.ts +67 -0
- package/dist/services/oa.service.d.ts.map +1 -0
- package/dist/services/oa.service.js +223 -0
- package/dist/services/oa.service.js.map +1 -0
- package/dist/services/promotion.service.d.ts +114 -0
- package/dist/services/promotion.service.d.ts.map +1 -0
- package/dist/services/promotion.service.js +247 -0
- package/dist/services/promotion.service.js.map +1 -0
- package/dist/services/tag.service.d.ts +144 -0
- package/dist/services/tag.service.d.ts.map +1 -0
- package/dist/services/tag.service.js +184 -0
- package/dist/services/tag.service.js.map +1 -0
- package/dist/services/transaction.service.d.ts +110 -0
- package/dist/services/transaction.service.d.ts.map +1 -0
- package/dist/services/transaction.service.js +231 -0
- package/dist/services/transaction.service.js.map +1 -0
- package/dist/services/user-management.service.d.ts +117 -0
- package/dist/services/user-management.service.d.ts.map +1 -0
- package/dist/services/user-management.service.js +239 -0
- package/dist/services/user-management.service.js.map +1 -0
- package/dist/services/user.service.d.ts +84 -0
- package/dist/services/user.service.d.ts.map +1 -0
- package/dist/services/user.service.js +323 -0
- package/dist/services/user.service.js.map +1 -0
- package/dist/services/video-upload.service.d.ts +83 -0
- package/dist/services/video-upload.service.d.ts.map +1 -0
- package/dist/services/video-upload.service.js +267 -0
- package/dist/services/video-upload.service.js.map +1 -0
- package/dist/services/zns.service.d.ts +116 -0
- package/dist/services/zns.service.d.ts.map +1 -0
- package/dist/services/zns.service.js +234 -0
- package/dist/services/zns.service.js.map +1 -0
- package/dist/types/article.d.ts +352 -0
- package/dist/types/article.d.ts.map +1 -0
- package/dist/types/article.js +70 -0
- package/dist/types/article.js.map +1 -0
- package/dist/types/auth.d.ts +233 -0
- package/dist/types/auth.d.ts.map +1 -0
- package/dist/types/auth.js +39 -0
- package/dist/types/auth.js.map +1 -0
- package/dist/types/common.d.ts +237 -0
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/common.js +42 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/group.d.ts +523 -0
- package/dist/types/group.d.ts.map +1 -0
- package/dist/types/group.js +6 -0
- package/dist/types/group.js.map +1 -0
- package/dist/types/message.d.ts +333 -0
- package/dist/types/message.d.ts.map +1 -0
- package/dist/types/message.js +17 -0
- package/dist/types/message.js.map +1 -0
- package/dist/types/oa.d.ts +285 -0
- package/dist/types/oa.d.ts.map +1 -0
- package/dist/types/oa.js +25 -0
- package/dist/types/oa.js.map +1 -0
- package/dist/types/social.d.ts +427 -0
- package/dist/types/social.d.ts.map +1 -0
- package/dist/types/social.js +6 -0
- package/dist/types/social.js.map +1 -0
- package/dist/types/user-management.d.ts +280 -0
- package/dist/types/user-management.d.ts.map +1 -0
- package/dist/types/user-management.js +6 -0
- package/dist/types/user-management.js.map +1 -0
- package/dist/types/user.d.ts +365 -0
- package/dist/types/user.d.ts.map +1 -0
- package/dist/types/user.js +17 -0
- package/dist/types/user.js.map +1 -0
- package/dist/types/webhook.d.ts +1972 -0
- package/dist/types/webhook.d.ts.map +1 -0
- package/dist/types/webhook.js +419 -0
- package/dist/types/webhook.js.map +1 -0
- package/dist/types/zns.d.ts +277 -0
- package/dist/types/zns.d.ts.map +1 -0
- package/dist/types/zns.js +6 -0
- package/dist/types/zns.js.map +1 -0
- package/dist/zalo-sdk.d.ts +228 -0
- package/dist/zalo-sdk.d.ts.map +1 -0
- package/dist/zalo-sdk.js +307 -0
- package/dist/zalo-sdk.js.map +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PromotionService = void 0;
|
|
4
|
+
const common_1 = require("../types/common");
|
|
5
|
+
/**
|
|
6
|
+
* Service xử lý các API tin nhắn truyền thông/quảng cáo của Zalo Official Account
|
|
7
|
+
*
|
|
8
|
+
* ĐIỀU KIỆN GỬI TIN TRUYỀN THÔNG:
|
|
9
|
+
*
|
|
10
|
+
* 1. THỜI GIAN GỬI:
|
|
11
|
+
* - Chỉ được gửi trong khung giờ từ 8:00 - 22:00 hàng ngày
|
|
12
|
+
* - Không được gửi vào các ngày lễ, tết theo quy định
|
|
13
|
+
*
|
|
14
|
+
* 2. NỘI DUNG TIN NHẮN:
|
|
15
|
+
* - Phải là nội dung quảng cáo, khuyến mãi, tin tức
|
|
16
|
+
* - Không được chứa nội dung vi phạm pháp luật
|
|
17
|
+
* - Phải tuân thủ quy định về quảng cáo của Việt Nam
|
|
18
|
+
*
|
|
19
|
+
* 3. TẦN SUẤT GỬI:
|
|
20
|
+
* - Tối đa 1 tin nhắn truyền thông/ngày cho mỗi người dùng
|
|
21
|
+
* - Người dùng có thể từ chối nhận tin truyền thông
|
|
22
|
+
*
|
|
23
|
+
* 4. ĐỊNH DẠNG:
|
|
24
|
+
* - Phải sử dụng template được Zalo phê duyệt trước
|
|
25
|
+
* - Template phải tuân thủ format chuẩn của tin truyền thông
|
|
26
|
+
*
|
|
27
|
+
* 5. NGƯỜI DÙNG:
|
|
28
|
+
* - Người dùng phải đã follow OA
|
|
29
|
+
* - Người dùng không được block OA
|
|
30
|
+
* - Người dùng không được từ chối nhận tin truyền thông
|
|
31
|
+
*
|
|
32
|
+
* 6. OFFICIAL ACCOUNT:
|
|
33
|
+
* - OA phải được xác minh (verified)
|
|
34
|
+
* - OA phải có quyền gửi tin truyền thông được Zalo cấp phép
|
|
35
|
+
* - OA không được vi phạm chính sách về quảng cáo
|
|
36
|
+
*
|
|
37
|
+
* LỖI THƯỜNG GẶP:
|
|
38
|
+
* - 2001: Ngoài khung giờ cho phép (8:00-22:00)
|
|
39
|
+
* - 2002: Người dùng đã từ chối nhận tin truyền thông
|
|
40
|
+
* - 2003: Vượt quá giới hạn 1 tin/ngày
|
|
41
|
+
* - 2004: Template chưa được phê duyệt
|
|
42
|
+
* - 2005: Nội dung vi phạm chính sách quảng cáo
|
|
43
|
+
* - 2006: OA chưa có quyền gửi tin truyền thông
|
|
44
|
+
*/
|
|
45
|
+
class PromotionService {
|
|
46
|
+
constructor(client) {
|
|
47
|
+
this.client = client;
|
|
48
|
+
this.promotionApiUrl = "https://openapi.zalo.me/v2.0/oa/message/promotion";
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Gửi tin nhắn truyền thông/quảng cáo
|
|
52
|
+
* @param accessToken Access token của Official Account
|
|
53
|
+
* @param recipient Thông tin người nhận
|
|
54
|
+
* @param message Nội dung tin nhắn truyền thông
|
|
55
|
+
* @returns Thông tin tin nhắn đã gửi
|
|
56
|
+
*/
|
|
57
|
+
async sendPromotionMessage(accessToken, recipient, message) {
|
|
58
|
+
try {
|
|
59
|
+
// Validate promotion message
|
|
60
|
+
this.validatePromotionMessage(message);
|
|
61
|
+
// Check sending time (8:00 - 22:00)
|
|
62
|
+
this.validateSendingTime();
|
|
63
|
+
const request = {
|
|
64
|
+
recipient,
|
|
65
|
+
message,
|
|
66
|
+
};
|
|
67
|
+
const result = await this.client.apiPost(this.promotionApiUrl, accessToken, request);
|
|
68
|
+
if (result.error !== 0) {
|
|
69
|
+
throw new common_1.ZaloSDKError(result.message || "Failed to send promotion message", result.error, result);
|
|
70
|
+
}
|
|
71
|
+
if (!result.data) {
|
|
72
|
+
throw new common_1.ZaloSDKError("No response data received", -1);
|
|
73
|
+
}
|
|
74
|
+
return result.data;
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
if (error instanceof common_1.ZaloSDKError) {
|
|
78
|
+
throw error;
|
|
79
|
+
}
|
|
80
|
+
throw new common_1.ZaloSDKError(`Failed to send promotion message: ${error.message}`, -1, error);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Gửi tin nhắn khuyến mãi sản phẩm
|
|
85
|
+
* @param accessToken Access token của Official Account
|
|
86
|
+
* @param recipient Thông tin người nhận
|
|
87
|
+
* @param promotionInfo Thông tin khuyến mãi
|
|
88
|
+
* @returns Thông tin tin nhắn đã gửi
|
|
89
|
+
*/
|
|
90
|
+
async sendProductPromotion(accessToken, recipient, promotionInfo) {
|
|
91
|
+
try {
|
|
92
|
+
const message = {
|
|
93
|
+
type: "promotion",
|
|
94
|
+
attachment: {
|
|
95
|
+
type: "template",
|
|
96
|
+
payload: {
|
|
97
|
+
template_type: "promotion",
|
|
98
|
+
elements: [
|
|
99
|
+
{
|
|
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: [
|
|
108
|
+
{
|
|
109
|
+
type: "web_url",
|
|
110
|
+
title: "Mua ngay",
|
|
111
|
+
url: promotionInfo.productUrl,
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
type: "postback",
|
|
115
|
+
title: "Xem thêm",
|
|
116
|
+
payload: `VIEW_PRODUCT_${Date.now()}`,
|
|
117
|
+
},
|
|
118
|
+
],
|
|
119
|
+
},
|
|
120
|
+
],
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
};
|
|
124
|
+
return this.sendPromotionMessage(accessToken, recipient, message);
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
throw new common_1.ZaloSDKError(`Failed to send product promotion: ${error.message}`, -1, error);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Gửi tin nhắn thông báo sự kiện
|
|
132
|
+
* @param accessToken Access token của Official Account
|
|
133
|
+
* @param recipient Thông tin người nhận
|
|
134
|
+
* @param eventInfo Thông tin sự kiện
|
|
135
|
+
* @returns Thông tin tin nhắn đã gửi
|
|
136
|
+
*/
|
|
137
|
+
async sendEventNotification(accessToken, recipient, eventInfo) {
|
|
138
|
+
try {
|
|
139
|
+
const message = {
|
|
140
|
+
type: "promotion",
|
|
141
|
+
attachment: {
|
|
142
|
+
type: "template",
|
|
143
|
+
payload: {
|
|
144
|
+
template_type: "promotion",
|
|
145
|
+
elements: [
|
|
146
|
+
{
|
|
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: [
|
|
155
|
+
{
|
|
156
|
+
type: "web_url",
|
|
157
|
+
title: "Đăng ký tham gia",
|
|
158
|
+
url: eventInfo.registrationUrl,
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
type: "postback",
|
|
162
|
+
title: "Chia sẻ",
|
|
163
|
+
payload: `SHARE_EVENT_${Date.now()}`,
|
|
164
|
+
},
|
|
165
|
+
],
|
|
166
|
+
},
|
|
167
|
+
],
|
|
168
|
+
},
|
|
169
|
+
},
|
|
170
|
+
};
|
|
171
|
+
return this.sendPromotionMessage(accessToken, recipient, message);
|
|
172
|
+
}
|
|
173
|
+
catch (error) {
|
|
174
|
+
throw new common_1.ZaloSDKError(`Failed to send event notification: ${error.message}`, -1, error);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Gửi tin nhắn newsletter
|
|
179
|
+
* @param accessToken Access token của Official Account
|
|
180
|
+
* @param recipient Thông tin người nhận
|
|
181
|
+
* @param newsletterInfo Thông tin newsletter
|
|
182
|
+
* @returns Thông tin tin nhắn đã gửi
|
|
183
|
+
*/
|
|
184
|
+
async sendNewsletter(accessToken, recipient, newsletterInfo) {
|
|
185
|
+
try {
|
|
186
|
+
const message = {
|
|
187
|
+
type: "promotion",
|
|
188
|
+
attachment: {
|
|
189
|
+
type: "template",
|
|
190
|
+
payload: {
|
|
191
|
+
template_type: "promotion",
|
|
192
|
+
elements: [
|
|
193
|
+
{
|
|
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
|
+
],
|
|
209
|
+
},
|
|
210
|
+
],
|
|
211
|
+
},
|
|
212
|
+
},
|
|
213
|
+
};
|
|
214
|
+
return this.sendPromotionMessage(accessToken, recipient, message);
|
|
215
|
+
}
|
|
216
|
+
catch (error) {
|
|
217
|
+
throw new common_1.ZaloSDKError(`Failed to send newsletter: ${error.message}`, -1, error);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Validate promotion message format
|
|
222
|
+
* @param message Promotion message to validate
|
|
223
|
+
*/
|
|
224
|
+
validatePromotionMessage(message) {
|
|
225
|
+
if (!message.attachment) {
|
|
226
|
+
throw new common_1.ZaloSDKError("Promotion message must have attachment", -1);
|
|
227
|
+
}
|
|
228
|
+
if (!message.attachment.payload) {
|
|
229
|
+
throw new common_1.ZaloSDKError("Promotion message attachment must have payload", -1);
|
|
230
|
+
}
|
|
231
|
+
if (message.attachment.payload.template_type !== "promotion") {
|
|
232
|
+
throw new common_1.ZaloSDKError("Promotion message must use promotion template type", -1);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Validate sending time (8:00 - 22:00)
|
|
237
|
+
*/
|
|
238
|
+
validateSendingTime() {
|
|
239
|
+
const now = new Date();
|
|
240
|
+
const hour = now.getHours();
|
|
241
|
+
if (hour < 8 || hour >= 22) {
|
|
242
|
+
throw new common_1.ZaloSDKError("Tin nhắn truyền thông chỉ được gửi trong khung giờ từ 8:00 - 22:00", 2001);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
exports.PromotionService = PromotionService;
|
|
247
|
+
//# sourceMappingURL=promotion.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promotion.service.js","sourceRoot":"","sources":["../../src/services/promotion.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { ZaloClient } from "../clients/zalo-client";
|
|
2
|
+
/**
|
|
3
|
+
* Service for managing Zalo OA user tags
|
|
4
|
+
* Provides comprehensive tag management capabilities
|
|
5
|
+
*/
|
|
6
|
+
export declare class TagService {
|
|
7
|
+
private readonly client;
|
|
8
|
+
private readonly apiUrl;
|
|
9
|
+
constructor(client: ZaloClient);
|
|
10
|
+
/**
|
|
11
|
+
* Get all tags of the OA
|
|
12
|
+
* @param accessToken OA access token
|
|
13
|
+
* @returns List of all tags
|
|
14
|
+
*/
|
|
15
|
+
getAllTags(accessToken: string): Promise<{
|
|
16
|
+
error: number;
|
|
17
|
+
message: string;
|
|
18
|
+
data?: Array<{
|
|
19
|
+
tag_name: string;
|
|
20
|
+
tag_id?: string;
|
|
21
|
+
user_count?: number;
|
|
22
|
+
}>;
|
|
23
|
+
}>;
|
|
24
|
+
/**
|
|
25
|
+
* Get tags of a specific user
|
|
26
|
+
* @param accessToken OA access token
|
|
27
|
+
* @param userId User ID
|
|
28
|
+
* @returns User's tags
|
|
29
|
+
*/
|
|
30
|
+
getUserTags(accessToken: string, userId: string): Promise<{
|
|
31
|
+
error: number;
|
|
32
|
+
message: string;
|
|
33
|
+
data?: Array<{
|
|
34
|
+
tag_name: string;
|
|
35
|
+
tag_id?: string;
|
|
36
|
+
}>;
|
|
37
|
+
}>;
|
|
38
|
+
/**
|
|
39
|
+
* Create a new tag
|
|
40
|
+
* @param accessToken OA access token
|
|
41
|
+
* @param tagName Tag name
|
|
42
|
+
* @returns Created tag information
|
|
43
|
+
*/
|
|
44
|
+
createTag(accessToken: string, tagName: string): Promise<{
|
|
45
|
+
error: number;
|
|
46
|
+
message: string;
|
|
47
|
+
data?: {
|
|
48
|
+
tag_name: string;
|
|
49
|
+
tag_id?: string;
|
|
50
|
+
};
|
|
51
|
+
}>;
|
|
52
|
+
/**
|
|
53
|
+
* Delete a tag
|
|
54
|
+
* @param accessToken OA access token
|
|
55
|
+
* @param tagName Tag name to delete
|
|
56
|
+
* @returns Deletion result
|
|
57
|
+
*/
|
|
58
|
+
deleteTag(accessToken: string, tagName: string): Promise<{
|
|
59
|
+
error: number;
|
|
60
|
+
message: string;
|
|
61
|
+
}>;
|
|
62
|
+
/**
|
|
63
|
+
* Tag a user with specific tags
|
|
64
|
+
* @param accessToken OA access token
|
|
65
|
+
* @param userId User ID
|
|
66
|
+
* @param tagNames Array of tag names
|
|
67
|
+
* @returns Tagging result
|
|
68
|
+
*/
|
|
69
|
+
tagUser(accessToken: string, userId: string, tagNames: string[]): Promise<{
|
|
70
|
+
error: number;
|
|
71
|
+
message: string;
|
|
72
|
+
}>;
|
|
73
|
+
/**
|
|
74
|
+
* Remove tags from a user
|
|
75
|
+
* @param accessToken OA access token
|
|
76
|
+
* @param userId User ID
|
|
77
|
+
* @param tagNames Array of tag names to remove
|
|
78
|
+
* @returns Untagging result
|
|
79
|
+
*/
|
|
80
|
+
untagUser(accessToken: string, userId: string, tagNames: string[]): Promise<{
|
|
81
|
+
error: number;
|
|
82
|
+
message: string;
|
|
83
|
+
}>;
|
|
84
|
+
/**
|
|
85
|
+
* Get users by tag
|
|
86
|
+
* @param accessToken OA access token
|
|
87
|
+
* @param tagName Tag name
|
|
88
|
+
* @param offset Offset for pagination
|
|
89
|
+
* @param count Number of users to retrieve
|
|
90
|
+
* @returns Users with the specified tag
|
|
91
|
+
*/
|
|
92
|
+
getUsersByTag(accessToken: string, tagName: string, offset?: number, count?: number): Promise<{
|
|
93
|
+
error: number;
|
|
94
|
+
message: string;
|
|
95
|
+
data?: {
|
|
96
|
+
users: Array<{
|
|
97
|
+
user_id: string;
|
|
98
|
+
user_id_by_app?: string;
|
|
99
|
+
display_name: string;
|
|
100
|
+
avatar?: string;
|
|
101
|
+
user_is_follower: boolean;
|
|
102
|
+
}>;
|
|
103
|
+
total: number;
|
|
104
|
+
};
|
|
105
|
+
}>;
|
|
106
|
+
/**
|
|
107
|
+
* Bulk tag multiple users
|
|
108
|
+
* @param accessToken OA access token
|
|
109
|
+
* @param userIds Array of user IDs
|
|
110
|
+
* @param tagNames Array of tag names
|
|
111
|
+
* @returns Bulk tagging result
|
|
112
|
+
*/
|
|
113
|
+
bulkTagUsers(accessToken: string, userIds: string[], tagNames: string[]): Promise<{
|
|
114
|
+
error: number;
|
|
115
|
+
message: string;
|
|
116
|
+
data?: {
|
|
117
|
+
successful_users: string[];
|
|
118
|
+
failed_users: Array<{
|
|
119
|
+
user_id: string;
|
|
120
|
+
error: string;
|
|
121
|
+
}>;
|
|
122
|
+
};
|
|
123
|
+
}>;
|
|
124
|
+
/**
|
|
125
|
+
* Bulk untag multiple users
|
|
126
|
+
* @param accessToken OA access token
|
|
127
|
+
* @param userIds Array of user IDs
|
|
128
|
+
* @param tagNames Array of tag names to remove
|
|
129
|
+
* @returns Bulk untagging result
|
|
130
|
+
*/
|
|
131
|
+
bulkUntagUsers(accessToken: string, userIds: string[], tagNames: string[]): Promise<{
|
|
132
|
+
error: number;
|
|
133
|
+
message: string;
|
|
134
|
+
data?: {
|
|
135
|
+
successful_users: string[];
|
|
136
|
+
failed_users: Array<{
|
|
137
|
+
user_id: string;
|
|
138
|
+
error: string;
|
|
139
|
+
}>;
|
|
140
|
+
};
|
|
141
|
+
}>;
|
|
142
|
+
private handleTagError;
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=tag.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tag.service.d.ts","sourceRoot":"","sources":["../../src/services/tag.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TagService = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Service for managing Zalo OA user tags
|
|
6
|
+
* Provides comprehensive tag management capabilities
|
|
7
|
+
*/
|
|
8
|
+
class TagService {
|
|
9
|
+
constructor(client) {
|
|
10
|
+
this.client = client;
|
|
11
|
+
this.apiUrl = "https://openapi.zalo.me/v3.0/oa";
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Get all tags of the OA
|
|
15
|
+
* @param accessToken OA access token
|
|
16
|
+
* @returns List of all tags
|
|
17
|
+
*/
|
|
18
|
+
async getAllTags(accessToken) {
|
|
19
|
+
try {
|
|
20
|
+
const response = await this.client.apiGet(`${this.apiUrl}/tag/gettagsofoa`, accessToken);
|
|
21
|
+
return response;
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
throw this.handleTagError(error, "Failed to get all tags");
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Get tags of a specific user
|
|
29
|
+
* @param accessToken OA access token
|
|
30
|
+
* @param userId User ID
|
|
31
|
+
* @returns User's tags
|
|
32
|
+
*/
|
|
33
|
+
async getUserTags(accessToken, userId) {
|
|
34
|
+
try {
|
|
35
|
+
const response = await this.client.apiGet(`${this.apiUrl}/tag/gettagsofuser`, accessToken, {
|
|
36
|
+
user_id: userId,
|
|
37
|
+
});
|
|
38
|
+
return response;
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
throw this.handleTagError(error, "Failed to get user tags");
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Create a new tag
|
|
46
|
+
* @param accessToken OA access token
|
|
47
|
+
* @param tagName Tag name
|
|
48
|
+
* @returns Created tag information
|
|
49
|
+
*/
|
|
50
|
+
async createTag(accessToken, tagName) {
|
|
51
|
+
try {
|
|
52
|
+
const response = await this.client.apiPost(`${this.apiUrl}/tag/create`, accessToken, {
|
|
53
|
+
tag_name: tagName,
|
|
54
|
+
});
|
|
55
|
+
return response;
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
throw this.handleTagError(error, "Failed to create tag");
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Delete a tag
|
|
63
|
+
* @param accessToken OA access token
|
|
64
|
+
* @param tagName Tag name to delete
|
|
65
|
+
* @returns Deletion result
|
|
66
|
+
*/
|
|
67
|
+
async deleteTag(accessToken, tagName) {
|
|
68
|
+
try {
|
|
69
|
+
const response = await this.client.apiPost(`${this.apiUrl}/tag/delete`, accessToken, {
|
|
70
|
+
tag_name: tagName,
|
|
71
|
+
});
|
|
72
|
+
return response;
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
throw this.handleTagError(error, "Failed to delete tag");
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Tag a user with specific tags
|
|
80
|
+
* @param accessToken OA access token
|
|
81
|
+
* @param userId User ID
|
|
82
|
+
* @param tagNames Array of tag names
|
|
83
|
+
* @returns Tagging result
|
|
84
|
+
*/
|
|
85
|
+
async tagUser(accessToken, userId, tagNames) {
|
|
86
|
+
try {
|
|
87
|
+
const response = await this.client.apiPost(`${this.apiUrl}/tag/taguser`, accessToken, {
|
|
88
|
+
user_id: userId,
|
|
89
|
+
tag_names: tagNames,
|
|
90
|
+
});
|
|
91
|
+
return response;
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
throw this.handleTagError(error, "Failed to tag user");
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Remove tags from a user
|
|
99
|
+
* @param accessToken OA access token
|
|
100
|
+
* @param userId User ID
|
|
101
|
+
* @param tagNames Array of tag names to remove
|
|
102
|
+
* @returns Untagging result
|
|
103
|
+
*/
|
|
104
|
+
async untagUser(accessToken, userId, tagNames) {
|
|
105
|
+
try {
|
|
106
|
+
const response = await this.client.apiPost(`${this.apiUrl}/tag/rmtaguser`, accessToken, {
|
|
107
|
+
user_id: userId,
|
|
108
|
+
tag_names: tagNames,
|
|
109
|
+
});
|
|
110
|
+
return response;
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
throw this.handleTagError(error, "Failed to untag user");
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Get users by tag
|
|
118
|
+
* @param accessToken OA access token
|
|
119
|
+
* @param tagName Tag name
|
|
120
|
+
* @param offset Offset for pagination
|
|
121
|
+
* @param count Number of users to retrieve
|
|
122
|
+
* @returns Users with the specified tag
|
|
123
|
+
*/
|
|
124
|
+
async getUsersByTag(accessToken, tagName, offset = 0, count = 50) {
|
|
125
|
+
try {
|
|
126
|
+
const response = await this.client.apiGet(`${this.apiUrl}/tag/getusersoftag`, accessToken, {
|
|
127
|
+
tag_name: tagName,
|
|
128
|
+
offset,
|
|
129
|
+
count,
|
|
130
|
+
});
|
|
131
|
+
return response;
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
throw this.handleTagError(error, "Failed to get users by tag");
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Bulk tag multiple users
|
|
139
|
+
* @param accessToken OA access token
|
|
140
|
+
* @param userIds Array of user IDs
|
|
141
|
+
* @param tagNames Array of tag names
|
|
142
|
+
* @returns Bulk tagging result
|
|
143
|
+
*/
|
|
144
|
+
async bulkTagUsers(accessToken, userIds, tagNames) {
|
|
145
|
+
try {
|
|
146
|
+
const response = await this.client.apiPost(`${this.apiUrl}/tag/bulktagusers`, accessToken, {
|
|
147
|
+
user_ids: userIds,
|
|
148
|
+
tag_names: tagNames,
|
|
149
|
+
});
|
|
150
|
+
return response;
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
throw this.handleTagError(error, "Failed to bulk tag users");
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Bulk untag multiple users
|
|
158
|
+
* @param accessToken OA access token
|
|
159
|
+
* @param userIds Array of user IDs
|
|
160
|
+
* @param tagNames Array of tag names to remove
|
|
161
|
+
* @returns Bulk untagging result
|
|
162
|
+
*/
|
|
163
|
+
async bulkUntagUsers(accessToken, userIds, tagNames) {
|
|
164
|
+
try {
|
|
165
|
+
const response = await this.client.apiPost(`${this.apiUrl}/tag/bulkuntagusers`, accessToken, {
|
|
166
|
+
user_ids: userIds,
|
|
167
|
+
tag_names: tagNames,
|
|
168
|
+
});
|
|
169
|
+
return response;
|
|
170
|
+
}
|
|
171
|
+
catch (error) {
|
|
172
|
+
throw this.handleTagError(error, "Failed to bulk untag users");
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
handleTagError(error, defaultMessage) {
|
|
176
|
+
if (error.response?.data) {
|
|
177
|
+
const errorData = error.response.data;
|
|
178
|
+
return new Error(`${defaultMessage}: ${errorData.message || errorData.error || "Unknown error"}`);
|
|
179
|
+
}
|
|
180
|
+
return new Error(`${defaultMessage}: ${error.message || "Unknown error"}`);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
exports.TagService = TagService;
|
|
184
|
+
//# sourceMappingURL=tag.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tag.service.js","sourceRoot":"","sources":["../../src/services/tag.service.ts"],"names":[],"mappings":"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"}
|