mirror of
https://github.com/n8n-io/n8n.git
synced 2025-03-05 20:50:17 -08:00
⚡ Add Ephemeral Message support (#1302)
* Add postEphemeral on Slack node * ⚡ Add ephemeral option to message:post * ⚡ Small fix Co-authored-by: davinerd <anathema@anche.no>
This commit is contained in:
parent
1c615b615f
commit
9b6f0ee3ee
|
@ -1,4 +1,6 @@
|
||||||
import { INodeProperties } from 'n8n-workflow';
|
import {
|
||||||
|
INodeProperties,
|
||||||
|
} from 'n8n-workflow';
|
||||||
|
|
||||||
export const messageOperations = [
|
export const messageOperations = [
|
||||||
{
|
{
|
||||||
|
@ -34,6 +36,25 @@ export const messageFields = [
|
||||||
/* -------------------------------------------------------------------------- */
|
/* -------------------------------------------------------------------------- */
|
||||||
/* message:post */
|
/* message:post */
|
||||||
/* -------------------------------------------------------------------------- */
|
/* -------------------------------------------------------------------------- */
|
||||||
|
{
|
||||||
|
displayName: 'Ephemeral',
|
||||||
|
name: 'ephemeral',
|
||||||
|
type: 'boolean',
|
||||||
|
default: false,
|
||||||
|
displayOptions: {
|
||||||
|
show: {
|
||||||
|
operation: [
|
||||||
|
'post',
|
||||||
|
],
|
||||||
|
resource: [
|
||||||
|
'message',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
description: `Ephemeral messages behave differently from regular messages on Slack.<br/>
|
||||||
|
They disappear when Slack reloads and won’t show up again when Slack is opened in a <br/>
|
||||||
|
new browser window or on a different device`,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
displayName: 'Channel',
|
displayName: 'Channel',
|
||||||
name: 'channel',
|
name: 'channel',
|
||||||
|
@ -53,6 +74,28 @@ export const messageFields = [
|
||||||
required: true,
|
required: true,
|
||||||
description: 'The channel to send the message to.',
|
description: 'The channel to send the message to.',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
displayName: 'User',
|
||||||
|
name: 'user',
|
||||||
|
type: 'string',
|
||||||
|
default: '',
|
||||||
|
placeholder: 'User ID',
|
||||||
|
displayOptions: {
|
||||||
|
show: {
|
||||||
|
operation: [
|
||||||
|
'post',
|
||||||
|
],
|
||||||
|
resource: [
|
||||||
|
'message',
|
||||||
|
],
|
||||||
|
ephemeral: [
|
||||||
|
true,
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
required: true,
|
||||||
|
description: 'The user ID to send the message to.',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
displayName: 'Text',
|
displayName: 'Text',
|
||||||
name: 'text',
|
name: 'text',
|
||||||
|
@ -401,6 +444,19 @@ export const messageFields = [
|
||||||
name: 'mrkdwn',
|
name: 'mrkdwn',
|
||||||
type: 'boolean',
|
type: 'boolean',
|
||||||
default: true,
|
default: true,
|
||||||
|
displayOptions: {
|
||||||
|
show: {
|
||||||
|
'/operation': [
|
||||||
|
'post',
|
||||||
|
],
|
||||||
|
'/resource': [
|
||||||
|
'message',
|
||||||
|
],
|
||||||
|
'/ephemeral': [
|
||||||
|
false,
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
description: 'Use Slack Markdown parsing.',
|
description: 'Use Slack Markdown parsing.',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -408,6 +464,19 @@ export const messageFields = [
|
||||||
name: 'reply_broadcast',
|
name: 'reply_broadcast',
|
||||||
type: 'boolean',
|
type: 'boolean',
|
||||||
default: false,
|
default: false,
|
||||||
|
displayOptions: {
|
||||||
|
show: {
|
||||||
|
'/operation': [
|
||||||
|
'post',
|
||||||
|
],
|
||||||
|
'/resource': [
|
||||||
|
'message',
|
||||||
|
],
|
||||||
|
'/ephemeral': [
|
||||||
|
false,
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
description: 'Used in conjunction with thread_ts and indicates whether reply should be made visible to everyone in the channel or conversation.',
|
description: 'Used in conjunction with thread_ts and indicates whether reply should be made visible to everyone in the channel or conversation.',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -415,6 +484,19 @@ export const messageFields = [
|
||||||
name: 'unfurl_links',
|
name: 'unfurl_links',
|
||||||
type: 'boolean',
|
type: 'boolean',
|
||||||
default: false,
|
default: false,
|
||||||
|
displayOptions: {
|
||||||
|
show: {
|
||||||
|
'/operation': [
|
||||||
|
'post',
|
||||||
|
],
|
||||||
|
'/resource': [
|
||||||
|
'message',
|
||||||
|
],
|
||||||
|
'/ephemeral': [
|
||||||
|
false,
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
description: 'Pass true to enable unfurling of primarily text-based content.',
|
description: 'Pass true to enable unfurling of primarily text-based content.',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -422,6 +504,19 @@ export const messageFields = [
|
||||||
name: 'unfurl_media',
|
name: 'unfurl_media',
|
||||||
type: 'boolean',
|
type: 'boolean',
|
||||||
default: true,
|
default: true,
|
||||||
|
displayOptions: {
|
||||||
|
show: {
|
||||||
|
'/operation': [
|
||||||
|
'post',
|
||||||
|
],
|
||||||
|
'/resource': [
|
||||||
|
'message',
|
||||||
|
],
|
||||||
|
'/ephemeral': [
|
||||||
|
false,
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
description: 'Pass false to disable unfurling of media content.',
|
description: 'Pass false to disable unfurling of media content.',
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|
|
@ -516,12 +516,20 @@ export class Slack implements INodeType {
|
||||||
//https://api.slack.com/methods/chat.postMessage
|
//https://api.slack.com/methods/chat.postMessage
|
||||||
if (operation === 'post') {
|
if (operation === 'post') {
|
||||||
const channel = this.getNodeParameter('channel', i) as string;
|
const channel = this.getNodeParameter('channel', i) as string;
|
||||||
|
const ephemeral = this.getNodeParameter('ephemeral', i) as boolean;
|
||||||
const text = this.getNodeParameter('text', i) as string;
|
const text = this.getNodeParameter('text', i) as string;
|
||||||
const body: IDataObject = {
|
const body: IDataObject = {
|
||||||
channel,
|
channel,
|
||||||
text,
|
text,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let action = 'postMessage';
|
||||||
|
|
||||||
|
if (ephemeral) {
|
||||||
|
body.user = this.getNodeParameter('user', i) as string;
|
||||||
|
action = 'postEphemeral';
|
||||||
|
}
|
||||||
|
|
||||||
const jsonParameters = this.getNodeParameter('jsonParameters', i) as boolean;
|
const jsonParameters = this.getNodeParameter('jsonParameters', i) as boolean;
|
||||||
|
|
||||||
if (authentication === 'accessToken') {
|
if (authentication === 'accessToken') {
|
||||||
|
@ -752,10 +760,11 @@ export class Slack implements INodeType {
|
||||||
body.blocks = blocksJson;
|
body.blocks = blocksJson;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add all the other options to the request
|
// Add all the other options to the request
|
||||||
const otherOptions = this.getNodeParameter('otherOptions', i) as IDataObject;
|
const otherOptions = this.getNodeParameter('otherOptions', i) as IDataObject;
|
||||||
Object.assign(body, otherOptions);
|
Object.assign(body, otherOptions);
|
||||||
responseData = await slackApiRequest.call(this, 'POST', '/chat.postMessage', body, qs);
|
responseData = await slackApiRequest.call(this, 'POST', `/chat.${action}`, body, qs);
|
||||||
}
|
}
|
||||||
//https://api.slack.com/methods/chat.update
|
//https://api.slack.com/methods/chat.update
|
||||||
if (operation === 'update') {
|
if (operation === 'update') {
|
||||||
|
|
Loading…
Reference in a new issue