diff --git a/packages/nodes-base/nodes/Slack/V2/MessageDescription.ts b/packages/nodes-base/nodes/Slack/V2/MessageDescription.ts index 527e687af2..e3708889fb 100644 --- a/packages/nodes-base/nodes/Slack/V2/MessageDescription.ts +++ b/packages/nodes-base/nodes/Slack/V2/MessageDescription.ts @@ -859,6 +859,72 @@ export const messageFields: INodeProperties[] = [ description: 'Timestamp of the message to update', placeholder: '1663233118.856619', }, + { + displayName: 'Message Type', + name: 'messageType', + type: 'options', + displayOptions: { + show: { + operation: ['update'], + resource: ['message'], + }, + }, + description: + 'Whether to send a simple text message, or use Slack’s Blocks UI builder for more sophisticated messages that include form fields, sections and more', + options: [ + { + name: 'Simple Text Message', + value: 'text', + description: 'Supports basic Markdown', + }, + { + name: 'Blocks', + value: 'block', + description: + "Combine text, buttons, form elements, dividers and more in Slack 's visual builder", + }, + { + name: 'Attachments', + value: 'attachment', + }, + ], + default: 'text', + }, + { + displayName: 'Blocks', + name: 'blocksUi', + type: 'string', + required: true, + displayOptions: { + show: { + operation: ['update'], + resource: ['message'], + messageType: ['block'], + }, + }, + typeOptions: { + rows: 3, + }, + description: + "Enter the JSON output from Slack's visual Block Kit Builder here. You can then use expressions to add variable content to your blocks. To create blocks, use Slack's Block Kit Builder", + hint: "To create blocks, use Slack's Block Kit Builder", + default: '', + }, + { + displayName: 'Notification Text', + name: 'text', + type: 'string', + default: '', + displayOptions: { + show: { + operation: ['update'], + resource: ['message'], + messageType: ['block'], + }, + }, + description: + 'Fallback text to display in slack notifications. Supports markdown by default - this can be disabled in "Options".', + }, { displayName: 'Message Text', name: 'text', @@ -868,6 +934,7 @@ export const messageFields: INodeProperties[] = [ show: { resource: ['message'], operation: ['update'], + messageType: ['text'], }, }, description: diff --git a/packages/nodes-base/nodes/Slack/V2/SlackV2.node.ts b/packages/nodes-base/nodes/Slack/V2/SlackV2.node.ts index df0ac7b999..3029fea18d 100644 --- a/packages/nodes-base/nodes/Slack/V2/SlackV2.node.ts +++ b/packages/nodes-base/nodes/Slack/V2/SlackV2.node.ts @@ -25,12 +25,7 @@ import { fileFields, fileOperations } from './FileDescription'; import { reactionFields, reactionOperations } from './ReactionDescription'; import { userGroupFields, userGroupOperations } from './UserGroupDescription'; import { userFields, userOperations } from './UserDescription'; -import { - slackApiRequest, - slackApiRequestAllItems, - validateJSON, - getMessageContent, -} from './GenericFunctions'; +import { slackApiRequest, slackApiRequestAllItems, getMessageContent } from './GenericFunctions'; export class SlackV2 implements INodeType { description: INodeTypeDescription; @@ -779,6 +774,7 @@ export class SlackV2 implements INodeType { if (authentication === 'accessToken' && sendAsUser !== '' && sendAsUser !== undefined) { body.username = sendAsUser; } + // Add all the other options to the request const otherOptions = this.getNodeParameter('otherOptions', i) as IDataObject; let action = 'postMessage'; @@ -836,27 +832,15 @@ export class SlackV2 implements INodeType { {}, { extractValue: true }, ) as string; - const text = this.getNodeParameter('text', i) as string; const ts = this.getNodeParameter('ts', i)?.toString() as string; + const content = getMessageContent.call(this, i, nodeVersion, instanceId); + const body: IDataObject = { channel, - text, ts, + ...content, }; - const jsonParameters = this.getNodeParameter('jsonParameters', i, false); - if (jsonParameters) { - const blocksJson = this.getNodeParameter('blocksJson', i, []) as string; - - if (blocksJson !== '' && validateJSON(blocksJson) === undefined) { - throw new NodeOperationError(this.getNode(), 'Blocks it is not a valid json', { - itemIndex: i, - }); - } - if (blocksJson !== '') { - body.blocks = blocksJson; - } - } // Add all the other options to the request const updateFields = this.getNodeParameter('updateFields', i); Object.assign(body, updateFields);