redai-automation-web-sdk
Version:
TypeScript SDK for RedAI Automation Web API - Zalo Personal automation, messaging, advanced sticker search, and bulk operations. 100% compatible with automation-web backend. v1.8.1: Updated GroupInfo interface to match backend controller with complete gro
357 lines • 11.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SearchService = void 0;
/**
* Zalo Personal Search Service Class
* 100% khớp với automation-web ZaloSearchController
*/
class SearchService {
constructor(httpClient) {
this.httpClient = httpClient;
}
/**
* Tìm sticker theo từ khóa (cải tiến)
* POST /zalo-personal/search/get-stickers
*
* @param request - Search stickers request
* @returns Promise<AutomationWebResponse<GetStickersResponse>>
*
* @example
* ```typescript
* const result = await searchService.getStickers({
* sessionId: "session-123",
* keyword: "hello",
* limit: 20,
* includeDetails: false
* });
*
* if (result.success) {
* console.log(`Found ${result.data.total} stickers (returned ${result.data.result.length})`);
* console.log('Sticker IDs:', result.data.result);
* if (result.data.details) {
* console.log('Sticker details:', result.data.details);
* }
* }
* ```
*/
async getStickers(request) {
const response = await this.httpClient.post('/zalo-personal/search/get-stickers', {
sessionId: request.sessionId,
keyword: request.keyword,
limit: request.limit,
includeDetails: request.includeDetails,
});
return response;
}
/**
* Lấy chi tiết sticker theo IDs
* POST /zalo-personal/search/get-stickers-detail
*
* @param request - Get stickers detail request
* @returns Promise<AutomationWebResponse<GetStickersDetailResponse>>
*
* @example
* ```typescript
* const result = await searchService.getStickersDetail({
* sessionId: "session-123",
* stickerIds: [123, 456, 789]
* });
*
* if (result.success) {
* result.data.result.forEach(sticker => {
* console.log(`Sticker ${sticker.id}: ${sticker.name}`);
* console.log(`Image: ${sticker.imageUrl}`);
* });
* }
* ```
*/
async getStickersDetail(request) {
const response = await this.httpClient.post('/zalo-personal/search/get-stickers-detail', {
sessionId: request.sessionId,
stickerIds: request.stickerIds,
});
return response;
}
/**
* Parse thông tin metadata từ URL
* POST /zalo-personal/search/parse-link
*
* @param request - Parse link request
* @returns Promise<AutomationWebResponse<ParseLinkResponse>>
*
* @example
* ```typescript
* const result = await searchService.parseLink({
* sessionId: "session-123",
* url: "https://example.com/article"
* });
*
* if (result.success) {
* const metadata = result.data.result;
* console.log('Title:', metadata.title);
* console.log('Description:', metadata.description);
* console.log('Image:', metadata.image);
* console.log('Site:', metadata.siteName);
* }
* ```
*/
async parseLink(request) {
const response = await this.httpClient.post('/zalo-personal/search/parse-link', {
sessionId: request.sessionId,
url: request.url,
});
return response;
}
/**
* Tìm sticker và lấy chi tiết trong một lần gọi (API mới)
* POST /zalo-personal/search/search-with-details
*
* @param request - Search stickers with details request
* @returns Promise<AutomationWebResponse<SearchStickersWithDetailsResponse>>
*
* @example
* ```typescript
* const result = await searchService.searchStickersWithDetails({
* sessionId: "session-123",
* keyword: "hello",
* limit: 10
* });
*
* if (result.success) {
* console.log(`Found ${result.data.total} stickers with details in ${result.data.searchTime}ms`);
* result.data.stickers.forEach(sticker => {
* console.log(`${sticker.text}: ${sticker.stickerUrl}`);
* });
* }
* ```
*/
async searchStickersWithDetails(request) {
const response = await this.httpClient.post('/zalo-personal/search/search-with-details', {
sessionId: request.sessionId,
keyword: request.keyword,
limit: request.limit,
});
return response;
}
/**
* Lấy danh sách sticker phổ biến (API mới)
* POST /zalo-personal/search/popular-stickers
*
* @param request - Get popular stickers request
* @returns Promise<AutomationWebResponse<GetPopularStickersResponse>>
*
* @example
* ```typescript
* const result = await searchService.getPopularStickers({
* sessionId: "session-123",
* limit: 20,
* categoryId: 1
* });
*
* if (result.success) {
* console.log(`Retrieved ${result.data.stickers.length} popular stickers`);
* result.data.stickers.forEach(sticker => {
* console.log(`${sticker.text}: ${sticker.stickerUrl}`);
* });
* }
* ```
*/
async getPopularStickers(request) {
const response = await this.httpClient.post('/zalo-personal/search/popular-stickers', {
sessionId: request.sessionId,
limit: request.limit,
categoryId: request.categoryId,
});
return response;
}
// ==================== CONVENIENCE METHODS ====================
/**
* Tìm stickers và lấy chi tiết (convenience method - sử dụng API mới)
* Sử dụng API mới search-with-details thay vì gọi 2 API riêng biệt
*
* @param sessionId - Session ID
* @param keyword - Search keyword
* @param limit - Số lượng sticker tối đa (default: 10)
* @returns Promise với sticker details
*
* @example
* ```typescript
* const stickers = await searchService.searchStickersWithDetailsConvenience(
* "session-123",
* "hello",
* 10
* );
*
* stickers.forEach(sticker => {
* console.log(`${sticker.text}: ${sticker.stickerUrl}`);
* });
* ```
*/
async searchStickersWithDetailsConvenience(sessionId, keyword, limit = 10) {
const result = await this.searchStickersWithDetails({
sessionId,
keyword,
limit,
});
if (!result.result?.stickers) {
return [];
}
return result.result.stickers;
}
/**
* Tìm stickers và lấy chi tiết (legacy method - backward compatibility)
* Sử dụng cách cũ: gọi getStickers + getStickersDetail
*
* @param sessionId - Session ID
* @param keyword - Search keyword
* @returns Promise với sticker details
*
* @deprecated Sử dụng searchStickersWithDetailsConvenience() thay thế
*/
async searchStickersWithDetailsLegacy(sessionId, keyword) {
// Step 1: Search for stickers
const searchResult = await this.getStickers({ sessionId, keyword });
if (!searchResult.result?.result?.length) {
return [];
}
// Step 2: Get details for found stickers
const detailResult = await this.getStickersDetail({
sessionId,
stickerIds: searchResult.result.result,
});
if (!detailResult.result?.result) {
return [];
}
return detailResult.result.result;
}
/**
* Batch parse multiple links
* Parse nhiều links cùng lúc
*
* @param sessionId - Session ID
* @param urls - Array of URLs to parse
* @returns Promise với array of parsed metadata
*
* @example
* ```typescript
* const results = await searchService.parseMultipleLinks(
* "session-123",
* ["https://example1.com", "https://example2.com"]
* );
*
* results.forEach((metadata, index) => {
* if (metadata) {
* console.log(`Link ${index + 1}: ${metadata.title}`);
* }
* });
* ```
*/
async parseMultipleLinks(sessionId, urls) {
const promises = urls.map(async (url) => {
try {
const result = await this.parseLink({ sessionId, url });
return result.result?.result || null;
}
catch (error) {
console.warn(`Failed to parse link ${url}:`, error);
return null;
}
});
return Promise.all(promises);
}
/**
* Lấy sticker phổ biến (convenience method)
*
* @param sessionId - Session ID
* @param limit - Số lượng sticker (default: 20)
* @param categoryId - Category ID để lọc (optional)
* @returns Promise với popular stickers
*
* @example
* ```typescript
* const stickers = await searchService.getPopularStickersConvenience(
* "session-123",
* 20,
* 1
* );
*
* stickers.forEach(sticker => {
* console.log(`${sticker.text}: ${sticker.stickerUrl}`);
* });
* ```
*/
async getPopularStickersConvenience(sessionId, limit = 20, categoryId) {
const result = await this.getPopularStickers({
sessionId,
limit,
categoryId,
});
if (!result.result?.stickers) {
return [];
}
return result.result.stickers;
}
/**
* Tìm kiếm sticker nhanh (chỉ trả về IDs)
* Sử dụng API cải tiến với includeDetails = false
*
* @param sessionId - Session ID
* @param keyword - Search keyword
* @param limit - Số lượng sticker tối đa (default: 20)
* @returns Promise với sticker IDs
*
* @example
* ```typescript
* const stickerIds = await searchService.quickSearchStickers(
* "session-123",
* "hello",
* 20
* );
*
* console.log('Found sticker IDs:', stickerIds);
* ```
*/
async quickSearchStickers(sessionId, keyword, limit = 20) {
const result = await this.getStickers({
sessionId,
keyword,
limit,
includeDetails: false,
});
if (!result.result?.result) {
return [];
}
return result.result.result;
}
/**
* Tìm kiếm sticker với chi tiết và metadata đầy đủ
* Trả về response đầy đủ bao gồm metadata như searchTime, total, etc.
*
* @param sessionId - Session ID
* @param keyword - Search keyword
* @param limit - Số lượng sticker tối đa (default: 10)
* @returns Promise với full search response
*
* @example
* ```typescript
* const response = await searchService.fullSearchStickers(
* "session-123",
* "hello",
* 10
* );
*
* console.log(`Found ${response.total} stickers in ${response.searchTime}ms`);
* console.log('Stickers:', response.stickers);
* ```
*/
async fullSearchStickers(sessionId, keyword, limit = 10) {
const result = await this.searchStickersWithDetails({
sessionId,
keyword,
limit,
});
return result.result || null;
}
}
exports.SearchService = SearchService;
//# sourceMappingURL=search.service.js.map