UNPKG

n8n-nodes-walichat

Version:

n8n plugin for WaliChat

383 lines (382 loc) 13.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.executeChatMessageOperations = exports.chatMessageProperties = void 0; const request_1 = require("../request"); exports.chatMessageProperties = [ { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, displayOptions: { show: { resource: ['chat-messages'], }, }, options: [ { name: 'Get Messages', value: 'getChatMessages', description: 'Retrieve chat messages filtered by various parameters', }, { name: 'Get Message Details', value: 'getDeviceMessageDetails', description: 'Get detailed information about a specific message', }, { name: 'Get Message Delivery Info', value: 'getMessageAckInfo', description: 'Get delivery information for an outbound message', }, { name: 'Edit Message', value: 'editMessage', description: 'Edit a sent message (within 20 minutes of sending)', }, { name: 'Delete Message', value: 'deleteDeviceMessage', description: 'Delete a message locally or revoke it for everyone', }, ], default: 'getChatMessages', }, { displayName: 'WhatsApp Number', name: 'device', type: 'string', required: true, default: '', typeOptions: { loadOptionsMethod: 'getDevices', }, displayOptions: { show: { resource: ['chat-messages'], }, }, description: 'The ID of the WhatsApp number', }, // GET MESSAGES FILTERS { displayName: 'Filters', name: 'filters', type: 'collection', placeholder: 'Add Filter', default: {}, displayOptions: { show: { resource: ['chat-messages'], operation: ['getChatMessages'], }, }, options: [ { displayName: 'Flow', name: 'flow', type: 'options', options: [ { name: 'Inbound', value: 'inbound' }, { name: 'Outbound', value: 'outbound' }, ], default: '', description: 'Filter by inbound or outbound messages', }, { displayName: 'Delivery Status', name: 'ack', type: 'multiOptions', options: [ { name: 'Pending', value: 'pending' }, { name: 'Sent', value: 'sent' }, { name: 'Delivered', value: 'delivered' }, { name: 'Read', value: 'read' }, { name: 'Failed', value: 'failed' }, ], default: [], description: 'Filter messages by delivery ACK status', }, { displayName: 'WhatsApp IDs', name: 'wid', type: 'string', typeOptions: { multipleValues: true, }, default: [], description: 'Filter messages by WID (WhatsApp ID)', }, { displayName: 'Search', name: 'search', type: 'string', default: '', description: 'Search messages by text content, contact name or media filename', }, { displayName: 'Chat ID', name: 'chat', type: 'string', typeOptions: { loadOptionsMethod: 'getGroups', loadOptionsDependsOn: ['device'], }, default: '', description: 'Filter messages by chat WhatsApp ID (user, group, or channel)', }, { displayName: 'From', name: 'from', type: 'string', default: '', description: 'Return messages sent from a given phone number or WhatsApp WID', }, { displayName: 'To', name: 'to', type: 'string', default: '', description: 'Return messages received to the given phone number or WhatsApp WID', }, { displayName: 'Chat Type', name: 'type', type: 'multiOptions', options: [ { name: 'Chat', value: 'chat' }, { name: 'Group', value: 'group' }, { name: 'Channel', value: 'channel' }, { name: 'Community', value: 'community' }, ], default: [], description: 'Filter messages by chat type', }, { displayName: 'Reference', name: 'reference', type: 'string', default: '', description: 'Filter messages by reference field exact match', }, { displayName: 'Message Type', name: 'kind', type: 'multiOptions', options: [ { name: 'Text', value: 'text' }, { name: 'Image', value: 'image' }, { name: 'Audio', value: 'audio' }, { name: 'Voice', value: 'voice' }, { name: 'Video', value: 'video' }, { name: 'Document', value: 'document' }, { name: 'Contact', value: 'contact' }, { name: 'Location', value: 'location' }, { name: 'System', value: 'system' }, ], default: [], description: 'Filter message by type', }, { displayName: 'Sync Messages', name: 'sync', type: 'boolean', default: false, description: 'Whether to sync messages from the WhatsApp session if no messages are available', }, { displayName: 'Begin From Message ID', name: 'begin', type: 'string', default: '', description: 'Return newest messages starting from the given message ID', }, { displayName: 'End At Message ID', name: 'end', type: 'string', default: '', description: 'Return oldest messages starting from the given message ID', }, { displayName: 'Created After', name: 'after', type: 'dateTime', default: '', description: 'Messages created after the given date', }, { displayName: 'Created Before', name: 'before', type: 'dateTime', default: '', description: 'Messages created before the given date', }, { displayName: 'Include', name: 'include', type: 'multiOptions', options: [ { name: 'Contact', value: 'contact' }, { name: 'Chat', value: 'chat' }, { name: 'Media', value: 'media' }, ], default: [], description: 'Include nested related documents per message', }, { displayName: 'Sort', name: 'sort', type: 'options', options: [ { name: 'Recent First', value: 'date:desc' }, { name: 'Oldest First', value: 'date:asc' }, ], default: 'date:desc', description: 'Sort messages by date', }, { displayName: 'Results Page Size', name: 'size', type: 'number', default: 20, description: 'Number of results per page', }, { displayName: 'Page Number', name: 'page', type: 'number', default: 0, description: 'Page number (starting from 0)', }, { displayName: 'Skip Messages', name: 'skip', type: 'number', default: 0, description: 'Skip previous messages (only applicable if sync=true)', }, ], }, // MESSAGE ID PARAMETER FOR SINGLE MESSAGE OPERATIONS { displayName: 'Message ID', name: 'messageId', type: 'string', required: true, default: '', displayOptions: { show: { resource: ['chat-messages'], operation: ['getDeviceMessageDetails', 'getMessageAckInfo', 'editMessage', 'deleteDeviceMessage'], }, }, description: 'The ID of the message (WhatsApp hexadecimal ID)', }, // EDIT MESSAGE PARAMETERS { displayName: 'New Message Text', name: 'message', type: 'string', typeOptions: { rows: 4, }, required: true, default: '', displayOptions: { show: { resource: ['chat-messages'], operation: ['editMessage'], }, }, description: 'New text content for the message', }, // DELETE MESSAGE PARAMETERS { displayName: 'Options', name: 'deleteOptions', type: 'collection', placeholder: 'Add Option', default: {}, displayOptions: { show: { resource: ['chat-messages'], operation: ['deleteDeviceMessage'], }, }, options: [ { displayName: 'Clean Message Box', name: 'clean', type: 'boolean', default: false, description: 'Delete the message deletion information box from the chat list', }, { displayName: 'Force Delete Locally', name: 'force', type: 'boolean', default: false, description: 'Force message deletion locally even if it cannot be revoked on the receiver side', }, { displayName: 'Revoke for Everyone', name: 'revoke', type: 'boolean', default: false, description: 'Revoke and delete message for everyone (only works within 60 minutes of sending)', }, ], }, ]; async function executeChatMessageOperations(index) { const operation = this.getNodeParameter('operation', index); const device = this.getNodeParameter('device', index); // GET CHAT MESSAGES if (operation === 'getChatMessages') { const filters = this.getNodeParameter('filters', index, {}); const queryParameters = {}; // Add all filters to query parameters for (const [key, value] of Object.entries(filters)) { if (value !== undefined && value !== '' && (typeof value !== 'object' || (Array.isArray(value) && value.length > 0))) { queryParameters[key] = value; } } return (0, request_1.request)(this, 'GET', `/chat/${device}/messages`, undefined, queryParameters); } // GET DEVICE MESSAGE DETAILS if (operation === 'getDeviceMessageDetails') { const messageId = this.getNodeParameter('messageId', index); return (0, request_1.request)(this, 'GET', `/chat/${device}/messages/${messageId}`); } // GET MESSAGE ACK INFO if (operation === 'getMessageAckInfo') { const messageId = this.getNodeParameter('messageId', index); return (0, request_1.request)(this, 'GET', `/chat/${device}/messages/${messageId}/ackinfo`); } // EDIT MESSAGE if (operation === 'editMessage') { const messageId = this.getNodeParameter('messageId', index); const message = this.getNodeParameter('message', index); return (0, request_1.request)(this, 'PATCH', `/chat/${device}/messages/${messageId}`, { message }); } // DELETE DEVICE MESSAGE if (operation === 'deleteDeviceMessage') { const messageId = this.getNodeParameter('messageId', index); const deleteOptions = this.getNodeParameter('deleteOptions', index, {}); const queryParameters = {}; if (deleteOptions.clean) { queryParameters.clean = 'true'; } if (deleteOptions.force) { queryParameters.force = 'true'; } if (deleteOptions.revoke) { queryParameters.revoke = 'true'; } return (0, request_1.request)(this, 'DELETE', `/chat/${device}/messages/${messageId}`, undefined, queryParameters); } throw new Error(`The operation "${operation}" is not supported for chat messages!`); } exports.executeChatMessageOperations = executeChatMessageOperations;