UNPKG

amelia-sendbird-desk-agent

Version:
450 lines (449 loc) 19 kB
export default class AmeliaDesk { /** * Main entrypoint for Gate API */ private DESK_API; /** * Main entrypoint for Gate API */ private GATE_API; /** * App ID for Desk * (see constructor) */ private appId; /** * Region for Desk * (see constructor) */ private region; /** * This is the information received once * we do a login to Desk * init(...) */ private deskUser; /** * Token from Dashbaord. You get this * from a Login (see hate.ts) or form * verifyDashboardToken(...) (see hate.ts) */ private token; /** * Cache all the REMOTE agents. * See getRemoteAgents(...) */ private remoteAgents; /** * Cache for groups */ private groups; /** * Cache for ticket fields */ private ticketFields; /** * Cache for ticket field datas */ private ticketFieldDatas; /** * Cache for customer fields */ private customerFields; /** * Cache for customer field datas */ private customerFieldDatas; /** * Cache for tags */ private tags; /** * Sendbird SDK instance */ private sb; /** * Current sendbird logged user */ private sendbirdUser; /** * Channel handler for Desk * (optional) */ private channelHandler; /** * Cache for practive chat tickets */ private proactiveChats; /** * Cache for quick replies and its categories */ private quickRepliesAndCategories; /** * Constructor * * @param region : string ('eu-1' for example) * @param dashboardToken : token from Dashboard login */ constructor(appId: string, region: string); /** * Call this function right after calling the constructor. * * @param dashboardToken Token obtained from Dashboard when logging in. * @param callback (error: any, token: string) Token contains a token for using with Desk. */ init(dashboardToken: string, callback: any): void; /** * Once init(...) is called, you can get your projects for Desk. * * @returns Projects */ getProjets(): any; /** * You can optionally connect agent to chat for listening for messages * and ticket modifications. * * @param appId Your valid Sendbird App ID. * @param callback (error: any, data: any) Data will be the information returned by Sendbird's SDK when connecting to chat. */ connectAgentToChat(appId: string, callback: any): void; /** * You can optionally set a Channel Handler for listening to * chat events, once connected using Sendbird SDK. * * @param uniqueId Any string identifier you want. * @returns null | channel handler from Sendbird SDK. */ addChannelHandler(uniqueId: string): any; /** * Gets agent according to the given app id * * @param appId The application ID you want to get your agent from. */ getAgentForAppId(appId: string): any; /** * Get all agents for the given project ID. * * @param projectId Project ID from where you want the information from. * @param query String text to search for agents. * @param callback (error: any, agents: Array<any>) */ getRemoteAgents(projectId: string, query: string, callback: any, next?: string | null): void; /** * Gets a detailed agent from Sendbird Desk. * * @param projectId The project ID from where to take agents from. * @param agentId The agent ID you want. * @param callback (error: any, agent: any) */ getAgent(projectId: string, agentId: string, callback: any): void; /** * Modifies any agent's connection status. * * @param projectId The project this agent belongs to. * @param agentId Agent id to change * @param newStatus 'OFFLINE' | 'ONLINE' | AWAY' as the supported connection status. * @param callback (error: any, success: boolean) */ changeAgentOnlineStatus(projectId: string, agentId: string, newStatus: 'OFFLINE' | 'ONLINE' | 'AWAY', callback: any): void; /** * Gets tickets from Sendbird server. * * @param projectId Project where these tickets belong to. * @param offset Starting index to get tickets from. * @param ticketCount Max amount of tickets to return (100 is the maximum per call) * @param ticketStatus Array of statuses to retrieve: 'INITIALIZED' | 'PROACTIVE' | 'PENDING' | 'ACTIVE' | 'CLOSED' | 'WORK_IN_PROGRESS' | 'IDLE' * @param order One of the values: '-created_at' | 'created_at' * @param agentId Agent ID for the tickets to be recovered. * @param callback (error: any, tickets: Array<any>) */ getTickets(projectId: string, offset: number, ticketCount: number, ticketStatus: Array<'INITIALIZED' | 'PROACTIVE' | 'PENDING' | 'ACTIVE' | 'CLOSED' | 'WORK_IN_PROGRESS' | 'IDLE'>, order: '-created_at' | 'created_at', agentId: number, callback: any): void; /** * Returns a list of tickets (sorted by last creation date) according to a list of given tags and statuses. * * @param projectId Project ID where these tickets belong to. * @param limit How many records you want to retrieve from the server (max 100) * @param offset Starting numbers to retrieve tickets from. * @param startDate Date when tickets start (YYYY-MM-DD) * @param endDate Date when tickets end (YYYY-MM-DD) * @param tagIds Array of TAG IDs to retrieve. * @param statuses Array of ticket status to retrieve. Limited to: 'INITIALIZED' | 'PROACTIVE' | 'PENDING' | 'ACTIVE' | 'CLOSED' | 'WORK_IN_PROGRESS' | 'IDLE' * @param callback (error: any, data: any) * @param next If there are more tickets to retrieve, the server will respond will a URL to call. This URL comes in the "next" value you must send for more data. For your first request send a null value. */ getTicketsByTag(projectId: string, limit: number, offset: number, startDate: number, endDate: number, tagIds: Array<number>, statuses: Array<'INITIALIZED' | 'PROACTIVE' | 'PENDING' | 'ACTIVE' | 'CLOSED' | 'WORK_IN_PROGRESS' | 'IDLE'>, callback: any, next?: string | null): void; /** * Gets a specific ticket. * * @param projectId Project this ticket belongs to. * @param ticketId Ticket id to retrieve. * @param callback (error: any, ticket: any) */ getTicketById(projectId: string, ticketId: string, callback: any): void; /** * Gets the total amount of tickets for a given agent. * * @param projectId Project where this ticket belonts to. * @param agentId Agent ID attached to this ticket ID. * @param callback (error: any, ticket: any) */ getTicketCountForAgent(projectId: string, agentId: string, callback: any): void; /** * Gets ticket fields. * * @param projectId Project ID for the ticket fields to get. * @param callback (error: any, ticketFields: Array<any>) * @param next Send a null value (optional) */ getTicketFields(projectId: string, callback: any, next?: string | null): void; /** * Gets the data for ticket fields for a given ticket ID. * * @param projectId Project ID from where this ticket belongs to. * @param ticketId Ticket ID to get its ticket fields data. * @param callback (error: any, ticketFieldData: Array<any>) * @param next Send a null value (optional) */ getTicketFieldData(projectId: string, ticketId: number, callback: any, next?: string | null): void; /** * Gets a list of all customer fields. * * @param projectId Project ID from these customer fields are. * @param callback (error: any, customerFields: Array<any>) * @param next Send a null value (optional) */ getCustomerFields(projectId: string, callback: any, next?: string | null): void; /** * Gets the data for customer fields for a given customer ID. * * @param projectId Project ID from where this customer belongs to. * @param customerId Customer ID to get its customer fields data. * @param callback (error: any, customerFieldDatas: Array<any>) * @param next Send a null value (optional) */ getCustomerFieldData(projectId: string, customerId: number, callback: any, next?: string | null): void; /** * Get the messages for a given Ticket. * * @param ticket Ticket Object provided by Sendbird Desk. * @param appId Application ID to get tickets from. * @param ameliaSendbirdToken We need the tocket you received when performing loginFromDashboard(...) * @param messageCount Amount of messages to retrieve (max. 100 per call) * @param includeRemoved If include removed messages (true / false) * @param callback (error: any, messages: Array<any>) */ getTicketMessages(ticket: any, appId: string, ameliaSendbirdToken: string, messageCount: number, includeRemoved: boolean, callback: any): void; /** * Creates a customer field for showing on tickets. * * @param projectId Project ID this customer field will be related to. * @param description Description (optional) * @param fieldType One of these values: 'STRING' | 'INTEGER' | 'DROPDOWN' | 'LINK' * @param key Any unique string key. * @param name Any name that will be shown to agents. * @param options boolean | Array<string> - Send false if fieldType is different from DROPDOWN. Send ['any thing here', 'more here'] as options for DROPDOWN. * @param readOnly true / false if this field will be accessible for modifications. * @param callback (error: any, data: any) */ createCustomerField(projectId: string, description: string, fieldType: 'STRING' | 'INTEGER' | 'DROPDOWN' | 'LINK', key: string, name: string, options: boolean | Array<string>, readOnly: boolean, callback: any): void; /** * Adds data to a ticket where this customer field ID is present. * Dropdown values are added as the content and not as any ID. * * @param projectId Project ID where this data will be stored into. * @param customerId Customer ID. * @param customerFieldId Customer Field ID. * @param value Value to store. * @param callback (error: any, data: any) */ createCustomFieldData(projectId: string, customerId: number, customerFieldId: number, value: string, callback: any): void; /** * Creates a ticket field for showing on tickets. * * @param projectId Project ID this ticket field will be related to. * @param description Description (optional) * @param fieldType One of these values: 'STRING' | 'INTEGER' | 'DROPDOWN' | 'LINK' * @param key Any unique string key. * @param name Any name that will be shown to agents. * @param options boolean | Array<string> - Send false if fieldType is different from DROPDOWN. Send ['any thing here', 'more here'] as options for DROPDOWN. * @param readOnly true / false if this field will be accessible for modifications. * @param callback (error: any, data: any) */ createTicketField(projectId: string, description: string, fieldType: 'STRING' | 'INTEGER' | 'DROPDOWN' | 'LINK', key: string, name: string, options: boolean | Array<string>, readOnly: boolean, callback: any): void; /** * Adds data to a ticket field ID. * * @param projectId Project ID where this ticket ID belongs to. * @param ticketId Ticket ID where this data will be stored. * @param ticketFieldId Ticket field ID where this data will be related to. * @param value Value to store. Dropdown data will store values, not IDs. * @param callback (error: any, data: any) */ createTicketFieldData(projectId: string, ticketId: number, ticketFieldId: number, value: string, callback: any): void; /** * Agents are organized in groups. * This function will get those groups. * * @param callback (error: any, groups: Array<any>) * @param next Send an empty string (optional) */ getGroups(callback: any, next?: string): void; /** * Creates a TAG. These tags can be later related to tickets and perform * searches according to these TAGS. * * @param projectId Project ID where this TAG will be stored into. * @param name Name for this TAG. * @param callback (error: any, data: any) */ createTag(projectId: string, name: string, callback: any): void; /** * TAGs can be assigned to tickets so you can perform searches based on this. * * @param projectId Project where this ticket and TAG will be. * @param ticketId Ticket ID where this TAG will be related to. * @param tagId Tag ID to relate. * @param callback (error: any, data: any) */ assignTagsToTicket(projectId: string, ticketId: number, tagId: number, callback: any): void; /** * Gets all tags you create for Tickets. * * @param projectId Project ID where these tasks are from. * @param status One of these values: 'INITIALIZED' | 'PROACTIVE' | 'PENDING' | 'ACTIVE' | 'CLOSED' | 'WORK_IN_PROGRESS' | 'IDLE' * @param query String to filter your ticket result. * @param callback (error: any, tags: Array<any>) * @param next Send a null value (optional) */ getTags(projectId: string, status: 'INITIALIZED' | 'PROACTIVE' | 'PENDING' | 'ACTIVE' | 'CLOSED' | 'WORK_IN_PROGRESS' | 'IDLE', query: string, callback: any, next?: string | null): void; /** * Reopens a closed ticket. * * @param projectId Project ID this ticket belongs to. * @param ticketId Ticket ID to reopen. * @param callback (error: any, data: any) */ openTicket(projectId: string, ticketId: number, callback: any): void; /** * Set ticket to IDLE status. * * @param projectId Project ID this ticket belongs to. * @param ticketId Ticket ID to set to IDLE. * @param callback (error: any, data: any) */ setTicketToIdle(projectId: string, ticketId: number, callback: any): void; /** * Closes a ticket and sends a comment. * * @param projectId Project ID this ticket belongs to. * @param ticketId Ticket ID to close. * @param closeComment Text comment explaining why this ticket was closed. * @param callback (error: any, data: any) */ closeTicket(projectId: string, ticketId: number, closeComment: string, callback: any): void; /** * Assigns a ticket to an Agent. * Error is returned if this ticket was already assigned. * * @param projectId Project this ticket belongs to. * @param ticketId Ticket ID to assign. * @param agentId Agent ID to assign this ticket to. * @param callback (error: any, data: any) */ assignTicketToAgent(projectId: string, ticketId: number, agentId: number, callback: any): void; /** * Quick replies can be organized into categories. This function will insert one. * * @param projectId Project ID this new category will be related to. * @param name Name of the new category. * @param callback (error: any, data: any) */ createQuickReplyCategory(projectId: string, name: string, callback: any): void; /** * Creates a quick reply for all agents. * * @param projectId project ID where this quick reply will be shown. * @param name Name for the quick reply. * @param message Message to show. * @param callback (error: any, data: any) */ createQuickReplyToAllAgents(projectId: string, name: string, message: string, callback: any): void; /** * Creates a quick reply for all groups. * * @param projectId project ID where this quick reply will be shown. * @param name Name for the quick reply. * @param message Message to show. * @param callback (error: any, data: any) */ createQuickReplyToGroups(projectId: string, name: string, message: string, groups: Array<number>, callback: any): void; /** * Creates a quick reply available to me only. * * @param projectId project ID where this quick reply will be shown. * @param name Name for the quick reply. * @param message Message to show. * @param callback (error: any, data: any) */ createQuickReplyToMeOnly(projectId: string, name: string, message: string, agentId: number, categories: Array<number>, callback: any): void; /** * Gets all the quick replies and categories. * * @param projectId Project ID where this information relies on. * @param callback (error: any, quickRepliesAndCategories: Array<any>) * @param next Send a null value (optional) */ getQuickRepliesAndCategories(projectId: string, callback: any, next: string | null): void; /** * Simply counts available quick replies and categories. * * @param projectId Project ID where this information relies on. * @param callback (error: any, data: any) */ getQuickReplyCount(projectId: string, callback: any): void; /** * Gets a list of all the tickets available for Proactive Chat. * * @param projectId Project ID these proactive chats belongs to. * @param limit Ma amount of proactive chat tickets to recover (max. 100) * @param descending true / false If the result will be in a descending order or not. * @param callback (error: any, proactiveChats: Array<any>) * @param next Send a null value (optional) */ getPractiveChatTickets(projectId: string, limit: number, descending: boolean, callback: any, next?: string | null): void; /** * Allows you to send a new proactive chat to users. * * @param projectId Project ID this proactive chat will be sent to. * @param ticketId Ticket ID for sending this proactive chat. * @param message Message to send to customer. * @param callback (error: any, data: any) */ sendProactiveChat(projectId: string, ticketId: number, message: string, callback: any): void; /** * Gets all the proactive chat. * * @param projectId Project ID where the proactive chat is located. * * @param offset Starting number to get records from. * @param totalChatsToGet Total chat rows to get. * @param callback (error: any, proactiveChats: Array<any>) * @param nextUrl If you want more information, send this URL Sendbird sends you in the previous response. This continues getting more information. */ getProactiveChats(projectId: string, offset: number, totalChatsToGet: number, callback: any, nextUrl: string | null): void; /** * TODO */ private getAssignmentLogs; /** * TODO */ private getRealTimeMonitoring; /** * TODO */ private getPerformanceReport; private getToken; private initSendbird; private connectToSendbird; }