n8n-nodes-microsoft-teams-bot 1.3.3 → 1.3.6
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.
|
@@ -98,32 +98,50 @@ class TeamsBot {
|
|
|
98
98
|
// Handle n8n waiting webhook (send-and-wait resume)
|
|
99
99
|
const query = req.query;
|
|
100
100
|
if (query.responded === 'true') {
|
|
101
|
-
this.logger.info('[TeamsBot] Send-and-wait webhook triggered - resuming execution'
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
101
|
+
this.logger.info('[TeamsBot] Send-and-wait webhook triggered - resuming execution', {
|
|
102
|
+
decision: query.decision,
|
|
103
|
+
source: query.source,
|
|
104
|
+
});
|
|
105
|
+
const htmlPage = `
|
|
106
|
+
<!DOCTYPE html>
|
|
107
|
+
<html>
|
|
108
|
+
<head>
|
|
109
|
+
<title>Response Recorded</title>
|
|
110
|
+
<style>
|
|
111
|
+
body { font-family: Arial, sans-serif; text-align: center; padding: 50px; }
|
|
112
|
+
h1 { color: #4CAF50; }
|
|
113
|
+
</style>
|
|
114
|
+
</head>
|
|
115
|
+
<body>
|
|
116
|
+
<h1>✓ Response Recorded</h1>
|
|
117
|
+
<p>Your response has been recorded. You can close this window.</p>
|
|
118
|
+
</body>
|
|
119
|
+
</html>
|
|
117
120
|
`;
|
|
121
|
+
const decision = typeof query.decision === 'string' ? query.decision : undefined;
|
|
122
|
+
const source = typeof query.source === 'string' ? query.source : undefined;
|
|
118
123
|
return {
|
|
119
124
|
webhookResponse: htmlPage,
|
|
120
|
-
workflowData: [[{
|
|
125
|
+
workflowData: [[{
|
|
126
|
+
json: {
|
|
127
|
+
responded: true,
|
|
128
|
+
decision,
|
|
129
|
+
source,
|
|
130
|
+
timestamp: new Date().toISOString(),
|
|
131
|
+
},
|
|
132
|
+
}]],
|
|
121
133
|
};
|
|
122
134
|
}
|
|
123
135
|
// Handle Graph API validation token
|
|
124
136
|
const validationToken = req.query.validationToken;
|
|
125
137
|
if (validationToken) {
|
|
126
|
-
|
|
138
|
+
this.logger.info('[TeamsBot] Graph API validation request received', {
|
|
139
|
+
token: validationToken.substring(0, 20) + '...',
|
|
140
|
+
method: req.method,
|
|
141
|
+
});
|
|
142
|
+
// Return validation token as plain text for Microsoft Graph validation
|
|
143
|
+
res.status(200).header('Content-Type', 'text/plain').send(validationToken);
|
|
144
|
+
this.logger.info('[TeamsBot] Validation response sent');
|
|
127
145
|
return { noWebhookResponse: true };
|
|
128
146
|
}
|
|
129
147
|
if (req.method !== 'POST') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TeamsBot.node.js","sourceRoot":"","sources":["../../../nodes/TeamsBot/TeamsBot.node.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,6CAA0C;AAC1C,iEAAmD;AACnD,6DAA+D;AAC/D,sEAAqF;AACrF,6CAA6E;AAC7E,6EAA0E;AAC1E,mEAAsE;AAEtE,MAAa,QAAQ;IAGnB,YAAY,eAAyC;QA2BrD,YAAO,GAAG;YACR,UAAU;YACV,cAAc,EAAE;gBACd,mBAAmB,EAAnB,oCAAmB;aACpB;SACF,CAAC;QAMF,mBAAc,GAAG;YACf,OAAO,EAAE;gBACP,KAAK,CAAC,WAAW;oBACf,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAW,CAAC;oBAC/D,MAAM,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAgB,CAAC;oBACzE,cAAc,CAAC,UAAU,GAAG,UAAU,CAAC;oBAEvC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2DAA2D,EAAE;wBAC5E,UAAU;qBACX,CAAC,CAAC;oBAEH,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,KAAK,CAAC,MAAM;oBACV,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAW,CAAC;oBAC/D,MAAM,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAgB,CAAC;oBACzE,cAAc,CAAC,UAAU,GAAG,UAAU,CAAC;oBAEvC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2CAA2C,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;oBAC9E,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,KAAK,CAAC,MAAM;oBACV,MAAM,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAgB,CAAC;oBACzE,OAAO,cAAc,CAAC,UAAU,CAAC;oBACjC,OAAO,IAAI,CAAC;gBACd,CAAC;aACF;SACF,CAAC;QAhEA,MAAM,QAAQ,GAAG,8BAAmB,CAAC;QACrC,IAAI,CAAC,WAAW,GAAG;YACjB,GAAG,eAAe;YAClB,GAAG,QAAQ;YACX,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,CAAC;YAC9B,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,SAAS;oBACf,UAAU,EAAE,KAAK;oBACjB,YAAY,EAAE,YAAY;oBAC1B,IAAI,EAAE,gBAAgB;oBACtB,cAAc,EAAE,IAAI;oBACpB,UAAU,EAAE,IAAI;iBACjB;gBACD;oBACE,IAAI,EAAE,SAAS;oBACf,UAAU,EAAE,MAAM;oBAClB,YAAY,EAAE,YAAY;oBAC1B,IAAI,EAAE,gBAAgB;oBACtB,cAAc,EAAE,IAAI;oBACpB,UAAU,EAAE,IAAI;iBACjB;aACF;SACsB,CAAC;IAC5B,CAAC;IASD,KAAK,CAAC,OAAO;QACX,OAAO,eAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IA+BD,KAAK,CAAC,OAAO;QACX,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAErC,oDAAoD;QACpD,MAAM,KAAK,GAAG,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"TeamsBot.node.js","sourceRoot":"","sources":["../../../nodes/TeamsBot/TeamsBot.node.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,6 +35,7 @@ async function getChatIdForUser(graphClient, targetUserId, api, teamsAppId) {
|
|
|
35
35
|
return chat.id;
|
|
36
36
|
}
|
|
37
37
|
async function sendAndWaitOperation() {
|
|
38
|
+
var _a, _b;
|
|
38
39
|
const items = this.getInputData();
|
|
39
40
|
if (items.length > 1) {
|
|
40
41
|
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Teams Send and Wait currently supports only a single item per execution. Please process items one at a time.');
|
|
@@ -52,21 +53,68 @@ async function sendAndWaitOperation() {
|
|
|
52
53
|
messageLength: message.length,
|
|
53
54
|
});
|
|
54
55
|
const nodeOptions = this.getNodeParameter('options', i, {});
|
|
56
|
+
// Approval options: determine whether to render Approve / Decline buttons
|
|
57
|
+
const rawApprovalOptions = this.getNodeParameter('approvalOptions', i, {});
|
|
58
|
+
const approvalValues = (_a = rawApprovalOptions === null || rawApprovalOptions === void 0 ? void 0 : rawApprovalOptions.values) !== null && _a !== void 0 ? _a : rawApprovalOptions;
|
|
59
|
+
const approvalType = ((_b = approvalValues === null || approvalValues === void 0 ? void 0 : approvalValues.approvalType) !== null && _b !== void 0 ? _b : 'single');
|
|
60
|
+
const approveLabel = (approvalValues === null || approvalValues === void 0 ? void 0 : approvalValues.approveLabel) || '✓ Approve';
|
|
61
|
+
const disapproveLabel = approvalType === 'double'
|
|
62
|
+
? (approvalValues === null || approvalValues === void 0 ? void 0 : approvalValues.disapproveLabel) || '✗ Decline'
|
|
63
|
+
: undefined;
|
|
55
64
|
const credentials = (await this.getCredentials('teamsBotApi'));
|
|
56
65
|
const graphClient = new index_1.GraphApiClient(this, credentials);
|
|
57
|
-
// Generate signed resume
|
|
66
|
+
// Generate signed resume URLs for quick link-click responses
|
|
58
67
|
this.setSignatureValidationRequired();
|
|
59
68
|
const resumeUrl = this.getSignedResumeUrl({ responded: 'true', source: 'link' });
|
|
60
|
-
|
|
69
|
+
const approveUrl = this.getSignedResumeUrl({
|
|
70
|
+
responded: 'true',
|
|
71
|
+
source: 'button',
|
|
72
|
+
decision: 'approved',
|
|
73
|
+
});
|
|
74
|
+
const declineUrl = approvalType === 'double'
|
|
75
|
+
? this.getSignedResumeUrl({
|
|
76
|
+
responded: 'true',
|
|
77
|
+
source: 'button',
|
|
78
|
+
decision: 'declined',
|
|
79
|
+
})
|
|
80
|
+
: undefined;
|
|
81
|
+
console.log('[TeamsBot][SendAndWait] Generated signed resume URLs', {
|
|
61
82
|
resumeUrl: resumeUrl.substring(0, 50) + '...',
|
|
83
|
+
hasApproveUrl: !!approveUrl,
|
|
84
|
+
hasDeclineUrl: !!declineUrl,
|
|
85
|
+
approvalType,
|
|
62
86
|
});
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
87
|
+
const buildHtmlContent = () => {
|
|
88
|
+
const baseMessage = message;
|
|
89
|
+
// No approval configuration: fall back to original simple footer
|
|
90
|
+
if (!approvalValues || !approvalValues.approvalType) {
|
|
91
|
+
let html = baseMessage;
|
|
92
|
+
if (nodeOptions.appendAttribution !== false) {
|
|
93
|
+
html += `<br><br><em>Reply to this message or <a href="${resumeUrl}">click here</a> to respond</em>`;
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
html += `<br><a href="${resumeUrl}">Click here to respond</a>`;
|
|
97
|
+
}
|
|
98
|
+
return html;
|
|
99
|
+
}
|
|
100
|
+
const approveButton = `<a href="${approveUrl}" style="background-color:#0078D4;color:#ffffff;padding:8px 16px;border-radius:4px;text-decoration:none;display:inline-block;margin-right:8px;font-size:14px;">${approveLabel}</a>`;
|
|
101
|
+
const declineButton = approvalType === 'double' && declineUrl
|
|
102
|
+
? `<a href="${declineUrl}" style="background-color:#ffffff;color:#666666;padding:8px 16px;border-radius:4px;text-decoration:none;display:inline-block;border:1px solid #cccccc;font-size:14px;">${disapproveLabel}</a>`
|
|
103
|
+
: '';
|
|
104
|
+
const helperText = `<div style="margin-top:8px;font-size:12px;color:#666666;">or reply directly in this chat</div>`;
|
|
105
|
+
const attributionText = nodeOptions.appendAttribution !== false
|
|
106
|
+
? `<div style="margin-top:12px;font-size:11px;color:#999999;"><em>This message was sent automatically with n8n</em></div>`
|
|
107
|
+
: '';
|
|
108
|
+
return `
|
|
109
|
+
${baseMessage}
|
|
110
|
+
<div style="margin-top:16px;">
|
|
111
|
+
${approveButton}${declineButton}
|
|
112
|
+
${helperText}
|
|
113
|
+
</div>
|
|
114
|
+
${attributionText}
|
|
115
|
+
`.trim();
|
|
116
|
+
};
|
|
117
|
+
const htmlContent = buildHtmlContent();
|
|
70
118
|
const options = {
|
|
71
119
|
textFormat: 'xml',
|
|
72
120
|
};
|
|
@@ -124,6 +172,54 @@ async function sendAndWaitOperation() {
|
|
|
124
172
|
baseUrl,
|
|
125
173
|
nodeId,
|
|
126
174
|
});
|
|
175
|
+
// Test webhook accessibility before creating subscription to determine mode:
|
|
176
|
+
// - 200 + echo token => hybrid mode (Graph subscriptions + link)
|
|
177
|
+
// - 404 => click-to-run-only (link-only, no Graph subscription)
|
|
178
|
+
// - other / bad body => treat as misconfiguration and error
|
|
179
|
+
this.logger.info('[TeamsBot][SendAndWait] Testing webhook accessibility', {
|
|
180
|
+
webhookUrl,
|
|
181
|
+
});
|
|
182
|
+
let useGraphSubscription = false;
|
|
183
|
+
try {
|
|
184
|
+
const testToken = `test_validation_${Date.now()}`;
|
|
185
|
+
const testUrl = `${webhookUrl}?validationToken=${encodeURIComponent(testToken)}`;
|
|
186
|
+
const testResponse = await this.helpers.httpRequest({
|
|
187
|
+
method: 'POST',
|
|
188
|
+
url: testUrl,
|
|
189
|
+
timeout: 5000,
|
|
190
|
+
returnFullResponse: true,
|
|
191
|
+
ignoreHttpStatusErrors: true,
|
|
192
|
+
});
|
|
193
|
+
if (testResponse.statusCode === 200 && testResponse.body === testToken) {
|
|
194
|
+
this.logger.info('[TeamsBot][SendAndWait] Webhook validation test passed (hybrid mode enabled)');
|
|
195
|
+
useGraphSubscription = true;
|
|
196
|
+
}
|
|
197
|
+
else if (testResponse.statusCode === 404) {
|
|
198
|
+
this.logger.info('[TeamsBot][SendAndWait] Webhook not available (404); falling back to link-only send-and-wait (no Graph subscription)', {
|
|
199
|
+
webhookUrl,
|
|
200
|
+
statusCode: testResponse.statusCode,
|
|
201
|
+
});
|
|
202
|
+
useGraphSubscription = false;
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Webhook validation test failed: Expected status 200 with echoed token, got status ${testResponse.statusCode} and body "${testResponse.body}".\n\n` +
|
|
206
|
+
`The webhook must respond with HTTP 200 and return the validation token as plain text for Graph API subscription validation.\n` +
|
|
207
|
+
`Webhook URL: ${webhookUrl}`, { itemIndex: i });
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
catch (error) {
|
|
211
|
+
if (error instanceof n8n_workflow_1.NodeOperationError) {
|
|
212
|
+
throw error;
|
|
213
|
+
}
|
|
214
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
215
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Webhook is not accessible for Graph API subscription validation.\n\n` +
|
|
216
|
+
`Error: ${message}\n\n` +
|
|
217
|
+
`Webhook URL: ${webhookUrl}\n\n` +
|
|
218
|
+
`To fix this:\n` +
|
|
219
|
+
`1. Ensure n8n is accessible from the internet\n` +
|
|
220
|
+
`2. Check firewall settings\n` +
|
|
221
|
+
`3. Verify the webhook URL is correct`, { itemIndex: i });
|
|
222
|
+
}
|
|
127
223
|
const workflowStaticData = this.getWorkflowStaticData('global');
|
|
128
224
|
if (!workflowStaticData.sendAndWaitExecutions) {
|
|
129
225
|
workflowStaticData.sendAndWaitExecutions = {};
|
|
@@ -134,48 +230,70 @@ async function sendAndWaitOperation() {
|
|
|
134
230
|
const waitTill = new Date(Date.now() + cappedTimeout * 1000);
|
|
135
231
|
const expirationDateTime = new Date(Date.now() + (cappedTimeout + 60) * 1000);
|
|
136
232
|
const subscriptionExpiration = expirationDateTime.toISOString();
|
|
137
|
-
// Create Graph API subscription to listen for message replies
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
233
|
+
// Create Graph API subscription to listen for message replies (hybrid mode only)
|
|
234
|
+
if (useGraphSubscription) {
|
|
235
|
+
const initialClientState = `sendAndWait_temp_${originalMessageId}_${Date.now()}`;
|
|
236
|
+
const subscriptionParams = {
|
|
237
|
+
changeType: 'created',
|
|
238
|
+
notificationUrl: webhookUrl,
|
|
239
|
+
resource,
|
|
240
|
+
includeResourceData: false,
|
|
241
|
+
expirationDateTime: subscriptionExpiration,
|
|
242
|
+
clientState: initialClientState,
|
|
243
|
+
};
|
|
244
|
+
console.log('[TeamsBot][SendAndWait] Creating Graph subscription', {
|
|
245
|
+
resource,
|
|
246
|
+
notificationUrl: webhookUrl,
|
|
247
|
+
expirationDateTime: subscriptionExpiration,
|
|
248
|
+
cappedTimeout,
|
|
249
|
+
originalTimeout: timeout,
|
|
250
|
+
note: 'Graph will now send validation request to webhook',
|
|
251
|
+
});
|
|
252
|
+
let subscription;
|
|
253
|
+
try {
|
|
254
|
+
subscription = await graphClient.createSubscription(subscriptionParams);
|
|
255
|
+
console.log('[TeamsBot][SendAndWait] Subscription created successfully', {
|
|
256
|
+
subscriptionId: subscription.id,
|
|
257
|
+
note: 'Validation succeeded',
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
catch (error) {
|
|
261
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
262
|
+
console.error('[TeamsBot][SendAndWait] Subscription creation failed', {
|
|
263
|
+
error: message,
|
|
264
|
+
webhookUrl,
|
|
265
|
+
note: 'Check if webhook validation failed at Microsoft Graph',
|
|
266
|
+
});
|
|
267
|
+
throw error;
|
|
268
|
+
}
|
|
269
|
+
const finalClientState = `sendAndWait_${subscription.id}_${originalMessageId}`;
|
|
270
|
+
await graphClient.updateSubscription(subscription.id, {
|
|
271
|
+
clientState: finalClientState,
|
|
272
|
+
});
|
|
273
|
+
console.log('[TeamsBot][SendAndWait] Updated subscription clientState', {
|
|
274
|
+
subscriptionId: subscription.id,
|
|
275
|
+
clientState: finalClientState,
|
|
276
|
+
});
|
|
277
|
+
const executionKey = `${subscription.id}_${originalMessageId}`;
|
|
278
|
+
workflowStaticData.sendAndWaitExecutions[executionKey] = {
|
|
279
|
+
subscriptionId: subscription.id,
|
|
280
|
+
originalMessageId,
|
|
281
|
+
resource,
|
|
282
|
+
recipientType,
|
|
283
|
+
createdAt: Date.now(),
|
|
284
|
+
expiresAt: waitTill.getTime(),
|
|
285
|
+
};
|
|
286
|
+
console.log('[TeamsBot][SendAndWait] Stored send-and-wait execution context', {
|
|
287
|
+
executionKey,
|
|
288
|
+
expiresAt: new Date(waitTill.getTime()).toISOString(),
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
else {
|
|
292
|
+
console.log('[TeamsBot][SendAndWait] Skipping Graph subscription creation (link-only send-and-wait mode)', {
|
|
293
|
+
webhookUrl,
|
|
294
|
+
mode: 'link-only',
|
|
295
|
+
});
|
|
296
|
+
}
|
|
179
297
|
console.log('[TeamsBot][SendAndWait] Putting execution to wait', {
|
|
180
298
|
waitTill: waitTill.toISOString(),
|
|
181
299
|
cappedTimeout,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.sendAndWait.js","sourceRoot":"","sources":["../../../../nodes/TeamsBot/actions/messages.sendAndWait.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"messages.sendAndWait.js","sourceRoot":"","sources":["../../../../nodes/TeamsBot/actions/messages.sendAndWait.ts"],"names":[],"mappings":"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"}
|