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