UNPKG

@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

147 lines 6.01 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.GeneralMessageService = void 0; const common_1 = require("../types/common"); /** * Service xử lý các API tin nhắn tổng quát của Zalo Official Account * * Bao gồm các loại tin nhắn: * - Tin nhắn phản hồi (Response Message) * - Tin nhắn ẩn danh (Anonymous Message) * - Tin nhắn tự động (Auto Message) * - Tin nhắn hệ thống (System Message) * * ĐIỀU KIỆN GỬI TIN NHẮN TỔNG QUÁT: * * 1. TIN NHẮN PHẢN HỒI: * - Chỉ được gửi trong vòng 24 giờ kể từ khi người dùng gửi tin nhắn đến OA * - Không giới hạn số lượng tin nhắn phản hồi * - Có thể chứa bất kỳ nội dung nào (tư vấn, quảng cáo, thông tin) * * 2. TIN NHẮN ẨN DANH: * - Gửi tin nhắn mà không hiển thị thông tin OA * - Chỉ dành cho các trường hợp đặc biệt * - Cần được Zalo phê duyệt trước khi sử dụng * * 3. TIN NHẮN TỰ ĐỘNG: * - Tin nhắn được gửi tự động dựa trên trigger * - Bao gồm: tin chào mừng, tin cảm ơn, tin nhắc nhở * * 4. TIN NHẮN HỆ THỐNG: * - Tin nhắn thông báo từ hệ thống * - Bao gồm: thông báo bảo trì, cập nhật chính sách */ class GeneralMessageService { constructor(client) { this.client = client; // Zalo API endpoints - organized by functionality this.endpoints = { // Message endpoints message: { send: "https://openapi.zalo.me/v3.0/oa/message/cs", sendAnonymous: "https://openapi.zalo.me/v3.0/oa/message/anonymous", }, }; } /** * Gửi tin nhắn phản hồi hình ảnh * @param accessToken Access token của Official Account * @param recipient Thông tin người nhận * @param message Nội dung tin nhắn hình ảnh * @returns Thông tin tin nhắn đã gửi */ async sendResponseImageMessage(accessToken, recipient, message) { try { if (!message.attachment?.payload?.url) { throw new common_1.ZaloSDKError("URL hình ảnh không được để trống", -1); } const endpoint = this.endpoints.message.send; const request = { recipient, message, messaging_type: "response", }; const result = await this.client.apiPost(endpoint, accessToken, request); if (result.error !== 0) { throw new common_1.ZaloSDKError(result.message || "Failed to send response image message", result.error, result); } if (!result.data) { throw new common_1.ZaloSDKError("No response data received", -1); } return result.data; } catch (error) { if (error instanceof common_1.ZaloSDKError) { throw error; } throw new common_1.ZaloSDKError(`Failed to send response image message: ${error.message}`, -1, error); } } /** * Gửi tin nhắn ẩn danh * @param accessToken Access token của Official Account * @param recipient Thông tin người nhận * @param message Nội dung tin nhắn ẩn danh * @returns Thông tin tin nhắn đã gửi */ async sendAnonymousMessage(accessToken, recipient, message) { try { if (!message.text || message.text.trim().length === 0) { throw new common_1.ZaloSDKError("Nội dung tin nhắn ẩn danh không được để trống", -1); } const endpoint = this.endpoints.message.sendAnonymous; const request = { recipient, message, }; const result = await this.client.apiPost(endpoint, accessToken, request); if (result.error !== 0) { throw new common_1.ZaloSDKError(result.message || "Failed to send anonymous message", result.error, result); } if (!result.data) { throw new common_1.ZaloSDKError("No response data received", -1); } return result.data; } catch (error) { if (error instanceof common_1.ZaloSDKError) { throw error; } throw new common_1.ZaloSDKError(`Failed to send anonymous message: ${error.message}`, -1, error); } } /** * Gửi tin nhắn tổng quát * @param accessToken Access token của Official Account * @param recipient Thông tin người nhận * @param message Nội dung tin nhắn * @param messagingType Loại tin nhắn (response, update, message_tag) * @returns Thông tin tin nhắn đã gửi */ async sendMessage(accessToken, recipient, message, messagingType = "response") { try { const endpoint = this.endpoints.message.send; const request = { recipient, message, messaging_type: messagingType, }; const result = await this.client.apiPost(endpoint, accessToken, request); if (result.error !== 0) { throw new common_1.ZaloSDKError(result.message || "Failed to send message", result.error, result); } if (!result.data) { throw new common_1.ZaloSDKError("No response data received", -1); } return result.data; } catch (error) { if (error instanceof common_1.ZaloSDKError) { throw error; } throw new common_1.ZaloSDKError(`Failed to send message: ${error.message}`, -1, error); } } } exports.GeneralMessageService = GeneralMessageService; //# sourceMappingURL=general-message.service.js.map