@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.
Files changed (123) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +448 -0
  3. package/dist/clients/base-client.d.ts +67 -0
  4. package/dist/clients/base-client.d.ts.map +1 -0
  5. package/dist/clients/base-client.js +297 -0
  6. package/dist/clients/base-client.js.map +1 -0
  7. package/dist/clients/zalo-client.d.ts +131 -0
  8. package/dist/clients/zalo-client.d.ts.map +1 -0
  9. package/dist/clients/zalo-client.js +215 -0
  10. package/dist/clients/zalo-client.js.map +1 -0
  11. package/dist/index.d.ts +40 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +82 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/services/article.service.d.ts +144 -0
  16. package/dist/services/article.service.d.ts.map +1 -0
  17. package/dist/services/article.service.js +518 -0
  18. package/dist/services/article.service.js.map +1 -0
  19. package/dist/services/auth.service.d.ts +55 -0
  20. package/dist/services/auth.service.d.ts.map +1 -0
  21. package/dist/services/auth.service.js +269 -0
  22. package/dist/services/auth.service.js.map +1 -0
  23. package/dist/services/consultation.service.d.ts +73 -0
  24. package/dist/services/consultation.service.d.ts.map +1 -0
  25. package/dist/services/consultation.service.js +208 -0
  26. package/dist/services/consultation.service.js.map +1 -0
  27. package/dist/services/general-message.service.d.ts +85 -0
  28. package/dist/services/general-message.service.d.ts.map +1 -0
  29. package/dist/services/general-message.service.js +248 -0
  30. package/dist/services/general-message.service.js.map +1 -0
  31. package/dist/services/group-management.service.d.ts +220 -0
  32. package/dist/services/group-management.service.d.ts.map +1 -0
  33. package/dist/services/group-management.service.js +562 -0
  34. package/dist/services/group-management.service.js.map +1 -0
  35. package/dist/services/group-message.service.d.ts +102 -0
  36. package/dist/services/group-message.service.d.ts.map +1 -0
  37. package/dist/services/group-message.service.js +233 -0
  38. package/dist/services/group-message.service.js.map +1 -0
  39. package/dist/services/message-management.service.d.ts +135 -0
  40. package/dist/services/message-management.service.d.ts.map +1 -0
  41. package/dist/services/message-management.service.js +237 -0
  42. package/dist/services/message-management.service.js.map +1 -0
  43. package/dist/services/oa.service.d.ts +67 -0
  44. package/dist/services/oa.service.d.ts.map +1 -0
  45. package/dist/services/oa.service.js +223 -0
  46. package/dist/services/oa.service.js.map +1 -0
  47. package/dist/services/promotion.service.d.ts +114 -0
  48. package/dist/services/promotion.service.d.ts.map +1 -0
  49. package/dist/services/promotion.service.js +247 -0
  50. package/dist/services/promotion.service.js.map +1 -0
  51. package/dist/services/tag.service.d.ts +144 -0
  52. package/dist/services/tag.service.d.ts.map +1 -0
  53. package/dist/services/tag.service.js +184 -0
  54. package/dist/services/tag.service.js.map +1 -0
  55. package/dist/services/transaction.service.d.ts +110 -0
  56. package/dist/services/transaction.service.d.ts.map +1 -0
  57. package/dist/services/transaction.service.js +231 -0
  58. package/dist/services/transaction.service.js.map +1 -0
  59. package/dist/services/user-management.service.d.ts +117 -0
  60. package/dist/services/user-management.service.d.ts.map +1 -0
  61. package/dist/services/user-management.service.js +239 -0
  62. package/dist/services/user-management.service.js.map +1 -0
  63. package/dist/services/user.service.d.ts +84 -0
  64. package/dist/services/user.service.d.ts.map +1 -0
  65. package/dist/services/user.service.js +323 -0
  66. package/dist/services/user.service.js.map +1 -0
  67. package/dist/services/video-upload.service.d.ts +83 -0
  68. package/dist/services/video-upload.service.d.ts.map +1 -0
  69. package/dist/services/video-upload.service.js +267 -0
  70. package/dist/services/video-upload.service.js.map +1 -0
  71. package/dist/services/zns.service.d.ts +116 -0
  72. package/dist/services/zns.service.d.ts.map +1 -0
  73. package/dist/services/zns.service.js +234 -0
  74. package/dist/services/zns.service.js.map +1 -0
  75. package/dist/types/article.d.ts +352 -0
  76. package/dist/types/article.d.ts.map +1 -0
  77. package/dist/types/article.js +70 -0
  78. package/dist/types/article.js.map +1 -0
  79. package/dist/types/auth.d.ts +233 -0
  80. package/dist/types/auth.d.ts.map +1 -0
  81. package/dist/types/auth.js +39 -0
  82. package/dist/types/auth.js.map +1 -0
  83. package/dist/types/common.d.ts +237 -0
  84. package/dist/types/common.d.ts.map +1 -0
  85. package/dist/types/common.js +42 -0
  86. package/dist/types/common.js.map +1 -0
  87. package/dist/types/group.d.ts +523 -0
  88. package/dist/types/group.d.ts.map +1 -0
  89. package/dist/types/group.js +6 -0
  90. package/dist/types/group.js.map +1 -0
  91. package/dist/types/message.d.ts +333 -0
  92. package/dist/types/message.d.ts.map +1 -0
  93. package/dist/types/message.js +17 -0
  94. package/dist/types/message.js.map +1 -0
  95. package/dist/types/oa.d.ts +285 -0
  96. package/dist/types/oa.d.ts.map +1 -0
  97. package/dist/types/oa.js +25 -0
  98. package/dist/types/oa.js.map +1 -0
  99. package/dist/types/social.d.ts +427 -0
  100. package/dist/types/social.d.ts.map +1 -0
  101. package/dist/types/social.js +6 -0
  102. package/dist/types/social.js.map +1 -0
  103. package/dist/types/user-management.d.ts +280 -0
  104. package/dist/types/user-management.d.ts.map +1 -0
  105. package/dist/types/user-management.js +6 -0
  106. package/dist/types/user-management.js.map +1 -0
  107. package/dist/types/user.d.ts +365 -0
  108. package/dist/types/user.d.ts.map +1 -0
  109. package/dist/types/user.js +17 -0
  110. package/dist/types/user.js.map +1 -0
  111. package/dist/types/webhook.d.ts +1972 -0
  112. package/dist/types/webhook.d.ts.map +1 -0
  113. package/dist/types/webhook.js +419 -0
  114. package/dist/types/webhook.js.map +1 -0
  115. package/dist/types/zns.d.ts +277 -0
  116. package/dist/types/zns.d.ts.map +1 -0
  117. package/dist/types/zns.js +6 -0
  118. package/dist/types/zns.js.map +1 -0
  119. package/dist/zalo-sdk.d.ts +228 -0
  120. package/dist/zalo-sdk.d.ts.map +1 -0
  121. package/dist/zalo-sdk.js +307 -0
  122. package/dist/zalo-sdk.js.map +1 -0
  123. package/package.json +59 -0
@@ -0,0 +1,248 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GeneralMessageService = void 0;
4
+ const common_1 = require("../types/common");
5
+ /**
6
+ * Service xử lý các API tin nhắn tổng quát của Zalo Official Account
7
+ *
8
+ * Bao gồm các loại tin nhắn:
9
+ * - Tin nhắn phản hồi (Response Message)
10
+ * - Tin nhắn ẩn danh (Anonymous Message)
11
+ * - Tin nhắn tự động (Auto Message)
12
+ * - Tin nhắn hệ thống (System Message)
13
+ *
14
+ * ĐIỀU KIỆN GỬI TIN NHẮN TỔNG QUÁT:
15
+ *
16
+ * 1. TIN NHẮN PHẢN HỒI:
17
+ * - Chỉ được gửi trong vòng 24 giờ kể từ khi người dùng gửi tin nhắn đến OA
18
+ * - Không giới hạn số lượng tin nhắn phản hồi
19
+ * - Có thể chứa bất kỳ nội dung nào (tư vấn, quảng cáo, thông tin)
20
+ *
21
+ * 2. TIN NHẮN ẨN DANH:
22
+ * - Gửi tin nhắn mà không hiển thị thông tin OA
23
+ * - Chỉ dành cho các trường hợp đặc biệt
24
+ * - Cần được Zalo phê duyệt trước khi sử dụng
25
+ *
26
+ * 3. TIN NHẮN TỰ ĐỘNG:
27
+ * - Tin nhắn được gửi tự động dựa trên trigger
28
+ * - Bao gồm: tin chào mừng, tin cảm ơn, tin nhắc nhở
29
+ *
30
+ * 4. TIN NHẮN HỆ THỐNG:
31
+ * - Tin nhắn thông báo từ hệ thống
32
+ * - Bao gồm: thông báo bảo trì, cập nhật chính sách
33
+ */
34
+ class GeneralMessageService {
35
+ constructor(client) {
36
+ this.client = client;
37
+ }
38
+ /**
39
+ * Gửi tin nhắn phản hồi văn bản
40
+ * @param accessToken Access token của Official Account
41
+ * @param recipient Thông tin người nhận
42
+ * @param message Nội dung tin nhắn văn bản
43
+ * @returns Thông tin tin nhắn đã gửi
44
+ */
45
+ async sendResponseTextMessage(accessToken, recipient, message) {
46
+ try {
47
+ if (!message.text || message.text.trim().length === 0) {
48
+ throw new common_1.ZaloSDKError("Nội dung tin nhắn không được để trống", -1);
49
+ }
50
+ if (message.text.length > 2000) {
51
+ throw new common_1.ZaloSDKError("Nội dung tin nhắn không được vượt quá 2000 ký tự", -1);
52
+ }
53
+ const endpoint = this.client.endpoints.message.send;
54
+ const request = {
55
+ recipient,
56
+ message,
57
+ messaging_type: "response",
58
+ };
59
+ const result = await this.client.apiPost(endpoint, accessToken, request);
60
+ if (result.error !== 0) {
61
+ throw new common_1.ZaloSDKError(result.message || "Failed to send response text message", result.error, result);
62
+ }
63
+ if (!result.data) {
64
+ throw new common_1.ZaloSDKError("No response data received", -1);
65
+ }
66
+ return result.data;
67
+ }
68
+ catch (error) {
69
+ if (error instanceof common_1.ZaloSDKError) {
70
+ throw error;
71
+ }
72
+ throw new common_1.ZaloSDKError(`Failed to send response text message: ${error.message}`, -1, error);
73
+ }
74
+ }
75
+ /**
76
+ * Gửi tin nhắn phản hồi hình ảnh
77
+ * @param accessToken Access token của Official Account
78
+ * @param recipient Thông tin người nhận
79
+ * @param message Nội dung tin nhắn hình ảnh
80
+ * @returns Thông tin tin nhắn đã gửi
81
+ */
82
+ async sendResponseImageMessage(accessToken, recipient, message) {
83
+ try {
84
+ if (!message.attachment?.payload?.url) {
85
+ throw new common_1.ZaloSDKError("URL hình ảnh không được để trống", -1);
86
+ }
87
+ const endpoint = this.client.endpoints.message.send;
88
+ const request = {
89
+ recipient,
90
+ message,
91
+ messaging_type: "response",
92
+ };
93
+ const result = await this.client.apiPost(endpoint, accessToken, request);
94
+ if (result.error !== 0) {
95
+ throw new common_1.ZaloSDKError(result.message || "Failed to send response image message", result.error, result);
96
+ }
97
+ if (!result.data) {
98
+ throw new common_1.ZaloSDKError("No response data received", -1);
99
+ }
100
+ return result.data;
101
+ }
102
+ catch (error) {
103
+ if (error instanceof common_1.ZaloSDKError) {
104
+ throw error;
105
+ }
106
+ throw new common_1.ZaloSDKError(`Failed to send response image message: ${error.message}`, -1, error);
107
+ }
108
+ }
109
+ /**
110
+ * Gửi tin nhắn ẩn danh
111
+ * @param accessToken Access token của Official Account
112
+ * @param recipient Thông tin người nhận
113
+ * @param message Nội dung tin nhắn ẩn danh
114
+ * @returns Thông tin tin nhắn đã gửi
115
+ */
116
+ async sendAnonymousMessage(accessToken, recipient, message) {
117
+ try {
118
+ if (!message.text || message.text.trim().length === 0) {
119
+ throw new common_1.ZaloSDKError("Nội dung tin nhắn ẩn danh không được để trống", -1);
120
+ }
121
+ const endpoint = this.client.endpoints.message.sendAnonymous;
122
+ const request = {
123
+ recipient,
124
+ message,
125
+ };
126
+ const result = await this.client.apiPost(endpoint, accessToken, request);
127
+ if (result.error !== 0) {
128
+ throw new common_1.ZaloSDKError(result.message || "Failed to send anonymous message", result.error, result);
129
+ }
130
+ if (!result.data) {
131
+ throw new common_1.ZaloSDKError("No response data received", -1);
132
+ }
133
+ return result.data;
134
+ }
135
+ catch (error) {
136
+ if (error instanceof common_1.ZaloSDKError) {
137
+ throw error;
138
+ }
139
+ throw new common_1.ZaloSDKError(`Failed to send anonymous message: ${error.message}`, -1, error);
140
+ }
141
+ }
142
+ /**
143
+ * Upload file để sử dụng trong tin nhắn
144
+ * @param accessToken Access token của Official Account
145
+ * @param file File data (base64 hoặc buffer)
146
+ * @param fileName Tên file
147
+ * @returns Thông tin file đã upload
148
+ */
149
+ async uploadFile(accessToken, file, fileName) {
150
+ try {
151
+ const endpoint = this.client.endpoints.upload.file;
152
+ const formData = new FormData();
153
+ if (typeof file === "string") {
154
+ // Base64 string
155
+ const buffer = Buffer.from(file, "base64");
156
+ formData.append("file", new Blob([new Uint8Array(buffer)]), fileName);
157
+ }
158
+ else {
159
+ // Buffer
160
+ formData.append("file", new Blob([new Uint8Array(file)]), fileName);
161
+ }
162
+ const result = await this.client.apiPost(endpoint, accessToken, formData);
163
+ if (result.error !== 0) {
164
+ throw new common_1.ZaloSDKError(result.message || "Failed to upload file", result.error, result);
165
+ }
166
+ if (!result.data) {
167
+ throw new common_1.ZaloSDKError("No response data received", -1);
168
+ }
169
+ return result.data;
170
+ }
171
+ catch (error) {
172
+ if (error instanceof common_1.ZaloSDKError) {
173
+ throw error;
174
+ }
175
+ throw new common_1.ZaloSDKError(`Failed to upload file: ${error.message}`, -1, error);
176
+ }
177
+ }
178
+ /**
179
+ * Upload hình ảnh để sử dụng trong tin nhắn
180
+ * @param accessToken Access token của Official Account
181
+ * @param image Image data (base64 hoặc buffer)
182
+ * @param fileName Tên file hình ảnh
183
+ * @returns Thông tin hình ảnh đã upload
184
+ */
185
+ async uploadImage(accessToken, image, fileName) {
186
+ try {
187
+ const endpoint = this.client.endpoints.upload.image;
188
+ const formData = new FormData();
189
+ if (typeof image === "string") {
190
+ // Base64 string
191
+ const buffer = Buffer.from(image, "base64");
192
+ formData.append("file", new Blob([new Uint8Array(buffer)]), fileName);
193
+ }
194
+ else {
195
+ // Buffer
196
+ formData.append("file", new Blob([new Uint8Array(image)]), fileName);
197
+ }
198
+ const result = await this.client.apiPost(endpoint, accessToken, formData);
199
+ if (result.error !== 0) {
200
+ throw new common_1.ZaloSDKError(result.message || "Failed to upload image", result.error, result);
201
+ }
202
+ if (!result.data) {
203
+ throw new common_1.ZaloSDKError("No response data received", -1);
204
+ }
205
+ return result.data;
206
+ }
207
+ catch (error) {
208
+ if (error instanceof common_1.ZaloSDKError) {
209
+ throw error;
210
+ }
211
+ throw new common_1.ZaloSDKError(`Failed to upload image: ${error.message}`, -1, error);
212
+ }
213
+ }
214
+ /**
215
+ * Gửi tin nhắn tổng quát
216
+ * @param accessToken Access token của Official Account
217
+ * @param recipient Thông tin người nhận
218
+ * @param message Nội dung tin nhắn
219
+ * @param messagingType Loại tin nhắn (response, update, message_tag)
220
+ * @returns Thông tin tin nhắn đã gửi
221
+ */
222
+ async sendMessage(accessToken, recipient, message, messagingType = "response") {
223
+ try {
224
+ const endpoint = this.client.endpoints.message.send;
225
+ const request = {
226
+ recipient,
227
+ message,
228
+ messaging_type: messagingType,
229
+ };
230
+ const result = await this.client.apiPost(endpoint, accessToken, request);
231
+ if (result.error !== 0) {
232
+ throw new common_1.ZaloSDKError(result.message || "Failed to send message", result.error, result);
233
+ }
234
+ if (!result.data) {
235
+ throw new common_1.ZaloSDKError("No response data received", -1);
236
+ }
237
+ return result.data;
238
+ }
239
+ catch (error) {
240
+ if (error instanceof common_1.ZaloSDKError) {
241
+ throw error;
242
+ }
243
+ throw new common_1.ZaloSDKError(`Failed to send message: ${error.message}`, -1, error);
244
+ }
245
+ }
246
+ }
247
+ exports.GeneralMessageService = GeneralMessageService;
248
+ //# sourceMappingURL=general-message.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"general-message.service.js","sourceRoot":"","sources":["../../src/services/general-message.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,220 @@
1
+ import { ZaloClient } from "../clients/zalo-client";
2
+ import { GroupCreateRequest, GroupCreateResult, GroupUpdateRequest, GroupAvatarUpdateRequest, GroupMemberInviteRequest, GroupAdminActionRequest, GroupQuota, GroupRecentChat, GroupConversationMessage, GroupDetailResponse, GroupPendingMembersResponse, GroupAcceptPendingMembersResponse, GroupRemoveMembersResponse, GroupMembersResponse, GroupQuotaMessageResponse } from "../types/group";
3
+ import { GMFProductType, QuotaType } from "../types/oa";
4
+ /**
5
+ * Service for handling Zalo Official Account Group Management Framework (GMF) APIs
6
+ *
7
+ * CONDITIONS FOR USING ZALO GMF GROUP MANAGEMENT:
8
+ *
9
+ * 1. GENERAL CONDITIONS:
10
+ * - OA must be granted permission to use GMF (Group Message Framework) feature
11
+ * - Access token must have "manage_group" and "group_message" scopes
12
+ * - OA must have active status and be verified
13
+ * - Must comply with limits on number of groups and members
14
+ *
15
+ * 2. CREATE NEW GROUP:
16
+ * - Group name: required, max 100 characters, no special characters
17
+ * - Description: optional, max 500 characters
18
+ * - Avatar: optional, JPG/PNG format, max 5MB
19
+ * - Initial members: max 200 people, must be users who have interacted with OA
20
+ * - OA automatically becomes admin of the group
21
+ *
22
+ * 3. MEMBER MANAGEMENT:
23
+ * - Only admins can invite/remove members
24
+ * - Invite members: max 50 people per time, users must have interacted with OA
25
+ * - Remove members: cannot remove other admins, must have at least 1 admin
26
+ * - Members can leave group themselves
27
+ *
28
+ * 4. ADMIN MANAGEMENT:
29
+ * - Only current admins can add/remove other admins
30
+ * - Must have at least 1 admin in group
31
+ * - OA always has admin rights and cannot be removed
32
+ *
33
+ * 5. LIMITS AND CONSTRAINTS:
34
+ * - Maximum groups: according to service package (usually 10-100 groups)
35
+ * - Maximum members per group: 200 people
36
+ * - Group creation frequency: max 10 groups/day
37
+ * - Member invitation frequency: max 500 invitations/day
38
+ */
39
+ export declare class GroupManagementService {
40
+ private readonly client;
41
+ private readonly apiUrl;
42
+ constructor(client: ZaloClient);
43
+ /**
44
+ * Create new group chat with asset_id
45
+ * @param accessToken OA access token
46
+ * @param groupData Group information to create
47
+ * @returns Created group information
48
+ */
49
+ createGroup(accessToken: string, groupData: GroupCreateRequest): Promise<GroupCreateResult>;
50
+ /**
51
+ * Get detailed group information
52
+ * @param accessToken OA access token
53
+ * @param groupId Group ID
54
+ * @returns Detailed group information including group_info, asset_info and group_setting
55
+ */
56
+ getGroupInfo(accessToken: string, groupId: string): Promise<GroupDetailResponse["data"]>;
57
+ /**
58
+ * Update group information
59
+ * @param accessToken OA access token
60
+ * @param groupId Group ID
61
+ * @param updateData Information to update
62
+ * @returns Update result
63
+ */
64
+ updateGroupInfo(accessToken: string, groupId: string, updateData: GroupUpdateRequest): Promise<{
65
+ success: boolean;
66
+ }>;
67
+ /**
68
+ * Update group avatar
69
+ * @param accessToken OA access token
70
+ * @param groupId Group ID
71
+ * @param avatarData New avatar information
72
+ * @returns Update result
73
+ */
74
+ updateGroupAvatar(accessToken: string, groupId: string, avatarData: GroupAvatarUpdateRequest): Promise<{
75
+ success: boolean;
76
+ }>;
77
+ /**
78
+ * Invite members to group
79
+ * @param accessToken OA access token
80
+ * @param groupId Group ID
81
+ * @param inviteData List of user IDs to invite
82
+ * @returns Invitation result
83
+ */
84
+ inviteMembers(accessToken: string, groupId: string, inviteData: GroupMemberInviteRequest): Promise<{
85
+ success: boolean;
86
+ invited_count: number;
87
+ }>;
88
+ /**
89
+ * Get list of pending members
90
+ * @param accessToken OA access token
91
+ * @param groupId Group ID
92
+ * @param offset Offset for pagination (default: 0)
93
+ * @param count Maximum number to return (default: 20, max: 50)
94
+ * @returns List of pending members
95
+ */
96
+ getPendingMembers(accessToken: string, groupId: string, offset?: number, count?: number): Promise<GroupPendingMembersResponse>;
97
+ /**
98
+ * Accept pending members to group
99
+ * @param accessToken OA access token
100
+ * @param groupId Group ID
101
+ * @param memberUserIds List of user IDs to accept
102
+ * @returns Accept result
103
+ */
104
+ acceptPendingMembers(accessToken: string, groupId: string, memberUserIds: string[]): Promise<GroupAcceptPendingMembersResponse>;
105
+ /**
106
+ * Reject pending members from group
107
+ * @param accessToken OA access token
108
+ * @param groupId Group ID
109
+ * @param memberUserIds List of user IDs to reject
110
+ * @returns Reject result
111
+ */
112
+ rejectPendingMembers(accessToken: string, groupId: string, memberUserIds: string[]): Promise<GroupAcceptPendingMembersResponse>;
113
+ /**
114
+ * Remove members from group
115
+ * @param accessToken OA access token
116
+ * @param groupId Group ID
117
+ * @param memberUserIds List of user IDs to remove
118
+ * @returns Remove result
119
+ */
120
+ removeMembers(accessToken: string, groupId: string, memberUserIds: string[]): Promise<GroupRemoveMembersResponse>;
121
+ /**
122
+ * Add admin rights to members
123
+ * @param accessToken OA access token
124
+ * @param groupId Group ID
125
+ * @param adminData List of user IDs to add admin rights
126
+ * @returns Add admin result
127
+ */
128
+ addAdmins(accessToken: string, groupId: string, adminData: GroupAdminActionRequest): Promise<{
129
+ error: number;
130
+ message: string;
131
+ }>;
132
+ /**
133
+ * Remove admin rights from members
134
+ * @param accessToken OA access token
135
+ * @param groupId Group ID
136
+ * @param adminData List of user IDs to remove admin rights
137
+ * @returns Remove admin result
138
+ */
139
+ removeAdmins(accessToken: string, groupId: string, adminData: GroupAdminActionRequest): Promise<{
140
+ error: number;
141
+ message: string;
142
+ }>;
143
+ /**
144
+ * Delete group chat (Disband group)
145
+ * @param accessToken OA access token
146
+ * @param groupId Group ID to delete
147
+ * @returns Delete result
148
+ */
149
+ deleteGroup(accessToken: string, groupId: string): Promise<{
150
+ error: number;
151
+ message: string;
152
+ }>;
153
+ /**
154
+ * Get list of OA groups
155
+ * @param accessToken OA access token
156
+ * @param offset Offset for pagination (default: 0)
157
+ * @param count Maximum number to return (default: 20, max: 50)
158
+ * @returns List of OA groups
159
+ */
160
+ getGroupsOfOA(accessToken: string, offset?: number, count?: number): Promise<{
161
+ groups: any[];
162
+ total: number;
163
+ }>;
164
+ /**
165
+ * Get group quota information and asset_id
166
+ * @param accessToken OA access token
167
+ * @param productType Product type (optional)
168
+ * @param quotaType Quota type (optional)
169
+ * @returns Group quota information including asset_id
170
+ */
171
+ getGroupQuota(accessToken: string, productType?: GMFProductType, quotaType?: QuotaType): Promise<GroupQuota>;
172
+ /**
173
+ * Get asset_id for creating GMF group
174
+ * @param accessToken OA access token
175
+ * @returns Asset_id for group creation
176
+ */
177
+ getAssetId(accessToken: string): Promise<string>;
178
+ /**
179
+ * Get list of asset_ids available for creating GMF groups
180
+ * @param accessToken OA access token
181
+ * @returns List of asset_ids and quota information
182
+ */
183
+ getAssetIds(accessToken: string): Promise<GroupQuotaMessageResponse>;
184
+ /**
185
+ * Get list of recent chats
186
+ * @param accessToken OA access token
187
+ * @param offset Offset for pagination (default: 0)
188
+ * @param count Maximum number to return (default: 20, max: 50)
189
+ * @returns List of recent chats
190
+ */
191
+ getRecentChats(accessToken: string, offset?: number, count?: number): Promise<{
192
+ chats: GroupRecentChat[];
193
+ total: number;
194
+ }>;
195
+ /**
196
+ * Get group conversation history
197
+ * @param accessToken OA access token
198
+ * @param groupId Group ID
199
+ * @param offset Offset for pagination (default: 0)
200
+ * @param count Maximum number of messages to return (default: 20, max: 100)
201
+ * @param fromTime Start time (Unix timestamp, optional)
202
+ * @param toTime End time (Unix timestamp, optional)
203
+ * @returns Group conversation history
204
+ */
205
+ getGroupConversation(accessToken: string, groupId: string, offset?: number, count?: number, fromTime?: number, toTime?: number): Promise<{
206
+ messages: GroupConversationMessage[];
207
+ total: number;
208
+ }>;
209
+ /**
210
+ * Get group members list from Zalo API
211
+ * @param accessToken OA access token
212
+ * @param groupId Group ID
213
+ * @param offset Offset for pagination (default: 0)
214
+ * @param count Maximum number to return (default: 5, max: 50)
215
+ * @returns Group members list
216
+ */
217
+ getGroupMembers(accessToken: string, groupId: string, offset?: number, count?: number): Promise<GroupMembersResponse>;
218
+ private handleGroupManagementError;
219
+ }
220
+ //# sourceMappingURL=group-management.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group-management.service.d.ts","sourceRoot":"","sources":["../../src/services/group-management.service.ts"],"names":[],"mappings":"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"}