interface SlackV2NodeParameters {
approvalOptions?: {
values: {
approvalType?: "single" | "double";
approveLabel?: string;
buttonApprovalStyle?: "primary" | "secondary";
buttonDisapprovalStyle?: "primary" | "secondary";
disapproveLabel?: string;
};
};
approvers?: unknown[];
attachments?: {
author_icon?: string;
author_link?: string;
author_name?: string;
color?: string;
fallback?: string;
fields?: {
item: {
short?: boolean;
title?: string;
value?: string;
}[];
};
footer?: string;
footer_icon?: string;
image_url?: string;
pretext?: string;
text?: string;
thumb_url?: string;
title?: string;
title_link?: string;
ts?: number;
};
authentication?: "oAuth2"
| "accessToken";
binaryData?: boolean;
binaryPropertyName?: string;
blocksUi?: string;
captureResponder?: boolean;
channelId?:
| string
| { mode: "id"
| "list"
| "url"; value: string }
| {
mode: "id" | "list" | "url" | "name";
value: string;
};
channelVisibility?: "public"
| "private";
defineForm?: "json" | "fields";
email?: string;
fileContent?: string;
fileId?: string;
filters?:
| {
excludeArchived?: boolean;
types?: (
| "public_channel"
| "private_channel"
| "mpim"
| "im"
)[];
}
| {
inclusive?: boolean;
latest?: string;
oldest?: string;
}
| {
channelId?: {
mode: "id"
| "list"
| "url";
value: string;
};
latest?: string;
oldest?: string;
}
| {
channelId?: string;
showFilesHidden?: boolean;
tsFrom?: string;
tsTo?: string;
types?: (
| "all"
| "spaces"
| "gdocs"
| "images"
| "pdfs"
| "snippets"
| "zips"
)[];
userId?: string;
};
formFields?: {
values: {
acceptFileTypes?: string;
defaultValue?: string;
elementName?: string;
fieldLabel: string;
fieldName: string;
fieldOptions: { values: { option?: string }[] };
fieldType:
| "number"
| "file"
| "text"
| "email"
| "password"
| "date"
| "checkbox"
| "html"
| "dropdown"
| "hiddenField"
| "radio"
| "textarea";
fieldValue?: string;
formatDate?: string;
html?: string;
limitSelection?: "exact"
| "range"
| "unlimited";
maxSelections?: number;
minSelections?: number;
multipleFiles?: boolean;
multiselect?: boolean;
multiselectLegacyNotice?: string;
numberOfSelections?: number;
placeholder?: string;
requiredField?: boolean;
}[];
};
jsonOutput?: string;
limit?: number;
message?: string;
messageType?: "text"
| "attachment"
| "block";
name?: string;
operation?:
| "create"
| "get"
| "getAll"
| "update"
| "add"
| "remove"
| "delete"
| "search"
| "close"
| "upload"
| "member"
| "open"
| "sendAndWait"
| "history"
| "disable"
| "enable"
| "post"
| "schedule"
| "rename"
| "getProfile"
| "invite"
| "join"
| "kick"
| "leave"
| "archive"
| "info"
| "replies"
| "setPurpose"
| "setTopic"
| "unarchive"
| "getPermalink"
| "getPresence"
| "deleteScheduled"
| "getManyScheduled"
| "lookupByEmail"
| "updateProfile"
| "updateUsers"
| "getUsers";
option?: { include_count?: boolean };
options?:
| { includeNumMembers?: boolean }
| {
channelId?: string;
returnIm?: boolean;
users?: unknown[];
}
| { searchChannel?: unknown[] }
| {
appendAttribution?: boolean;
limitWaitTime?: {
values: {
limitType?:
| "afterTimeInterval"
| "atSpecifiedTime";
maxDateAndTime?: string;
resumeAmount?: number;
resumeUnit?: "minutes"
| "hours"
| "days";
};
};
thread_ts?: {
replyValues: {
reply_broadcast?: boolean;
thread_ts?: number;
};
};
}
| {
appendAttribution?: boolean;
limitWaitTime?: {
values: {
limitType?: | "afterTimeInterval"
| "atSpecifiedTime";
maxDateAndTime?: string;
resumeAmount?: number;
resumeUnit?: "minutes"
| "hours"
| "days";
};
};
messageButtonLabel?: string;
responseFormButtonLabel?: string;
responseFormCustomCss?: string;
responseFormDescription?: string;
responseFormTitle?: string;
thread_ts?: {
replyValues: {
reply_broadcast?: boolean;
thread_ts?: number;
};
};
}
| { fileComment?: string }
| {
channelId?: string;
fileComment?: string;
fileId?: string;
timestamp?: number;
}
| {
channelId?: string;
channelIds?: unknown[];
fileName?: string;
initialComment?: string;
threadTs?: string;
title?: string;
}
| {
customFieldUi?: {
customFieldValues: {
alt?: string;
id?: string;
value?: string;
}[];
};
email?: string;
first_name?: string;
last_name?: string;
status?: {
set_status: {
status_emoji?: string;
status_expiration?: string;
status_text?: string;
}[];
};
user?: string;
}
| { include_count?: boolean }
| {
include_count?: boolean;
include_disabled?: boolean;
include_users?: boolean;
}
| { resolveData?: boolean };
Options?: {
channelIds?: unknown[];
description?: string;
handle?: string;
include_count?: boolean;
};
otherOptions?: | {
botProfile?: {
imageValues: {
icon_emoji?: string;
icon_url?: string;
profilePhotoType?: "image"
| "emoji";
};
};
ephemeral?: | boolean
| {
ephemeralValues: {
ephemeral?: boolean;
user?: { mode: "id"
| "list"; value: string };
};
};
includeLinkToWorkflow?: boolean;
link_names?: boolean;
mrkdwn?: boolean;
sendAsUser?: string;
thread_ts?: {
replyValues: {
reply_broadcast?: boolean;
thread_ts?: number;
};
};
unfurl_links?: boolean;
unfurl_media?: boolean;
}
| { includeLinkToWorkflow?: boolean };
postAt?: string;
postDecisionBehavior?:
| "showOutcome"
| "removeButtons"
| "keepMessage";
purpose?: string;
query?: string;
resolveData?: boolean;
resource?: | "file"
| "message"
| "user"
| "channel"
| "userGroup"
| "star"
| "reaction";
responseType?: "approval"
| "freeText"
| "customForm";
returnAll?: boolean;
scheduledMessageId?: string;
select?: "user" | "channel";
sort?: "asc" | "desc" | "relevance";
target?: "file" | "message";
text?: string;
timestamp?: number;
topic?: string;
ts?: number;
unauthorizedReplyText?: string;
updateFields?:
| {
link_names?: boolean;
parse?: "none"
| "client"
| "full";
}
| {
channels?: unknown[];
description?: string;
handle?: string;
include_count?: boolean;
name?: string;
};
user?: | {
mode: "id"
| "list"
| "username";
value: string;
}
| { mode: "id"
| "list"; value: string };
userGroupId?: string;
userId?: string;
userIds?: unknown[];
users?: unknown[];
}
Properties§
readonly approval Options?: { ... }
readonly approvers?: unknown[]
Restrict who can approve or decline: a click from anyone not listed is ignored and they get a private notice. Leave empty to let anyone respond. Choose from the list, or specify IDs using an expression. Default: [] Type options: {"loadOptionsMethod":"getUsers"}
readonly attachments?: { ... }
Default: {} Type options: {"multipleValues":true,"multipleValueButtonText":"Add attachment"}
readonly authentication?: "oAuth2" | "accessToken"
Default: "accessToken"
readonly binary Data?: boolean
Whether the data to upload should be taken from binary field
readonly binary Property Name?: string
Name of the binary property which contains the data for the file to be uploaded Default: "data"
readonly blocks Ui?: string
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 Type options: {"rows":3}
readonly capture Responder?: boolean
Whether to use Slack interactive buttons so the responder's identity (ID, name, email) is captured and returned with the response. Requires the Slack app to have Interactivity enabled (Request URL pointed at this n8n instance), a signing secret on the credential, and the users:read and users:read.email scopes.
readonly channel Id?:
| string
| { mode: "id"
| "list"
| "url"; value: string }
| {
mode: "id" | "list" | "url" | "name";
value: string;
}
The Slack channel to archive Default: {"mode":"list","value":""}
readonly channel Visibility?: "public" | "private"
Whether to create a Public or a Private Slack channel. More info. Default: "public"
readonly define Form?: "json" | "fields"
Default: "fields"
readonly email?: string
The email address of the user to look up
readonly file Content?: string
§readonly file Id?: string
File to add star to
readonly filters?:
| {
excludeArchived?: boolean;
types?: (
| "public_channel"
| "private_channel"
| "mpim"
| "im"
)[];
}
| {
inclusive?: boolean;
latest?: string;
oldest?: string;
}
| {
channelId?: {
mode: "id"
| "list"
| "url";
value: string;
};
latest?: string;
oldest?: string;
}
| {
channelId?: string;
showFilesHidden?: boolean;
tsFrom?: string;
tsTo?: string;
types?: (
| "all"
| "spaces"
| "gdocs"
| "images"
| "pdfs"
| "snippets"
| "zips"
)[];
userId?: string;
}
Default: {}
readonly form Fields?: { ... }
Default: {} Type options: {"multipleValues":true,"sortable":true,"fixedCollection":{"itemTitle":"={{ $collection.item.properties.find(p => p.name === "fieldType").options.find(o => o.value === $collection.item.value.fieldType).name }}"}}
readonly json Output?: string
Default: "[\n {\n "fieldLabel": "Name",\n "placeholder": "enter your name",\n "requiredField": true\n },\n {\n "fieldLabel": "Age",\n "fieldType": "number",\n "placeholder": "enter your age"\n },\n {\n "fieldLabel": "Email",\n "fieldType": "email",\n "requiredField": true\n },\n {\n "fieldLabel": "Textarea",\n "fieldType": "textarea"\n },\n {\n "fieldLabel": "Dropdown Options",\n "fieldType": "dropdown",\n "fieldOptions": {\n "values": [\n {\n "option": "option 1"\n },\n {\n "option": "option 2"\n }\n ]\n },\n "requiredField": true\n },\n {\n "fieldLabel": "Checkboxes",\n "fieldType": "checkbox",\n "fieldOptions": {\n "values": [\n {\n "option": "option 1"\n },\n {\n "option": "option 2"\n }\n ]\n }\n },\n {\n "fieldLabel": "Radio",\n "fieldType": "radio",\n "fieldOptions": {\n "values": [\n {\n "option": "option 1"\n },\n {\n "option": "option 2"\n }\n ]\n }\n },\n {\n "fieldLabel": "Email",\n "fieldType": "email",\n "placeholder": "me@mail.con"\n },\n {\n "fieldLabel": "File",\n "fieldType": "file",\n "multipleFiles": true,\n "acceptFileTypes": ".jpg, .png"\n },\n {\n "fieldLabel": "Number",\n "fieldType": "number"\n },\n {\n "fieldLabel": "Password",\n "fieldType": "password"\n }\n]\n" Type options: {"rows":5}
readonly limit?: number
Max number of results to return Default: 50 Type options: {"minValue":1,"maxValue":100}
readonly message?: string
Type options: {"rows":4}
readonly message Type?: "text" | "attachment" | "block"
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 Default: "text"
readonly name?: string
New name for conversation
readonly operation?:
| "create"
| "get"
| "getAll"
| "update"
| "add"
| "remove"
| "delete"
| "search"
| "close"
| "upload"
| "member"
| "open"
| "sendAndWait"
| "history"
| "disable"
| "enable"
| "post"
| "schedule"
| "rename"
| "getProfile"
| "invite"
| "join"
| "kick"
| "leave"
| "archive"
| "info"
| "replies"
| "setPurpose"
| "setTopic"
| "unarchive"
| "getPermalink"
| "getPresence"
| "deleteScheduled"
| "getManyScheduled"
| "lookupByEmail"
| "updateProfile"
| "updateUsers"
| "getUsers"
Default: "create"
readonly option?: { ... }
Default: {}
readonly options?:
| { includeNumMembers?: boolean }
| {
channelId?: string;
returnIm?: boolean;
users?: unknown[];
}
| { searchChannel?: unknown[] }
| {
appendAttribution?: boolean;
limitWaitTime?: {
values: {
limitType?:
| "afterTimeInterval"
| "atSpecifiedTime";
maxDateAndTime?: string;
resumeAmount?: number;
resumeUnit?: "minutes"
| "hours"
| "days";
};
};
thread_ts?: {
replyValues: {
reply_broadcast?: boolean;
thread_ts?: number;
};
};
}
| {
appendAttribution?: boolean;
limitWaitTime?: {
values: {
limitType?: | "afterTimeInterval"
| "atSpecifiedTime";
maxDateAndTime?: string;
resumeAmount?: number;
resumeUnit?: "minutes"
| "hours"
| "days";
};
};
messageButtonLabel?: string;
responseFormButtonLabel?: string;
responseFormCustomCss?: string;
responseFormDescription?: string;
responseFormTitle?: string;
thread_ts?: {
replyValues: {
reply_broadcast?: boolean;
thread_ts?: number;
};
};
}
| { fileComment?: string }
| {
channelId?: string;
fileComment?: string;
fileId?: string;
timestamp?: number;
}
| {
channelId?: string;
channelIds?: unknown[];
fileName?: string;
initialComment?: string;
threadTs?: string;
title?: string;
}
| {
customFieldUi?: {
customFieldValues: {
alt?: string;
id?: string;
value?: string;
}[];
};
email?: string;
first_name?: string;
last_name?: string;
status?: {
set_status: {
status_emoji?: string;
status_expiration?: string;
status_text?: string;
}[];
};
user?: string;
}
| { include_count?: boolean }
| {
include_count?: boolean;
include_disabled?: boolean;
include_users?: boolean;
}
| { resolveData?: boolean }
Default: {}
readonly Options?: { ... }
Default: {}
readonly other Options?:
| {
botProfile?: {
imageValues: {
icon_emoji?: string;
icon_url?: string;
profilePhotoType?: "image"
| "emoji";
};
};
ephemeral?: | boolean
| {
ephemeralValues: {
ephemeral?: boolean;
user?: { mode: "id"
| "list"; value: string };
};
};
includeLinkToWorkflow?: boolean;
link_names?: boolean;
mrkdwn?: boolean;
sendAsUser?: string;
thread_ts?: {
replyValues: {
reply_broadcast?: boolean;
thread_ts?: number;
};
};
unfurl_links?: boolean;
unfurl_media?: boolean;
}
| { includeLinkToWorkflow?: boolean }
Other options to set Default: {}
readonly post At?: string
When the message should be sent. Must be in the future and within 120 days from now.
readonly post Decision Behavior?: "showOutcome" | "removeButtons" | "keepMessage"
What happens to the original message once someone approves or declines Default: "showOutcome"
readonly purpose?: string
A new, specialer purpose
readonly query?: string
The text to search for within messages
readonly resolve Data?: boolean
Whether to resolve the data automatically. By default the response only contain the ID to resource.
readonly resource?:
| "file"
| "message"
| "user"
| "channel"
| "userGroup"
| "star"
| "reaction"
Default: "message"
readonly response Type?: "approval" | "freeText" | "customForm"
Default: "approval"
readonly return All?: boolean
Whether to return all results or only up to a given limit
readonly scheduled Message Id?: string
The ID returned when the message was originally scheduled
readonly select?: "user" | "channel"
§readonly sort?: "asc" | "desc" | "relevance"
How search results should be sorted. You can sort by. Default: "desc"
readonly target?: "file" | "message"
Choose whether to add a star to a message or a file
readonly text?: string
The message text to post. Supports markdown by default - this can be disabled in "Options".
readonly timestamp?: number
Timestamp of the message to message
readonly topic?: string
§readonly ts?: number
Timestamp of the message to reply
Private (ephemeral) message shown to someone who clicks a button but is not in the approver list Default: "You are not authorized to respond to this request."
readonly update Fields?:
| {
link_names?: boolean;
parse?: "none"
| "client"
| "full";
}
| {
channels?: unknown[];
description?: string;
handle?: string;
include_count?: boolean;
name?: string;
}
Default: {}
readonly user?:
| {
mode: "id"
| "list"
| "username";
value: string;
}
| { mode: "id"
| "list"; value: string }
Default: {"mode":"list","value":""}
readonly user Group Id?: string
The encoded ID of the User Group to update
readonly user Id?: string
Choose from the list, or specify an ID using an expression Type options: {"loadOptionsMethod":"getUsers"}
readonly user Ids?: unknown[]
The ID of the user to invite into channel. Choose from the list, or specify IDs using an expression. Default: [] Type options: {"loadOptionsMethod":"getUsers"}
readonly users?: unknown[]
Users to add to the User Group. Existing users will be preserved. Choose from the list, or specify IDs using an expression. Default: [] Type options: {"loadOptionsMethod":"getUsers"}
Default: {}