n8n(Nodenamtion)でSlackを使ったアプリを作っていてどうしても欲しい機能があったので追加してのプルリクエストを投稿しました。
Add chat.getPermalink interface in Slack Nodes. #1366
現在は、マージされリリースされています。
このPRは、Slackのメッセージに対しパーマリンクを得るためのAPIchat.getPermalink
を呼び出すためのものです。
変更したのは以下のファイルです
- packages/nodes-base/nodes/Slack/MessageDescription.ts
- packages/nodes-base/nodes/Slack/Slack.node.ts
順番に解説します
packages/nodes-base/nodes/Slack/MessageDescription.ts
SlackノードはたくさんのSlackAPIを既にサポートしており、リソースとして分類されています。
利用にあたってはまずこのリソースから一つ選択する必要があります。
今回、扱うリソースはMessage
です。このメッセージについてn8nのノード設定画面にあらわれる項目を構成するファイルがMessageDescription.ts
です。tsファイルの中身はmessageOperations
とmessageFields
のハッシュになっていてここに設定項目を定義していく感じです。
messageOperations
にはOperationメニューの項目を以下のように設定し
1
2
3
4
5
| {
name: 'GetPermalink',
value: 'getPermalink',
description: 'Get Permanent Link of a message',
},
|
このようになります。
messageFields
には個別の設定内容を以下のように設定します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
| {
displayName: 'Channel',
name: 'channelId',
type: 'options',
typeOptions: {
loadOptionsMethod: 'getChannels',
},
required: true,
default: '',
displayOptions: {
show: {
resource: [
'message',
],
operation: [
'getPermalink',
],
},
},
description: 'Channel containing the message to be updated.',
},
{
displayName: 'TS',
name: 'messageTs',
type: 'string',
required: true,
default: '',
displayOptions: {
show: {
resource: [
'message',
],
operation: [
'getPermalink',
],
},
},
description: `Timestamp of the message to get permanent link.`,
},
|
Slack API chat.getPermalink
が要求する、ChannelとTimeStamp(TS)の入力フォームが定義されます。以下のようになります。
ちょっと長いですが、内容は難しくないと思います。
packages/nodes-base/nodes/Slack/Slack.node.ts
次に実際の処理の部分をSlack.node.ts
に書きます。SlackのAPIを呼び出す処理を以下のように実装しました。
1
2
3
4
5
6
| if (operation === 'getPermalink') {
const channel = this.getNodeParameter('channelId', i) as string;
const ts = this.getNodeParameter('messageTs', i) as string;
const qs = { channel: channel, message_ts: ts };
responseData = await slackApiRequest.call(this, 'GET', '/chat.getPermalink', {}, qs);
}
|
これだけ書くとわかりにくい部分もあるのですが、前後の似たようなコードを探すと割と簡単に実装が完了します。こういった拡張が自分でできるのはn8nのメリットですね。