crisp-api
Version:
Crisp API wrapper for Node - official, maintained by Crisp
677 lines (676 loc) • 22.8 kB
TypeScript
/**************************************************************************
* 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;