@warriorteam/redai-zalo-sdk
Version:
Comprehensive TypeScript/JavaScript SDK for Zalo APIs - Official Account, ZNS, Consultation Service, Group Messaging, and Social APIs
302 lines • 12.5 kB
TypeScript
import { ZaloClient } from "../clients/zalo-client";
import { GroupCreateRequest, GroupCreateResult, GroupCreateData, GroupUpdateRequest, GroupUpdateResult, GroupAssetUpdateRequest, GroupAvatarUpdateRequest, GroupMemberInviteRequest, GroupInviteResult, RecentChatsResponse, GroupConversationResponse, GroupsOfOAResponse, GroupDetailResponse, GroupPendingMembersResponse, GroupAcceptPendingMembersResponse, GroupRemoveMembersResponse, GroupMembersResponse, GroupQuotaMessageResponse } from "../types/group";
import { GMFProductType, QuotaType } from "../types/oa";
/**
* Service for handling Zalo Official Account Group Management Framework (GMF) APIs
*
* CONDITIONS FOR USING ZALO GMF GROUP MANAGEMENT:
*
* 1. GENERAL CONDITIONS:
* - OA must be granted permission to use GMF (Group Message Framework) feature
* - Access token must have "manage_group" and "group_message" scopes
* - OA must have active status and be verified
* - Must comply with limits on number of groups and members
*
* 2. CREATE NEW GROUP:
* - Group name: required, max 100 characters, no special characters
* - Description: optional, max 500 characters
* - Avatar: optional, JPG/PNG format, max 5MB
* - Initial members: max 200 people, must be users who have interacted with OA
* - OA automatically becomes admin of the group
*
* 3. MEMBER MANAGEMENT:
* - Only admins can invite/remove members
* - Invite members: max 50 people per time, users must have interacted with OA
* - Remove members: cannot remove other admins, must have at least 1 admin
* - Members can leave group themselves
*
* 4. ADMIN MANAGEMENT:
* - Only current admins can add/remove other admins
* - Must have at least 1 admin in group
* - OA always has admin rights and cannot be removed
*
* 5. LIMITS AND CONSTRAINTS:
* - Maximum groups: according to service package (usually 10-100 groups)
* - Maximum members per group: 200 people
* - Group creation frequency: max 10 groups/day
* - Member invitation frequency: max 500 invitations/day
*/
export declare class GroupManagementService {
private readonly client;
private readonly endpoints;
constructor(client: ZaloClient);
/**
* Create new group chat with asset_id
* @param accessToken OA access token
* @param groupData Group information to create
* @returns Created group information
*
* API: POST https://openapi.zalo.me/v3.0/oa/group/creategroupwithoa
*/
createGroup(accessToken: string, groupData: GroupCreateRequest): Promise<GroupCreateResult>;
/**
* Helper method to extract group data from create response
* @param response Full API response
* @returns Group data only
*/
extractGroupData(response: GroupCreateResult): GroupCreateData;
/**
* Helper method to extract group info from update response
* @param response Full API response
* @returns Group info only
*/
extractGroupInfo(response: GroupUpdateResult): {
group_id: string;
group_link: string;
name: string;
group_description: string;
avatar: string;
status: "enabled" | "disabled";
total_member: number;
max_member: string;
auto_delete_date: string;
};
/**
* Helper method to extract group settings from update response
* @param response Full API response
* @returns Group settings only
*/
extractGroupSettings(response: GroupUpdateResult): {
lock_send_msg: boolean;
join_appr: boolean;
enable_msg_history: boolean;
enable_link_join: boolean;
};
/**
* Helper method to extract asset info from update response
* @param response Full API response
* @returns Asset info only
*/
extractAssetInfo(response: GroupUpdateResult): {
asset_type: "gmf10" | "gmf50" | "gmf100";
asset_id: string;
valid_through: string;
auto_renew: string;
};
/**
* Update group asset (upgrade package or extend expiration)
* @param accessToken OA access token
* @param groupId Group ID
* @param assetId New asset ID for the group
* @returns Update result with full group information
*
* API: POST https://openapi.zalo.me/v3.0/oa/group/updateasset
*
* Use cases:
* - Increase member limit for the group
* - Extend group expiration when expired
*/
updateGroupAsset(accessToken: string, groupId: string, assetId: string): Promise<GroupUpdateResult>;
/**
* Update group asset (upgrade package or extend expiration) - Object parameter version
* @param accessToken OA access token
* @param updateData Asset update data
* @returns Update result with full group information
*
* API: POST https://openapi.zalo.me/v3.0/oa/group/updateasset
*/
updateGroupAsset(accessToken: string, updateData: GroupAssetUpdateRequest): Promise<GroupUpdateResult>;
/**
* Get detailed group information
* @param accessToken OA access token
* @param groupId Group ID
* @returns Detailed group information including group_info, asset_info and group_setting
*
* API: GET https://openapi.zalo.me/v3.0/oa/group/getgroup
*/
getGroupInfo(accessToken: string, groupId: string): Promise<GroupDetailResponse>;
/**
* Update group information
* @param accessToken OA access token
* @param groupId Group ID
* @param updateData Information to update
* @returns Update result with full group information
*
* API: POST https://openapi.zalo.me/v3.0/oa/group/updateinfo
*/
updateGroupInfo(accessToken: string, groupId: string, updateData: GroupUpdateRequest): Promise<GroupUpdateResult>;
/**
* Update group avatar
* @param accessToken OA access token
* @param groupId Group ID
* @param avatarData New avatar information
* @returns Update result
* @deprecated Use updateGroupInfo() with group_avatar field instead
*/
updateGroupAvatar(accessToken: string, groupId: string, avatarData: GroupAvatarUpdateRequest): Promise<{
success: boolean;
}>;
/**
* Invite members to group
* @param accessToken OA access token
* @param groupId Group ID
* @param inviteData List of user IDs to invite
* @returns Invitation result
*
* API: POST https://openapi.zalo.me/v3.0/oa/group/invite
*/
inviteMembers(accessToken: string, groupId: string, inviteData: GroupMemberInviteRequest): Promise<GroupInviteResult>;
/**
* Invite members to group - Array parameter version
* @param accessToken OA access token
* @param groupId Group ID
* @param memberUserIds Array of user IDs to invite
* @returns Invitation result
*
* API: POST https://openapi.zalo.me/v3.0/oa/group/invite
*/
inviteMembers(accessToken: string, groupId: string, memberUserIds: string[]): Promise<GroupInviteResult>;
/**
* Get list of pending members
* @param accessToken OA access token
* @param groupId Group ID
* @param offset Offset for pagination (default: 0)
* @param count Maximum number to return (default: 20, max: 50)
* @returns List of pending members
*/
getPendingMembers(accessToken: string, groupId: string, offset?: number, count?: number): Promise<GroupPendingMembersResponse>;
/**
* Accept pending members to group
* @param accessToken OA access token
* @param groupId Group ID
* @param memberUserIds List of user IDs to accept
* @returns Accept result
*/
acceptPendingMembers(accessToken: string, groupId: string, memberUserIds: string[]): Promise<GroupAcceptPendingMembersResponse>;
/**
* Reject pending members from group
* @param accessToken OA access token
* @param groupId Group ID
* @param memberUserIds List of user IDs to reject
* @returns Reject result
*/
rejectPendingMembers(accessToken: string, groupId: string, memberUserIds: string[]): Promise<GroupAcceptPendingMembersResponse>;
/**
* Remove members from group
* @param accessToken OA access token
* @param groupId Group ID
* @param memberUserIds List of user IDs to remove
* @returns Remove result
*/
removeMembers(accessToken: string, groupId: string, memberUserIds: string[]): Promise<GroupRemoveMembersResponse>;
/**
* Add admin rights to members - Array parameter version
* @param accessToken OA access token
* @param groupId Group ID
* @param memberUserIds Array of user IDs to add admin rights
* @returns Add admin result
*
* API: POST https://openapi.zalo.me/v3.0/oa/group/addadmins
*/
addAdmins(accessToken: string, groupId: string, memberUserIds: string[]): Promise<{
error: number;
message: string;
}>;
/**
* Remove admin rights from members - Array parameter version
* @param accessToken OA access token
* @param groupId Group ID
* @param memberUserIds Array of user IDs to remove admin rights
* @returns Remove admin result
*
* API: POST https://openapi.zalo.me/v3.0/oa/group/removeadmins
*/
removeAdmins(accessToken: string, groupId: string, memberUserIds: string[]): Promise<{
error: number;
message: string;
}>;
/**
* Delete group chat (Disband group)
* @param accessToken OA access token
* @param groupId Group ID to delete
* @returns Delete result
*/
deleteGroup(accessToken: string, groupId: string): Promise<{
error: number;
message: string;
}>;
/**
* Get list of OA groups
* @param accessToken OA access token
* @param offset Offset for pagination (default: 0)
* @param count Maximum number to return (default: 5, max: 50)
* @returns List of OA groups
*
* API: GET https://openapi.zalo.me/v3.0/oa/group/getgroupsofoa
*/
getGroupsOfOA(accessToken: string, offset?: number, count?: number): Promise<GroupsOfOAResponse>;
/**
* Get group quota information and asset_id
* @param accessToken OA access token
* @param productType Product type (optional)
* @param quotaType Quota type (optional)
* @returns Group quota information including asset_id
*
* API: POST https://openapi.zalo.me/v3.0/oa/quota/group
*/
getGroupQuota(accessToken: string, productType?: GMFProductType, quotaType?: QuotaType): Promise<GroupQuotaMessageResponse>;
/**
* Get asset_id for creating GMF group
* @param accessToken OA access token
* @returns Asset_id for group creation
*/
getAssetId(accessToken: string): Promise<string>;
/**
* Get list of asset_ids available for creating GMF groups
* @param accessToken OA access token
* @returns List of asset_ids and quota information
*/
getAssetIds(accessToken: string): Promise<GroupQuotaMessageResponse>;
/**
* Get list of recent chats
* @param accessToken OA access token
* @param offset Offset for pagination (default: 0)
* @param count Maximum number to return (default: 5, max: 50)
* @returns List of recent chats
*
* API: GET https://openapi.zalo.me/v3.0/oa/group/listrecentchat
*/
getRecentChats(accessToken: string, offset?: number, count?: number): Promise<RecentChatsResponse>;
/**
* Get group conversation history
* @param accessToken OA access token
* @param groupId Group ID
* @param offset Offset for pagination (default: 0)
* @param count Maximum number of messages to return (default: 5, max: 100)
* @returns Group conversation history
*
* API: GET https://openapi.zalo.me/v3.0/oa/group/conversation
*/
getGroupConversation(accessToken: string, groupId: string, offset?: number, count?: number): Promise<GroupConversationResponse>;
/**
* Get group members list from Zalo API
* @param accessToken OA access token
* @param groupId Group ID
* @param offset Offset for pagination (default: 0)
* @param count Maximum number to return (default: 5, max: 50)
* @returns Group members list
*/
getGroupMembers(accessToken: string, groupId: string, offset?: number, count?: number): Promise<GroupMembersResponse>;
private handleGroupManagementError;
}
//# sourceMappingURL=group-management.service.d.ts.map