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

530 lines 20.9 kB
"use strict"; /** * Types for Zalo Webhook Events * Based on Zalo Official Account Webhook API */ Object.defineProperty(exports, "__esModule", { value: true }); exports.AttachmentType = exports.WebhookEventName = void 0; exports.isMessageEvent = isMessageEvent; exports.isFollowEvent = isFollowEvent; exports.isUserActionEvent = isUserActionEvent; exports.isShopEvent = isShopEvent; exports.isOAMessageEvent = isOAMessageEvent; exports.isAnonymousEvent = isAnonymousEvent; exports.isCallEvent = isCallEvent; exports.isTemplateEvent = isTemplateEvent; exports.isBusinessCardEvent = isBusinessCardEvent; exports.isFeedbackEvent = isFeedbackEvent; exports.isZNSEvent = isZNSEvent; exports.isGroupEvent = isGroupEvent; exports.isJourneyEvent = isJourneyEvent; exports.isQuotaTemplateEvent = isQuotaTemplateEvent; exports.isWidgetEvent = isWidgetEvent; exports.isSystemEvent = isSystemEvent; exports.isPermissionEvent = isPermissionEvent; exports.isExtensionEvent = isExtensionEvent; exports.isUpdateUserInfoEvent = isUpdateUserInfoEvent; exports.isReactionEvent = isReactionEvent; exports.isConsentEvent = isConsentEvent; exports.hasAttachments = hasAttachments; exports.isUserMessageEvent = isUserMessageEvent; exports.isGroupMessageEvent = isGroupMessageEvent; exports.isOAToUserMessageEvent = isOAToUserMessageEvent; exports.isOAToGroupMessageEvent = isOAToGroupMessageEvent; exports.getMessageDirection = getMessageDirection; // ==================== EVENT NAME ENUMS ==================== /** * Webhook event names enum */ var WebhookEventName; (function (WebhookEventName) { // User message events WebhookEventName["USER_SEND_LOCATION"] = "user_send_location"; WebhookEventName["USER_SEND_IMAGE"] = "user_send_image"; WebhookEventName["USER_SEND_LINK"] = "user_send_link"; WebhookEventName["USER_SEND_TEXT"] = "user_send_text"; WebhookEventName["USER_SEND_STICKER"] = "user_send_sticker"; WebhookEventName["USER_SEND_GIF"] = "user_send_gif"; WebhookEventName["USER_SEND_AUDIO"] = "user_send_audio"; WebhookEventName["USER_SEND_VIDEO"] = "user_send_video"; WebhookEventName["USER_SEND_FILE"] = "user_send_file"; WebhookEventName["USER_RECEIVED_MESSAGE"] = "user_received_message"; WebhookEventName["USER_SEEN_MESSAGE"] = "user_seen_message"; // User action events WebhookEventName["FOLLOW"] = "follow"; WebhookEventName["UNFOLLOW"] = "unfollow"; WebhookEventName["USER_SUBMIT_INFO"] = "user_submit_info"; // OA message events WebhookEventName["OA_SEND_TEXT"] = "oa_send_text"; WebhookEventName["OA_SEND_IMAGE"] = "oa_send_image"; WebhookEventName["OA_SEND_GIF"] = "oa_send_gif"; WebhookEventName["OA_SEND_LIST"] = "oa_send_list"; WebhookEventName["OA_SEND_FILE"] = "oa_send_file"; WebhookEventName["OA_SEND_STICKER"] = "oa_send_sticker"; // User interaction events WebhookEventName["USER_CLICK_CHATNOW"] = "user_click_chatnow"; WebhookEventName["USER_REACTED_MESSAGE"] = "user_reacted_message"; WebhookEventName["USER_REPLY_CONSENT"] = "user_reply_consent"; // OA interaction events WebhookEventName["OA_REACTED_MESSAGE"] = "oa_reacted_message"; WebhookEventName["OA_SEND_CONSENT"] = "oa_send_consent"; // Anonymous user events WebhookEventName["ANONYMOUS_SEND_TEXT"] = "anonymous_send_text"; WebhookEventName["ANONYMOUS_SEND_IMAGE"] = "anonymous_send_image"; WebhookEventName["ANONYMOUS_SEND_FILE"] = "anonymous_send_file"; WebhookEventName["ANONYMOUS_SEND_STICKER"] = "anonymous_send_sticker"; // OA anonymous events WebhookEventName["OA_SEND_ANONYMOUS_TEXT"] = "oa_send_anonymous_text"; WebhookEventName["OA_SEND_ANONYMOUS_IMAGE"] = "oa_send_anonymous_image"; WebhookEventName["OA_SEND_ANONYMOUS_FILE"] = "oa_send_anonymous_file"; WebhookEventName["OA_SEND_ANONYMOUS_STICKER"] = "oa_send_anonymous_sticker"; // Call events WebhookEventName["OA_CALL_USER"] = "oa_call_user"; WebhookEventName["USER_CALL_OA"] = "user_call_oa"; // Template and business card events WebhookEventName["OA_SEND_TEMPLATE"] = "oa_send_template"; WebhookEventName["USER_SEND_BUSINESS_CARD"] = "user_send_business_card"; // Feedback events WebhookEventName["USER_FEEDBACK"] = "user_feedback"; // ZNS events WebhookEventName["CHANGE_OA_DAILY_QUOTA"] = "change_oa_daily_quota"; WebhookEventName["CHANGE_OA_TEMPLATE_TAGS"] = "change_oa_template_tags"; WebhookEventName["CHANGE_TEMPLATE_QUALITY"] = "change_template_quality"; WebhookEventName["CHANGE_TEMPLATE_QUOTA"] = "change_template_quota"; WebhookEventName["CHANGE_TEMPLATE_STATUS"] = "change_template_status"; WebhookEventName["EVENT_JOURNEY_TIME_OUT"] = "event_journey_time_out"; WebhookEventName["EVENT_JOURNEY_ACKNOWLEDGED"] = "event_journey_acknowledged"; WebhookEventName["ZNS_USER_RECEIVED_MESSAGE"] = "user_received_message"; // Group events WebhookEventName["CREATE_GROUP"] = "create_group"; WebhookEventName["USER_JOIN_GROUP"] = "user_join_group"; WebhookEventName["USER_REQUEST_JOIN_GROUP"] = "user_request_join_group"; WebhookEventName["REACT_REQUEST_JOIN_GROUP"] = "react_request_join_group"; WebhookEventName["REJECT_REQUEST_JOIN_GROUP"] = "reject_request_join_group"; WebhookEventName["ADD_GROUP_ADMIN"] = "add_group_admin"; WebhookEventName["REMOVE_GROUP_ADMIN"] = "remove_group_admin"; WebhookEventName["UPDATE_GROUP_INFO"] = "update_group_info"; WebhookEventName["USER_OUT_GROUP"] = "user_out_group"; WebhookEventName["OA_SEND_GROUP_TEXT"] = "oa_send_group_text"; WebhookEventName["OA_SEND_GROUP_IMAGE"] = "oa_send_group_image"; WebhookEventName["OA_SEND_GROUP_LINK"] = "oa_send_group_link"; WebhookEventName["OA_SEND_GROUP_AUDIO"] = "oa_send_group_audio"; WebhookEventName["OA_SEND_GROUP_LOCATION"] = "oa_send_group_location"; WebhookEventName["OA_SEND_GROUP_VIDEO"] = "oa_send_group_video"; WebhookEventName["OA_SEND_GROUP_BUSINESS_CARD"] = "oa_send_group_business_card"; WebhookEventName["OA_SEND_GROUP_STICKER"] = "oa_send_group_sticker"; WebhookEventName["OA_SEND_GROUP_GIF"] = "oa_send_group_gif"; WebhookEventName["OA_SEND_GROUP_FILE"] = "oa_send_group_file"; WebhookEventName["USER_SEND_GROUP_TEXT"] = "user_send_group_text"; WebhookEventName["USER_SEND_GROUP_IMAGE"] = "user_send_group_image"; WebhookEventName["USER_SEND_GROUP_LINK"] = "user_send_group_link"; WebhookEventName["USER_SEND_GROUP_AUDIO"] = "user_send_group_audio"; WebhookEventName["USER_SEND_GROUP_LOCATION"] = "user_send_group_location"; WebhookEventName["USER_SEND_GROUP_VIDEO"] = "user_send_group_video"; WebhookEventName["USER_SEND_GROUP_BUSINESS_CARD"] = "user_send_group_business_card"; WebhookEventName["USER_SEND_GROUP_STICKER"] = "user_send_group_sticker"; WebhookEventName["USER_SEND_GROUP_GIF"] = "user_send_group_gif"; WebhookEventName["USER_SEND_GROUP_FILE"] = "user_send_group_file"; // Widget events WebhookEventName["WIDGET_INTERACTION_ACCEPTED"] = "widget_interaction_accepted"; WebhookEventName["WIDGET_FAILED_TO_SYNC_USER_EXTERNAL_ID"] = "widget_failed_to_sync_user_external_id"; // System events WebhookEventName["PERMISSION_REVOKED"] = "permission_revoked"; WebhookEventName["EXTENSION_PURCHASED"] = "extension_purchased"; WebhookEventName["UPDATE_USER_INFO"] = "update_user_info"; // Shop events WebhookEventName["SHOP_HAS_ORDER"] = "shop_has_order"; // Legacy system events WebhookEventName["ADD_USER_TO_TAG"] = "add_user_to_tag"; })(WebhookEventName || (exports.WebhookEventName = WebhookEventName = {})); /** * Attachment types enum */ var AttachmentType; (function (AttachmentType) { AttachmentType["LOCATION"] = "location"; AttachmentType["IMAGE"] = "image"; AttachmentType["LINK"] = "link"; AttachmentType["STICKER"] = "sticker"; AttachmentType["GIF"] = "gif"; AttachmentType["AUDIO"] = "audio"; AttachmentType["VIDEO"] = "video"; AttachmentType["FILE"] = "file"; })(AttachmentType || (exports.AttachmentType = AttachmentType = {})); // ==================== UTILITY TYPES ==================== /** * Type guard to check if event is a message event */ function isMessageEvent(event) { return [ WebhookEventName.USER_SEND_LOCATION, WebhookEventName.USER_SEND_IMAGE, WebhookEventName.USER_SEND_LINK, WebhookEventName.USER_SEND_TEXT, WebhookEventName.USER_SEND_STICKER, WebhookEventName.USER_SEND_GIF, WebhookEventName.USER_SEND_AUDIO, WebhookEventName.USER_SEND_VIDEO, WebhookEventName.USER_SEND_FILE, WebhookEventName.USER_RECEIVED_MESSAGE, WebhookEventName.USER_SEEN_MESSAGE, WebhookEventName.OA_SEND_TEXT, WebhookEventName.OA_SEND_IMAGE, WebhookEventName.OA_SEND_GIF, WebhookEventName.OA_SEND_LIST, WebhookEventName.OA_SEND_FILE, WebhookEventName.OA_SEND_STICKER, WebhookEventName.OA_SEND_ANONYMOUS_TEXT, WebhookEventName.OA_SEND_ANONYMOUS_IMAGE, WebhookEventName.OA_SEND_ANONYMOUS_FILE, WebhookEventName.OA_SEND_ANONYMOUS_STICKER, WebhookEventName.OA_SEND_TEMPLATE, WebhookEventName.ANONYMOUS_SEND_TEXT, WebhookEventName.ANONYMOUS_SEND_IMAGE, WebhookEventName.ANONYMOUS_SEND_FILE, WebhookEventName.ANONYMOUS_SEND_STICKER, WebhookEventName.USER_SEND_BUSINESS_CARD, WebhookEventName.OA_SEND_GROUP_TEXT, WebhookEventName.OA_SEND_GROUP_IMAGE, WebhookEventName.OA_SEND_GROUP_LINK, WebhookEventName.OA_SEND_GROUP_AUDIO, WebhookEventName.OA_SEND_GROUP_LOCATION, WebhookEventName.OA_SEND_GROUP_VIDEO, WebhookEventName.OA_SEND_GROUP_BUSINESS_CARD, WebhookEventName.OA_SEND_GROUP_STICKER, WebhookEventName.OA_SEND_GROUP_GIF, WebhookEventName.OA_SEND_GROUP_FILE, WebhookEventName.USER_SEND_GROUP_TEXT, WebhookEventName.USER_SEND_GROUP_LINK, WebhookEventName.USER_SEND_GROUP_AUDIO, WebhookEventName.USER_SEND_GROUP_LOCATION, WebhookEventName.USER_SEND_GROUP_VIDEO, WebhookEventName.USER_SEND_GROUP_BUSINESS_CARD, WebhookEventName.USER_SEND_GROUP_STICKER, WebhookEventName.USER_SEND_GROUP_GIF, WebhookEventName.USER_SEND_GROUP_FILE, ].includes(event.event_name); } /** * Type guard to check if event is a follow/unfollow event */ function isFollowEvent(event) { return [WebhookEventName.FOLLOW, WebhookEventName.UNFOLLOW].includes(event.event_name); } /** * Type guard to check if event is a user action event */ function isUserActionEvent(event) { return [ WebhookEventName.FOLLOW, WebhookEventName.UNFOLLOW, WebhookEventName.USER_SUBMIT_INFO, WebhookEventName.USER_CLICK_CHATNOW, WebhookEventName.USER_REACTED_MESSAGE, WebhookEventName.USER_REPLY_CONSENT, WebhookEventName.USER_SEND_BUSINESS_CARD, WebhookEventName.USER_FEEDBACK, ].includes(event.event_name); } /** * Type guard to check if event is a shop event */ function isShopEvent(event) { return event.event_name === WebhookEventName.SHOP_HAS_ORDER; } /** * Type guard to check if event is an OA message event */ function isOAMessageEvent(event) { return [ WebhookEventName.OA_SEND_TEXT, WebhookEventName.OA_SEND_IMAGE, WebhookEventName.OA_SEND_GIF, WebhookEventName.OA_SEND_LIST, WebhookEventName.OA_SEND_FILE, WebhookEventName.OA_SEND_STICKER, WebhookEventName.OA_SEND_ANONYMOUS_TEXT, WebhookEventName.OA_SEND_ANONYMOUS_IMAGE, WebhookEventName.OA_SEND_ANONYMOUS_FILE, WebhookEventName.OA_SEND_ANONYMOUS_STICKER, WebhookEventName.OA_SEND_TEMPLATE, ].includes(event.event_name); } /** * Type guard to check if event is an anonymous user event */ function isAnonymousEvent(event) { return [ WebhookEventName.ANONYMOUS_SEND_TEXT, WebhookEventName.ANONYMOUS_SEND_IMAGE, WebhookEventName.ANONYMOUS_SEND_FILE, WebhookEventName.ANONYMOUS_SEND_STICKER, ].includes(event.event_name); } /** * Type guard to check if event is a call event */ function isCallEvent(event) { return [ WebhookEventName.OA_CALL_USER, WebhookEventName.USER_CALL_OA, ].includes(event.event_name); } /** * Type guard to check if event is a template event */ function isTemplateEvent(event) { return event.event_name === WebhookEventName.OA_SEND_TEMPLATE; } /** * Type guard to check if event is a business card event */ function isBusinessCardEvent(event) { return event.event_name === WebhookEventName.USER_SEND_BUSINESS_CARD; } /** * Type guard to check if event is a feedback event */ function isFeedbackEvent(event) { return event.event_name === WebhookEventName.USER_FEEDBACK; } /** * Type guard to check if event is a ZNS event */ function isZNSEvent(event) { return [ WebhookEventName.CHANGE_OA_DAILY_QUOTA, WebhookEventName.CHANGE_OA_TEMPLATE_TAGS, WebhookEventName.CHANGE_TEMPLATE_QUALITY, WebhookEventName.CHANGE_TEMPLATE_QUOTA, WebhookEventName.CHANGE_TEMPLATE_STATUS, WebhookEventName.EVENT_JOURNEY_TIME_OUT, WebhookEventName.EVENT_JOURNEY_ACKNOWLEDGED, WebhookEventName.ZNS_USER_RECEIVED_MESSAGE, ].includes(event.event_name); } /** * Type guard to check if event is a group event */ function isGroupEvent(event) { return [ WebhookEventName.CREATE_GROUP, WebhookEventName.USER_JOIN_GROUP, WebhookEventName.USER_REQUEST_JOIN_GROUP, WebhookEventName.REACT_REQUEST_JOIN_GROUP, WebhookEventName.REJECT_REQUEST_JOIN_GROUP, WebhookEventName.ADD_GROUP_ADMIN, WebhookEventName.REMOVE_GROUP_ADMIN, WebhookEventName.UPDATE_GROUP_INFO, WebhookEventName.USER_OUT_GROUP, WebhookEventName.OA_SEND_GROUP_TEXT, WebhookEventName.OA_SEND_GROUP_IMAGE, WebhookEventName.OA_SEND_GROUP_LINK, WebhookEventName.OA_SEND_GROUP_AUDIO, WebhookEventName.OA_SEND_GROUP_LOCATION, WebhookEventName.OA_SEND_GROUP_VIDEO, WebhookEventName.OA_SEND_GROUP_BUSINESS_CARD, WebhookEventName.OA_SEND_GROUP_STICKER, WebhookEventName.OA_SEND_GROUP_GIF, WebhookEventName.OA_SEND_GROUP_FILE, WebhookEventName.USER_SEND_GROUP_TEXT, WebhookEventName.USER_SEND_GROUP_LINK, WebhookEventName.USER_SEND_GROUP_AUDIO, WebhookEventName.USER_SEND_GROUP_LOCATION, WebhookEventName.USER_SEND_GROUP_VIDEO, WebhookEventName.USER_SEND_GROUP_BUSINESS_CARD, WebhookEventName.USER_SEND_GROUP_STICKER, WebhookEventName.USER_SEND_GROUP_GIF, WebhookEventName.USER_SEND_GROUP_FILE, ].includes(event.event_name); } /** * Type guard to check if event is a journey event */ function isJourneyEvent(event) { return [ WebhookEventName.EVENT_JOURNEY_TIME_OUT, WebhookEventName.EVENT_JOURNEY_ACKNOWLEDGED, ].includes(event.event_name); } /** * Type guard to check if event is a quota/template change event */ function isQuotaTemplateEvent(event) { return [ WebhookEventName.CHANGE_OA_DAILY_QUOTA, WebhookEventName.CHANGE_OA_TEMPLATE_TAGS, WebhookEventName.CHANGE_TEMPLATE_QUALITY, WebhookEventName.CHANGE_TEMPLATE_QUOTA, WebhookEventName.CHANGE_TEMPLATE_STATUS, ].includes(event.event_name); } /** * Type guard to check if event is a widget event */ function isWidgetEvent(event) { return [ WebhookEventName.WIDGET_INTERACTION_ACCEPTED, WebhookEventName.WIDGET_FAILED_TO_SYNC_USER_EXTERNAL_ID, ].includes(event.event_name); } /** * Type guard to check if event is a system event */ function isSystemEvent(event) { return [ WebhookEventName.ADD_USER_TO_TAG, WebhookEventName.PERMISSION_REVOKED, WebhookEventName.EXTENSION_PURCHASED, WebhookEventName.UPDATE_USER_INFO, ].includes(event.event_name); } /** * Type guard to check if event is a permission event */ function isPermissionEvent(event) { return event.event_name === WebhookEventName.PERMISSION_REVOKED; } /** * Type guard to check if event is an extension event */ function isExtensionEvent(event) { return event.event_name === WebhookEventName.EXTENSION_PURCHASED; } /** * Type guard to check if event is an update user info event */ function isUpdateUserInfoEvent(event) { return event.event_name === WebhookEventName.UPDATE_USER_INFO; } /** * Type guard to check if event is a reaction event */ function isReactionEvent(event) { return [ WebhookEventName.USER_REACTED_MESSAGE, WebhookEventName.OA_REACTED_MESSAGE, ].includes(event.event_name); } /** * Type guard to check if event is a consent event */ function isConsentEvent(event) { return [ WebhookEventName.OA_SEND_CONSENT, WebhookEventName.USER_REPLY_CONSENT, ].includes(event.event_name); } /** * Type guard to check if message has attachments */ function hasAttachments(message) { return ("attachments" in message && Array.isArray(message.attachments)); } // ==================== MESSAGE DIRECTION & TARGET TYPE GUARDS ==================== /** * Type guard to check if event is a user message (from individual user to OA) */ function isUserMessageEvent(event) { return [ WebhookEventName.USER_SEND_LOCATION, WebhookEventName.USER_SEND_IMAGE, WebhookEventName.USER_SEND_LINK, WebhookEventName.USER_SEND_TEXT, WebhookEventName.USER_SEND_STICKER, WebhookEventName.USER_SEND_GIF, WebhookEventName.USER_SEND_AUDIO, WebhookEventName.USER_SEND_VIDEO, WebhookEventName.USER_SEND_FILE, WebhookEventName.USER_RECEIVED_MESSAGE, WebhookEventName.USER_SEEN_MESSAGE, WebhookEventName.USER_SEND_BUSINESS_CARD, ].includes(event.event_name); } /** * Type guard to check if event is a group message (from user in group) */ function isGroupMessageEvent(event) { return [ WebhookEventName.USER_SEND_GROUP_TEXT, WebhookEventName.USER_SEND_GROUP_LINK, WebhookEventName.USER_SEND_GROUP_AUDIO, WebhookEventName.USER_SEND_GROUP_LOCATION, WebhookEventName.USER_SEND_GROUP_VIDEO, WebhookEventName.USER_SEND_GROUP_BUSINESS_CARD, WebhookEventName.USER_SEND_GROUP_STICKER, WebhookEventName.USER_SEND_GROUP_GIF, WebhookEventName.USER_SEND_GROUP_FILE, ].includes(event.event_name); } /** * Type guard to check if event is OA sending message to individual user */ function isOAToUserMessageEvent(event) { return [ WebhookEventName.OA_SEND_TEXT, WebhookEventName.OA_SEND_IMAGE, WebhookEventName.OA_SEND_GIF, WebhookEventName.OA_SEND_LIST, WebhookEventName.OA_SEND_FILE, WebhookEventName.OA_SEND_STICKER, WebhookEventName.OA_SEND_TEMPLATE, ].includes(event.event_name); } /** * Type guard to check if event is OA sending message to group */ function isOAToGroupMessageEvent(event) { return [ WebhookEventName.OA_SEND_GROUP_TEXT, WebhookEventName.OA_SEND_GROUP_IMAGE, WebhookEventName.OA_SEND_GROUP_LINK, WebhookEventName.OA_SEND_GROUP_AUDIO, WebhookEventName.OA_SEND_GROUP_LOCATION, WebhookEventName.OA_SEND_GROUP_VIDEO, WebhookEventName.OA_SEND_GROUP_BUSINESS_CARD, WebhookEventName.OA_SEND_GROUP_STICKER, WebhookEventName.OA_SEND_GROUP_GIF, WebhookEventName.OA_SEND_GROUP_FILE, ].includes(event.event_name); } /** * Helper function to get message direction and target type */ function getMessageDirection(event) { if (isUserMessageEvent(event)) { return { direction: 'incoming', target: 'user', description: 'Tin nhắn từ người dùng cá nhân gửi tới OA' }; } if (isGroupMessageEvent(event)) { return { direction: 'incoming', target: 'group', description: 'Tin nhắn từ người dùng trong group' }; } if (isOAToUserMessageEvent(event)) { return { direction: 'outgoing', target: 'user', description: 'Tin nhắn từ OA gửi tới người dùng cá nhân' }; } if (isOAToGroupMessageEvent(event)) { return { direction: 'outgoing', target: 'group', description: 'Tin nhắn từ OA gửi tới group' }; } return { direction: 'unknown', target: 'unknown', description: 'Loại sự kiện không xác định' }; } //# sourceMappingURL=webhook.js.map