@warriorteam/redai-zalo-sdk
Version:
Comprehensive TypeScript/JavaScript SDK for Zalo APIs - Official Account, ZNS, Consultation Service, Group Messaging, and Social APIs
233 lines (175 loc) • 5.97 kB
Markdown
# Group Management Service
The `GroupManagementService` provides comprehensive group management capabilities for Zalo Official Account (OA) using the Group Message Framework (GMF).
## Features
- ✅ Create new groups with asset_id
- ✅ Update group information and avatar
- ✅ Invite and remove members
- ✅ Manage pending member requests
- ✅ Add and remove admin rights
- ✅ Delete groups
- ✅ Get group information and member lists
- ✅ Manage group quota and assets
- ✅ Get conversation history
## Prerequisites
1. **OA Requirements:**
- OA must be granted GMF (Group Message Framework) permissions
- Access token must have "manage_group" and "group_message" scopes
- OA must have active status and be verified
2. **Limits:**
- Maximum groups: 10-100 (depends on service package)
- Maximum members per group: 200 people
- Group creation frequency: max 10 groups/day
- Member invitation frequency: max 500 invitations/day
## Usage
### Initialize SDK
```typescript
import { ZaloSDK } from 'redai-zalo-sdk';
const sdk = new ZaloSDK({
appId: 'your_app_id',
appSecret: 'your_app_secret',
});
const groupManagement = sdk.groupManagement;
```
### 1. Create Group
```typescript
const groupData = {
group_name: "Support Group",
group_description: "Customer support group",
asset_id: "your_asset_id", // Get from getAssetId()
member_user_ids: ["user1", "user2", "user3"]
};
const result = await groupManagement.createGroup(accessToken, groupData);
console.log(`Group created with ID: ${result.group_id}`);
```
### 2. Get Group Information
```typescript
const groupInfo = await groupManagement.getGroupInfo(accessToken, groupId);
console.log('Group details:', groupInfo);
```
### 3. Update Group Information
```typescript
const updateData = {
group_name: "New Group Name",
description: "Updated description"
};
await groupManagement.updateGroupInfo(accessToken, groupId, updateData);
```
### 4. Invite Members
```typescript
const inviteData = {
member_uids: ["user4", "user5"]
};
const result = await groupManagement.inviteMembers(accessToken, groupId, inviteData);
console.log(`Invited ${result.invited_count} members`);
```
### 5. Manage Pending Members
```typescript
// Get pending members
const pending = await groupManagement.getPendingMembers(accessToken, groupId);
// Accept pending members
const memberIds = pending.data?.members.map(m => m.user_id) || [];
await groupManagement.acceptPendingMembers(accessToken, groupId, memberIds);
// Or reject pending members
await groupManagement.rejectPendingMembers(accessToken, groupId, memberIds);
```
### 6. Manage Admins
```typescript
// Add admin rights
const adminData = { admin_uids: ["user1"] };
await groupManagement.addAdmins(accessToken, groupId, adminData);
// Remove admin rights
await groupManagement.removeAdmins(accessToken, groupId, adminData);
```
### 7. Get Asset ID for Group Creation
```typescript
// Get single asset_id
const assetId = await groupManagement.getAssetId(accessToken);
// Get all available asset_ids
const assets = await groupManagement.getAssetIds(accessToken);
console.log('Available assets:', assets.data);
```
### 8. Get Group Members
```typescript
const members = await groupManagement.getGroupMembers(accessToken, groupId, 0, 10);
console.log('Group members:', members.data?.members);
```
### 9. Remove Members
```typescript
const memberIds = ["user1", "user2"];
await groupManagement.removeMembers(accessToken, groupId, memberIds);
```
### 10. Delete Group
```typescript
await groupManagement.deleteGroup(accessToken, groupId);
console.log('Group deleted successfully');
```
### 11. Get Groups of OA
```typescript
const groups = await groupManagement.getGroupsOfOA(accessToken, 0, 20);
console.log(`Found ${groups.total} groups:`, groups.groups);
```
### 12. Get Group Quota
```typescript
import { GMFProductType, QuotaType } from 'redai-zalo-sdk';
const quota = await groupManagement.getGroupQuota(
accessToken,
GMFProductType.GMF10,
QuotaType.SUB_QUOTA
);
console.log('Group quota:', quota);
```
## Error Handling
```typescript
try {
const result = await groupManagement.createGroup(accessToken, groupData);
console.log('Success:', result);
} catch (error) {
if (error instanceof ZaloSDKError) {
console.error('Zalo API Error:', error.message, error.code);
} else {
console.error('Unexpected error:', error);
}
}
```
## Complete Example
```typescript
import { ZaloSDK, GMFProductType } from 'redai-zalo-sdk';
class GroupManager {
private sdk: ZaloSDK;
constructor() {
this.sdk = new ZaloSDK({
appId: process.env.ZALO_APP_ID!,
appSecret: process.env.ZALO_APP_SECRET!,
});
}
async createAndManageGroup(accessToken: string) {
try {
// 1. Get asset_id for group creation
const assetId = await this.sdk.groupManagement.getAssetId(accessToken);
// 2. Create new group
const newGroup = await this.sdk.groupManagement.createGroup(accessToken, {
group_name: "Support Team",
description: "Customer support team",
asset_id: assetId,
member_uids: ["user1", "user2"]
});
// 3. Invite more members
await this.sdk.groupManagement.inviteMembers(accessToken, newGroup.group_id, {
member_uids: ["user3", "user4"]
});
// 4. Add admin
await this.sdk.groupManagement.addAdmins(accessToken, newGroup.group_id, {
admin_uids: ["user1"]
});
// 5. Get group info
const groupInfo = await this.sdk.groupManagement.getGroupInfo(accessToken, newGroup.group_id);
return groupInfo;
} catch (error) {
console.error('Group management error:', error);
throw error;
}
}
}
```
## API Reference
For detailed API documentation, see the TypeScript definitions in the source code. All methods include comprehensive JSDoc comments with parameter descriptions and return types.