diff --git a/packages/nodes-base/nodes/Slack/V2/MessageDescription.ts b/packages/nodes-base/nodes/Slack/V2/MessageDescription.ts
index 7e1ecd2778..c3143e8a11 100644
--- a/packages/nodes-base/nodes/Slack/V2/MessageDescription.ts
+++ b/packages/nodes-base/nodes/Slack/V2/MessageDescription.ts
@@ -331,6 +331,21 @@ export const messageFields: INodeProperties[] = [
hint: "To create blocks, use Slack's Block Kit Builder",
default: '',
},
+ {
+ displayName: 'Notification Text',
+ name: 'text',
+ type: 'string',
+ default: '',
+ displayOptions: {
+ show: {
+ operation: ['post'],
+ resource: ['message'],
+ messageType: ['block'],
+ },
+ },
+ description:
+ 'Fallback text to display in slack notifications. Supports markdown by default - this can be disabled in "Options".',
+ },
{
displayName: 'This is a legacy Slack feature. Slack advises to instead use Blocks.',
name: 'noticeAttachments',
diff --git a/packages/nodes-base/nodes/Slack/V2/SlackV2.node.ts b/packages/nodes-base/nodes/Slack/V2/SlackV2.node.ts
index 2a226c6c4f..28b243b744 100644
--- a/packages/nodes-base/nodes/Slack/V2/SlackV2.node.ts
+++ b/packages/nodes-base/nodes/Slack/V2/SlackV2.node.ts
@@ -756,18 +756,25 @@ export class SlackV2 implements INodeType {
: (this.getNodeParameter('user', i, undefined, {
extractValue: true,
}) as string);
- // @ts-ignore
- if (select === 'user' && this.getNodeParameter('user', i).mode === 'username') {
+
+ if (
+ select === 'user' &&
+ (this.getNodeParameter('user', i) as IDataObject).mode === 'username'
+ ) {
target = target.slice(0, 1) === '@' ? target : `@${target}`;
}
const { sendAsUser } = this.getNodeParameter('otherOptions', i) as IDataObject;
let content: IDataObject = {};
+ const text = this.getNodeParameter('text', i, '') as string;
switch (messageType) {
case 'text':
- content = { text: this.getNodeParameter('text', i) as string };
+ content = { text };
break;
case 'block':
content = JSON.parse(this.getNodeParameter('blocksUi', i) as string);
+ if (text) {
+ content.text = text;
+ }
break;
case 'attachment':
content = { attachments: this.getNodeParameter('attachments', i) } as IDataObject;
@@ -803,8 +810,8 @@ export class SlackV2 implements INodeType {
action = 'postEphemeral';
}
}
- //@ts-ignore
- const replyValues = otherOptions.thread_ts?.replyValues as IDataObject;
+
+ const replyValues = (otherOptions.thread_ts as IDataObject)?.replyValues as IDataObject;
Object.assign(body, replyValues);
delete otherOptions.thread_ts;
delete otherOptions.ephemeral;
@@ -879,8 +886,11 @@ export class SlackV2 implements INodeType {
: (this.getNodeParameter('user', i, undefined, {
extractValue: true,
}) as string);
- // @ts-ignore
- if (select === 'user' && this.getNodeParameter('user', i).mode === 'username') {
+
+ if (
+ select === 'user' &&
+ (this.getNodeParameter('user', i) as IDataObject).mode === 'username'
+ ) {
target = target.slice(0, 1) === '@' ? target : `@${target}`;
}
const timestamp = this.getNodeParameter('timestamp', i)?.toString() as string;
@@ -1182,8 +1192,7 @@ export class SlackV2 implements INodeType {
const body: IDataObject = {};
let status;
if (options.status) {
- // @ts-ignore
- status = options.status?.set_status[0] as IDataObject;
+ status = ((options.status as IDataObject)?.set_status as IDataObject[])[0];
if (status.status_expiration === undefined) {
status.status_expiration = 0;
} else {
@@ -1199,15 +1208,16 @@ export class SlackV2 implements INodeType {
const customFields = (options.customFieldUi as IDataObject)
.customFieldValues as IDataObject[];
- options.fields = {};
+ const fields: IDataObject = {};
for (const customField of customFields) {
- //@ts-ignore
- options.fields[customField.id] = {
+ fields[customField.id as string] = {
value: customField.value,
alt: customField.alt,
};
}
+
+ options.fields = fields;
}
Object.assign(body, options);
responseData = await slackApiRequest.call(