/**
 * Types for Zalo Webhook Events
 * Based on Zalo Official Account Webhook API
 */
/**
 * Base webhook event structure
 */
export interface BaseWebhookEvent {
    /** Application ID */
    app_id: string;
    /** User ID for Social API */
    user_id_by_app: string;
    /** Event name */
    event_name: string;
    /** Event timestamp */
    timestamp: string;
}
/**
 * Webhook sender information
 */
export interface WebhookSender {
    /** Sender ID */
    id: string;
}
/**
 * Webhook recipient information
 */
export interface WebhookRecipient {
    /** Recipient ID */
    id: string;
}
/**
 * Webhook follower information (for follow events)
 */
export interface WebhookFollower {
    /** Follower ID */
    id: string;
}
/**
 * Webhook customer information (for shop events)
 */
export interface WebhookCustomer {
    /** Customer ID */
    id: string;
}
/**
 * User submitted information
 */
export interface UserSubmittedInfo {
    /** User address */
    address?: string;
    /** User phone number */
    phone?: string;
    /** User city */
    city?: string;
    /** User district */
    district?: string;
    /** User name */
    name?: string;
    /** User ward */
    ward?: string;
}
/**
 * Webhook user information (for click events)
 */
export interface WebhookUser {
    /** User ID */
    id?: string;
}
/**
 * Message with reaction
 */
export interface ReactionMessage {
    /** Message ID */
    msg_id: string;
    /** Reaction icon */
    react_icon: string;
}
/**
 * Anonymous message with conversation ID
 */
export interface AnonymousMessage extends WebhookBaseMessage {
    /** Conversation ID for anonymous chat */
    conversation_id: string;
}
/**
 * Call information for call events
 */
export interface CallInfo {
    /** Call ID */
    call_id: string;
    /** Call type (AUDIO, VIDEO) */
    call_type: string;
    /** Call initialization time */
    init_time: string;
    /** Total call duration in milliseconds */
    call_duration: string;
    /** Waiting time before call answered */
    waiting_time: string;
    /** Actual talk time */
    talk_time: string;
    /** Call status code */
    status_code: string;
    /** Phone number */
    phone?: string;
}
/**
 * Template message payload
 */
export interface TemplatePayload {
    /** Template checksum */
    checksum: string;
    /** Template link URL */
    link_url: string;
    /** Zalo instant ID */
    zinstant_id: string;
    /** Template text content */
    text: string;
}
/**
 * Template message source
 */
export interface TemplateSource {
    /** Service name */
    service: string;
    /** Application ID */
    app_id: string;
}
/**
 * Template message
 */
export interface TemplateMessage {
    /** Client message ID */
    client_msg_id: string;
    /** Template payload */
    payload: TemplatePayload;
    /** Message source */
    source: TemplateSource;
    /** Message ID */
    msg_id: string;
    /** Is reply flag */
    is_reply: boolean;
}
/**
 * Business card payload
 */
export interface BusinessCardPayload {
    /** Business card thumbnail */
    thumbnail: string;
    /** Business card description (JSON string) */
    description: string;
    /** Business card URL */
    url: string;
}
/**
 * Business card message
 */
export interface BusinessCardMessage extends WebhookBaseMessage {
    /** Client message ID */
    client_msg_id: string;
    /** Business card attachments */
    attachments: Array<MessageAttachment & {
        type: "link";
        payload: BusinessCardPayload;
    }>;
}
/**
 * User feedback message
 */
export interface FeedbackMessage {
    /** Feedback note */
    note: string;
    /** Rating score */
    rate: number;
    /** Submit time */
    submit_time: string;
    /** Feedback options */
    feedbacks: string[];
    /** Message ID */
    msg_id: string;
    /** Tracking ID */
    tracking_id: string;
}
/**
 * Quota change information
 */
export interface QuotaChange {
    /** Previous quota value */
    prev_value: number;
    /** New quota value */
    new_value: number;
}
/**
 * Tag level change information
 */
export interface TagLevelChange {
    /** Previous tag level */
    prev_value: number;
    /** New tag level */
    new_value: number;
}
/**
 * ZNS delivery message
 */
export interface ZNSDeliveryMessage {
    /** Delivery time */
    delivery_time: string;
    /** Message ID */
    msg_id: string;
    /** Tracking ID */
    tracking_id: string;
}
/**
 * Group information
 */
export interface GroupInfo {
    /** Group ID */
    group_id: string;
    /** Official Account ID */
    oa_id: string;
    /** Application ID */
    app_id: string;
    /** User list (for group events) */
    users?: string[];
}
/**
 * Widget interaction data
 */
export interface WidgetInteractionData {
    /** User ID by OA */
    user_id_by_oa: string;
    /** User external ID */
    user_external_id: string;
    /** Widget URL */
    url: string;
}
/**
 * Widget sync failure data
 */
export interface WidgetSyncFailureData {
    /** Error message */
    message: string;
    /** User ID by OA */
    user_id_by_oa: string;
    /** User external ID */
    user_external_id: string;
}
/**
 * Template status change
 */
export interface TemplateStatusChange {
    /** Previous status */
    prev_status: string;
    /** New status */
    new_status: string;
}
/**
 * Permission revoked data
 */
export interface PermissionRevokedData {
    /** Action performed by (APP or OA) */
    action_by: string;
    /** Revoked timestamp */
    revoked_at: string;
}
/**
 * Extension subscription info
 */
export interface ExtensionSubscriptionInfo {
    /** Valid through date */
    valid_through_date: string;
    /** Duration in months */
    duration_month: string;
    /** Valid start date */
    valid_start_date: string;
}
/**
 * Update user info data
 */
export interface UpdateUserInfoData {
    /** Update method */
    method: string;
}
/**
 * Anonymous message with attachments and conversation ID
 */
export interface AnonymousMessageWithAttachments extends WebhookMessageWithAttachments {
    /** Conversation ID for anonymous chat */
    conversation_id: string;
}
/**
 * Location coordinates
 */
export interface LocationCoordinates {
    /** Latitude */
    latitude: string;
    /** Longitude */
    longitude: string;
}
/**
 * Location attachment payload
 */
export interface LocationPayload {
    /** Location coordinates */
    coordinates: LocationCoordinates;
}
/**
 * Image attachment payload
 */
export interface ImagePayload {
    /** Thumbnail URL */
    thumbnail: string;
    /** Full image URL */
    url: string;
}
/**
 * Link attachment payload
 */
export interface LinkPayload {
    /** Link thumbnail URL */
    thumbnail: string;
    /** Link description */
    description: string;
    /** Link URL */
    url: string;
}
/**
 * Sticker attachment payload
 */
export interface StickerPayload {
    /** Sticker ID */
    id: string;
    /** Sticker URL */
    url: string;
}
/**
 * GIF attachment payload
 */
export interface GifPayload {
    /** GIF thumbnail URL */
    thumbnail: string;
    /** GIF URL */
    url: string;
}
/**
 * Audio attachment payload
 */
export interface AudioPayload {
    /** Audio file URL */
    url: string;
}
/**
 * Video attachment payload
 */
export interface VideoPayload {
    /** Video thumbnail URL */
    thumbnail: string;
    /** Video description */
    description: string;
    /** Video file URL */
    url: string;
}
/**
 * File attachment payload
 */
export interface FilePayload {
    /** File download URL */
    url: string;
    /** File size in bytes */
    size: string;
    /** File name */
    name: string;
    /** File checksum */
    checksum: string;
    /** File type/MIME type */
    type: string;
}
/**
 * Enhanced link payload for OA list messages
 */
export interface EnhancedLinkPayload extends LinkPayload {
    /** Link title */
    title: string;
}
/**
 * Union type for all attachment payloads
 */
export type AttachmentPayload = LocationPayload | ImagePayload | LinkPayload | StickerPayload | GifPayload | AudioPayload | VideoPayload | FilePayload | EnhancedLinkPayload;
/**
 * Message attachment
 */
export interface MessageAttachment {
    /** Attachment payload */
    payload: AttachmentPayload;
    /** Attachment type */
    type: "location" | "image" | "link" | "sticker" | "gif" | "audio" | "video" | "file";
}
/**
 * Base webhook message structure
 */
export interface WebhookBaseMessage {
    /** Message ID */
    msg_id: string;
    /** Quoted message ID when the message is a reply */
    quote_msg_id?: string;
    /** Message text content */
    text?: string;
}
/**
 * Webhook message with attachments
 */
export interface WebhookMessageWithAttachments extends WebhookBaseMessage {
    /** Message attachments */
    attachments: MessageAttachment[];
}
/**
 * Message for seen event (contains multiple message IDs)
 */
export interface SeenMessage {
    /** Array of message IDs that were seen */
    msg_ids: string[];
}
/**
 * User follows Official Account event
 */
export interface UserFollowEvent extends BaseWebhookEvent {
    event_name: "follow";
    /** Official Account ID */
    oa_id: string;
    /** Event source */
    source: string;
    /** Follower information */
    follower: WebhookFollower;
}
/**
 * User unfollows Official Account event
 */
export interface UserUnfollowEvent extends BaseWebhookEvent {
    event_name: "unfollow";
    /** Official Account ID */
    oa_id: string;
    /** Event source */
    source: string;
    /** Follower information */
    follower: WebhookFollower;
}
/**
 * Shop has order event
 */
export interface ShopHasOrderEvent extends BaseWebhookEvent {
    event_name: "shop_has_order";
    /** Official Account ID */
    oa_id: string;
    /** Customer information */
    customer: WebhookCustomer;
}
/**
 * Add user to tag event
 */
export interface AddUserToTagEvent extends BaseWebhookEvent {
    event_name: "add_user_to_tag";
    /** Official Account ID */
    oa_id: string;
}
/**
 * OA sends text message event
 */
export interface OASendTextEvent extends BaseWebhookEvent {
    event_name: "oa_send_text";
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: WebhookBaseMessage;
}
/**
 * OA sends image message event
 */
export interface OASendImageEvent extends BaseWebhookEvent {
    event_name: "oa_send_image";
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: WebhookMessageWithAttachments & {
        attachments: Array<MessageAttachment & {
            type: "image";
            payload: ImagePayload;
        }>;
    };
}
/**
 * OA sends GIF message event
 */
export interface OASendGifEvent extends BaseWebhookEvent {
    event_name: "oa_send_gif";
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: WebhookMessageWithAttachments & {
        attachments: Array<MessageAttachment & {
            type: "gif";
            payload: GifPayload;
        }>;
    };
}
/**
 * OA sends list message event (interactive message with multiple links)
 */
export interface OASendListEvent extends BaseWebhookEvent {
    event_name: "oa_send_list";
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: WebhookMessageWithAttachments & {
        attachments: Array<MessageAttachment & {
            type: "link";
            payload: EnhancedLinkPayload;
        }>;
    };
}
/**
 * OA sends file message event
 */
export interface OASendFileEvent extends BaseWebhookEvent {
    event_name: "oa_send_file";
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: WebhookMessageWithAttachments & {
        attachments: Array<MessageAttachment & {
            type: "file";
            payload: FilePayload;
        }>;
    };
}
/**
 * OA sends sticker message event
 */
export interface OASendStickerEvent extends BaseWebhookEvent {
    event_name: "oa_send_sticker";
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: WebhookMessageWithAttachments & {
        attachments: Array<MessageAttachment & {
            type: "sticker";
            payload: StickerPayload;
        }>;
    };
}
/**
 * User clicks "Chat Now" button event
 */
export interface UserClickChatNowEvent extends BaseWebhookEvent {
    event_name: "user_click_chatnow";
    /** Official Account ID */
    oa_id: string;
    /** User ID (for OA API) */
    user_id: string;
}
/**
 * User reacts to message event
 */
export interface UserReactedMessageEvent extends BaseWebhookEvent {
    event_name: "user_reacted_message";
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: ReactionMessage;
}
/**
 * OA reacts to message event
 */
export interface OAReactedMessageEvent extends BaseWebhookEvent {
    event_name: "oa_reacted_message";
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: ReactionMessage;
}
/**
 * OA sends consent request event
 */
export interface OASendConsentEvent extends BaseWebhookEvent {
    event_name: "oa_send_consent";
    /** Official Account ID */
    oa_id: string;
    /** Request type */
    request_type: string;
    /** Create time */
    create_time: string;
    /** Expired time */
    expired_time: string;
    /** Phone number */
    phone: string;
}
/**
 * User replies to consent request event
 */
export interface UserReplyConsentEvent extends BaseWebhookEvent {
    event_name: "user_reply_consent";
    /** Official Account ID */
    oa_id: string;
    /** Expired time */
    expired_time: string;
    /** Confirmed time */
    confirmed_time: string;
    /** Phone number */
    phone: string;
}
/**
 * Anonymous user sends text message event
 */
export interface AnonymousSendTextEvent extends BaseWebhookEvent {
    event_name: "anonymous_send_text";
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: AnonymousMessage;
}
/**
 * Anonymous user sends image message event
 */
export interface AnonymousSendImageEvent extends BaseWebhookEvent {
    event_name: "anonymous_send_image";
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: AnonymousMessageWithAttachments & {
        attachments: Array<MessageAttachment & {
            type: "image";
            payload: ImagePayload;
        }>;
    };
}
/**
 * Anonymous user sends file message event
 */
export interface AnonymousSendFileEvent extends BaseWebhookEvent {
    event_name: "anonymous_send_file";
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: AnonymousMessageWithAttachments & {
        attachments: Array<MessageAttachment & {
            type: "file";
            payload: FilePayload;
        }>;
    };
}
/**
 * Anonymous user sends sticker message event
 */
export interface AnonymousSendStickerEvent extends BaseWebhookEvent {
    event_name: "anonymous_send_sticker";
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: AnonymousMessageWithAttachments & {
        attachments: Array<MessageAttachment & {
            type: "sticker";
            payload: StickerPayload;
        }>;
    };
}
/**
 * OA sends anonymous text message event
 */
export interface OASendAnonymousTextEvent extends BaseWebhookEvent {
    event_name: "oa_send_anonymous_text";
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: AnonymousMessage;
}
/**
 * OA sends anonymous image message event
 */
export interface OASendAnonymousImageEvent extends BaseWebhookEvent {
    event_name: "oa_send_anonymous_image";
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: AnonymousMessageWithAttachments & {
        attachments: Array<MessageAttachment & {
            type: "image";
            payload: ImagePayload;
        }>;
    };
}
/**
 * OA sends anonymous file message event
 */
export interface OASendAnonymousFileEvent extends BaseWebhookEvent {
    event_name: "oa_send_anonymous_file";
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: AnonymousMessageWithAttachments & {
        attachments: Array<MessageAttachment & {
            type: "file";
            payload: FilePayload;
        }>;
    };
}
/**
 * OA sends anonymous sticker message event
 */
export interface OASendAnonymousStickerEvent extends BaseWebhookEvent {
    event_name: "oa_send_anonymous_sticker";
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: AnonymousMessageWithAttachments & {
        attachments: Array<MessageAttachment & {
            type: "sticker";
            payload: StickerPayload;
        }>;
    };
}
/**
 * OA call user event
 */
export interface OACallUserEvent extends BaseWebhookEvent {
    event_name: "oa_call_user";
    /** Official Account ID */
    oa_id: string;
    /** Call information */
    call_id: string;
    call_type: string;
    init_time: string;
    call_duration: string;
    waiting_time: string;
    talk_time: string;
    status_code: string;
    phone: string;
}
/**
 * User call OA event
 */
export interface UserCallOAEvent extends BaseWebhookEvent {
    event_name: "user_call_oa";
    /** Official Account ID */
    oa_id: string;
    /** User ID (for OA API) */
    user_id: string;
    /** Call information */
    call_id: string;
    call_type: string;
    init_time: string;
    call_duration: string;
    waiting_time: string;
    talk_time: string;
    status_code: string;
}
/**
 * OA sends template message event
 */
export interface OASendTemplateEvent extends BaseWebhookEvent {
    event_name: "oa_send_template";
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: TemplateMessage;
}
/**
 * User sends business card event
 */
export interface UserSendBusinessCardEvent extends BaseWebhookEvent {
    event_name: "user_send_business_card";
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: BusinessCardMessage;
}
/**
 * User feedback event
 */
export interface UserFeedbackEvent extends BaseWebhookEvent {
    event_name: "user_feedback";
    message: FeedbackMessage;
}
/**
 * Change OA daily quota event
 */
export interface ChangeOADailyQuotaEvent extends BaseWebhookEvent {
    event_name: "change_oa_daily_quota";
    /** Official Account ID */
    oa_id: string;
    /** Quota change information */
    quota: QuotaChange;
}
/**
 * Change OA template tags event
 */
export interface ChangeOATemplateTagsEvent extends BaseWebhookEvent {
    event_name: "change_oa_template_tags";
    /** Official Account ID */
    oa_id: string;
    /** Tag level change information */
    tag_level: TagLevelChange;
}
/**
 * Change template quality event
 */
export interface ChangeTemplateQualityEvent extends BaseWebhookEvent {
    event_name: "change_template_quality";
    /** Official Account ID */
    oa_id: string;
    /** Template ID */
    template_id: string;
    /** Template quality */
    quality: string;
}
/**
 * Change template quota event
 */
export interface ChangeTemplateQuotaEvent extends BaseWebhookEvent {
    event_name: "change_template_quota";
    /** Official Account ID */
    oa_id: string;
    /** Template ID */
    template_id: string;
    /** Quota change information */
    quota: QuotaChange;
}
/**
 * Journey timeout event
 */
export interface JourneyTimeoutEvent extends BaseWebhookEvent {
    event_name: "event_journey_time_out";
    /** Official Account ID */
    oa_id: string;
    /** Journey ID */
    journey_id: string;
    /** Application ID */
    app_id: string;
}
/**
 * Journey acknowledged event
 */
export interface JourneyAcknowledgedEvent extends BaseWebhookEvent {
    event_name: "event_journey_acknowledged";
    /** Official Account ID */
    oa_id: string;
    /** Journey ID */
    journey_id: string;
    /** Message ID */
    msg_id: string;
    /** Application ID */
    app_id: string;
}
/**
 * ZNS user received message event
 */
export interface ZNSUserReceivedMessageEvent extends BaseWebhookEvent {
    event_name: "user_received_message";
    /** Application ID */
    app_id: string;
    /** ZNS delivery message */
    message: ZNSDeliveryMessage;
}
/**
 * Create group event
 */
export interface CreateGroupEvent extends BaseWebhookEvent {
    event_name: "create_group";
    /** Official Account ID */
    oa_id: string;
    /** Group ID */
    group_id: string;
    /** Application ID */
    app_id: string;
}
/**
 * User join group event
 */
export interface UserJoinGroupEvent extends BaseWebhookEvent {
    event_name: "user_join_group";
    /** Official Account ID */
    oa_id: string;
    /** Group ID */
    group_id: string;
    /** Application ID */
    app_id: string;
    /** User list */
    users: string[];
}
/**
 * User request join group event
 */
export interface UserRequestJoinGroupEvent extends BaseWebhookEvent {
    event_name: "user_request_join_group";
    /** Official Account ID */
    oa_id: string;
    /** Group ID */
    group_id: string;
    /** Application ID */
    app_id: string;
    /** User list */
    users: string[];
}
/**
 * React request join group event
 */
export interface ReactRequestJoinGroupEvent extends BaseWebhookEvent {
    event_name: "react_request_join_group";
    /** Official Account ID */
    oa_id: string;
    /** Group ID */
    group_id: string;
    /** Application ID */
    app_id: string;
    /** User list */
    users: string[];
}
/**
 * Reject request join group event
 */
export interface RejectRequestJoinGroupEvent extends BaseWebhookEvent {
    event_name: "reject_request_join_group";
    /** Official Account ID */
    oa_id: string;
    /** Group ID */
    group_id: string;
    /** Application ID */
    app_id: string;
    /** User list */
    users: string[];
}
/**
 * Add group admin event
 */
export interface AddGroupAdminEvent extends BaseWebhookEvent {
    event_name: "add_group_admin";
    /** Official Account ID */
    oa_id: string;
    /** Group ID */
    group_id: string;
    /** Application ID */
    app_id: string;
    /** User list */
    users: string[];
}
/**
 * Remove group admin event
 */
export interface RemoveGroupAdminEvent extends BaseWebhookEvent {
    event_name: "remove_group_admin";
    /** Official Account ID */
    oa_id: string;
    /** Group ID */
    group_id: string;
    /** Application ID */
    app_id: string;
    /** User list */
    users: string[];
}
/**
 * Update group info event
 */
export interface UpdateGroupInfoEvent extends BaseWebhookEvent {
    event_name: "update_group_info";
    /** Official Account ID */
    oa_id: string;
    /** Group ID */
    group_id: string;
    /** Application ID */
    app_id: string;
}
/**
 * User out group event
 */
export interface UserOutGroupEvent extends BaseWebhookEvent {
    event_name: "user_out_group";
    /** Official Account ID */
    oa_id: string;
    /** Group ID */
    group_id: string;
    /** Application ID */
    app_id: string;
    /** User list */
    users: string[];
}
/**
 * OA send group text event
 */
export interface OASendGroupTextEvent extends BaseWebhookEvent {
    event_name: "oa_send_group_text";
    /** Official Account ID */
    oa_id: string;
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: WebhookBaseMessage;
}
/**
 * OA send group image event
 */
export interface OASendGroupImageEvent extends BaseWebhookEvent {
    event_name: "oa_send_group_image";
    /** Official Account ID */
    oa_id: string;
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: WebhookMessageWithAttachments & {
        attachments: Array<MessageAttachment & {
            type: "image";
            payload: ImagePayload;
        }>;
    };
}
/**
 * OA send group link event
 */
export interface OASendGroupLinkEvent extends BaseWebhookEvent {
    event_name: "oa_send_group_link";
    /** Official Account ID */
    oa_id: string;
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: WebhookMessageWithAttachments & {
        attachments: Array<MessageAttachment & {
            type: "link";
            payload: LinkPayload;
        }>;
    };
}
/**
 * OA send group audio event
 */
export interface OASendGroupAudioEvent extends BaseWebhookEvent {
    event_name: "oa_send_group_audio";
    /** Official Account ID */
    oa_id: string;
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: WebhookMessageWithAttachments & {
        attachments: Array<MessageAttachment & {
            type: "audio";
            payload: AudioPayload;
        }>;
    };
}
/**
 * OA send group location event
 */
export interface OASendGroupLocationEvent extends BaseWebhookEvent {
    event_name: "oa_send_group_location";
    /** Official Account ID */
    oa_id: string;
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: WebhookMessageWithAttachments & {
        attachments: Array<MessageAttachment & {
            type: "location";
            payload: LocationPayload;
        }>;
    };
}
/**
 * OA send group video event
 */
export interface OASendGroupVideoEvent extends BaseWebhookEvent {
    event_name: "oa_send_group_video";
    /** Official Account ID */
    oa_id: string;
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: WebhookMessageWithAttachments & {
        attachments: Array<MessageAttachment & {
            type: "video";
            payload: VideoPayload;
        }>;
    };
}
/**
 * OA send group business card event
 */
export interface OASendGroupBusinessCardEvent extends BaseWebhookEvent {
    event_name: "oa_send_group_business_card";
    /** Official Account ID */
    oa_id: string;
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: BusinessCardMessage;
}
/**
 * OA send group sticker event
 */
export interface OASendGroupStickerEvent extends BaseWebhookEvent {
    event_name: "oa_send_group_sticker";
    /** Official Account ID */
    oa_id: string;
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: WebhookMessageWithAttachments & {
        attachments: Array<MessageAttachment & {
            type: "sticker";
            payload: StickerPayload;
        }>;
    };
}
/**
 * OA send group GIF event
 */
export interface OASendGroupGifEvent extends BaseWebhookEvent {
    event_name: "oa_send_group_gif";
    /** Official Account ID */
    oa_id: string;
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: WebhookMessageWithAttachments & {
        attachments: Array<MessageAttachment & {
            type: "gif";
            payload: GifPayload;
        }>;
    };
}
/**
 * OA send group file event
 */
export interface OASendGroupFileEvent extends BaseWebhookEvent {
    event_name: "oa_send_group_file";
    /** Official Account ID */
    oa_id: string;
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: WebhookMessageWithAttachments & {
        attachments: Array<MessageAttachment & {
            type: "file";
            payload: FilePayload;
        }>;
    };
}
/**
 * User send group text event
 */
export interface UserSendGroupTextEvent extends BaseWebhookEvent {
    event_name: "user_send_group_text";
    /** Official Account ID */
    oa_id: string;
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: WebhookBaseMessage;
}
/**
 * User send group link event
 */
export interface UserSendGroupLinkEvent extends BaseWebhookEvent {
    event_name: "user_send_group_link";
    /** Official Account ID */
    oa_id: string;
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: WebhookMessageWithAttachments & {
        attachments: Array<MessageAttachment & {
            type: "link";
            payload: LinkPayload;
        }>;
    };
}
/**
 * User send group audio event
 */
export interface UserSendGroupAudioEvent extends BaseWebhookEvent {
    event_name: "user_send_group_audio";
    /** Official Account ID */
    oa_id: string;
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: WebhookMessageWithAttachments & {
        attachments: Array<MessageAttachment & {
            type: "audio";
            payload: AudioPayload;
        }>;
    };
}
/**
 * User send group location event
 */
export interface UserSendGroupLocationEvent extends BaseWebhookEvent {
    event_name: "user_send_group_location";
    /** Official Account ID */
    oa_id: string;
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: WebhookMessageWithAttachments & {
        attachments: Array<MessageAttachment & {
            type: "location";
            payload: LocationPayload;
        }>;
    };
}
/**
 * User send group video event
 */
export interface UserSendGroupVideoEvent extends BaseWebhookEvent {
    event_name: "user_send_group_video";
    /** Official Account ID */
    oa_id: string;
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: WebhookMessageWithAttachments & {
        attachments: Array<MessageAttachment & {
            type: "video";
            payload: VideoPayload;
        }>;
    };
}
/**
 * User send group business card event
 */
export interface UserSendGroupBusinessCardEvent extends BaseWebhookEvent {
    event_name: "user_send_group_business_card";
    /** Official Account ID */
    oa_id: string;
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: BusinessCardMessage;
}
/**
 * User send group sticker event
 */
export interface UserSendGroupStickerEvent extends BaseWebhookEvent {
    event_name: "user_send_group_sticker";
    /** Official Account ID */
    oa_id: string;
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: WebhookMessageWithAttachments & {
        attachments: Array<MessageAttachment & {
            type: "sticker";
            payload: StickerPayload;
        }>;
    };
}
/**
 * User send group GIF event
 */
export interface UserSendGroupGifEvent extends BaseWebhookEvent {
    event_name: "user_send_group_gif";
    /** Official Account ID */
    oa_id: string;
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: WebhookMessageWithAttachments & {
        attachments: Array<MessageAttachment & {
            type: "gif";
            payload: GifPayload;
        }>;
    };
}
/**
 * User send group file event
 */
export interface UserSendGroupFileEvent extends BaseWebhookEvent {
    event_name: "user_send_group_file";
    /** Official Account ID */
    oa_id: string;
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: WebhookMessageWithAttachments & {
        attachments: Array<MessageAttachment & {
            type: "file";
            payload: FilePayload;
        }>;
    };
}
/**
 * Widget interaction accepted event
 */
export interface WidgetInteractionAcceptedEvent extends BaseWebhookEvent {
    event_name: "widget_interaction_accepted";
    /** Official Account ID */
    oa_id: string;
    /** Widget interaction data */
    data: WidgetInteractionData;
}
/**
 * Widget failed to sync user external ID event
 */
export interface WidgetFailedToSyncUserExternalIdEvent extends BaseWebhookEvent {
    event_name: "widget_failed_to_sync_user_external_id";
    /** Official Account ID */
    oa_id: string;
    /** Widget sync failure data */
    data: WidgetSyncFailureData;
}
/**
 * Change template status event
 */
export interface ChangeTemplateStatusEvent extends BaseWebhookEvent {
    event_name: "change_template_status";
    /** Official Account ID */
    oa_id: string;
    /** Template ID */
    template_id: string;
    /** Status change information */
    status: TemplateStatusChange;
    /** Reason for status change */
    reason: string;
    /** Application ID */
    app_id: string;
}
/**
 * Permission revoked event
 */
export interface PermissionRevokedEvent extends BaseWebhookEvent {
    event_name: "permission_revoked";
    /** Official Account ID */
    oa_id: string;
    /** Permission revoked data */
    data: PermissionRevokedData;
    /** Application ID */
    app_id: string;
}
/**
 * Extension purchased event
 */
export interface ExtensionPurchasedEvent extends BaseWebhookEvent {
    event_name: "extension_purchased";
    /** Extension ID */
    extension_id: string;
    /** Official Account ID */
    oa_id: string;
    /** Extension subscription info */
    extension_sub_info: ExtensionSubscriptionInfo;
}
/**
 * Update user info event
 */
export interface UpdateUserInfoEvent extends BaseWebhookEvent {
    event_name: "update_user_info";
    /** Official Account ID */
    oa_id: string;
    /** User ID (for OA API) */
    user_id: string;
    /** Update user info data */
    data: UpdateUserInfoData;
    /** Application ID */
    app_id: string;
}
/**
 * User sends location event
 */
export interface UserSendLocationEvent extends BaseWebhookEvent {
    event_name: "user_send_location";
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: WebhookMessageWithAttachments & {
        attachments: Array<MessageAttachment & {
            type: "location";
            payload: LocationPayload;
        }>;
    };
}
/**
 * User sends image event
 */
export interface UserSendImageEvent extends BaseWebhookEvent {
    event_name: "user_send_image";
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: WebhookMessageWithAttachments & {
        attachments: Array<MessageAttachment & {
            type: "image";
            payload: ImagePayload;
        }>;
    };
}
/**
 * User sends link event
 */
export interface UserSendLinkEvent extends BaseWebhookEvent {
    event_name: "user_send_link";
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: WebhookMessageWithAttachments & {
        attachments: Array<MessageAttachment & {
            type: "link";
            payload: LinkPayload;
        }>;
    };
}
/**
 * User sends text event
 */
export interface UserSendTextEvent extends BaseWebhookEvent {
    event_name: "user_send_text";
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: WebhookBaseMessage;
}
/**
 * User sends sticker event
 */
export interface UserSendStickerEvent extends BaseWebhookEvent {
    event_name: "user_send_sticker";
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: WebhookMessageWithAttachments & {
        attachments: Array<MessageAttachment & {
            type: "sticker";
            payload: StickerPayload;
        }>;
    };
}
/**
 * User sends GIF event
 */
export interface UserSendGifEvent extends BaseWebhookEvent {
    event_name: "user_send_gif";
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: WebhookMessageWithAttachments & {
        attachments: Array<MessageAttachment & {
            type: "gif";
            payload: GifPayload;
        }>;
    };
}
/**
 * User sends audio event
 */
export interface UserSendAudioEvent extends BaseWebhookEvent {
    event_name: "user_send_audio";
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: WebhookMessageWithAttachments & {
        attachments: Array<MessageAttachment & {
            type: "audio";
            payload: AudioPayload;
        }>;
    };
}
/**
 * User received message event
 */
export interface UserReceivedMessageEvent extends BaseWebhookEvent {
    event_name: "user_received_message";
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: WebhookBaseMessage;
}
/**
 * User seen message event
 */
export interface UserSeenMessageEvent extends BaseWebhookEvent {
    event_name: "user_seen_message";
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: SeenMessage;
}
/**
 * User sends video event
 */
export interface UserSendVideoEvent extends BaseWebhookEvent {
    event_name: "user_send_video";
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: WebhookMessageWithAttachments & {
        attachments: Array<MessageAttachment & {
            type: "video";
            payload: VideoPayload;
        }>;
    };
}
/**
 * User sends file event
 */
export interface UserSendFileEvent extends BaseWebhookEvent {
    event_name: "user_send_file";
    sender: WebhookSender;
    recipient: WebhookRecipient;
    message: WebhookMessageWithAttachments & {
        attachments: Array<MessageAttachment & {
            type: "file";
            payload: FilePayload;
        }>;
    };
}
/**
 * User submit info event
 */
export interface UserSubmitInfoEvent extends BaseWebhookEvent {
    event_name: "user_submit_info";
    sender: {
        id: string;
    };
    recipient: {
        id: string;
    };
    info: {
        name?: string;
        phone?: string;
        email?: string;
        address?: string;
        city?: string;
        district?: string;
        ward?: string;
        date_of_birth?: string;
    };
}
/**
 * User click button event
 */
export interface UserClickButtonEvent extends BaseWebhookEvent {
    event_name: "user_click_chatnow" | "user_click_button";
    sender: {
        id: string;
    };
    recipient: {
        id: string;
    };
    button?: {
        title: string;
        payload: string;
    };
}
/**
 * OA send message event
 */
export interface OASendMessageEvent extends BaseWebhookEvent {
    event_name: "oa_send_text" | "oa_send_image" | "oa_send_file" | "oa_send_sticker" | "oa_send_gif" | "oa_send_audio" | "oa_send_video" | "oa_send_list";
    sender: {
        id: string;
    };
    recipient: {
        id: string;
    };
    message: {
        text?: string;
        msg_id: string;
        /** Quoted message ID when the message is a reply */
        quote_msg_id?: string;
        attachments?: Array<{
            type: string;
            payload: {
                url?: string;
                title?: string;
                description?: string;
            };
        }>;
    };
}
/**
 * Anonymous user send message event
 */
export interface AnonymousUserSendMessageEvent extends BaseWebhookEvent {
    event_name: "anonymous_send_text" | "anonymous_send_image" | "anonymous_send_sticker" | "anonymous_send_file";
    sender: {
        id: string;
    };
    recipient: {
        id: string;
    };
    message: {
        text?: string;
        msg_id: string;
        /** Quoted message ID when the message is a reply */
        quote_msg_id?: string;
        attachments?: Array<{
            type: string;
            payload: {
                url?: string;
            };
        }>;
    };
}
/**
 * ZNS message status event
 */
export interface ZNSMessageStatusEvent extends BaseWebhookEvent {
    event_name: "zns_message_status";
    message_id: string;
    phone: string;
    status: "sent" | "delivered" | "read" | "failed";
    error_code?: number;
    error_message?: string;
    timestamp: string;
}
/**
 * Template status event
 */
export interface TemplateStatusEvent extends BaseWebhookEvent {
    event_name: "template_status_update";
    template_id: string;
    template_name: string;
    status: "ENABLE" | "PENDING_REVIEW" | "REJECT" | "DISABLE" | "DELETE";
    reason?: string;
    quality?: "HIGH" | "MEDIUM" | "LOW" | "UNDEFINED";
}
/**
 * Group message events
 */
export interface GroupUserJoinEvent extends BaseWebhookEvent {
    event_name: "group_user_join";
    group_id: string;
    user: {
        id: string;
        name: string;
    };
}
export interface GroupUserLeaveEvent extends BaseWebhookEvent {
    event_name: "group_user_leave";
    group_id: string;
    user: {
        id: string;
        name: string;
    };
}
export interface GroupSendMessageEvent extends BaseWebhookEvent {
    event_name: "group_send_text" | "group_send_image" | "group_send_sticker" | "group_send_file";
    group_id: string;
    sender: {
        id: string;
        name: string;
    };
    message: {
        text?: string;
        msg_id: string;
        /** Quoted message ID when the message is a reply */
        quote_msg_id?: string;
        attachments?: Array<{
            type: string;
            payload: {
                url?: string;
            };
        }>;
    };
}
/**
 * All user message-related webhook events
 */
export type UserMessageWebhookEvent = UserSendLocationEvent | UserSendImageEvent | UserSendLinkEvent | UserSendTextEvent | UserSendStickerEvent | UserSendGifEvent | UserSendAudioEvent | UserSendVideoEvent | UserSendFileEvent | UserReceivedMessageEvent | UserSeenMessageEvent;
/**
 * All OA message-related webhook events
 */
export type OAMessageWebhookEvent = OASendTextEvent | OASendImageEvent | OASendGifEvent | OASendListEvent | OASendFileEvent | OASendStickerEvent | OASendAnonymousTextEvent | OASendAnonymousImageEvent | OASendAnonymousFileEvent | OASendAnonymousStickerEvent | OASendTemplateEvent;
/**
 * All message-related webhook events
 */
export type MessageWebhookEvent = UserMessageWebhookEvent | OAMessageWebhookEvent;
/**
 * All user action webhook events
 */
export type UserActionWebhookEvent = UserFollowEvent | UserUnfollowEvent | UserSubmitInfoEvent | UserClickChatNowEvent | UserReactedMessageEvent | UserReplyConsentEvent | UserSendBusinessCardEvent | UserFeedbackEvent;
/**
 * All shop/business webhook events
 */
export type ShopWebhookEvent = ShopHasOrderEvent;
/**
 * All call-related webhook events
 */
export type CallWebhookEvent = OACallUserEvent | UserCallOAEvent;
/**
 * All ZNS-related webhook events
 */
export type ZNSWebhookEvent = ChangeOADailyQuotaEvent | ChangeOATemplateTagsEvent | ChangeTemplateQualityEvent | ChangeTemplateQuotaEvent | JourneyTimeoutEvent | JourneyAcknowledgedEvent | ZNSUserReceivedMessageEvent | ChangeTemplateStatusEvent;
/**
 * All widget-related webhook events
 */
export type WidgetWebhookEvent = WidgetInteractionAcceptedEvent | WidgetFailedToSyncUserExternalIdEvent;
/**
 * All group-related webhook events
 */
export type GroupWebhookEvent = CreateGroupEvent | UserJoinGroupEvent | UserRequestJoinGroupEvent | ReactRequestJoinGroupEvent | RejectRequestJoinGroupEvent | AddGroupAdminEvent | RemoveGroupAdminEvent | UpdateGroupInfoEvent | UserOutGroupEvent | OASendGroupTextEvent | OASendGroupImageEvent | OASendGroupLinkEvent | OASendGroupAudioEvent | OASendGroupLocationEvent | OASendGroupVideoEvent | OASendGroupBusinessCardEvent | OASendGroupStickerEvent | OASendGroupGifEvent | OASendGroupFileEvent | UserSendGroupTextEvent | UserSendGroupLinkEvent | UserSendGroupAudioEvent | UserSendGroupLocationEvent | UserSendGroupVideoEvent | UserSendGroupBusinessCardEvent | UserSendGroupStickerEvent | UserSendGroupGifEvent | UserSendGroupFileEvent;
/**
 * All system/admin webhook events
 */
export type SystemWebhookEvent = AddUserToTagEvent | OAReactedMessageEvent | OASendConsentEvent | PermissionRevokedEvent | ExtensionPurchasedEvent | UpdateUserInfoEvent;
/**
 * All anonymous user webhook events
 */
export type AnonymousWebhookEvent = AnonymousSendTextEvent | AnonymousSendImageEvent | AnonymousSendFileEvent | AnonymousSendStickerEvent;
/**
 * Legacy webhook events (keeping for backward compatibility)
 */
export type LegacyWebhookEvent = UserSubmitInfoEvent | UserClickButtonEvent | OASendMessageEvent | AnonymousUserSendMessageEvent | ZNSMessageStatusEvent | TemplateStatusEvent | GroupUserJoinEvent | GroupUserLeaveEvent | GroupSendMessageEvent;
/**
 * All webhook events union type
 */
export type WebhookEvent = MessageWebhookEvent | UserActionWebhookEvent | ShopWebhookEvent | SystemWebhookEvent | AnonymousWebhookEvent | CallWebhookEvent | ZNSWebhookEvent | GroupWebhookEvent | WidgetWebhookEvent | LegacyWebhookEvent;
/**
 * Webhook payload wrapper
 */
export interface WebhookPayload {
    /**
     * Event data
     */
    data: WebhookEvent;
    /**
     * Event signature for verification
     */
    signature?: string;
}
/**
 * Webhook verification result
 */
export interface WebhookVerification {
    /**
     * Whether the webhook is valid
     */
    valid: boolean;
    /**
     * Error message if invalid
     */
    error?: string;
}
/**
 * Webhook handler function type
 */
export type WebhookHandler<T extends WebhookEvent = WebhookEvent> = (event: T) => Promise<void> | void;
/**
 * Webhook event handlers map
 */
export interface WebhookHandlers {
    user_send_text?: WebhookHandler<UserSendTextEvent>;
    user_send_image?: WebhookHandler<UserSendImageEvent>;
    user_send_location?: WebhookHandler<UserSendLocationEvent>;
    user_send_link?: WebhookHandler<UserSendLinkEvent>;
    user_send_sticker?: WebhookHandler<UserSendStickerEvent>;
    user_send_gif?: WebhookHandler<UserSendGifEvent>;
    user_send_audio?: WebhookHandler<UserSendAudioEvent>;
    user_send_video?: WebhookHandler<UserSendVideoEvent>;
    user_send_file?: WebhookHandler<UserSendFileEvent>;
    user_received_message?: WebhookHandler<UserReceivedMessageEvent>;
    user_seen_message?: WebhookHandler<UserSeenMessageEvent>;
    follow?: WebhookHandler<UserFollowEvent>;
    unfollow?: WebhookHandler<UserUnfollowEvent>;
    user_submit_info?: WebhookHandler<UserSubmitInfoEvent>;
    oa_send_text?: WebhookHandler<OASendTextEvent>;
    oa_send_image?: WebhookHandler<OASendImageEvent>;
    oa_send_gif?: WebhookHandler<OASendGifEvent>;
    oa_send_list?: WebhookHandler<OASendListEvent>;
    oa_send_file?: WebhookHandler<OASendFileEvent>;
    oa_send_sticker?: WebhookHandler<OASendStickerEvent>;
    user_click_chatnow?: WebhookHandler<UserClickChatNowEvent>;
    user_reacted_message?: WebhookHandler<UserReactedMessageEvent>;
    user_reply_consent?: WebhookHandler<UserReplyConsentEvent>;
    oa_reacted_message?: WebhookHandler<OAReactedMessageEvent>;
    oa_send_consent?: WebhookHandler<OASendConsentEvent>;
    anonymous_send_text?: WebhookHandler<AnonymousSendTextEvent>;
    anonymous_send_image?: WebhookHandler<AnonymousSendImageEvent>;
    anonymous_send_file?: WebhookHandler<AnonymousSendFileEvent>;
    anonymous_send_sticker?: WebhookHandler<AnonymousSendStickerEvent>;
    oa_send_anonymous_text?: WebhookHandler<OASendAnonymousTextEvent>;
    oa_send_anonymous_image?: WebhookHandler<OASendAnonymousImageEvent>;
    oa_send_anonymous_file?: WebhookHandler<OASendAnonymousFileEvent>;
    oa_send_anonymous_sticker?: WebhookHandler<OASendAnonymousStickerEvent>;
    oa_call_user?: WebhookHandler<OACallUserEvent>;
    user_call_oa?: WebhookHandler<UserCallOAEvent>;
    oa_send_template?: WebhookHandler<OASendTemplateEvent>;
    user_send_business_card?: WebhookHandler<UserSendBusinessCardEvent>;
    user_feedback?: WebhookHandler<UserFeedbackEvent>;
    change_oa_daily_quota?: WebhookHandler<ChangeOADailyQuotaEvent>;
    change_oa_template_tags?: WebhookHandler<ChangeOATemplateTagsEvent>;
    change_template_quality?: WebhookHandler<ChangeTemplateQualityEvent>;
    change_template_quota?: WebhookHandler<ChangeTemplateQuotaEvent>;
    change_template_status?: WebhookHandler<ChangeTemplateStatusEvent>;
    event_journey_time_out?: WebhookHandler<JourneyTimeoutEvent>;
    event_journey_acknowledged?: WebhookHandler<JourneyAcknowledgedEvent>;
    zns_user_received_message?: WebhookHandler<ZNSUserReceivedMessageEvent>;
    create_group?: WebhookHandler<CreateGroupEvent>;
    user_join_group?: WebhookHandler<UserJoinGroupEvent>;
    user_request_join_group?: WebhookHandler<UserRequestJoinGroupEvent>;
    react_request_join_group?: WebhookHandler<ReactRequestJoinGroupEvent>;
    reject_request_join_group?: WebhookHandler<RejectRequestJoinGroupEvent>;
    add_group_admin?: WebhookHandler<AddGroupAdminEvent>;
    remove_group_admin?: WebhookHandler<RemoveGroupAdminEvent>;
    update_group_info?: WebhookHandler<UpdateGroupInfoEvent>;
    user_out_group?: WebhookHandler<UserOutGroupEvent>;
    oa_send_group_text?: WebhookHandler<OASendGroupTextEvent>;
    oa_send_group_image?: WebhookHandler<OASendGroupImageEvent>;
    oa_send_group_link?: WebhookHandler<OASendGroupLinkEvent>;
    oa_send_group_audio?: WebhookHandler<OASendGroupAudioEvent>;
    oa_send_group_location?: WebhookHandler<OASendGroupLocationEvent>;
    oa_send_group_video?: WebhookHandler<OASendGroupVideoEvent>;
    oa_send_group_business_card?: WebhookHandler<OASendGroupBusinessCardEvent>;
    oa_send_group_sticker?: WebhookHandler<OASendGroupStickerEvent>;
    oa_send_group_gif?: WebhookHandler<OASendGroupGifEvent>;
    oa_send_group_file?: WebhookHandler<OASendGroupFileEvent>;
    user_send_group_text?: WebhookHandler<UserSendGroupTextEvent>;
    user_send_group_link?: WebhookHandler<UserSendGroupLinkEvent>;
    user_send_group_audio?: WebhookHandler<UserSendGroupAudioEvent>;
    user_send_group_location?: WebhookHandler<UserSendGroupLocationEvent>;
    user_send_group_video?: WebhookHandler<UserSendGroupVideoEvent>;
    user_send_group_business_card?: WebhookHandler<UserSendGroupBusinessCardEvent>;
    user_send_group_sticker?: WebhookHandler<UserSendGroupStickerEvent>;
    user_send_group_gif?: WebhookHandler<UserSendGroupGifEvent>;
    user_send_group_file?: WebhookHandler<UserSendGroupFileEvent>;
    widget_interaction_accepted?: WebhookHandler<WidgetInteractionAcceptedEvent>;
    widget_failed_to_sync_user_external_id?: WebhookHandler<WidgetFailedToSyncUserExternalIdEvent>;
    permission_revoked?: WebhookHandler<PermissionRevokedEvent>;
    extension_purchased?: WebhookHandler<ExtensionPurchasedEvent>;
    update_user_info?: WebhookHandler<UpdateUserInfoEvent>;
    shop_has_order?: WebhookHandler<ShopHasOrderEvent>;
    add_user_to_tag?: WebhookHandler<AddUserToTagEvent>;
    user_click_button?: WebhookHandler<UserClickButtonEvent>;
    oa_send_audio?: WebhookHandler<OASendMessageEvent>;
    oa_send_video?: WebhookHandler<OASendMessageEvent>;
    zns_message_status?: WebhookHandler<ZNSMessageStatusEvent>;
    template_status_update?: WebhookHandler<TemplateStatusEvent>;
    group_user_join?: WebhookHandler<GroupUserJoinEvent>;
    group_user_leave?: WebhookHandler<GroupUserLeaveEvent>;
    group_send_text?: WebhookHandler<GroupSendMessageEvent>;
    group_send_image?: WebhookHandler<GroupSendMessageEvent>;
    group_send_sticker?: WebhookHandler<GroupSendMessageEvent>;
    group_send_file?: WebhookHandler<GroupSendMessageEvent>;
    "*"?: WebhookHandler<WebhookEvent>;
}
/**
 * Webhook event names enum
 */
export declare enum WebhookEventName {
    USER_SEND_LOCATION = "user_send_location",
    USER_SEND_IMAGE = "user_send_image",
    USER_SEND_LINK = "user_send_link",
    USER_SEND_TEXT = "user_send_text",
    USER_SEND_STICKER = "user_send_sticker",
    USER_SEND_GIF = "user_send_gif",
    USER_SEND_AUDIO = "user_send_audio",
    USER_SEND_VIDEO = "user_send_video",
    USER_SEND_FILE = "user_send_file",
    USER_RECEIVED_MESSAGE = "user_received_message",
    USER_SEEN_MESSAGE = "user_seen_message",
    FOLLOW = "follow",
    UNFOLLOW = "unfollow",
    USER_SUBMIT_INFO = "user_submit_info",
    OA_SEND_TEXT = "oa_send_text",
    OA_SEND_IMAGE = "oa_send_image",
    OA_SEND_GIF = "oa_send_gif",
    OA_SEND_LIST = "oa_send_list",
    OA_SEND_FILE = "oa_send_file",
    OA_SEND_STICKER = "oa_send_sticker",
    USER_CLICK_CHATNOW = "user_click_chatnow",
    USER_REACTED_MESSAGE = "user_reacted_message",
    USER_REPLY_CONSENT = "user_reply_consent",
    OA_REACTED_MESSAGE = "oa_reacted_message",
    OA_SEND_CONSENT = "oa_send_consent",
    ANONYMOUS_SEND_TEXT = "anonymous_send_text",
    ANONYMOUS_SEND_IMAGE = "anonymous_send_image",
    ANONYMOUS_SEND_FILE = "anonymous_send_file",
    ANONYMOUS_SEND_STICKER = "anonymous_send_sticker",
    OA_SEND_ANONYMOUS_TEXT = "oa_send_anonymous_text",
    OA_SEND_ANONYMOUS_IMAGE = "oa_send_anonymous_image",
    OA_SEND_ANONYMOUS_FILE = "oa_send_anonymous_file",
    OA_SEND_ANONYMOUS_STICKER = "oa_send_anonymous_sticker",
    OA_CALL_USER = "oa_call_user",
    USER_CALL_OA = "user_call_oa",
    OA_SEND_TEMPLATE = "oa_send_template",
    USER_SEND_BUSINESS_CARD = "user_send_business_card",
    USER_FEEDBACK = "user_feedback",
    CHANGE_OA_DAILY_QUOTA = "change_oa_daily_quota",
    CHANGE_OA_TEMPLATE_TAGS = "change_oa_template_tags",
    CHANGE_TEMPLATE_QUALITY = "change_template_quality",
    CHANGE_TEMPLATE_QUOTA = "change_template_quota",
    CHANGE_TEMPLATE_STATUS = "change_template_status",
    EVENT_JOURNEY_TIME_OUT = "event_journey_time_out",
    EVENT_JOURNEY_ACKNOWLEDGED = "event_journey_acknowledged",
    ZNS_USER_RECEIVED_MESSAGE = "user_received_message",
    CREATE_GROUP = "create_group",
    USER_JOIN_GROUP = "user_join_group",
    USER_REQUEST_JOIN_GROUP = "user_request_join_group",
    REACT_REQUEST_JOIN_GROUP = "react_request_join_group",
    REJECT_REQUEST_JOIN_GROUP = "reject_request_join_group",
    ADD_GROUP_ADMIN = "add_group_admin",
    REMOVE_GROUP_ADMIN = "remove_group_admin",
    UPDATE_GROUP_INFO = "update_group_info",
    USER_OUT_GROUP = "user_out_group",
    OA_SEND_GROUP_TEXT = "oa_send_group_text",
    OA_SEND_GROUP_IMAGE = "oa_send_group_image",
    OA_SEND_GROUP_LINK = "oa_send_group_link",
    OA_SEND_GROUP_AUDIO = "oa_send_group_audio",
    OA_SEND_GROUP_LOCATION = "oa_send_group_location",
    OA_SEND_GROUP_VIDEO = "oa_send_group_video",
    OA_SEND_GROUP_BUSINESS_CARD = "oa_send_group_business_card",
    OA_SEND_GROUP_STICKER = "oa_send_group_sticker",
    OA_SEND_GROUP_GIF = "oa_send_group_gif",
    OA_SEND_GROUP_FILE = "oa_send_group_file",
    USER_SEND_GROUP_TEXT = "user_send_group_text",
    USER_SEND_GROUP_LINK = "user_send_group_link",
    USER_SEND_GROUP_AUDIO = "user_send_group_audio",
    USER_SEND_GROUP_LOCATION = "user_send_group_location",
    USER_SEND_GROUP_VIDEO = "user_send_group_video",
    USER_SEND_GROUP_BUSINESS_CARD = "user_send_group_business_card",
    USER_SEND_GROUP_STICKER = "user_send_group_sticker",
    USER_SEND_GROUP_GIF = "user_send_group_gif",
    USER_SEND_GROUP_FILE = "user_send_group_file",
    WIDGET_INTERACTION_ACCEPTED = "widget_interaction_accepted",
    WIDGET_FAILED_TO_SYNC_USER_EXTERNAL_ID = "widget_failed_to_sync_user_external_id",
    PERMISSION_REVOKED = "permission_revoked",
    EXTENSION_PURCHASED = "extension_purchased",
    UPDATE_USER_INFO = "update_user_info",
    SHOP_HAS_ORDER = "shop_has_order",
    ADD_USER_TO_TAG = "add_user_to_tag"
}
/**
 * Attachment types enum
 */
export declare enum AttachmentType {
    LOCATION = "location",
    IMAGE = "image",
    LINK = "link",
    STICKER = "sticker",
    GIF = "gif",
    AUDIO = "audio",
    VIDEO = "video",
    FILE = "file"
}
/**
 * Type guard to check if event is a message event
 */
export declare function isMessageEvent(event: WebhookEvent): event is MessageWebhookEvent;
/**
 * Type guard to check if event is a follow/unfollow event
 */
export declare function isFollowEvent(event: WebhookEvent): event is UserFollowEvent | UserUnfollowEvent;
/**
 * Type guard to check if event is a user action event
 */
export declare function isUserActionEvent(event: WebhookEvent): event is UserActionWebhookEvent;
/**
 * Type guard to check if event is a shop event
 */
export declare function isShopEvent(event: WebhookEvent): event is ShopWebhookEvent;
/**
 * Type guard to check if event is an OA message event
 */
export declare function isOAMessageEvent(event: WebhookEvent): event is OAMessageWebhookEvent;
/**
 * Type guard to check if event is an anonymous user event
 */
export declare function isAnonymousEvent(event: WebhookEvent): event is AnonymousWebhookEvent;
/**
 * Type guard to check if event is a call event
 */
export declare function isCallEvent(event: WebhookEvent): event is CallWebhookEvent;
/**
 * Type guard to check if event is a template event
 */
export declare function isTemplateEvent(event: WebhookEvent): event is OASendTemplateEvent;
/**
 * Type guard to check if event is a business card event
 */
export declare function isBusinessCardEvent(event: WebhookEvent): event is UserSendBusinessCardEvent;
/**
 * Type guard to check if event is a feedback event
 */
export declare function isFeedbackEvent(event: WebhookEvent): event is UserFeedbackEvent;
/**
 * Type guard to check if event is a ZNS event
 */
export declare function isZNSEvent(event: WebhookEvent): event is ZNSWebhookEvent;
/**
 * Type guard to check if event is a group event
 */
export declare function isGroupEvent(event: WebhookEvent): event is GroupWebhookEvent;
/**
 * Type guard to check if event is a journey event
 */
export declare function isJourneyEvent(event: WebhookEvent): event is JourneyTimeoutEvent | JourneyAcknowledgedEvent;
/**
 * Type guard to check if event is a quota/template change event
 */
export declare function isQuotaTemplateEvent(event: WebhookEvent): event is ChangeOADailyQuotaEvent | ChangeOATemplateTagsEvent | ChangeTemplateQualityEvent | ChangeTemplateQuotaEvent | ChangeTemplateStatusEvent;
/**
 * Type guard to check if event is a widget event
 */
export declare function isWidgetEvent(event: WebhookEvent): event is WidgetWebhookEvent;
/**
 * Type guard to check if event is a system event
 */
export declare function isSystemEvent(event: WebhookEvent): event is SystemWebhookEvent;
/**
 * Type guard to check if event is a permission event
 */
export declare function isPermissionEvent(event: WebhookEvent): event is PermissionRevokedEvent;
/**
 * Type guard to check if event is an extension event
 */
export declare function isExtensionEvent(event: WebhookEvent): event is ExtensionPurchasedEvent;
/**
 * Type guard to check if event is an update user info event
 */
export declare function isUpdateUserInfoEvent(event: WebhookEvent): event is UpdateUserInfoEvent;
/**
 * Type guard to check if event is a reaction event
 */
export declare function isReactionEvent(event: WebhookEvent): event is UserReactedMessageEvent | OAReactedMessageEvent;
/**
 * Type guard to check if event is a consent event
 */
export declare function isConsentEvent(event: WebhookEvent): event is OASendConsentEvent | UserReplyConsentEvent;
/**
 * Type guard to check if message has attachments
 */
export declare function hasAttachments(message: WebhookBaseMessage): message is WebhookMessageWithAttachments;
//# sourceMappingURL=webhook.d.ts.map