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:
Ricardo Espinoza 2021-01-07 02:26:17 -05:00 committed by GitHub
parent 1c615b615f
commit 9b6f0ee3ee
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 106 additions and 2 deletions

View file

@ -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 wont 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.',
}, },
], ],

View file

@ -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') {