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

1,799 lines 59.4 kB
/** * 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 image event */ export interface UserSendGroupImageEvent extends BaseWebhookEvent { event_name: "user_send_group_image"; /** Official Account ID */ oa_id: string; sender: WebhookSender; recipient: WebhookRecipient; message: WebhookMessageWithAttachments & { attachments: Array<MessageAttachment & { type: "image"; payload: ImagePayload; }>; }; } /** * 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 | UserSendGroupImageEvent | 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_image?: WebhookHandler<UserSendGroupImageEvent>; 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<OASendMessageEv