@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
TypeScript
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