@warriorteam/redai-zalo-sdk
Version:
Comprehensive TypeScript/JavaScript SDK for Zalo APIs - Official Account v3.0, ZNS with Full Type Safety, Consultation Service, Broadcast Service, Group Messaging with List APIs, Social APIs, Enhanced Article Management, Promotion Service v3.0 with Multip
362 lines • 14.3 kB
TypeScript
import { ZaloClient } from "../clients/zalo-client";
import { ZNSMessage, ZNSSendResult, ZNSTemplateList, ZNSTemplateDetails, ZNSCreateTemplateRequest, ZNSUpdateTemplateRequest, ZNSTemplateCreateEditResponse, ZNSUploadImageResult, ZNSHashPhoneMessage, ZNSDevModeMessage, ZNSRsaMessage, ZNSJourneyMessage, ZNSMessageStatusInfo, ZNSBatchMessageStatusResponse, ZNSQuotaInfo, ZNSAllowedContentTypes, ZNSTemplateSampleData, ZNSCustomerRatingResponse, ZNSOAQualityInfo } from "../types/zns";
export interface ZNSAllTemplateDetailsResult {
error: number;
message: string;
data: Array<ZNSTemplateDetails["data"]>;
metadata: {
total: number;
};
}
export interface ZNSOAGroupedTemplateDetails {
accessToken: string;
templates: Array<ZNSTemplateDetails["data"]>;
total: number;
}
export interface ZNSMultiOAAllTemplateDetailsResult {
error: number;
message: string;
data: ZNSOAGroupedTemplateDetails[];
}
/**
* Service for Zalo Notification Service (ZNS)
*
* Requirements for using ZNS API:
* - Official Account must be approved and have ZNS sending permission
* - Valid Official Account access token
* - ZNS template must be approved before use
* - Recipient phone number must be in correct format and valid
* - Template data must match defined parameters
* - Comply with message quantity limits according to service package
*
* Reference: https://developers.zalo.me/docs/zalo-notification-service/
*/
export declare class ZNSService {
private readonly client;
private readonly endpoints;
constructor(client: ZaloClient);
/**
* Send ZNS message
* @param accessToken OA access token
* @param message ZNS message data
* @returns Send result
*/
sendMessage(accessToken: string, message: ZNSMessage): Promise<ZNSSendResult>;
/**
* Send ZNS message with phone hash
* @param accessToken OA access token
* @param message ZNS message with hashed phone
* @returns Send result
*/
sendHashPhoneMessage(accessToken: string, message: ZNSHashPhoneMessage): Promise<ZNSSendResult>;
/**
* Send ZNS message in development mode
* @param accessToken OA access token
* @param message ZNS dev mode message
* @returns Send result
*/
sendDevModeMessage(accessToken: string, message: ZNSDevModeMessage): Promise<ZNSSendResult>;
/**
* Send ZNS message with RSA encryption
* @param accessToken OA access token
* @param message ZNS RSA message
* @returns Send result
*/
sendRsaMessage(accessToken: string, message: ZNSRsaMessage): Promise<ZNSSendResult>;
/**
* Send ZNS journey message
* @param accessToken OA access token
* @param message ZNS journey message
* @returns Send result
*/
sendJourneyMessage(accessToken: string, message: ZNSJourneyMessage): Promise<ZNSSendResult>;
/**
* Get ZNS message status
* @param accessToken OA access token
* @param messageId Message ID
* @returns Message status info
*
* Response data:
* - delivery_time: Thời gian thiết bị nhận được thông báo
* - status: Trạng thái thông báo
* * -1: The message does not exist
* * 0: The message is pushed successfully to Zalo server but has not yet delivered to user's phone
* * 1: The message was delivered to the user's phone
* - message: Mô tả trạng thái thông báo
*/
getMessageStatus(accessToken: string, messageId: string): Promise<ZNSMessageStatusInfo>;
/**
* Get ZNS batch message status (custom implementation)
* @param accessToken OA access token
* @param messageIds Array of message IDs
* @returns Batch message status info
*
* This is a custom implementation that calls the single message status API
* multiple times to get status for multiple messages. Since Zalo API doesn't
* provide a native batch endpoint, this method provides convenience by:
* - Making concurrent API calls for better performance
* - Handling errors gracefully (failed requests return error status)
* - Returning consistent response format
*/
getBatchMessageStatus(accessToken: string, messageIds: string[]): Promise<ZNSBatchMessageStatusResponse>;
/**
* Get ZNS quota information
* @param accessToken OA access token
* @returns Quota information
*
* Response data:
* - dailyQuota: Số thông báo ZNS OA được gửi trong 1 ngày
* - remainingQuota: Số thông báo ZNS OA được gửi trong ngày còn lại
* - dailyQuotaPromotion: Số tin ZNS hậu mãi OA được gửi trong ngày (null từ 1/11)
* - remainingQuotaPromotion: Số tin ZNS hậu mãi còn lại OA được gửi trong ngày (null từ 1/11)
* - monthlyPromotionQuota: Số tin ZNS hậu mãi OA được gửi trong tháng
* - remainingMonthlyPromotionQuota: Số tin ZNS hậu mãi còn lại OA được gửi trong tháng
* - estimatedNextMonthPromotionQuota: Số tin ZNS hậu mãi dự kiến mà OA có thể gửi trong tháng tiếp theo
*/
getQuotaInfo(accessToken: string): Promise<ZNSQuotaInfo>;
/**
* Get ZNS allowed content types
* @param accessToken OA access token
* @returns Allowed content types
*
* Response data:
* - Mảng các loại nội dung mà OA có thể gửi:
* * "TRANSACTION": Giao dịch (cấp độ 1)
* * "CUSTOMER_CARE": Chăm sóc khách hàng (cấp độ 2)
* * "PROMOTION": Hậu mãi (cấp độ 3)
* - Dựa theo chất lượng gửi ZNS của OA, Zalo sẽ tự động điều chỉnh loại nội dung OA được gửi
*/
getAllowedContentTypes(accessToken: string): Promise<ZNSAllowedContentTypes>;
/**
* Get ZNS template list
* @param accessToken OA access token
* @param offset Offset for pagination (template được tạo gần nhất có thứ tự 0)
* @param limit Limit for pagination (tối đa 100)
* @param status Template status filter (optional)
* @returns Template list
*
* Status values:
* - 1: ENABLE templates
* - 2: PENDING_REVIEW templates
* - 3: REJECT templates
* - 4: DISABLE templates
* - undefined: All templates
*/
getTemplateList(accessToken: string, offset?: number, limit?: number, status?: 1 | 2 | 3 | 4): Promise<ZNSTemplateList>;
/**
* Get ZNS template details
* @param accessToken OA access token
* @param templateId Template ID
* @returns Template details
*
* Response data:
* - templateId: ID của template
* - templateName: Tên của template
* - status: Trạng thái template (ENABLE, PENDING_REVIEW, DELETE, REJECT, DISABLE)
* - reason: Lý do template có trạng thái hiện tại
* - listParams: Danh sách các thuộc tính của template
* - listButtons: Danh sách các buttons/CTAs của template
* - timeout: Thời gian timeout của template
* - previewUrl: Đường dẫn đến bản xem trước của template
* - templateQuality: Chất lượng template (null từ 10/12)
* - templateTag: Loại nội dung (TRANSACTION, CUSTOMER_CARE, PROMOTION)
* - price: Đơn giá của template
*/
getTemplateDetails(accessToken: string, templateId: string): Promise<ZNSTemplateDetails>;
/**
* Custom: Lấy tất cả template kèm thông tin chi tiết cho 1 accessToken
* - Tự động phân trang để lấy đủ tổng số template
* - Lấy chi tiết song song theo batch để tối ưu thời gian
*/
getAllTemplatesWithDetails(accessToken: string, status?: 1 | 2 | 3 | 4): Promise<ZNSAllTemplateDetailsResult>;
/**
* Custom: Lấy tất cả template chi tiết cho nhiều accessToken (nhiều OA)
* Đầu ra nhóm theo từng accessToken
*/
getAllTemplatesWithDetailsByTokens(accessTokens: string[], status?: 1 | 2 | 3 | 4): Promise<ZNSMultiOAAllTemplateDetailsResult>;
/**
* Get ZNS template sample data
* @param accessToken OA access token
* @param templateId Template ID
* @returns Template sample data
*
* Response data:
* - Chứa tham số và dữ liệu mẫu của template
* - Ví dụ: { "balance_debt": 2000, "due_date": "01/01/1970", "customer_name": "customer_name_sample" }
*/
getTemplateSampleData(accessToken: string, templateId: string): Promise<ZNSTemplateSampleData>;
/**
* Get customer rating information
* @param accessToken OA access token
* @param templateId Template ID
* @param fromTime Start time (timestamp in milliseconds)
* @param toTime End time (timestamp in milliseconds)
* @param offset Position of first rating to return
* @param limit Maximum number of ratings to return
* @returns Customer rating information
*
* Lưu ý:
* - Chỉ có thể lấy thông tin đánh giá từ template đánh giá dịch vụ được tạo bởi ứng dụng
* - Access token phải ứng với template ID được tạo bởi app và OA
* - Thời gian theo định dạng timestamp (millisecond)
*/
getCustomerRating(accessToken: string, templateId: string, fromTime: number, toTime: number, offset: number, limit: number): Promise<ZNSCustomerRatingResponse>;
/**
* Get OA ZNS sending quality information
* @param accessToken OA access token
* @returns OA quality information
*
* Response data:
* - oaCurrentQuality: Chất lượng gửi ZNS trong 48 giờ gần nhất
* - oa7dayQuality: Chất lượng gửi ZNS trong 7 ngày gần nhất
*
* Quality levels:
* - HIGH: Mức độ chất lượng tốt
* - MEDIUM: Mức độ chất lượng trung bình
* - LOW: Mức độ chất lượng kém
* - UNDEFINED: Chưa được xác định (OA không gửi ZNS trong khung thời gian đánh giá)
*/
getOAQuality(accessToken: string): Promise<ZNSOAQualityInfo>;
/**
* Create ZNS template
* @param accessToken OA access token
* @param templateData Template creation data theo chuẩn Zalo API
* @returns Created template response
*
* API: POST https://business.openapi.zalo.me/template/create
*/
createTemplate(accessToken: string, templateData: ZNSCreateTemplateRequest): Promise<ZNSTemplateCreateEditResponse>;
/**
* Edit ZNS template (chỉnh sửa template có trạng thái REJECT)
* @param accessToken OA access token
* @param templateData Template edit data theo chuẩn Zalo API
* @returns Edited template response
*
* Lưu ý:
* - Chỉ có thể chỉnh sửa template có trạng thái REJECT
* - Template sau khi chỉnh sửa sẽ chuyển về trạng thái PENDING_REVIEW
* - Daily quota: 100 requests/ngày
* - Cần quyền "Quản lý tài sản"
*
* API: POST https://business.openapi.zalo.me/template/edit
*/
updateTemplate(accessToken: string, templateData: ZNSUpdateTemplateRequest): Promise<ZNSTemplateCreateEditResponse>;
/**
* Upload image for ZNS template
* @param accessToken OA access token
* @param imageFile Image file (Buffer or ReadableStream)
* @param filename Filename with extension
* @returns Upload result with media_id
*
* Lưu ý:
* - Định dạng hỗ trợ: JPG, PNG
* - Dung lượng tối đa: 500KB
* - Hạn mức: 5000 ảnh/tháng/app
* - Logo: PNG, 400x96px
* - Hình ảnh: JPG/PNG, tỉ lệ 16:9
* - Cần quyền "Quản lý tài sản"
*/
uploadImage(accessToken: string, imageFile: Buffer | NodeJS.ReadableStream, filename?: string): Promise<ZNSUploadImageResult>;
/**
* Comprehensive validation for ZNS template request
*/
private validateZNSTemplateRequest;
/**
* Validate basic required fields
*/
private validateBasicFields;
/**
* Validate template_type and tag compatibility
*/
private validateTemplateTypeTagCompatibility;
/**
* Validate layout structure based on template type
*/
private validateLayoutStructure;
/**
* Check if component belongs to header
*/
private isHeaderComponent;
/**
* Check if component belongs to body
*/
private isBodyComponent;
/**
* Check if component belongs to footer
*/
private isFooterComponent;
/**
* Validate custom template layout (type 1)
*/
private validateCustomTemplateLayout;
/**
* Validate auth template layout (type 2)
*/
private validateAuthTemplateLayout;
/**
* Validate payment template layout (type 3)
*/
private validatePaymentTemplateLayout;
/**
* Validate voucher template layout (type 4)
*/
private validateVoucherTemplateLayout;
/**
* Validate rating template layout (type 5)
*/
private validateRatingTemplateLayout;
/**
* Validate individual component content
*/
private validateComponent;
/**
* Validate TITLE component
*/
private validateTitleComponent;
/**
* Validate PARAGRAPH component
*/
private validateParagraphComponent;
/**
* Validate OTP component
*/
private validateOTPComponent;
/**
* Validate TABLE component
*/
private validateTableComponent;
/**
* Validate LOGO component
*/
private validateLogoComponent;
/**
* Validate IMAGES component
*/
private validateImagesComponent;
/**
* Validate BUTTONS component
*/
private validateButtonsComponent;
/**
* Validate PAYMENT component
*/
private validatePaymentComponent;
/**
* Validate VOUCHER component
*/
private validateVoucherComponent;
/**
* Validate RATING component
*/
private validateRatingComponent;
/**
* Validate attachment object
*/
private validateAttachment;
/**
* Validate params array
*/
private validateParams;
private handleZNSError;
}
//# sourceMappingURL=zns.service.d.ts.map