Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(Slack Node): Add block support for message updates #8925

Merged
merged 3 commits into from
May 15, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 67 additions & 0 deletions packages/nodes-base/nodes/Slack/V2/MessageDescription.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 <a target='_blank' href='https://app.slack.com/block-kit-builder'>Slack's Block Kit Builder</a>",
hint: "To create blocks, use <a target='_blank' href='https://app.slack.com/block-kit-builder'>Slack's Block Kit Builder</a>",
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 <a href="https://api.slack.com/reference/surfaces/formatting">markdown</a> by default - this can be disabled in "Options".',
},
{
displayName: 'Message Text',
name: 'text',
Expand All @@ -868,6 +934,7 @@ export const messageFields: INodeProperties[] = [
show: {
resource: ['message'],
operation: ['update'],
messageType: ['text'],
},
},
description:
Expand Down
26 changes: 5 additions & 21 deletions packages/nodes-base/nodes/Slack/V2/SlackV2.node.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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';
Expand Down Expand Up @@ -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);
Expand Down
Loading