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

197 lines 5.12 kB
import { BaseMessage, SendMessageResponse } from "./message"; /** * Button payload types for different actions */ export interface OpenUrlPayload { url: string; } export interface OpenSmsPayload { content: string; phone_code: string; } export interface OpenPhonePayload { phone_code: string; } export type QueryPayload = string; export interface OpenSmsPayloadInput { content: string; phone_code?: string; phoneCode?: string; } export interface OpenPhonePayloadInput { phone_code?: string; phoneCode?: string; } /** * Promotion message element types for v3.0 API */ export interface PromotionBannerElement { type: "banner"; attachment_id?: string; image_url?: string; } export interface PromotionHeaderElement { type: "header"; content: string; align?: "left" | "center" | "right"; } export interface PromotionTextElement { type: "text"; content: string; align?: "left" | "center" | "right"; } export interface PromotionTableElement { type: "table"; content: Array<{ key: string; value: string; }>; } export type PromotionElement = PromotionBannerElement | PromotionHeaderElement | PromotionTextElement | PromotionTableElement; /** * Specific button types with proper payload typing */ export interface OpenUrlButton { title: string; image_icon?: string; type: "oa.open.url"; payload: OpenUrlPayload; } export interface QueryShowButton { title: string; image_icon?: string; type: "oa.query.show"; payload: QueryPayload; } export interface QueryHideButton { title: string; image_icon?: string; type: "oa.query.hide"; payload: QueryPayload; } export interface OpenSmsButton { title: string; image_icon?: string; type: "oa.open.sms"; payload: OpenSmsPayload; } export interface OpenPhoneButton { title: string; image_icon?: string; type: "oa.open.phone"; payload: OpenPhonePayload; } /** * Union type for all supported button types */ export type PromotionButton = OpenUrlButton | QueryShowButton | QueryHideButton | OpenSmsButton | OpenPhoneButton; /** * Input button interfaces with proper typing (discriminated union) */ export interface PromotionButtonInputOpenUrl { title: string; imageIcon?: string; type: "oa.open.url"; payload: OpenUrlPayload; } export interface PromotionButtonInputQueryShow { title: string; imageIcon?: string; type: "oa.query.show"; payload: QueryPayload; } export interface PromotionButtonInputQueryHide { title: string; imageIcon?: string; type: "oa.query.hide"; payload: QueryPayload; } export interface PromotionButtonInputOpenSms { title: string; imageIcon?: string; type: "oa.open.sms"; payload: OpenSmsPayloadInput; } export interface PromotionButtonInputOpenPhone { title: string; imageIcon?: string; type: "oa.open.phone"; payload: OpenPhonePayloadInput | string; } /** * Union type for all input button types with proper payload typing */ export type PromotionButtonInput = PromotionButtonInputOpenUrl | PromotionButtonInputQueryShow | PromotionButtonInputQueryHide | PromotionButtonInputOpenSms | PromotionButtonInputOpenPhone; /** * Promotion message types for v3.0 API */ export interface PromotionMessage extends BaseMessage { type: "promotion"; attachment: { type: "template"; payload: { template_type: "promotion"; language?: "VI" | "EN"; elements: PromotionElement[]; buttons?: PromotionButton[]; }; }; } /** * Result for individual user in multiple promotion sending */ export interface PromotionUserResult { userId: string; success: boolean; result: SendMessageResponse | null; error: Error | null; timestamp: Date; } /** * Progress tracking for multiple promotion sending */ export interface MultiplePromotionProgress { total: number; completed: number; successful: number; failed: number; currentUserId: string | null; startTime: number; estimatedTimeRemaining: number | null; } /** * Final result for multiple promotion sending */ export interface MultiplePromotionResult { total: number; successful: number; failed: number; results: PromotionUserResult[]; executionTime: number; mode: "sequential" | "parallel"; startTime: Date; endTime: Date; successRate: number; } /** * Banner configuration for promotion messages * Must provide either image_url OR attachment_id, not both */ export type BannerConfig = { image_url: string; attachment_id?: never; } | { attachment_id: string; image_url?: never; }; /** * Generic button interface for flexible usage (backward compatibility) */ export interface GenericPromotionButton { title: string; imageIcon?: string; image_icon?: string; type: "oa.open.url" | "oa.query.show" | "oa.query.hide" | "oa.open.sms" | "oa.open.phone"; payload: OpenUrlPayload | QueryPayload | OpenSmsPayload | OpenPhonePayload; } //# sourceMappingURL=promotion.d.ts.map