import { ZaloClient } from "../clients/zalo-client";
import { SendMessageResponse, TransactionMessage, MessageRecipient } from "../types/message";
/**
 * Service xử lý các API tin nhắn giao dịch của Zalo Official Account
 *
 * ĐIỀU KIỆN GỬI TIN GIAO DỊCH:
 *
 * 1. THỜI GIAN GỬI:
 *    - Chỉ được gửi trong vòng 24 giờ kể từ khi người dùng tương tác cuối cùng với OA
 *    - Tương tác bao gồm: gửi tin nhắn, nhấn button, gọi điện, truy cập website từ OA
 *
 * 2. NỘI DUNG TIN NHẮN:
 *    - Phải liên quan trực tiếp đến giao dịch thực tế
 *    - Bao gồm: xác nhận đơn hàng, thông báo thanh toán, cập nhật trạng thái giao hàng
 *    - Không được chứa nội dung quảng cáo, khuyến mãi
 *
 * 3. TẦN SUẤT GỬI:
 *    - Tối đa 3 tin nhắn giao dịch/ngày cho mỗi người dùng
 *    - Phải có khoảng cách ít nhất 1 giờ giữa các tin nhắn
 *
 * 4. ĐỊNH DẠNG:
 *    - Phải sử dụng template được Zalo phê duyệt trước
 *    - Template phải tuân thủ format chuẩn của tin giao dịch
 *
 * 5. NGƯỜI DÙNG:
 *    - Người dùng phải đã follow OA
 *    - Người dùng không được block OA
 *    - Người dùng phải có tương tác gần đây với OA
 *
 * 6. OFFICIAL ACCOUNT:
 *    - OA phải được xác minh (verified)
 *    - OA phải có quyền gửi tin giao dịch được Zalo cấp phép
 *    - OA không được vi phạm chính sách của Zalo
 *
 * LỖI THƯỜNG GẶP:
 * - 1004: Người dùng chưa follow OA hoặc đã unfollow
 * - 1005: Vượt quá thời gian 24 giờ từ lần tương tác cuối
 * - 1006: Vượt quá giới hạn 3 tin/ngày
 * - 1007: Template chưa được phê duyệt hoặc không hợp lệ
 * - 1008: Nội dung tin nhắn vi phạm chính sách
 */
export declare class TransactionService {
    private readonly client;
    private readonly transactionApiUrl;
    constructor(client: ZaloClient);
    /**
     * Gửi tin nhắn giao dịch
     * @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 giao dịch
     * @returns Thông tin tin nhắn đã gửi
     */
    sendTransactionMessage(accessToken: string, recipient: MessageRecipient, message: TransactionMessage): Promise<SendMessageResponse>;
    /**
     * Gửi tin nhắn xác nhận đơn hàng
     * @param accessToken Access token của Official Account
     * @param recipient Thông tin người nhận
     * @param orderInfo Thông tin đơn hàng
     * @returns Thông tin tin nhắn đã gửi
     */
    sendOrderConfirmation(accessToken: string, recipient: MessageRecipient, orderInfo: {
        orderId: string;
        orderDate: string;
        totalAmount: number;
        items: Array<{
            name: string;
            quantity: number;
            price: number;
        }>;
        customerInfo: {
            name: string;
            phone: string;
            address: string;
        };
    }): Promise<SendMessageResponse>;
    /**
     * Gửi tin nhắn thông báo thanh toán
     * @param accessToken Access token của Official Account
     * @param recipient Thông tin người nhận
     * @param paymentInfo Thông tin thanh toán
     * @returns Thông tin tin nhắn đã gửi
     */
    sendPaymentNotification(accessToken: string, recipient: MessageRecipient, paymentInfo: {
        orderId: string;
        amount: number;
        paymentMethod: string;
        paymentDate: string;
        status: "success" | "failed" | "pending";
    }): Promise<SendMessageResponse>;
    /**
     * Gửi tin nhắn cập nhật trạng thái giao hàng
     * @param accessToken Access token của Official Account
     * @param recipient Thông tin người nhận
     * @param shippingInfo Thông tin giao hàng
     * @returns Thông tin tin nhắn đã gửi
     */
    sendShippingUpdate(accessToken: string, recipient: MessageRecipient, shippingInfo: {
        orderId: string;
        trackingNumber: string;
        status: "preparing" | "shipped" | "in_transit" | "delivered";
        estimatedDelivery?: string;
        carrier?: string;
    }): Promise<SendMessageResponse>;
    /**
     * Validate transaction message format
     * @param message Transaction message to validate
     */
    private validateTransactionMessage;
}
//# sourceMappingURL=transaction.service.d.ts.map