UNPKG

@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
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