UNPKG

crisp-api

Version:

Crisp API wrapper for Node - official, maintained by Crisp

677 lines (676 loc) 22.8 kB
/************************************************************************** * IMPORTS ***************************************************************************/ import BaseResource from "./BaseResource"; /************************************************************************** * TYPES + INTERFACES ***************************************************************************/ export interface Conversation { session_id: string; website_id: string; inbox_id?: string; people_id?: string; state?: ConversationState; status?: number; is_verified?: boolean; is_blocked?: boolean; availability?: string; active?: ConversationActive; last_message?: string; preview_message?: ConversationPreviewMessage; topic?: string; verifications?: ConversationVerification[]; participants?: ConversationParticipant[]; mentions?: string[]; compose?: ConversationCompose; unread?: ConversationUnread; assigned?: ConversationAssigned; meta?: ConversationMeta; created_at?: number; updated_at?: number; waiting_since?: number; } type ConversationNew = { session_id?: string; }; export interface ConversationActive { now?: boolean; last?: number; } export interface ConversationPreviewMessage { type?: string; from?: string; excerpt?: string; fingerprint?: number; } export interface ConversationCompose { operator?: ConversationComposeAtom; visitor?: ConversationComposeAtom; } export interface ConversationComposeAtom { type?: string; excerpt?: string; timestamp?: number; user?: ConversationComposeAtomUser; automated?: boolean; } export interface ConversationComposeAtomUser { user_id?: string; nickname?: string; avatar?: string; } export interface ConversationUnread { operator?: number; visitor?: number; } export interface ConversationAssigned { user_id?: string; } export interface ConversationVerification { identity?: string; method?: string; annotation?: string; } export interface ConversationParticipant { type?: string; target?: string; } export interface ConversationParticipants { participants?: ConversationParticipant[]; } export interface ConversationParticipantsSave { participants?: ConversationParticipant[]; } export interface ConversationMeta { nickname?: string; email?: string; phone?: string; ip?: string; avatar?: string; data?: Record<string, string | boolean | number>; connection?: ConnectionInfo; device?: DeviceInfo; segments?: string[]; address?: string; subject?: string; origin?: string; } export interface ConnectionInfo { isp?: string; asn?: string; } export interface DeviceInfo { capabilities?: string[]; geolocation?: GeolocationInfo; system?: SystemInfo; timezone?: number; locales?: string[]; } export interface GeolocationInfo { country?: string; region?: string; city?: string; coordinates?: Coordinates; } export interface Coordinates { latitude?: number; longitude?: number; } export interface SystemInfo { os?: OSInfo; engine?: EngineInfo; browser?: BrowserInfo; useragent?: string; } export interface OSInfo { version?: string; name?: string; } export interface EngineInfo { name?: string; version?: string; } export interface BrowserInfo { major?: string; version?: string; name?: string; } export type ConversationMessageType = "text" | "file" | "animation" | "audio" | "carousel" | "note" | "picker" | "field" | "event"; export type ConversationState = "pending" | "unresolved" | "resolved"; export type ConversationMessageContent = (string | ConversationFileMessageContent | ConversationAnimationMessageContent | ConversationAudioMessageContent | ConversationPickerMessageContent | ConversationFieldMessageContent | ConversationCarouselMessageContent | ConversationEventMessageContent); export interface ConversationMessage { session_id?: string; website_id?: string; type?: ConversationMessageType; from?: string; origin?: string; content?: ConversationMessageContent; preview?: ConversationMessagePreview[]; mentions?: string[]; read?: string; delivered?: string; ignored?: Record<string, ConversationMessageIgnored>; edited?: boolean; translated?: boolean; automated?: boolean; stamped?: boolean; fingerprint?: number; timestamp?: number; user?: ConversationMessageUser; references?: ConversationMessageReference[]; original?: ConversationMessageOriginal; } export interface ConversationFileMessageContent { name?: string; url?: string; type?: string; } export interface ConversationAnimationMessageContent { url?: string; type?: string; } export interface ConversationAudioMessageContent { url?: string; type?: string; duration?: number; } export interface ConversationPickerMessageContent { id?: string; text?: string; choices?: ConversationPickerMessageContentChoice[]; required?: boolean; } export interface ConversationPickerMessageContentChoice { value?: string; icon?: string; label?: string; selected?: boolean; action?: ConversationPickerMessageContentChoiceAction; } export interface ConversationPickerMessageContentChoiceAction { type?: string; target?: string; } export interface ConversationFieldMessageContent { id?: string; text?: string; explain?: string; value?: string; required?: boolean; } export interface ConversationCarouselMessageContent { text?: string; targets?: ConversationCarouselMessageContentTarget[]; } export interface ConversationCarouselMessageContentTarget { title?: string; description?: string; image?: string; actions?: ConversationCarouselMessageContentTargetAction[]; } export interface ConversationCarouselMessageContentTargetAction { label?: string; url?: string; } export interface ConversationEventMessageContent { namespace?: string; text?: string; } export interface ConversationMessagePreview { url?: string; website?: string; title?: string; preview?: ConversationMessagePreviewInformation; stamped?: boolean; } export interface ConversationMessagePreviewInformation { excerpt?: string; image?: string; embed?: string; } export interface ConversationMessageIgnored { type?: string; reason?: string; } export interface ConversationMessageUser { type?: string; user_id?: string; nickname?: string; avatar?: string; } export interface ConversationMessageReference { type?: string; name?: string; target?: string; } export interface ConversationMessageOriginal { original_id?: string; } export type ConversationMessageNew = ConversationTextMessageNew | ConversationNoteMessageNew | ConversationFileMessageNew | ConversationAnimationMessageNew | ConversationAudioMessageNew | ConversationPickerMessageNew | ConversationFieldMessageNew | ConversationCarouselMessageNew | ConversationEventMessageNew; export interface ConversationMessageNewBase { type: ConversationMessageType; from: string; origin: string; content: unknown; fingerprint?: number; user?: ConversationMessageUser; references?: ConversationMessageReference[]; original?: ConversationMessageOriginal; timestamp?: number; stealth?: boolean; translated?: boolean; automated?: boolean; } export interface ConversationTextMessageNew extends ConversationMessageNewBase { type: "text" | "note"; content: string; } export interface ConversationNoteMessageNew extends ConversationTextMessageNew { type: "note"; mentions?: string[]; } export interface ConversationFileMessageNew extends ConversationMessageNewBase { type: "file"; content: ConversationFileMessageContent; } export interface ConversationAnimationMessageNew extends ConversationMessageNewBase { type: "animation"; content: ConversationAnimationMessageContent; } export interface ConversationAudioMessageNew extends ConversationMessageNewBase { type: "audio"; content: ConversationAudioMessageContent; } export interface ConversationPickerMessageNew extends ConversationMessageNewBase { type: "picker"; content: ConversationPickerMessageContent; } export interface ConversationFieldMessageNew extends ConversationMessageNewBase { type: "field"; content: ConversationFieldMessageContent; } export interface ConversationCarouselMessageNew extends ConversationMessageNewBase { type: "carousel"; content: ConversationCarouselMessageContent; } export interface ConversationEventMessageNew extends ConversationMessageNewBase { type: "event"; content: ConversationEventMessageContent; } export interface ConversationComposeMessageNew { type: "start" | "stop"; from: string; excerpt?: string; stealth?: boolean; automated?: boolean; } export interface ConversationSuggestedSegment { segment?: string; count?: number; } export interface ConversationSuggestedData { key?: string; count?: number; } export interface ConversationSpam { spam_id?: string; type?: string; reason?: string; metadata?: Record<string, unknown>; headers?: Record<string, unknown>; timestamp?: number; } export interface ConversationSpamContent extends ConversationSpam { content?: Record<string, unknown>; } export interface ConversationReadMessageMark { from?: string; origin?: string; fingerprints?: number[]; } export interface ConversationUnreadMessageMark { from?: string; } export interface ConversationRoutingAssignUpdate { assigned?: ConversationRoutingAssignUpdateAssigned; silent?: boolean; } export interface ConversationRoutingAssignUpdateAssigned { user_id?: string; } export interface ConversationOriginal { website_id?: string; session_id?: string; original_id?: string; type?: string; headers?: Record<string, any>; content?: string; timestamp?: number; } export interface ConversationPage { page_title?: string; page_url?: string; page_referrer?: string; timestamp?: number; } export interface ConversationEvent { text?: string; data?: Record<string, any>; color?: string; timestamp?: number; } export interface ConversationFile { name?: string; type?: string; url?: string; fingerprint?: number; timestamp?: number; } export interface ConversationStateData { state?: ConversationState; } export interface ConversationBlock { blocked?: boolean; } export interface ConversationVerify { verified?: boolean; verifications?: ConversationVerification[]; } export type ConversationVerifyIdentity = "email" | "phone" | `urn:${string}`; export type ConversationVerifyMethod = "link"; export interface ConversationVerifyIdentityRequest { identity?: ConversationVerifyIdentity; method?: ConversationVerifyMethod; recipient?: string; } export interface ConversationVerifyIdentityRedeem { identity?: ConversationVerifyIdentity; token?: string; recipient?: string; } export interface ConversationBrowsing { browsing_id?: string; browsing_token?: string; useragent?: string; } export interface ConversationCall { call_id?: string; } export interface BaseConversationsListOptions { per_page?: number; include_empty?: 0 | 1; filter_inbox_id?: string; filter_unread?: 0 | 1; filter_resolved?: 0 | 1; filter_not_resolved?: 0 | 1; filter_mention?: 0 | 1; filter_assigned?: string; filter_unassigned?: 0 | 1; filter_date_start?: string; filter_date_end?: string; order_date_created?: 0 | 1; order_date_updated?: 0 | 1; order_date_waiting?: 0 | 1; } export interface StandardSearchOptions extends BaseConversationsListOptions { search_type: "text" | "segment"; search_query: string; search_operator?: never; } export interface FilterSearchOptions extends BaseConversationsListOptions { search_type: "filter"; search_query: FilterSearchQuery[]; search_operator?: "and" | "or"; } export interface FilterSearchQuery { criterion: string; query: string[]; model: string; operator: string; } export type ConversationsListOptions = BaseConversationsListOptions | StandardSearchOptions | FilterSearchOptions; /************************************************************************** * CLASSES ***************************************************************************/ /** * Crisp WebsiteConversation Resource * @class */ declare class WebsiteConversation extends BaseResource { /** * List Conversations */ listConversations(websiteID: string, pageNumber?: number, options?: ConversationsListOptions): Promise<Conversation[]>; /** * List Suggested Conversation Segments */ listSuggestedConversationSegments(websiteID: string, pageNumber?: number): Promise<ConversationSuggestedSegment[]>; /** * Delete Suggested Conversation Segment */ deleteSuggestedConversationSegment(websiteID: string, segment: string): Promise<any>; /** * List Suggested Conversation Data Keys */ listSuggestedConversationDataKeys(websiteID: string, pageNumber?: number): Promise<ConversationSuggestedData[]>; /** * Delete Suggested Conversation Data Key */ deleteSuggestedConversationDataKey(websiteID: string, key: string): Promise<any>; /** * List Spam Conversations */ listSpamConversations(websiteID: string, pageNumber?: number): Promise<ConversationSpam[]>; /** * Resolve Spam Conversation Content */ resolveSpamConversationContent(websiteID: string, spamID: string): Promise<ConversationSpamContent>; /** * Submit Spam Conversation Decision */ submitSpamConversationDecision(websiteID: string, spamID: string, action: string): Promise<any>; /** * Create A New Conversation */ createNewConversation(websiteID: string): Promise<ConversationNew>; /** * Check If Conversation Exists */ checkConversationExists(websiteID: string, sessionID: string): Promise<any>; /** * Get A Conversation */ getConversation(websiteID: string, sessionID: string): Promise<Conversation>; /** * Remove A Conversation */ removeConversation(websiteID: string, sessionID: string): Promise<any>; /** * Initiate A Conversation With Existing Session */ initiateConversationWithExistingSession(websiteID: string, sessionID: string): Promise<any>; /** * Get Messages In Conversation */ getMessagesInConversation(websiteID: string, sessionID: string, timestampBefore?: string | number): Promise<ConversationMessage[]>; /** * Send A Message In Conversation */ sendMessageInConversation(websiteID: string, sessionID: string, message: ConversationMessageNew): Promise<any>; /** * Get A Message In Conversation */ getMessageInConversation(websiteID: string, sessionID: string, fingerprint: number): Promise<ConversationMessage>; /** * Update A Message In Conversation */ updateMessageInConversation(websiteID: string, sessionID: string, fingerprint: number, content: ConversationMessageContent): Promise<any>; /** * Remove A Message In Conversation */ removeMessageInConversation(websiteID: string, sessionID: string, fingerprint: number): Promise<any>; /** * Compose A Message In Conversation */ composeMessageInConversation(websiteID: string, sessionID: string, compose: ConversationComposeMessageNew): Promise<any>; /** * Mark Messages As Read In Conversation */ markMessagesReadInConversation(websiteID: string, sessionID: string, read: ConversationReadMessageMark): Promise<any>; /** * Mark Conversation As Unread */ markConversationAsUnread(websiteID: string, sessionID: string, unread: ConversationUnreadMessageMark): Promise<any>; /** * Mark Messages As Delivered In Conversation */ markMessagesDeliveredInConversation(websiteID: string, sessionID: string, delivered: ConversationReadMessageMark): Promise<any>; /** * Update Conversation Open State */ updateConversationOpenState(websiteID: string, sessionID: string, opened: boolean): Promise<any>; /** * Get Conversation Routing Assign */ getConversationRoutingAssign(websiteID: string, sessionID: string): Promise<any>; /** * Assign Conversation Routing */ assignConversationRouting(websiteID: string, sessionID: string, assign: ConversationRoutingAssignUpdate): Promise<any>; /** * Update Conversation Inbox */ updateConversationInbox(websiteID: string, sessionID: string, inboxID: string): Promise<any>; /** * Get Conversation Metas */ getConversationMetas(websiteID: string, sessionID: string): Promise<ConversationMeta>; /** * Update Conversation Metas */ updateConversationMetas(websiteID: string, sessionID: string, metas: ConversationMeta): Promise<any>; /** * Get An Original Message In Conversation */ getOriginalMessageInConversation(websiteID: string, sessionID: string, originalID: string): Promise<ConversationOriginal>; /** * List Conversation Pages */ listConversationPages(websiteID: string, sessionID: string, pageNumber?: number): Promise<ConversationPage[]>; /** * List Conversation Events */ listConversationEvents(websiteID: string, sessionID: string, pageNumber?: number): Promise<ConversationEvent[]>; /** * List Conversation Files */ listConversationFiles(websiteID: string, sessionID: string, pageNumber?: number): Promise<ConversationFile[]>; /** * Get Conversation State */ getConversationState(websiteID: string, sessionID: string): Promise<ConversationStateData>; /** * Change Conversation State */ changeConversationState(websiteID: string, sessionID: string, state: ConversationState): Promise<any>; /** * Get Conversation Participants */ getConversationParticipants(websiteID: string, sessionID: string): Promise<ConversationParticipant[]>; /** * Save Conversation Participants */ saveConversationParticipants(websiteID: string, sessionID: string, participants: ConversationParticipantsSave): Promise<any>; /** * Get Block Status For Conversation */ getBlockStatusForConversation(websiteID: string, sessionID: string): Promise<ConversationBlock>; /** * Block Incoming Messages For Conversation */ blockIncomingMessagesForConversation(websiteID: string, sessionID: string, blocked: boolean): Promise<any>; /** * Get Verify Status For Conversation */ getVerifyStatusForConversation(websiteID: string, sessionID: string): Promise<ConversationVerify>; /** * Update Verify Status For Conversation */ updateVerifyStatusForConversation(websiteID: string, sessionID: string, verified: boolean): Promise<any>; /** * Request Identity Verification For Conversation */ requestIdentityVerificationForConversation(websiteID: string, sessionID: string, verification: ConversationVerifyIdentityRequest): Promise<any>; /** * Redeem Identity Verification Link For Conversation */ redeemIdentityVerificationLinkForConversation(websiteID: string, sessionID: string, verification: ConversationVerifyIdentityRedeem): Promise<any>; /** * Request Email Transcript For Conversation */ requestEmailTranscriptForConversation(websiteID: string, sessionID: string, to: string, email?: string): Promise<any>; /** * Request Chatbox Binding Purge For Conversation */ requestChatboxBindingPurgeForConversation(websiteID: string, sessionID: string): Promise<any>; /** * Request User Feedback For Conversation */ requestUserFeedbackForConversation(websiteID: string, sessionID: string): Promise<any>; /** * List Browsing Sessions For Conversation */ listBrowsingSessionsForConversation(websiteID: string, sessionID: string): Promise<ConversationBrowsing[]>; /** * Initiate Browsing Session For Conversation */ initiateBrowsingSessionForConversation(websiteID: string, sessionID: string): Promise<any>; /** * Send Action To An Existing Browsing Session */ sendActionToExistingBrowsingSession(websiteID: string, sessionID: string, browsingID: string, action: string): Promise<any>; /** * Assist Existing Browsing Session */ assistExistingBrowsingSession(websiteID: string, sessionID: string, browsingID: string, assist: object): Promise<any>; /** * Initiate New Call Session For Conversation */ initiateNewCallSessionForConversation(websiteID: string, sessionID: string, mode: string): Promise<any>; /** * Get Ongoing Call Session For Conversation */ getOngoingCallSessionForConversation(websiteID: string, sessionID: string): Promise<ConversationCall>; /** * Abort Ongoing Call Session For Conversation */ abortOngoingCallSessionForConversation(websiteID: string, sessionID: string, callID: string): Promise<any>; /** * Transmit Signaling On Ongoing Call Session */ transmitSignalingOnOngoingCallSession(websiteID: string, sessionID: string, callID: string, payload: object): Promise<any>; /** * Deliver Widget Button Action For Conversation */ deliverWidgetButtonActionForConversation(websiteID: string, sessionID: string, pluginID: string, sectionID: string, itemID: string, data: object, value?: string): Promise<any>; /** * Deliver Widget Data Fetch Action For Conversation */ deliverWidgetDataFetchActionForConversation(websiteID: string, sessionID: string, pluginID: string, sectionID: string, itemID: string, data: object): Promise<any>; /** * Deliver Widget Data Edit Action For Conversation */ deliverWidgetDataEditActionForConversation(websiteID: string, sessionID: string, pluginID: string, sectionID: string, itemID: string, value: string): Promise<any>; /** * Schedule A Reminder For Conversation */ scheduleReminderForConversation(websiteID: string, sessionID: string, date: string, note: string): Promise<any>; /** * Report Conversation */ reportConversation(websiteID: string, sessionID: string, flag: string): Promise<any>; } /************************************************************************** * EXPORTS ***************************************************************************/ export default WebsiteConversation;