UNPKG

@pixelinfinito/n8n-nodes-chatwoot

Version:
1,148 lines (1,147 loc) 177 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Chatwoot = void 0; const n8n_workflow_1 = require("n8n-workflow"); class Chatwoot { constructor() { this.description = { displayName: 'Chatwoot', name: 'chatwoot', icon: { light: 'file:chatwoot.svg', dark: 'file:chatwoot.svg' }, group: ['transform'], version: 1, subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', description: 'Interact with Chatwoot API', defaults: { name: 'Chatwoot', }, inputs: ["main"], outputs: ["main"], usableAsTool: true, credentials: [ { name: 'chatwootApi', required: true, }, ], properties: [ { displayName: 'Resource', name: 'resource', type: 'options', noDataExpression: true, options: [ { name: 'Account', value: 'account' }, { name: 'Canned Response', value: 'cannedResponse' }, { name: 'Contact', value: 'contact' }, { name: 'Conversation', value: 'conversation' }, { name: 'Inbox', value: 'inbox' }, { name: 'Label', value: 'label' }, { name: 'Message', value: 'message' }, { name: 'Team', value: 'team' }, { name: 'Webhook', value: 'webhook' }, ], default: 'contact', }, { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, displayOptions: { show: { resource: ['account'], }, }, options: [ { name: 'Get', value: 'get', description: 'Get account details', action: 'Get account details', }, ], default: 'get', }, { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, displayOptions: { show: { resource: ['contact'], }, }, options: [ { name: 'Add Labels', value: 'addLabels', description: 'Add labels to a contact', action: 'Add labels to a contact', }, { name: 'Create', value: 'create', description: 'Create a new contact', action: 'Create a contact', }, { name: 'Delete', value: 'delete', description: 'Delete a contact', action: 'Delete a contact', }, { name: 'Filter', value: 'filter', description: 'Filter contacts using custom rules', action: 'Filter contacts', }, { name: 'Get', value: 'get', description: 'Get a contact by ID', action: 'Get a contact', }, { name: 'Get Many', value: 'getAll', description: 'Get many contacts', action: 'Get many contacts', }, { name: 'Search', value: 'search', description: 'Search contacts', action: 'Search contacts', }, { name: 'Update', value: 'update', description: 'Update a contact', action: 'Update a contact', }, ], default: 'get', }, { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, displayOptions: { show: { resource: ['conversation'], }, }, options: [ { name: 'Add Labels', value: 'addLabels', description: 'Add labels to conversation', action: 'Add labels to conversation', }, { name: 'Create', value: 'create', description: 'Create a new conversation', action: 'Create a conversation', }, { name: 'Get', value: 'get', description: 'Get a conversation by ID', action: 'Get a conversation', }, { name: 'Get Many', value: 'getAll', description: 'Get many conversations', action: 'Get many conversations', }, { name: 'Update Custom Attributes', value: 'updateCustomAttributes', action: 'Update custom attributes', }, { name: 'Update Status', value: 'updateStatus', description: 'Update conversation status', action: 'Update conversation status', }, ], default: 'get', }, { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, displayOptions: { show: { resource: ['message'], }, }, options: [ { name: 'Create', value: 'create', description: 'Create a new message', action: 'Create a message', }, { name: 'Delete', value: 'delete', description: 'Delete a message', action: 'Delete a message', }, { name: 'Get', value: 'get', description: 'Get a message by ID', action: 'Get a message', }, { name: 'Get Many', value: 'getAll', description: 'Get many messages in a conversation', action: 'Get many messages', }, { name: 'Update', value: 'update', description: 'Update a message', action: 'Update a message', }, ], default: 'get', }, { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, displayOptions: { show: { resource: ['inbox'], }, }, options: [ { name: 'Get', value: 'get', description: 'Get an inbox by ID', action: 'Get an inbox', }, { name: 'Get Many', value: 'getAll', description: 'Get many inboxes', action: 'Get many inboxes', }, ], default: 'get', }, { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, displayOptions: { show: { resource: ['cannedResponse'], }, }, options: [ { name: 'Create', value: 'create', description: 'Create a new canned response', action: 'Create a canned response', }, { name: 'Delete', value: 'delete', description: 'Delete a canned response', action: 'Delete a canned response', }, { name: 'Get', value: 'get', description: 'Get a canned response by ID', action: 'Get a canned response', }, { name: 'Get Many', value: 'getAll', description: 'Get many canned responses', action: 'Get many canned responses', }, { name: 'Update', value: 'update', description: 'Update a canned response', action: 'Update a canned response', }, ], default: 'get', }, { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, displayOptions: { show: { resource: ['webhook'], }, }, options: [ { name: 'Create', value: 'create', description: 'Create a new webhook', action: 'Create a webhook', }, { name: 'Delete', value: 'delete', description: 'Delete a webhook', action: 'Delete a webhook', }, { name: 'Get', value: 'get', description: 'Get a webhook by ID', action: 'Get a webhook', }, { name: 'Get Many', value: 'getAll', description: 'Get many webhooks', action: 'Get many webhooks', }, { name: 'Update', value: 'update', description: 'Update a webhook', action: 'Update a webhook', }, ], default: 'get', }, { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, displayOptions: { show: { resource: ['team'], }, }, options: [ { name: 'Get', value: 'get', description: 'Get a team by ID', action: 'Get a team', }, { name: 'Get Many', value: 'getAll', description: 'Get many teams', action: 'Get many teams', }, ], default: 'get', }, { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, displayOptions: { show: { resource: ['label'], }, }, options: [ { name: 'Get', value: 'get', description: 'Get a label by ID', action: 'Get a label', }, { name: 'Get Many', value: 'getAll', description: 'Get many labels', action: 'Get many labels', }, ], default: 'get', }, { displayName: 'Contact ID', name: 'contactId', type: 'number', default: '', required: true, description: 'The numeric ID of the contact', placeholder: '1', displayOptions: { show: { resource: ['contact'], operation: ['get', 'update', 'delete', 'addLabels'], }, }, }, { displayName: 'Send', name: 'sendMode', type: 'options', options: [ { name: 'Structured Fields', value: 'fields', description: 'Use the structured form fields below', }, { name: 'Custom JSON', value: 'json', description: 'Provide custom JSON for full control over the request', }, ], default: 'fields', description: 'How to send the data', displayOptions: { show: { resource: ['contact'], operation: ['create', 'update'], }, }, }, { displayName: 'Custom JSON', name: 'customJson', type: 'json', default: '{\n "name": "John Doe",\n "email": "john@example.com",\n "phone_number": "+1234567890",\n "inbox_id": 1\n}', description: 'Custom JSON payload to send with the request. This will override all structured fields.', displayOptions: { show: { resource: ['contact'], operation: ['create', 'update'], sendMode: ['json'], }, }, }, { displayName: 'Additional Options', name: 'additionalOptions', type: 'collection', placeholder: 'Add Option', default: {}, displayOptions: { show: { resource: ['contact'], operation: ['create'], sendMode: ['fields'], }, }, options: [ { displayName: 'Additional Attributes', name: 'additionalAttributes', type: 'json', default: '{}', description: 'Key-value pairs for additional contact attributes (JSON format)', placeholder: '{"city": "San Francisco", "country": "United States"}', }, { displayName: 'Avatar URL', name: 'avatarUrl', type: 'string', default: '', description: 'URL to a JPG or PNG avatar image', placeholder: 'https://example.com/avatar.jpg', }, { displayName: 'Blocked', name: 'blocked', type: 'boolean', default: false, description: 'Whether the contact is blocked', }, { displayName: 'Custom Attributes', name: 'customAttributes', type: 'json', default: '{}', description: 'Key-value pairs for predefined custom attributes (JSON format)', placeholder: '{"user_type": "premium", "subscription": "active"}', }, { displayName: 'Email', name: 'email', type: 'string', default: '', description: 'The email address of the contact', placeholder: 'john@example.com', }, { displayName: 'Identifier', name: 'identifier', type: 'string', default: '', description: 'A unique identifier for the contact from an external system', placeholder: 'unique_id_123', }, { displayName: 'Inbox ID', name: 'inboxId', type: 'number', default: '', description: 'ID of the inbox to associate with the contact', placeholder: '1', }, { displayName: 'Name', name: 'name', type: 'string', default: '', description: 'The name of the contact', placeholder: 'John Doe', }, { displayName: 'Phone Number', name: 'phoneNumber', type: 'string', default: '', description: 'The phone number of the contact', placeholder: '+1234567890', }, ], }, { displayName: 'Conversation ID', name: 'conversationId', type: 'number', default: '', required: true, description: 'The numeric ID of the conversation', placeholder: '1', displayOptions: { show: { resource: ['conversation'], operation: ['get', 'updateStatus', 'addLabels', 'updateCustomAttributes'], }, }, }, { displayName: 'Send', name: 'sendMode', type: 'options', options: [ { name: 'Structured Fields', value: 'fields', description: 'Use the structured form fields below', }, { name: 'Custom JSON', value: 'json', description: 'Provide custom JSON for full control over the request', }, ], default: 'fields', description: 'How to send the data', displayOptions: { show: { resource: ['conversation'], operation: ['create'], }, }, }, { displayName: 'Custom JSON', name: 'customJson', type: 'json', default: `{ "source_id": "1234567890", "inbox_id": 1, "contact_id": 1, "message": { "content": "Hello, how can I help you?", "template_params": { "name": "sample_issue_resolution", "category": "UTILITY", "language": "en_US", "processed_params": { "1": "Chatwoot" } } } }`, description: 'Custom JSON payload to send with the request. This will override all structured fields.', displayOptions: { show: { resource: ['conversation'], operation: ['create'], sendMode: ['json'], }, }, }, { displayName: 'Source ID', name: 'sourceId', type: 'string', default: '', required: true, description: 'The source ID for the conversation', placeholder: 'source_123', displayOptions: { show: { resource: ['conversation'], operation: ['create'], sendMode: ['fields'], }, }, }, { displayName: 'Inbox ID', name: 'inboxId', type: 'number', default: '', required: true, description: 'The numeric ID of the inbox', placeholder: '1', displayOptions: { show: { resource: ['conversation'], operation: ['create'], sendMode: ['fields'], }, }, }, { displayName: 'Initial Message Content', name: 'initialMessage', type: 'string', typeOptions: { rows: 3, }, default: '', required: true, description: 'Content of the initial message', placeholder: 'Hello! How can I help you?', displayOptions: { show: { resource: ['conversation'], operation: ['create'], sendMode: ['fields'], }, }, }, { displayName: 'Additional Options', name: 'additionalOptions', type: 'collection', placeholder: 'Add Option', default: {}, displayOptions: { show: { resource: ['conversation'], operation: ['create'], sendMode: ['fields'], }, }, options: [ { displayName: 'Additional Attributes', name: 'additionalAttributes', type: 'json', default: '{}', description: 'Additional attributes like browser information (JSON format)', placeholder: '{"browser": "Chrome", "browser_version": "89.0.4389.82"}', }, { displayName: 'Assignee ID', name: 'assigneeId', type: 'number', default: '', description: 'ID of the agent to assign the conversation to', placeholder: '1', }, { displayName: 'Contact ID', name: 'contactId', type: 'number', default: '', description: 'The ID of an existing contact', placeholder: '1', }, { displayName: 'Custom Attributes', name: 'customAttributes', type: 'json', default: '{}', description: 'Custom attributes for the conversation (JSON format)', placeholder: '{"attribute_key": "attribute_value", "priority": 3}', }, { displayName: 'Snoozed Until', name: 'snoozedUntil', type: 'dateTime', default: '', description: 'Snoozed until date time', }, { displayName: 'Status', name: 'status', type: 'options', options: [ { name: 'Open', value: 'open' }, { name: 'Resolved', value: 'resolved' }, { name: 'Pending', value: 'pending' }, ], default: 'open', description: 'Status of the conversation', }, { displayName: 'Team ID', name: 'teamId', type: 'number', default: '', description: 'ID of the team to assign the conversation to', placeholder: '1', }, { displayName: 'WhatsApp Template Parameters', name: 'templateParams', type: 'fixedCollection', typeOptions: { multipleValues: false, }, description: 'Template parameters for WhatsApp messages', default: {}, options: [ { name: 'template', displayName: 'Template', values: [ { displayName: 'Category', name: 'category', type: 'options', options: [ { name: 'AUTHENTICATION', value: 'AUTHENTICATION' }, { name: 'MARKETING', value: 'MARKETING' }, { name: 'UTILITY', value: 'UTILITY' }, ], default: 'UTILITY', description: 'Category of the template', }, { displayName: 'Language', name: 'language', type: 'string', default: 'en_US', description: 'Language code for the template', placeholder: 'en_US', }, { displayName: 'Processed Parameters', name: 'processedParams', type: 'json', default: '{"1": "parameter_value"}', description: 'Template parameters as JSON object with parameter positions as keys', placeholder: '{"1": "Chatwoot", "2": "Support Team"}', }, { displayName: 'Template Name', name: 'name', type: 'string', default: '', description: 'Name of the WhatsApp template', placeholder: 'sample_issue_resolution', }, ], }, ], }, ], }, { displayName: 'Conversation ID', name: 'conversationId', type: 'number', default: '', required: true, description: 'The numeric ID of the conversation', placeholder: '1', displayOptions: { show: { resource: ['message'], }, }, }, { displayName: 'Message ID', name: 'messageId', type: 'number', default: '', required: true, description: 'The numeric ID of the message', placeholder: '1', displayOptions: { show: { resource: ['message'], operation: ['get', 'update', 'delete'], }, }, }, { displayName: 'Content', name: 'content', type: 'string', typeOptions: { rows: 4, }, default: '', required: true, description: 'The content of the message', placeholder: 'Hello, how can I help you?', displayOptions: { show: { resource: ['message'], operation: ['update'], }, }, }, { displayName: 'Content', name: 'content', type: 'string', typeOptions: { rows: 4, }, default: '', required: true, description: 'The content of the message', placeholder: 'Hello, how can I help you?', displayOptions: { show: { resource: ['message'], operation: ['create'], messageType: ['text'], sendMode: ['fields'], }, }, }, { displayName: 'Additional Options', name: 'additionalOptions', type: 'collection', placeholder: 'Add Option', default: {}, displayOptions: { show: { resource: ['message'], operation: ['create'], messageType: ['text'], sendMode: ['fields'], }, }, options: [ { displayName: 'Private Message', name: 'private', type: 'boolean', default: false, description: 'Whether this is a private message (internal note)', }, { displayName: 'WhatsApp Template Parameters', name: 'templateParams', type: 'fixedCollection', typeOptions: { multipleValues: false, }, description: 'Template parameters for WhatsApp messages', default: {}, options: [ { name: 'template', displayName: 'Template', values: [ { displayName: 'Category', name: 'category', type: 'options', options: [ { name: 'AUTHENTICATION', value: 'AUTHENTICATION' }, { name: 'MARKETING', value: 'MARKETING' }, { name: 'UTILITY', value: 'UTILITY' }, ], default: 'UTILITY', description: 'Category of the template', }, { displayName: 'Language', name: 'language', type: 'string', default: 'en_US', description: 'Language code for the template', placeholder: 'en_US', }, { displayName: 'Processed Parameters', name: 'processedParams', type: 'json', default: '{"1": "parameter_value"}', description: 'Template parameters as JSON object with parameter positions as keys', placeholder: '{"1": "Chatwoot", "2": "Support Team"}', }, { displayName: 'Template Name', name: 'name', type: 'string', default: '', description: 'Name of the WhatsApp template', placeholder: 'sample_issue_resolution', }, ], }, ], }, ], }, { displayName: 'Message Type', name: 'messageType', type: 'options', options: [ { name: 'Interactive Articles', value: 'article' }, { name: 'Interactive Cards', value: 'cards' }, { name: 'Interactive Form', value: 'form' }, { name: 'Interactive Options', value: 'input_select' }, { name: 'Text Message', value: 'text' }, ], default: 'text', description: 'Type of message to send', displayOptions: { show: { resource: ['message'], operation: ['create'], sendMode: ['fields'], }, }, }, { displayName: 'Send', name: 'sendMode', type: 'options', options: [ { name: 'Structured Fields', value: 'fields', description: 'Use the structured form fields below', }, { name: 'Custom JSON', value: 'json', description: 'Provide custom JSON for full control over the request', }, ], default: 'fields', description: 'How to send the data', displayOptions: { show: { resource: ['message'], operation: ['create'], }, }, }, { displayName: 'Custom JSON', name: 'customJson', type: 'json', default: `{ "content": "Hello! How can I help you?", "message_type": "outgoing", "private": false, "template_params": { "name": "sample_issue_resolution", "category": "UTILITY", "language": "en_US", "processed_params": { "1": "Chatwoot" } } }`, description: 'Custom JSON payload to send with the request. This will override all structured fields.', displayOptions: { show: { resource: ['message'], operation: ['create'], sendMode: ['json'], }, }, }, { displayName: 'Message Content', name: 'interactiveContent', type: 'string', default: 'Select one of the items below', required: true, description: 'The message text to display with the options', displayOptions: { show: { resource: ['message'], operation: ['create'], messageType: ['input_select'], sendMode: ['fields'], }, }, }, { displayName: 'Options', name: 'selectOptions', type: 'fixedCollection', typeOptions: { multipleValues: true, sortable: true, }, description: 'Options for the user to select from', default: { items: [{ title: 'Option 1', value: 'option1' }] }, displayOptions: { show: { resource: ['message'], operation: ['create'], messageType: ['input_select'], }, }, options: [ { name: 'items', displayName: 'Option', values: [ { displayName: 'Title', name: 'title', type: 'string', default: '', description: 'Display text for the option', placeholder: 'Option 1', }, { displayName: 'Value', name: 'value', type: 'string', default: '', description: 'Value returned when option is selected', placeholder: 'option1', }, ], }, ], }, { displayName: 'Form Content', name: 'formContent', type: 'string', default: 'Please fill out the form', required: true, description: 'The message text to display with the form', displayOptions: { show: { resource: ['message'], operation: ['create'], messageType: ['form'], }, }, }, { displayName: 'Form Fields', name: 'formFields', type: 'fixedCollection', typeOptions: { multipleValues: true, sortable: true, }, description: 'Form fields to display', default: { items: [{ name: 'email', type: 'email', label: 'Email', placeholder: 'Enter your email' }] }, displayOptions: { show: { resource: ['message'], operation: ['create'], messageType: ['form'], }, }, options: [ { name: 'items', displayName: 'Form Field', values: [ { displayName: 'Default Value', name: 'default', type: 'string', default: '', description: 'Default value for the field', }, { displayName: 'Field Name', name: 'name', type: 'string', default: '', description: 'Internal name for the field', placeholder: 'email', }, { displayName: 'Field Type', name: 'type', type: 'options', options: [ { name: 'Text', value: 'text' }, { name: 'Email', value: 'email' }, { name: 'Text Area', value: 'text_area' }, { name: 'Select', value: 'select' }, ], default: 'text', description: 'Type of form field', }, { displayName: 'Label', name: 'label', type: 'string', default: '', description: 'Display label for the field', placeholder: 'Email Address', }, { displayName: 'Placeholder', name: 'placeholder', type: 'string', default: '', description: 'Placeholder text for the field', placeholder: 'Enter your email', }, { displayName: 'Select Options', name: 'options', type: 'fixedCollection', typeOptions: { multipleValues: true, }, displayOptions: { show: { type: ['select'], }, }, default: { items: [{ label: '🌯 Option 1', value: 'option1' }] }, options: [ {