@warriorteam/redai-zalo-sdk 1.4.1 → 1.5.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,232 +1,232 @@
1
- # Group Management Service
2
-
3
- The `GroupManagementService` provides comprehensive group management capabilities for Zalo Official Account (OA) using the Group Message Framework (GMF).
4
-
5
- ## Features
6
-
7
- - ✅ Create new groups with asset_id
8
- - ✅ Update group information and avatar
9
- - ✅ Invite and remove members
10
- - ✅ Manage pending member requests
11
- - ✅ Add and remove admin rights
12
- - ✅ Delete groups
13
- - ✅ Get group information and member lists
14
- - ✅ Manage group quota and assets
15
- - ✅ Get conversation history
16
-
17
- ## Prerequisites
18
-
19
- 1. **OA Requirements:**
20
- - OA must be granted GMF (Group Message Framework) permissions
21
- - Access token must have "manage_group" and "group_message" scopes
22
- - OA must have active status and be verified
23
-
24
- 2. **Limits:**
25
- - Maximum groups: 10-100 (depends on service package)
26
- - Maximum members per group: 200 people
27
- - Group creation frequency: max 10 groups/day
28
- - Member invitation frequency: max 500 invitations/day
29
-
30
- ## Usage
31
-
32
- ### Initialize SDK
33
-
34
- ```typescript
35
- import { ZaloSDK } from 'redai-zalo-sdk';
36
-
37
- const sdk = new ZaloSDK({
38
- appId: 'your_app_id',
39
- appSecret: 'your_app_secret',
40
- });
41
-
42
- const groupManagement = sdk.groupManagement;
43
- ```
44
-
45
- ### 1. Create Group
46
-
47
- ```typescript
48
- const groupData = {
49
- group_name: "Support Group",
50
- group_description: "Customer support group",
51
- asset_id: "your_asset_id", // Get from getAssetId()
52
- member_user_ids: ["user1", "user2", "user3"]
53
- };
54
-
55
- const result = await groupManagement.createGroup(accessToken, groupData);
56
- console.log(`Group created with ID: ${result.group_id}`);
57
- ```
58
-
59
- ### 2. Get Group Information
60
-
61
- ```typescript
62
- const groupInfo = await groupManagement.getGroupInfo(accessToken, groupId);
63
- console.log('Group details:', groupInfo);
64
- ```
65
-
66
- ### 3. Update Group Information
67
-
68
- ```typescript
69
- const updateData = {
70
- group_name: "New Group Name",
71
- description: "Updated description"
72
- };
73
-
74
- await groupManagement.updateGroupInfo(accessToken, groupId, updateData);
75
- ```
76
-
77
- ### 4. Invite Members
78
-
79
- ```typescript
80
- const inviteData = {
81
- member_uids: ["user4", "user5"]
82
- };
83
-
84
- const result = await groupManagement.inviteMembers(accessToken, groupId, inviteData);
85
- console.log(`Invited ${result.invited_count} members`);
86
- ```
87
-
88
- ### 5. Manage Pending Members
89
-
90
- ```typescript
91
- // Get pending members
92
- const pending = await groupManagement.getPendingMembers(accessToken, groupId);
93
-
94
- // Accept pending members
95
- const memberIds = pending.data?.members.map(m => m.user_id) || [];
96
- await groupManagement.acceptPendingMembers(accessToken, groupId, memberIds);
97
-
98
- // Or reject pending members
99
- await groupManagement.rejectPendingMembers(accessToken, groupId, memberIds);
100
- ```
101
-
102
- ### 6. Manage Admins
103
-
104
- ```typescript
105
- // Add admin rights
106
- const adminData = { admin_uids: ["user1"] };
107
- await groupManagement.addAdmins(accessToken, groupId, adminData);
108
-
109
- // Remove admin rights
110
- await groupManagement.removeAdmins(accessToken, groupId, adminData);
111
- ```
112
-
113
- ### 7. Get Asset ID for Group Creation
114
-
115
- ```typescript
116
- // Get single asset_id
117
- const assetId = await groupManagement.getAssetId(accessToken);
118
-
119
- // Get all available asset_ids
120
- const assets = await groupManagement.getAssetIds(accessToken);
121
- console.log('Available assets:', assets.data);
122
- ```
123
-
124
- ### 8. Get Group Members
125
-
126
- ```typescript
127
- const members = await groupManagement.getGroupMembers(accessToken, groupId, 0, 10);
128
- console.log('Group members:', members.data?.members);
129
- ```
130
-
131
- ### 9. Remove Members
132
-
133
- ```typescript
134
- const memberIds = ["user1", "user2"];
135
- await groupManagement.removeMembers(accessToken, groupId, memberIds);
136
- ```
137
-
138
- ### 10. Delete Group
139
-
140
- ```typescript
141
- await groupManagement.deleteGroup(accessToken, groupId);
142
- console.log('Group deleted successfully');
143
- ```
144
-
145
- ### 11. Get Groups of OA
146
-
147
- ```typescript
148
- const groups = await groupManagement.getGroupsOfOA(accessToken, 0, 20);
149
- console.log(`Found ${groups.total} groups:`, groups.groups);
150
- ```
151
-
152
- ### 12. Get Group Quota
153
-
154
- ```typescript
155
- import { GMFProductType, QuotaType } from 'redai-zalo-sdk';
156
-
157
- const quota = await groupManagement.getGroupQuota(
158
- accessToken,
159
- GMFProductType.GMF10,
160
- QuotaType.SUB_QUOTA
161
- );
162
- console.log('Group quota:', quota);
163
- ```
164
-
165
- ## Error Handling
166
-
167
- ```typescript
168
- try {
169
- const result = await groupManagement.createGroup(accessToken, groupData);
170
- console.log('Success:', result);
171
- } catch (error) {
172
- if (error instanceof ZaloSDKError) {
173
- console.error('Zalo API Error:', error.message, error.code);
174
- } else {
175
- console.error('Unexpected error:', error);
176
- }
177
- }
178
- ```
179
-
180
- ## Complete Example
181
-
182
- ```typescript
183
- import { ZaloSDK, GMFProductType } from 'redai-zalo-sdk';
184
-
185
- class GroupManager {
186
- private sdk: ZaloSDK;
187
-
188
- constructor() {
189
- this.sdk = new ZaloSDK({
190
- appId: process.env.ZALO_APP_ID!,
191
- appSecret: process.env.ZALO_APP_SECRET!,
192
- });
193
- }
194
-
195
- async createAndManageGroup(accessToken: string) {
196
- try {
197
- // 1. Get asset_id for group creation
198
- const assetId = await this.sdk.groupManagement.getAssetId(accessToken);
199
-
200
- // 2. Create new group
201
- const newGroup = await this.sdk.groupManagement.createGroup(accessToken, {
202
- group_name: "Support Team",
203
- description: "Customer support team",
204
- asset_id: assetId,
205
- member_uids: ["user1", "user2"]
206
- });
207
-
208
- // 3. Invite more members
209
- await this.sdk.groupManagement.inviteMembers(accessToken, newGroup.group_id, {
210
- member_uids: ["user3", "user4"]
211
- });
212
-
213
- // 4. Add admin
214
- await this.sdk.groupManagement.addAdmins(accessToken, newGroup.group_id, {
215
- admin_uids: ["user1"]
216
- });
217
-
218
- // 5. Get group info
219
- const groupInfo = await this.sdk.groupManagement.getGroupInfo(accessToken, newGroup.group_id);
220
-
221
- return groupInfo;
222
- } catch (error) {
223
- console.error('Group management error:', error);
224
- throw error;
225
- }
226
- }
227
- }
228
- ```
229
-
230
- ## API Reference
231
-
232
- For detailed API documentation, see the TypeScript definitions in the source code. All methods include comprehensive JSDoc comments with parameter descriptions and return types.
1
+ # Group Management Service
2
+
3
+ The `GroupManagementService` provides comprehensive group management capabilities for Zalo Official Account (OA) using the Group Message Framework (GMF).
4
+
5
+ ## Features
6
+
7
+ - ✅ Create new groups with asset_id
8
+ - ✅ Update group information and avatar
9
+ - ✅ Invite and remove members
10
+ - ✅ Manage pending member requests
11
+ - ✅ Add and remove admin rights
12
+ - ✅ Delete groups
13
+ - ✅ Get group information and member lists
14
+ - ✅ Manage group quota and assets
15
+ - ✅ Get conversation history
16
+
17
+ ## Prerequisites
18
+
19
+ 1. **OA Requirements:**
20
+ - OA must be granted GMF (Group Message Framework) permissions
21
+ - Access token must have "manage_group" and "group_message" scopes
22
+ - OA must have active status and be verified
23
+
24
+ 2. **Limits:**
25
+ - Maximum groups: 10-100 (depends on service package)
26
+ - Maximum members per group: 200 people
27
+ - Group creation frequency: max 10 groups/day
28
+ - Member invitation frequency: max 500 invitations/day
29
+
30
+ ## Usage
31
+
32
+ ### Initialize SDK
33
+
34
+ ```typescript
35
+ import { ZaloSDK } from 'redai-zalo-sdk';
36
+
37
+ const sdk = new ZaloSDK({
38
+ appId: 'your_app_id',
39
+ appSecret: 'your_app_secret',
40
+ });
41
+
42
+ const groupManagement = sdk.groupManagement;
43
+ ```
44
+
45
+ ### 1. Create Group
46
+
47
+ ```typescript
48
+ const groupData = {
49
+ group_name: "Support Group",
50
+ group_description: "Customer support group",
51
+ asset_id: "your_asset_id", // Get from getAssetId()
52
+ member_user_ids: ["user1", "user2", "user3"]
53
+ };
54
+
55
+ const result = await groupManagement.createGroup(accessToken, groupData);
56
+ console.log(`Group created with ID: ${result.group_id}`);
57
+ ```
58
+
59
+ ### 2. Get Group Information
60
+
61
+ ```typescript
62
+ const groupInfo = await groupManagement.getGroupInfo(accessToken, groupId);
63
+ console.log('Group details:', groupInfo);
64
+ ```
65
+
66
+ ### 3. Update Group Information
67
+
68
+ ```typescript
69
+ const updateData = {
70
+ group_name: "New Group Name",
71
+ description: "Updated description"
72
+ };
73
+
74
+ await groupManagement.updateGroupInfo(accessToken, groupId, updateData);
75
+ ```
76
+
77
+ ### 4. Invite Members
78
+
79
+ ```typescript
80
+ const inviteData = {
81
+ member_uids: ["user4", "user5"]
82
+ };
83
+
84
+ const result = await groupManagement.inviteMembers(accessToken, groupId, inviteData);
85
+ console.log(`Invited ${result.invited_count} members`);
86
+ ```
87
+
88
+ ### 5. Manage Pending Members
89
+
90
+ ```typescript
91
+ // Get pending members
92
+ const pending = await groupManagement.getPendingMembers(accessToken, groupId);
93
+
94
+ // Accept pending members
95
+ const memberIds = pending.data?.members.map(m => m.user_id) || [];
96
+ await groupManagement.acceptPendingMembers(accessToken, groupId, memberIds);
97
+
98
+ // Or reject pending members
99
+ await groupManagement.rejectPendingMembers(accessToken, groupId, memberIds);
100
+ ```
101
+
102
+ ### 6. Manage Admins
103
+
104
+ ```typescript
105
+ // Add admin rights
106
+ const adminData = { admin_uids: ["user1"] };
107
+ await groupManagement.addAdmins(accessToken, groupId, adminData);
108
+
109
+ // Remove admin rights
110
+ await groupManagement.removeAdmins(accessToken, groupId, adminData);
111
+ ```
112
+
113
+ ### 7. Get Asset ID for Group Creation
114
+
115
+ ```typescript
116
+ // Get single asset_id
117
+ const assetId = await groupManagement.getAssetId(accessToken);
118
+
119
+ // Get all available asset_ids
120
+ const assets = await groupManagement.getAssetIds(accessToken);
121
+ console.log('Available assets:', assets.data);
122
+ ```
123
+
124
+ ### 8. Get Group Members
125
+
126
+ ```typescript
127
+ const members = await groupManagement.getGroupMembers(accessToken, groupId, 0, 10);
128
+ console.log('Group members:', members.data?.members);
129
+ ```
130
+
131
+ ### 9. Remove Members
132
+
133
+ ```typescript
134
+ const memberIds = ["user1", "user2"];
135
+ await groupManagement.removeMembers(accessToken, groupId, memberIds);
136
+ ```
137
+
138
+ ### 10. Delete Group
139
+
140
+ ```typescript
141
+ await groupManagement.deleteGroup(accessToken, groupId);
142
+ console.log('Group deleted successfully');
143
+ ```
144
+
145
+ ### 11. Get Groups of OA
146
+
147
+ ```typescript
148
+ const groups = await groupManagement.getGroupsOfOA(accessToken, 0, 20);
149
+ console.log(`Found ${groups.total} groups:`, groups.groups);
150
+ ```
151
+
152
+ ### 12. Get Group Quota
153
+
154
+ ```typescript
155
+ import { GMFProductType, QuotaType } from 'redai-zalo-sdk';
156
+
157
+ const quota = await groupManagement.getGroupQuota(
158
+ accessToken,
159
+ GMFProductType.GMF10,
160
+ QuotaType.SUB_QUOTA
161
+ );
162
+ console.log('Group quota:', quota);
163
+ ```
164
+
165
+ ## Error Handling
166
+
167
+ ```typescript
168
+ try {
169
+ const result = await groupManagement.createGroup(accessToken, groupData);
170
+ console.log('Success:', result);
171
+ } catch (error) {
172
+ if (error instanceof ZaloSDKError) {
173
+ console.error('Zalo API Error:', error.message, error.code);
174
+ } else {
175
+ console.error('Unexpected error:', error);
176
+ }
177
+ }
178
+ ```
179
+
180
+ ## Complete Example
181
+
182
+ ```typescript
183
+ import { ZaloSDK, GMFProductType } from 'redai-zalo-sdk';
184
+
185
+ class GroupManager {
186
+ private sdk: ZaloSDK;
187
+
188
+ constructor() {
189
+ this.sdk = new ZaloSDK({
190
+ appId: process.env.ZALO_APP_ID!,
191
+ appSecret: process.env.ZALO_APP_SECRET!,
192
+ });
193
+ }
194
+
195
+ async createAndManageGroup(accessToken: string) {
196
+ try {
197
+ // 1. Get asset_id for group creation
198
+ const assetId = await this.sdk.groupManagement.getAssetId(accessToken);
199
+
200
+ // 2. Create new group
201
+ const newGroup = await this.sdk.groupManagement.createGroup(accessToken, {
202
+ group_name: "Support Team",
203
+ description: "Customer support team",
204
+ asset_id: assetId,
205
+ member_uids: ["user1", "user2"]
206
+ });
207
+
208
+ // 3. Invite more members
209
+ await this.sdk.groupManagement.inviteMembers(accessToken, newGroup.group_id, {
210
+ member_uids: ["user3", "user4"]
211
+ });
212
+
213
+ // 4. Add admin
214
+ await this.sdk.groupManagement.addAdmins(accessToken, newGroup.group_id, {
215
+ admin_uids: ["user1"]
216
+ });
217
+
218
+ // 5. Get group info
219
+ const groupInfo = await this.sdk.groupManagement.getGroupInfo(accessToken, newGroup.group_id);
220
+
221
+ return groupInfo;
222
+ } catch (error) {
223
+ console.error('Group management error:', error);
224
+ throw error;
225
+ }
226
+ }
227
+ }
228
+ ```
229
+
230
+ ## API Reference
231
+
232
+ For detailed API documentation, see the TypeScript definitions in the source code. All methods include comprehensive JSDoc comments with parameter descriptions and return types.