n8n-nodes-crisp-api
Version:
n8n community node for Crisp API integration
1,180 lines • 95.7 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Crisp = void 0;
class Crisp {
constructor() {
this.description = {
displayName: 'Crisp',
name: 'crisp',
icon: 'file:crisp.svg',
group: ['transform'],
version: 1,
subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
description: 'Interact with Crisp API - Complete integration with all available endpoints',
defaults: {
name: 'Crisp',
},
inputs: ["main" /* NodeConnectionType.Main */],
outputs: ["main" /* NodeConnectionType.Main */],
credentials: [
{
name: 'crispApi',
required: true,
},
],
properties: [
{
displayName: 'Website ID',
name: 'websiteId',
type: 'string',
default: '',
required: true,
description: 'The website ID from your Crisp dashboard',
},
{
displayName: 'Resource',
name: 'resource',
type: 'options',
noDataExpression: true,
options: [
{
name: 'Website',
value: 'website',
},
{
name: 'Conversation',
value: 'conversation',
},
{
name: 'People',
value: 'people',
},
{
name: 'Operator',
value: 'operator',
},
{
name: 'Settings',
value: 'settings',
},
{
name: 'Analytics',
value: 'analytics',
},
{
name: 'Availability',
value: 'availability',
},
{
name: 'Campaign',
value: 'campaign',
},
{
name: 'Helpdesk',
value: 'helpdesk',
},
{
name: 'Visitors',
value: 'visitors',
},
{
name: 'Batch',
value: 'batch',
},
{
name: 'Verify',
value: 'verify',
},
],
default: 'conversation',
},
// Website Operations
{
displayName: 'Operation',
name: 'operation',
type: 'options',
noDataExpression: true,
displayOptions: {
show: {
resource: ['website'],
},
},
options: [
{
name: 'Check Exists',
value: 'checkExists',
description: 'Check if website exists',
action: 'Check if website exists',
},
{
name: 'Create',
value: 'create',
description: 'Create website',
action: 'Create website',
},
{
name: 'Get',
value: 'get',
description: 'Get website details',
action: 'Get website details',
},
{
name: 'Delete',
value: 'delete',
description: 'Delete website',
action: 'Delete website',
},
{
name: 'Abort Deletion',
value: 'abortDeletion',
description: 'Abort website deletion',
action: 'Abort website deletion',
},
],
default: 'get',
},
// Conversation Operations
{
displayName: 'Operation',
name: 'operation',
type: 'options',
noDataExpression: true,
displayOptions: {
show: {
resource: ['conversation'],
},
},
options: [
{
name: 'List',
value: 'list',
description: 'List conversations',
action: 'List conversations',
},
{
name: 'Get',
value: 'get',
description: 'Get conversation details',
action: 'Get conversation details',
},
{
name: 'Create',
value: 'create',
description: 'Create new conversation',
action: 'Create new conversation',
},
{
name: 'Remove',
value: 'remove',
description: 'Remove conversation',
action: 'Remove conversation',
},
{
name: 'Send Message',
value: 'sendMessage',
description: 'Send message in conversation',
action: 'Send message in conversation',
},
{
name: 'Get Messages',
value: 'getMessages',
description: 'Get messages in conversation',
action: 'Get messages in conversation',
},
{
name: 'Update State',
value: 'updateState',
description: 'Update conversation state',
action: 'Update conversation state',
},
{
name: 'Update Meta',
value: 'updateMeta',
description: 'Update conversation metadata (email, nickname, phone)',
action: 'Update conversation metadata',
},
{
name: 'Assign Routing',
value: 'assignRouting',
description: 'Assign conversation routing',
action: 'Assign conversation routing',
},
{
name: 'Block',
value: 'block',
description: 'Block conversation',
action: 'Block conversation',
},
{
name: 'Widget Button Action',
value: 'widgetButtonAction',
description: 'Deliver widget button action',
action: 'Deliver widget button action',
},
{
name: 'Process Button Action',
value: 'processButtonAction',
description: 'Process button action and execute configured response',
action: 'Process button action and execute configured response',
},
{
name: 'Send Private Note',
value: 'sendPrivateNote',
description: 'Send operator-only note (invisible to customers)',
action: 'Send operator-only note (invisible to customers)',
},
{
name: 'Send AI Review Request',
value: 'sendAIReviewRequest',
description: 'Send AI-generated response for operator review with action buttons',
action: 'Send AI-generated response for operator review with action buttons',
},
],
default: 'list',
},
// People Operations
{
displayName: 'Operation',
name: 'operation',
type: 'options',
noDataExpression: true,
displayOptions: {
show: {
resource: ['people'],
},
},
options: [
{
name: 'List Profiles',
value: 'listProfiles',
description: 'List people profiles',
action: 'List people profiles',
},
{
name: 'Get Profile',
value: 'getProfile',
description: 'Get people profile',
action: 'Get people profile',
},
{
name: 'Create Profile',
value: 'createProfile',
description: 'Create new people profile',
action: 'Create new people profile',
},
{
name: 'Update Profile',
value: 'updateProfile',
description: 'Update people profile',
action: 'Update people profile',
},
{
name: 'Remove Profile',
value: 'removeProfile',
description: 'Remove people profile',
action: 'Remove people profile',
},
{
name: 'Get Statistics',
value: 'getStatistics',
description: 'Get people statistics',
action: 'Get people statistics',
},
{
name: 'List Conversations',
value: 'listConversations',
description: 'List people conversations',
action: 'List people conversations',
},
{
name: 'Add Event',
value: 'addEvent',
description: 'Add people event',
action: 'Add people event',
},
],
default: 'listProfiles',
},
// Operator Operations
{
displayName: 'Operation',
name: 'operation',
type: 'options',
noDataExpression: true,
displayOptions: {
show: {
resource: ['operator'],
},
},
options: [
{
name: 'List',
value: 'list',
description: 'List website operators',
action: 'List website operators',
},
{
name: 'Get',
value: 'get',
description: 'Get website operator',
action: 'Get website operator',
},
{
name: 'Invite',
value: 'invite',
description: 'Invite website operator',
action: 'Invite website operator',
},
{
name: 'Change Membership',
value: 'changeMembership',
description: 'Change operator membership',
action: 'Change operator membership',
},
{
name: 'Unlink',
value: 'unlink',
description: 'Unlink operator from website',
action: 'Unlink operator from website',
},
],
default: 'list',
},
// Settings Operations
{
displayName: 'Operation',
name: 'operation',
type: 'options',
noDataExpression: true,
displayOptions: {
show: {
resource: ['settings'],
},
},
options: [
{
name: 'Get',
value: 'get',
description: 'Get website settings',
action: 'Get website settings',
},
{
name: 'Update',
value: 'update',
description: 'Update website settings',
action: 'Update website settings',
},
],
default: 'get',
},
// Analytics Operations
{
displayName: 'Operation',
name: 'operation',
type: 'options',
noDataExpression: true,
displayOptions: {
show: {
resource: ['analytics'],
},
},
options: [
{
name: 'Generate',
value: 'generate',
description: 'Generate analytics',
action: 'Generate analytics',
},
],
default: 'generate',
},
// Availability Operations
{
displayName: 'Operation',
name: 'operation',
type: 'options',
noDataExpression: true,
displayOptions: {
show: {
resource: ['availability'],
},
},
options: [
{
name: 'Get Status',
value: 'getStatus',
description: 'Get website availability status',
action: 'Get website availability status',
},
{
name: 'List Operators',
value: 'listOperators',
description: 'List website operator availabilities',
action: 'List website operator availabilities',
},
],
default: 'getStatus',
},
// Campaign Operations
{
displayName: 'Operation',
name: 'operation',
type: 'options',
noDataExpression: true,
displayOptions: {
show: {
resource: ['campaign'],
},
},
options: [
{
name: 'List',
value: 'list',
description: 'List campaigns',
action: 'List campaigns',
},
{
name: 'Get',
value: 'get',
description: 'Get campaign',
action: 'Get campaign',
},
{
name: 'Create',
value: 'create',
description: 'Create new campaign',
action: 'Create new campaign',
},
{
name: 'Update',
value: 'update',
description: 'Update campaign',
action: 'Update campaign',
},
{
name: 'Remove',
value: 'remove',
description: 'Remove campaign',
action: 'Remove campaign',
},
{
name: 'Dispatch',
value: 'dispatch',
description: 'Dispatch campaign',
action: 'Dispatch campaign',
},
{
name: 'Pause',
value: 'pause',
description: 'Pause campaign',
action: 'Pause campaign',
},
{
name: 'Resume',
value: 'resume',
description: 'Resume campaign',
action: 'Resume campaign',
},
],
default: 'list',
},
// Helpdesk Operations
{
displayName: 'Operation',
name: 'operation',
type: 'options',
noDataExpression: true,
displayOptions: {
show: {
resource: ['helpdesk'],
},
},
options: [
{
name: 'Check Exists',
value: 'checkExists',
description: 'Check if helpdesk exists',
action: 'Check if helpdesk exists',
},
{
name: 'Get',
value: 'get',
description: 'Resolve helpdesk',
action: 'Resolve helpdesk',
},
{
name: 'Initialize',
value: 'initialize',
description: 'Initialize helpdesk',
action: 'Initialize helpdesk',
},
{
name: 'Delete',
value: 'delete',
description: 'Delete helpdesk',
action: 'Delete helpdesk',
},
{
name: 'List Locales',
value: 'listLocales',
description: 'List helpdesk locales',
action: 'List helpdesk locales',
},
],
default: 'checkExists',
},
// Visitors Operations
{
displayName: 'Operation',
name: 'operation',
type: 'options',
noDataExpression: true,
displayOptions: {
show: {
resource: ['visitors'],
},
},
options: [
{
name: 'Count',
value: 'count',
description: 'Count visitors',
action: 'Count visitors',
},
{
name: 'List',
value: 'list',
description: 'List visitors',
action: 'List visitors',
},
{
name: 'Pinpoint on Map',
value: 'pinpointOnMap',
description: 'Pinpoint visitors on map',
action: 'Pinpoint visitors on map',
},
{
name: 'Count Blocked',
value: 'countBlocked',
description: 'Count blocked visitors',
action: 'Count blocked visitors',
},
],
default: 'count',
},
// Batch Operations
{
displayName: 'Operation',
name: 'operation',
type: 'options',
noDataExpression: true,
displayOptions: {
show: {
resource: ['batch'],
},
},
options: [
{
name: 'Resolve Conversations',
value: 'resolveConversations',
description: 'Batch resolve conversations',
action: 'Batch resolve conversations',
},
{
name: 'Read Conversations',
value: 'readConversations',
description: 'Batch read conversations',
action: 'Batch read conversations',
},
{
name: 'Remove Conversations',
value: 'removeConversations',
description: 'Batch remove conversations',
action: 'Batch remove conversations',
},
{
name: 'Remove People',
value: 'removePeople',
description: 'Batch remove people',
action: 'Batch remove people',
},
],
default: 'resolveConversations',
},
// Verify Operations
{
displayName: 'Operation',
name: 'operation',
type: 'options',
noDataExpression: true,
displayOptions: {
show: {
resource: ['verify'],
},
},
options: [
{
name: 'Get Settings',
value: 'getSettings',
description: 'Get verify settings',
action: 'Get verify settings',
},
{
name: 'Update Settings',
value: 'updateSettings',
description: 'Update verify settings',
action: 'Update verify settings',
},
{
name: 'Get Key',
value: 'getKey',
description: 'Get verify key',
action: 'Get verify key',
},
{
name: 'Roll Key',
value: 'rollKey',
description: 'Roll verify key',
action: 'Roll verify key',
},
],
default: 'getSettings',
},
// Common Parameters
{
displayName: 'Session ID',
name: 'sessionId',
type: 'string',
required: true,
displayOptions: {
show: {
resource: ['conversation'],
operation: ['get', 'remove', 'sendMessage', 'getMessages', 'updateState', 'assignRouting', 'updateMeta', 'block', 'widgetButtonAction', 'processButtonAction', 'sendPrivateNote', 'sendAIReviewRequest'],
},
},
default: '',
description: 'The session ID of the conversation',
},
{
displayName: 'People ID',
name: 'peopleId',
type: 'string',
required: true,
displayOptions: {
show: {
resource: ['people'],
operation: ['getProfile', 'updateProfile', 'removeProfile', 'listConversations', 'addEvent'],
},
},
default: '',
description: 'The ID of the people profile',
},
{
displayName: 'User ID',
name: 'userId',
type: 'string',
required: true,
displayOptions: {
show: {
resource: ['operator'],
operation: ['get', 'changeMembership', 'unlink'],
},
},
default: '',
description: 'The user ID of the operator',
},
{
displayName: 'Campaign ID',
name: 'campaignId',
type: 'string',
required: true,
displayOptions: {
show: {
resource: ['campaign'],
operation: ['get', 'update', 'remove', 'dispatch', 'pause', 'resume'],
},
},
default: '',
description: 'The ID of the campaign',
},
{
displayName: 'Page Number',
name: 'pageNumber',
type: 'number',
displayOptions: {
show: {
resource: ['conversation', 'people', 'campaign', 'helpdesk', 'visitors'],
operation: ['list', 'listProfiles', 'listConversations', 'listLocales'],
},
},
default: 1,
description: 'The page number for pagination',
},
{
displayName: 'Message',
name: 'message',
type: 'string',
required: true,
displayOptions: {
show: {
resource: ['conversation'],
operation: ['sendMessage'],
},
},
default: '',
description: 'The message content to send',
},
{
displayName: 'Message Type',
name: 'messageType',
type: 'options',
displayOptions: {
show: {
resource: ['conversation'],
operation: ['sendMessage'],
},
},
options: [
{
name: 'Text',
value: 'text',
},
{
name: 'Note',
value: 'note',
},
{
name: 'Picker (Button Options)',
value: 'picker',
},
{
name: 'Field (Input)',
value: 'field',
},
{
name: 'Carousel',
value: 'carousel',
},
{
name: 'Event',
value: 'event',
},
],
default: 'text',
description: 'The type of message to send',
},
{
displayName: 'Picker ID',
name: 'pickerId',
type: 'string',
displayOptions: {
show: {
resource: ['conversation'],
operation: ['sendMessage'],
messageType: ['picker'],
},
},
default: '',
description: 'Unique identifier for the picker',
},
{
displayName: 'Picker Text',
name: 'pickerText',
type: 'string',
displayOptions: {
show: {
resource: ['conversation'],
operation: ['sendMessage'],
messageType: ['picker'],
},
},
default: '',
description: 'Text to display with the picker',
},
{
displayName: 'Picker Choices',
name: 'pickerChoices',
type: 'fixedCollection',
typeOptions: {
multipleValues: true,
},
displayOptions: {
show: {
resource: ['conversation'],
operation: ['sendMessage'],
messageType: ['picker'],
},
},
default: {},
description: 'Choice options for the picker',
options: [
{
name: 'choice',
displayName: 'Choice',
values: [
{
displayName: 'Value',
name: 'value',
type: 'string',
default: '',
description: 'The value of the choice',
},
{
displayName: 'Label',
name: 'label',
type: 'string',
default: '',
description: 'The display label of the choice',
},
{
displayName: 'Icon',
name: 'icon',
type: 'string',
default: '',
description: 'Icon for the choice (emoji or icon name)',
},
{
displayName: 'Action Type',
name: 'actionType',
type: 'options',
options: [
{
name: 'None (Simple Button)',
value: 'none',
},
{
name: 'Link (External URL)',
value: 'link',
},
{
name: 'Send Message',
value: 'sendMessage',
},
{
name: 'Send Picker',
value: 'sendPicker',
},
{
name: 'Send Field',
value: 'sendField',
},
{
name: 'Send Carousel',
value: 'sendCarousel',
},
{
name: 'Close Conversation',
value: 'closeConversation',
},
{
name: 'Transfer to Agent',
value: 'transferAgent',
},
{
name: 'Custom Webhook',
value: 'webhook',
},
],
default: 'none',
description: 'Type of action when choice is selected',
},
{
displayName: 'Action Target',
name: 'actionTarget',
type: 'string',
default: '',
description: 'URL for link actions or webhook endpoint',
},
{
displayName: 'Response Message',
name: 'responseMessage',
type: 'string',
default: '',
description: 'Message to send when this choice is selected',
},
{
displayName: 'Response Message Type',
name: 'responseMessageType',
type: 'options',
options: [
{
name: 'Text',
value: 'text',
},
{
name: 'Note',
value: 'note',
},
],
default: 'text',
description: 'Type of response message',
},
{
displayName: 'Follow-up Action',
name: 'followUpAction',
type: 'json',
default: '{}',
description: 'JSON configuration for follow-up actions (picker, field, carousel)',
},
{
displayName: 'Agent ID',
name: 'agentId',
type: 'string',
default: '',
description: 'Agent ID for transfer actions',
},
{
displayName: 'Webhook Data',
name: 'webhookData',
type: 'json',
default: '{}',
description: 'Additional data to send with webhook',
},
],
},
],
},
{
displayName: 'Field ID',
name: 'fieldId',
type: 'string',
displayOptions: {
show: {
resource: ['conversation'],
operation: ['sendMessage'],
messageType: ['field'],
},
},
default: '',
description: 'Unique identifier for the field',
},
{
displayName: 'Field Text',
name: 'fieldText',
type: 'string',
displayOptions: {
show: {
resource: ['conversation'],
operation: ['sendMessage'],
messageType: ['field'],
},
},
default: '',
description: 'Text to display for the field',
},
{
displayName: 'Field Explanation',
name: 'fieldExplain',
type: 'string',
displayOptions: {
show: {
resource: ['conversation'],
operation: ['sendMessage'],
messageType: ['field'],
},
},
default: '',
description: 'Additional explanation for the field',
},
{
displayName: 'Field Required',
name: 'fieldRequired',
type: 'boolean',
displayOptions: {
show: {
resource: ['conversation'],
operation: ['sendMessage'],
messageType: ['field'],
},
},
default: false,
description: 'Whether the field is required',
},
{
displayName: 'Carousel Targets',
name: 'carouselTargets',
type: 'fixedCollection',
typeOptions: {
multipleValues: true,
},
displayOptions: {
show: {
resource: ['conversation'],
operation: ['sendMessage'],
messageType: ['carousel'],
},
},
default: {},
description: 'Carousel items',
options: [
{
name: 'target',
displayName: 'Target',
values: [
{
displayName: 'Title',
name: 'title',
type: 'string',
default: '',
description: 'Title of the carousel item',
},
{
displayName: 'Description',
name: 'description',
type: 'string',
default: '',
description: 'Description of the carousel item',
},
{
displayName: 'Action Type',
name: 'actionType',
type: 'options',
options: [
{
name: 'Link',
value: 'link',
},
{
name: 'None',
value: 'none',
},
],
default: 'none',
description: 'Type of action for the carousel item',
},
{
displayName: 'Action Target',
name: 'actionTarget',
type: 'string',
default: '',
description: 'URL for link actions',
},
],
},
],
},
{
displayName: 'Event Type',
name: 'eventType',
type: 'string',
displayOptions: {
show: {
resource: ['conversation'],
operation: ['sendMessage'],
messageType: ['event'],
},
},
default: '',
description: 'Type of event to send',
},
{
displayName: 'Event Data',
name: 'eventData',
type: 'string',
displayOptions: {
show: {
resource: ['conversation'],
operation: ['sendMessage'],
messageType: ['event'],
},
},
default: '',
description: 'Event data as JSON string',
},
{
displayName: 'Widget Button ID',
name: 'widgetButtonId',
type: 'string',
required: true,
displayOptions: {
show: {
resource: ['conversation'],
operation: ['widgetButtonAction'],
},
},
default: '',
description: 'The ID of the widget button',
},
{
displayName: 'Widget Button Data',
name: 'widgetButtonData',
type: 'string',
displayOptions: {
show: {
resource: ['conversation'],
operation: ['widgetButtonAction'],
},
},
default: '',
description: 'Widget button data as JSON string',
},
{
displayName: 'Button Action Type',
name: 'buttonActionType',
type: 'options',
required: true,
displayOptions: {
show: {
resource: ['conversation'],
operation: ['processButtonAction'],
},
},
options: [
{
name: 'Send Message',
value: 'sendMessage',
},
{
name: 'Send Picker',
value: 'sendPicker',
},
{
name: 'Send Field',
value: 'sendField',
},
{
name: 'Send Carousel',
value: 'sendCarousel',
},
{
name: 'Close Conversation',
value: 'closeConversation',
},
{
name: 'Transfer to Agent',
value: 'transferAgent',
},
{
name: 'Custom Webhook',
value: 'webhook',
},
],
default: 'sendMessage',
description: 'Type of action to execute',
},
{
displayName: 'Action Configuration',
name: 'actionConfiguration',
type: 'json',
displayOptions: {
show: {
resource: ['conversation'],
operation: ['processButtonAction'],
},
},
default: '{}',
description: 'JSON configuration for the action (message content, picker options, etc.)',
},
{
displayName: 'Private Note Content',
name: 'privateNoteContent',
type: 'string',
required: true,
displayOptions: {
show: {
resource: ['conversation'],
operation: ['sendPrivateNote'],
},
},
default: '',
de