@warriorteam/redai-zalo-sdk 1.12.0 → 1.12.1
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/ARCHITECTURE.md +265 -0
- package/CHANGELOG.md +0 -57
- package/README.md +1 -33
- package/SERVICES_ADDED.md +540 -0
- package/UPDATE_ARTICLE_STATUS.md +152 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -8
- package/dist/index.js.map +1 -1
- package/dist/types/webhook.d.ts +0 -24
- package/dist/types/webhook.d.ts.map +1 -1
- package/dist/types/webhook.js +0 -110
- package/dist/types/webhook.js.map +1 -1
- package/dist/utils/type-guards.d.ts +92 -0
- package/dist/utils/type-guards.d.ts.map +1 -0
- package/dist/utils/type-guards.js +184 -0
- package/dist/utils/type-guards.js.map +1 -0
- package/docs/ARTICLE_MANAGEMENT.md +395 -395
- package/docs/AUTHENTICATION.md +852 -853
- package/docs/CONSULTATION_SERVICE.md +512 -512
- package/docs/GROUP_MANAGEMENT.md +232 -232
- package/docs/USER_MANAGEMENT.md +481 -481
- package/docs/WEBHOOK_EVENTS.md +858 -858
- package/examples/article-status-update.ts +178 -178
- package/examples/oa-auth-with-pkce.ts +179 -179
- package/examples/user-list-post-example.ts +186 -186
- package/examples/video-upload-combined.example.ts +228 -228
- package/examples/zns-template-edit.example.ts +317 -317
- package/package.json +1 -1
- package/docs/WEBHOOK_MESSAGE_HELPERS.md +0 -230
- package/examples/webhook-message-classification.ts +0 -285
package/docs/GROUP_MANAGEMENT.md
CHANGED
|
@@ -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.
|