@luka-cat-mimi/n8n-nodes-feishu 0.9.25 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -12,29 +12,47 @@
12
12
 
13
13
  ## 功能列表
14
14
 
15
- ### 🚀 飞书 Trigger ✨ 新增
15
+ ### 🚀 飞书 Trigger
16
16
 
17
17
  通过 **WebSocket 长连接**方式监听飞书事件,当事件发生时自动启动工作流。
18
18
 
19
19
  **主要特点:**
20
20
 
21
- - 支持订阅多种飞书事件(消息、卡片交互、链接预览、人员事件、审批等)
21
+ - 默认订阅**所有事件**,也可按需选择具体事件类型
22
22
  - 两种响应模式:
23
23
  - **Immediately**:事件触发后立即响应
24
- - **Using '飞书响应' Node**:配合飞书响应节点同步返回自定义响应
24
+ - **Using '飞书响应' Node**:配合飞书响应节点同步返回自定义响应(超时固定 3 秒)
25
25
 
26
26
  > ⚠️ 由于飞书 API 限制,每个飞书应用同时只能有一个 Trigger 在运行。
27
27
 
28
- ### 🔄 飞书响应 ✨ 新增
28
+ ### 🌐 飞书 Webhook Trigger ✨ 新增
29
+
30
+ 通过 **Webhook** 方式接收飞书事件回调,适用于「将回调发送至开发者服务器」订阅模式。
31
+
32
+ **主要特点:**
33
+
34
+ - 自动处理 URL 验证(`url_verification`)与加密推送解密
35
+ - 支持 Verification Token 校验与 app_id 匹配
36
+ - 默认订阅**所有事件**,也可按需选择具体事件类型
37
+ - 两种响应模式(与长链接触发器文案一致):
38
+ - **Immediately**:事件触发后立即响应
39
+ - **Using '飞书响应' Node**:配合飞书响应节点同步返回自定义响应
40
+
41
+ > 将节点生成的 Webhook URL 配置到飞书开放平台「事件与回调 - 订阅方式」中即可。
42
+
43
+ ### 🔄 飞书响应
29
44
 
30
- 配合**飞书 Trigger** 使用,用于同步响应飞书事件(如卡片交互、链接预览回调)。
45
+ 配合**飞书 Trigger** 或 **飞书 Webhook Trigger** 使用,用于同步响应飞书事件(如卡片交互、链接预览回调)。
31
46
 
32
47
  **主要特点:**
33
48
 
34
- - 支持**无响应**或**自定义 JSON** 响应
35
- - 可显示 Toast 提示消息
36
- - 可同步响应json信息到飞书
49
+ - 两种同步响应模式:
50
+ - **长链接同步响应**:配合「飞书 Trigger」(长链接触发器)使用
51
+ - **Webhook 同步响应**:配合「飞书 Webhook Trigger」(Webhook 触发器)使用
52
+ - 响应内容支持 **No Data**(空响应体)或 **JSON**(自定义 JSON 响应)
53
+ - 节点输出与返回给飞书的 JSON 内容一致,不再额外包裹字段
37
54
  - 可选启用响应输出分支
55
+ - Webhook 模式下兼容 n8n 多 main / 多 worker 部署(通过 `sendResponse` 跨进程路由)
38
56
 
39
57
  ---
40
58
 
@@ -6,6 +6,7 @@ const ws_client_1 = require("../help/utils/feishu-sdk/ws-client");
6
6
  const event_handler_1 = require("../help/utils/feishu-sdk/handler/event-handler");
7
7
  const logger_1 = require("../help/utils/feishu-sdk/logger");
8
8
  const properties_1 = require("../help/utils/properties");
9
+ const consts_1 = require("../help/utils/feishu-sdk/consts");
9
10
  const SYNC_RESPONSE_EVENTS = new Set([
10
11
  'card.action.trigger',
11
12
  'url.preview.get',
@@ -58,7 +59,10 @@ class FeishuNodeTrigger {
58
59
  type: 'notice',
59
60
  default: '',
60
61
  },
61
- properties_1.triggerEventProperty,
62
+ {
63
+ ...properties_1.triggerEventProperty,
64
+ default: [consts_1.ANY_EVENT],
65
+ },
62
66
  {
63
67
  displayName: '响应模式',
64
68
  name: 'responseMode',
@@ -78,39 +82,6 @@ class FeishuNodeTrigger {
78
82
  default: 'immediately',
79
83
  description: '选择何时向飞书发送响应',
80
84
  },
81
- {
82
- displayName: '选项',
83
- name: 'options',
84
- type: 'collection',
85
- placeholder: '添加选项',
86
- default: {},
87
- options: [
88
- {
89
- displayName: '回调提示信息',
90
- name: 'callbackToast',
91
- type: 'string',
92
- default: '',
93
- description: '设置回调触发时显示给用户的提示信息。如果不设置,则不显示任何提示。仅在 Immediately 模式下有效。',
94
- displayOptions: {
95
- show: {
96
- '/responseMode': ['immediately'],
97
- },
98
- },
99
- },
100
- {
101
- displayName: '响应超时时间',
102
- name: 'responseTimeout',
103
- type: 'number',
104
- default: 3000,
105
- description: '等待飞书响应节点响应的最大时间(毫秒),超时后将返回空响应',
106
- displayOptions: {
107
- show: {
108
- '/responseMode': ['responseNode'],
109
- },
110
- },
111
- },
112
- ],
113
- },
114
85
  ],
115
86
  };
116
87
  }
@@ -121,9 +92,7 @@ class FeishuNodeTrigger {
121
92
  throw new n8n_workflow_1.NodeOperationError(this.getNode(), '缺少必要的飞书凭证配置');
122
93
  }
123
94
  const responseMode = this.getNodeParameter('responseMode', 'immediately');
124
- const options = this.getNodeParameter('options', {});
125
- const callbackToast = options.callbackToast || undefined;
126
- const responseTimeout = options.responseTimeout || 3000;
95
+ const responseTimeout = 3000;
127
96
  const appId = credentials['appid'];
128
97
  const appSecret = credentials['appsecret'];
129
98
  const baseUrl = credentials['baseURL'];
@@ -141,31 +110,20 @@ class FeishuNodeTrigger {
141
110
  };
142
111
  const startWsClient = async () => {
143
112
  const events = this.getNodeParameter('events', []);
144
- const isAnyEvent = events.includes('any_event');
113
+ const isAnyEvent = events.includes(consts_1.ANY_EVENT);
145
114
  const handlers = {};
146
115
  for (const event of events) {
147
116
  handlers[event] = async (data) => {
148
117
  var _a;
149
118
  const actualEventType = isAnyEvent ? data.event_type : event;
150
119
  const isSyncEvent = SYNC_RESPONSE_EVENTS.has(actualEventType);
151
- const enrichedData = {
152
- ...data,
153
- responseMode,
154
- };
120
+ const enrichedData = { ...data };
155
121
  if (!isSyncEvent) {
156
122
  this.emit([this.helpers.returnJsonArray(enrichedData)]);
157
123
  return {};
158
124
  }
159
125
  if (responseMode === 'immediately') {
160
126
  this.emit([this.helpers.returnJsonArray(enrichedData)]);
161
- if (callbackToast) {
162
- return {
163
- toast: {
164
- type: 'info',
165
- content: callbackToast,
166
- },
167
- };
168
- }
169
127
  return {};
170
128
  }
171
129
  const responsePromise = this.helpers.createDeferredPromise();
@@ -1 +1 @@
1
- {"version":3,"file":"FeishuNodeTrigger.node.js","sourceRoot":"","sources":["../../../nodes/FeishuNode/FeishuNodeTrigger.node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FeishuNodeTrigger.node.js","sourceRoot":"","sources":["../../../nodes/FeishuNode/FeishuNodeTrigger.node.ts"],"names":[],"mappings":";;;AAAA,+CASsB;AAEtB,kEAA8D;AAC9D,kFAAiF;AACjF,4DAAqE;AACrE,yDAAgE;AAChE,4DAA4D;AAM5D,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC;IACpC,qBAAqB;IACrB,iBAAiB;IACjB,kBAAkB;CAClB,CAAC,CAAC;AAEH,MAAa,iBAAiB;IAA9B;QACC,gBAAW,GAAyB;YACnC,WAAW,EAAE,YAAY;YACzB,IAAI,EAAE,mBAAmB;YACzB,IAAI,EAAE,eAAe;YACrB,KAAK,EAAE,CAAC,SAAS,CAAC;YAClB,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAClB,cAAc,EAAE,CAAC;YACjB,QAAQ,EAAE,0CAA0C;YACpD,WAAW,EAAE,iCAAiC;YAC9C,QAAQ,EAAE;gBACT,IAAI,EAAE,YAAY;aAClB;YACD,YAAY,EAAE,SAAS;YACvB,MAAM,EAAE,EAAE;YACV,OAAO,EAAE,CAAC,kCAAmB,CAAC,IAAI,CAAC;YACnC,WAAW,EAAE;gBACZ;oBACC,IAAI,4BAAkC;oBACtC,QAAQ,EAAE,IAAI;oBACd,cAAc,EAAE;wBACf,IAAI,EAAE;4BACL,cAAc,EAAE,4BAAkC;yBAClD;qBACD;iBACD;aACD;YACD,UAAU,EAAE;gBACX;oBACC,WAAW,EAAE,MAAM;oBACnB,IAAI,EAAE,gBAAgB;oBACtB,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,GAAG,0BAAgC,EAAE;oBAC9C,OAAO,EAAE;wBACR;4BACC,IAAI,EAAE,qBAAqB;4BAC3B,KAAK,4BAAkC;yBACvC;qBACD;iBACD;gBACD;oBACC,WAAW,EACV,yEAAyE;oBAC1E,IAAI,EAAE,qBAAqB;oBAC3B,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,EAAE;iBACX;gBACD;oBACC,GAAG,iCAAoB;oBACvB,OAAO,EAAE,CAAC,kBAAS,CAAC;iBACpB;gBACD;oBACC,WAAW,EAAE,MAAM;oBACnB,IAAI,EAAE,cAAc;oBACpB,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE;wBACR;4BACC,IAAI,EAAE,aAAa;4BACnB,KAAK,EAAE,aAAa;4BACpB,WAAW,EAAE,WAAW;yBACxB;wBACD;4BACC,IAAI,EAAE,mBAAmB;4BACzB,KAAK,EAAE,cAAc;4BACrB,WAAW,EAAE,gBAAgB;yBAC7B;qBACD;oBACD,OAAO,EAAE,aAAa;oBACtB,WAAW,EAAE,aAAa;iBAC1B;aACD;SACD,CAAC;IA2HH,CAAC;IAzHA,KAAK,CAAC,OAAO;;QACZ,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,4BAAkC,CAAC;QAEhF,IAAI,CAAC,CAAC,WAAW,CAAC,KAAK,IAAI,WAAW,CAAC,SAAS,IAAI,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1E,MAAM,IAAI,iCAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,aAAa,CAAW,CAAC;QAEpF,MAAM,eAAe,GAAG,IAAI,CAAC;QAE7B,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAW,CAAC;QAC7C,MAAM,SAAS,GAAG,WAAW,CAAC,WAAW,CAAW,CAAC;QACrD,MAAM,OAAO,GAAG,WAAW,CAAC,SAAS,CAAW,CAAC;QAEjD,MAAM,UAAU,GAAG,MAAA,IAAI,CAAC,WAAW,EAAE,0CAAE,EAAE,CAAC;QAC1C,MAAM,MAAM,GAAG,IAAA,2BAAkB,EAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAE3D,MAAM,QAAQ,GAAa,IAAI,oBAAQ,CAAC;YACvC,KAAK;YACL,SAAS;YACT,MAAM,EAAE,GAAG,OAAO,EAAE;YACpB,MAAM;YACN,OAAO,EAAE,IAAI,CAAC,OAAO;SACrB,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;YAChC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACvB,CAAC,CAAC;QAEF,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;YAChC,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,EAAE,CAAa,CAAC;YAC/D,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,kBAAS,CAAC,CAAC;YAC9C,MAAM,QAAQ,GAAgE,EAAE,CAAC;YAElF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC5B,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,EAAE,IAAI,EAAE,EAAE;;oBAEhC,MAAM,eAAe,GAAG,UAAU,CAAC,CAAC,CAAE,IAAI,CAAC,UAAqB,CAAC,CAAC,CAAC,KAAK,CAAC;oBACzE,MAAM,WAAW,GAAG,oBAAoB,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;oBAE9D,MAAM,YAAY,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;oBAGjC,IAAI,CAAC,WAAW,EAAE,CAAC;wBAClB,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;wBACxD,OAAO,EAAE,CAAC;oBACX,CAAC;oBAKD,IAAI,YAAY,KAAK,aAAa,EAAE,CAAC;wBACpC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;wBACxD,OAAO,EAAE,CAAC;oBACX,CAAC;oBAaD,MAAM,eAAe,GACpB,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAA+B,CAAC;oBACnE,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;oBAEzE,IAAI,SAAoD,CAAC;oBACzD,IAAI,CAAC;wBACJ,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;4BACnC,eAAe,CAAC,OAAO;4BACvB,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;gCAChC,SAAS,GAAG,UAAU,CACrB,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,eAAe,eAAe,KAAK,CAAC,CAAC,EAC5D,eAAe,CACf,CAAC;4BACH,CAAC,CAAC;yBACF,CAAC,CAAC;wBAEH,YAAY,CAAC,SAAS,CAAC,CAAC;wBAGxB,OAAO,MAAC,QAAwB,mCAAI,EAAE,CAAC;oBACxC,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBAChB,YAAY,CAAC,SAAS,CAAC,CAAC;wBACxB,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;wBAC5E,MAAM,CAAC,IAAI,CACV,2BAA2B,YAAY,GAAG;4BACzC,yBAAyB,eAAe,aAAa,CACtD,CAAC;wBACF,OAAO,EAAE,CAAC;oBACX,CAAC;gBACF,CAAC,CAAC;YACH,CAAC;YAEA,MAAM,eAAe,GAAG,IAAI,+BAAe,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAEvF,MAAM,QAAQ,CAAC,KAAK,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC;QAC3C,CAAC,CAAC;QAEF,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,QAAQ,EAAE,CAAC;YACjC,MAAM,aAAa,EAAE,CAAC;YACtB,OAAO;gBACN,aAAa;aACb,CAAC;QACH,CAAC;aAAM,CAAC;YACP,MAAM,qBAAqB,GAAG,KAAK,IAAI,EAAE;gBACxC,MAAM,aAAa,EAAE,CAAC;YACvB,CAAC,CAAC;YAEF,OAAO;gBACN,aAAa;gBACb,qBAAqB;aACrB,CAAC;QACH,CAAC;IACF,CAAC;CACD;AAlMD,8CAkMC"}
@@ -0,0 +1,5 @@
1
+ import { INodeType, INodeTypeDescription, IWebhookFunctions, IWebhookResponseData } from 'n8n-workflow';
2
+ export declare class FeishuWebhookTrigger implements INodeType {
3
+ description: INodeTypeDescription;
4
+ webhook(this: IWebhookFunctions): Promise<IWebhookResponseData>;
5
+ }
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FeishuWebhookTrigger = void 0;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ const FeishuDecryptUtils_1 = require("../help/utils/FeishuDecryptUtils");
6
+ const properties_1 = require("../help/utils/properties");
7
+ const consts_1 = require("../help/utils/feishu-sdk/consts");
8
+ class FeishuWebhookTrigger {
9
+ constructor() {
10
+ this.description = {
11
+ displayName: '飞书 Webhook Trigger',
12
+ name: 'feishuWebhookTrigger',
13
+ icon: 'file:icon.svg',
14
+ group: ['trigger'],
15
+ version: 1,
16
+ subtitle: '=已订阅 {{$parameter["events"].length}} 个事件',
17
+ description: '通过 Webhook 接收飞书事件回调,自动解密并处理 URL 验证',
18
+ defaults: {
19
+ name: '飞书 Webhook Trigger',
20
+ },
21
+ usableAsTool: undefined,
22
+ inputs: [],
23
+ outputs: [n8n_workflow_1.NodeConnectionTypes.Main],
24
+ credentials: [
25
+ {
26
+ name: "feishuNodeCredentialsApi",
27
+ required: true,
28
+ },
29
+ ],
30
+ webhooks: [
31
+ {
32
+ name: 'default',
33
+ httpMethod: 'POST',
34
+ responseMode: '={{$parameter["responseMode"]}}',
35
+ path: 'webhook',
36
+ },
37
+ ],
38
+ properties: [
39
+ {
40
+ displayName: '将下方生成的 Webhook URL 配置到飞书开放平台「事件与回调 - 订阅方式」中,选择「将回调发送至开发者服务器」。<a href="https://open.feishu.cn/document/event-subscription-guide/callback-subscription/step-1-choose-a-subscription-mode/send-callbacks-to-developers-server" target="_blank">参考文档</a>',
41
+ name: 'feishuWebhookNotice',
42
+ type: 'notice',
43
+ default: '',
44
+ },
45
+ {
46
+ ...properties_1.triggerEventProperty,
47
+ default: [consts_1.ANY_EVENT],
48
+ },
49
+ {
50
+ displayName: 'Encrypt Key',
51
+ name: 'encryptKey',
52
+ type: 'string',
53
+ typeOptions: {
54
+ password: true,
55
+ },
56
+ default: '',
57
+ description: '飞书开放平台应用的 Encrypt Key。若在飞书后台开启了加密推送,则必须填写此项用于解密请求体中的 encrypt 字段;若未开启加密可留空。',
58
+ },
59
+ {
60
+ displayName: '验证应用标识',
61
+ name: 'verifyToken',
62
+ type: 'boolean',
63
+ default: false,
64
+ description: 'Whether to verify the Verification Token in the callback data. When enabled, the token is required and each request is validated, otherwise no verification is performed.',
65
+ },
66
+ {
67
+ displayName: 'Verification Token',
68
+ name: 'verificationToken',
69
+ type: 'string',
70
+ typeOptions: {
71
+ password: true,
72
+ },
73
+ required: true,
74
+ default: '',
75
+ description: '飞书开放平台应用的 Verification Token,用于校验回调数据中的 token 是否匹配。',
76
+ displayOptions: {
77
+ show: {
78
+ verifyToken: [true],
79
+ },
80
+ },
81
+ },
82
+ {
83
+ displayName: '响应模式',
84
+ name: 'responseMode',
85
+ type: 'options',
86
+ options: [
87
+ {
88
+ name: 'Immediately',
89
+ value: 'onReceived',
90
+ description: '事件触发后立即响应',
91
+ },
92
+ {
93
+ name: "Using '飞书响应' Node",
94
+ value: 'responseNode',
95
+ description: '使用飞书响应节点同步返回响应',
96
+ },
97
+ ],
98
+ default: 'onReceived',
99
+ description: '选择何时向飞书发送响应',
100
+ },
101
+ {
102
+ displayName: '请在工作流中使用「飞书响应」节点返回数据。官方「Respond to Webhook」节点仅支持 n8n 内置 Webhook,不支持本触发器。',
103
+ name: 'feishuResponseNotice',
104
+ type: 'notice',
105
+ default: '',
106
+ displayOptions: {
107
+ show: {
108
+ responseMode: ['responseNode'],
109
+ },
110
+ },
111
+ },
112
+ ],
113
+ };
114
+ }
115
+ async webhook() {
116
+ var _a;
117
+ const res = this.getResponseObject();
118
+ const body = this.getBodyData();
119
+ const encryptKey = (this.getNodeParameter('encryptKey', '') || '').trim();
120
+ const verifyToken = this.getNodeParameter('verifyToken', false);
121
+ const verificationToken = verifyToken
122
+ ? (this.getNodeParameter('verificationToken', '') || '').trim()
123
+ : '';
124
+ let payload;
125
+ if (typeof body.encrypt === 'string') {
126
+ if (!encryptKey) {
127
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), '请求体已加密(包含 encrypt 字段),但未配置 Encrypt Key,无法解密');
128
+ }
129
+ const decrypted = (0, FeishuDecryptUtils_1.decryptFeishuEvent)(encryptKey, body.encrypt);
130
+ if (!decrypted) {
131
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), '解密失败,请检查 Encrypt Key 是否与飞书后台配置一致');
132
+ }
133
+ try {
134
+ payload = JSON.parse(decrypted);
135
+ }
136
+ catch (error) {
137
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), '解密后的数据不是有效的 JSON 格式');
138
+ }
139
+ }
140
+ else {
141
+ payload = body;
142
+ }
143
+ if (verifyToken && verificationToken) {
144
+ const header = payload.header || {};
145
+ const token = (_a = payload.token) !== null && _a !== void 0 ? _a : header.token;
146
+ if (token !== verificationToken) {
147
+ res.status(200).json({ msg: 'invalid verification token' });
148
+ return { noWebhookResponse: true };
149
+ }
150
+ }
151
+ if (payload.type === 'url_verification') {
152
+ res.status(200).json({ challenge: payload.challenge });
153
+ return { noWebhookResponse: true };
154
+ }
155
+ const credentials = await this.getCredentials("feishuNodeCredentialsApi");
156
+ const credentialAppId = (credentials.appid || '').trim();
157
+ const header = payload.header || {};
158
+ const event = payload.event || {};
159
+ const payloadAppId = payload.schema === '2.0' ? header.app_id : event.app_id;
160
+ if (!credentialAppId || !payloadAppId || payloadAppId !== credentialAppId) {
161
+ res.status(200).json({ msg: 'success' });
162
+ return { noWebhookResponse: true };
163
+ }
164
+ const eventType = payload.schema === '2.0' ? header.event_type : event.type;
165
+ const events = this.getNodeParameter('events', []);
166
+ const isAnyEvent = events.includes(consts_1.ANY_EVENT);
167
+ const isMatched = isAnyEvent || (!!eventType && events.includes(eventType));
168
+ if (!isMatched) {
169
+ res.status(200).json({ msg: 'success' });
170
+ return { noWebhookResponse: true };
171
+ }
172
+ const responseMode = this.getNodeParameter('responseMode', 'onReceived');
173
+ if (responseMode === 'onReceived') {
174
+ res.status(200).json({ msg: 'success' });
175
+ return {
176
+ workflowData: [[{ json: payload }]],
177
+ noWebhookResponse: true,
178
+ };
179
+ }
180
+ return {
181
+ workflowData: [[{ json: payload }]],
182
+ };
183
+ }
184
+ }
185
+ exports.FeishuWebhookTrigger = FeishuWebhookTrigger;
186
+ //# sourceMappingURL=FeishuWebhookTrigger.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FeishuWebhookTrigger.node.js","sourceRoot":"","sources":["../../../nodes/FeishuNode/FeishuWebhookTrigger.node.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,4 @@
1
1
  import { IExecuteFunctions, INodeExecutionData, INodeType, INodeTypeDescription } from 'n8n-workflow';
2
- export declare const FEISHU_RESPONSE_KEY = "customFeishuResponse";
3
2
  export declare class RespondToFeishu implements INodeType {
4
3
  description: INodeTypeDescription;
5
4
  execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;
@@ -1,9 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RespondToFeishu = exports.FEISHU_RESPONSE_KEY = void 0;
3
+ exports.RespondToFeishu = void 0;
4
4
  const n8n_workflow_1 = require("n8n-workflow");
5
5
  const outputs_1 = require("../help/utils/outputs");
6
- exports.FEISHU_RESPONSE_KEY = 'customFeishuResponse';
6
+ const MODE_WEBSOCKET = 'websocket';
7
+ const MODE_WEBHOOK = 'webhook';
7
8
  class RespondToFeishu {
8
9
  constructor() {
9
10
  this.description = {
@@ -14,27 +15,46 @@ class RespondToFeishu {
14
15
  version: 1,
15
16
  usableAsTool: undefined,
16
17
  subtitle: '={{$parameter["respondWith"] === "noResponse" ? "不返回任何响应" : "返回自定义 JSON 数据"}}',
17
- description: '同步响应飞书 Trigger 的请求',
18
+ description: '同步响应飞书 Trigger 或飞书 Webhook Trigger 的请求',
18
19
  defaults: {
19
20
  name: '飞书响应',
20
21
  },
21
22
  inputs: [n8n_workflow_1.NodeConnectionTypes.Main],
22
23
  outputs: `={{(${outputs_1.configuredOutputs})($nodeVersion, $parameter)}}`,
23
24
  properties: [
25
+ {
26
+ displayName: '同步响应模式',
27
+ name: 'mode',
28
+ type: 'options',
29
+ options: [
30
+ {
31
+ name: '长链接同步响应',
32
+ value: 'websocket',
33
+ description: '通过长链接(WebSocket)同步返回响应,需配合「飞书 Trigger」(长链接触发器)使用',
34
+ },
35
+ {
36
+ name: 'Webhook 同步响应',
37
+ value: 'webhook',
38
+ description: '通过 Webhook 的 HTTP 响应同步返回,需配合「飞书 Webhook Trigger」(Webhook 触发器)使用',
39
+ },
40
+ ],
41
+ default: 'websocket',
42
+ description: '选择同步响应的方式:「长链接同步响应」需使用「飞书 Trigger」(长链接触发器);「Webhook 同步响应」需使用「飞书 Webhook Trigger」(Webhook 触发器)。请确保此处选择与工作流中使用的触发器类型一致。',
43
+ },
24
44
  {
25
45
  displayName: '响应内容',
26
46
  name: 'respondWith',
27
47
  type: 'options',
28
48
  options: [
29
49
  {
30
- name: '无响应',
50
+ name: 'No Data',
31
51
  value: 'noResponse',
32
- description: '不返回任何响应',
52
+ description: 'Respond with an empty body',
33
53
  },
34
54
  {
35
- name: '自定义 JSON',
55
+ name: 'JSON',
36
56
  value: 'json',
37
- description: '返回自定义 JSON 数据',
57
+ description: 'Respond with a custom JSON body',
38
58
  },
39
59
  ],
40
60
  default: 'noResponse',
@@ -74,17 +94,12 @@ class RespondToFeishu {
74
94
  }
75
95
  async execute() {
76
96
  const items = this.getInputData();
97
+ const mode = this.getNodeParameter('mode', 0, MODE_WEBSOCKET);
77
98
  const respondWith = this.getNodeParameter('respondWith', 0);
78
99
  const enableResponseOutput = this.getNodeParameter('enableResponseOutput', 0, false);
79
100
  const responseItems = [];
80
101
  let firstResponseData;
81
102
  for (let itemIndex = 0; itemIndex < items.length; itemIndex++) {
82
- const item = items[itemIndex];
83
- const json = item.json;
84
- const responseMode = json.responseMode;
85
- if (responseMode && responseMode !== 'responseNode') {
86
- this.logger.warn(`飞书 Trigger 的响应模式不是 "Using '飞书响应' Node",当前模式: ${responseMode}`);
87
- }
88
103
  let responseData = {};
89
104
  if (respondWith === 'json') {
90
105
  const responseJson = this.getNodeParameter('responseJson', itemIndex);
@@ -99,22 +114,23 @@ class RespondToFeishu {
99
114
  firstResponseData = responseData;
100
115
  }
101
116
  responseItems.push({
102
- json: {
103
- [exports.FEISHU_RESPONSE_KEY]: responseData,
104
- },
117
+ json: responseData,
105
118
  });
106
119
  }
107
- this.sendResponse((firstResponseData !== null && firstResponseData !== void 0 ? firstResponseData : {}));
108
- const cleanedItems = items.map((item) => {
109
- const cleanedJson = { ...item.json };
110
- delete cleanedJson.responseMode;
111
- return {
112
- ...item,
113
- json: cleanedJson,
120
+ const feishuResponseBody = (firstResponseData !== null && firstResponseData !== void 0 ? firstResponseData : {});
121
+ if (mode === MODE_WEBHOOK) {
122
+ const httpResponse = {
123
+ body: feishuResponseBody,
124
+ headers: {},
125
+ statusCode: 200,
114
126
  };
115
- });
127
+ this.sendResponse(httpResponse);
128
+ }
129
+ else {
130
+ this.sendResponse(feishuResponseBody);
131
+ }
116
132
  if (enableResponseOutput) {
117
- return [cleanedItems, responseItems];
133
+ return [items, responseItems];
118
134
  }
119
135
  return [responseItems];
120
136
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RespondToFeishu.node.js","sourceRoot":"","sources":["../../../nodes/FeishuNode/RespondToFeishu.node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RespondToFeishu.node.js","sourceRoot":"","sources":["../../../nodes/FeishuNode/RespondToFeishu.node.ts"],"names":[],"mappings":"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"}
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@luka-cat-mimi/n8n-nodes-feishu",
3
- "version": "0.9.25",
3
+ "version": "0.10.0",
4
4
  "description": "飞书 N8N 集成插件",
5
5
  "keywords": [
6
6
  "n8n",
@@ -47,6 +47,7 @@
47
47
  "nodes": [
48
48
  "dist/nodes/FeishuNode/FeishuNode.node.js",
49
49
  "dist/nodes/FeishuNode/FeishuNodeTrigger.node.js",
50
+ "dist/nodes/FeishuNode/FeishuWebhookTrigger.node.js",
50
51
  "dist/nodes/FeishuNode/RespondToFeishu.node.js"
51
52
  ]
52
53
  },