n8n-nodes-dvelop 1.0.3
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/LICENSE.md +21 -0
- package/README.md +791 -0
- package/dist/credentials/DvelopApi.credentials.d.ts +10 -0
- package/dist/credentials/DvelopApi.credentials.js +61 -0
- package/dist/credentials/DvelopApi.credentials.js.map +1 -0
- package/dist/icons/dvelop_dark.svg +1 -0
- package/dist/icons/dvelop_light.svg +1 -0
- package/dist/nodes/dvelop/DvelopActions.node.d.ts +10 -0
- package/dist/nodes/dvelop/DvelopActions.node.js +359 -0
- package/dist/nodes/dvelop/DvelopActions.node.js.map +1 -0
- package/dist/nodes/dvelop/DvelopPlatform.node.json +18 -0
- package/dist/package.json +494 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/licence.json +4041 -0
- package/package.json +494 -0
package/README.md
ADDED
|
@@ -0,0 +1,791 @@
|
|
|
1
|
+
# @dvelop/n8n-nodes-dvelop
|
|
2
|
+
|
|
3
|
+
This is an n8n community node. It lets you use _app/service name_ in your n8n workflows.
|
|
4
|
+
This is a community node and not affiliated with n8n GmbH. Use at your own risk.
|
|
5
|
+
|
|
6
|
+
This project provides a gateway for hyperautomation by enabling seamless integration between the d.velop platform (https://www.d-velop.de) and external applications using n8n. The d.velop actions Node allows users to execute d.velop actions directly within n8n workflows, making it possible to automate document management, user operations, and custom process integrations. This enables powerful, flexible, and scalable automation across the entire d.velop ecosystem.
|
|
7
|
+
|
|
8
|
+
[n8n](https://n8n.io/) is a [fair-code licensed](https://docs.n8n.io/sustainable-use-license/) workflow automation platform.
|
|
9
|
+
|
|
10
|
+
[Installation](#installation)
|
|
11
|
+
[Operations](#operations)
|
|
12
|
+
[Credentials](#credentials)
|
|
13
|
+
[Documentation](#documentation)
|
|
14
|
+
[Compatibility](#compatibility)
|
|
15
|
+
[Resources](#resources)
|
|
16
|
+
|
|
17
|
+
## 1. Installation
|
|
18
|
+
|
|
19
|
+
Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) in the n8n community nodes documentation.
|
|
20
|
+
|
|
21
|
+
## 2. Operations
|
|
22
|
+
|
|
23
|
+
- Download documents automatically
|
|
24
|
+
- Import documents automatically to the DMS
|
|
25
|
+
- Retrieve the metadata from documents
|
|
26
|
+
- Retrieve user information
|
|
27
|
+
|
|
28
|
+
## 3. Credentials
|
|
29
|
+
|
|
30
|
+
For every Action Node you want to execute, you need to have your credentials set up. Without them, the API would not have the required information to execute calls.
|
|
31
|
+
|
|
32
|
+
<img width="1312" height="746" alt="image" src="https://github.com/user-attachments/assets/fe0a35f7-6bc2-4837-a995-02426ab822e5" />
|
|
33
|
+
|
|
34
|
+
**3.1 Base URL**
|
|
35
|
+
|
|
36
|
+
- This is just the Base URL of your instance, marked in blue (don't copy the last /)
|
|
37
|
+
|
|
38
|
+
<img width="600" height="41" alt="image" src="https://github.com/user-attachments/assets/2e89a2b6-0387-4ab9-8891-3c4090b817f0" />
|
|
39
|
+
|
|
40
|
+
**3.2 Authentication Method**
|
|
41
|
+
|
|
42
|
+
- The Bearer Token is nothing else except the API key you can find in the d.velop instance configuration, under Login -> API key
|
|
43
|
+
- There you have to create an API key. Keep in mind that the key only shows once, therefore you should save the key somewhere safe. Also keep this key for yourself and do **NOT** hand it out.
|
|
44
|
+
|
|
45
|
+
**3.3 Allowed HTTP Request**
|
|
46
|
+
|
|
47
|
+
- For the node to work you need to allow the HTTP requests.
|
|
48
|
+
|
|
49
|
+
## 4. Documentation
|
|
50
|
+
|
|
51
|
+
To use this node in a workflow you need to open the **Nodes Panel** and search for _d.velop Actions_
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
**4.1 Pick an Action Mode**
|
|
56
|
+
|
|
57
|
+
- Here you can choose between 4 stable actions or your volatile actions.
|
|
58
|
+
|
|
59
|
+
<img width="564" height="356" alt="image" src="https://github.com/user-attachments/assets/1ec54de7-e1f5-4294-9212-d784db8ac2dd" />
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
**4.2 Stable Actions**
|
|
64
|
+
|
|
65
|
+
Stable actions are predefined, and they will always be the same.
|
|
66
|
+
|
|
67
|
+
They are the standard features such as:
|
|
68
|
+
|
|
69
|
+
- Download a document
|
|
70
|
+
- Get document info
|
|
71
|
+
- Get user info
|
|
72
|
+
- Import document
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
**4.3 Volatile Actions**
|
|
77
|
+
|
|
78
|
+
- Volatile actions aren't predefined and differ from d.velop user to user. They are actions that are not hard-coded and aren't a standard.
|
|
79
|
+
- These actions can also be created in the Process Studio script tab, and can be used in this node.
|
|
80
|
+
|
|
81
|
+
As an example:
|
|
82
|
+
|
|
83
|
+
<img width="431" height="272" alt="image" src="https://github.com/user-attachments/assets/1cdbbc41-5fc8-4e31-9fef-df1055f0b2ab" />
|
|
84
|
+
|
|
85
|
+
- Those are standard volatile Salesforce actions, and the Hello_World action is a script from the Process Studio.
|
|
86
|
+
- These actions are dynamic and the payload that they carry isn't displayed.
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## 5. Stable Actions in Detail
|
|
91
|
+
|
|
92
|
+
This is going to showcase how the stable Actions work in detail.
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
**5.1 Download Document**
|
|
97
|
+
|
|
98
|
+
- To set up the download node manually, you just need to fill in the mandatory fields and you are ready to download the file.
|
|
99
|
+
|
|
100
|
+
<img width="461" height="486" alt="image" src="https://github.com/user-attachments/assets/befacd4b-82ea-49f7-a901-d0096416a674" />
|
|
101
|
+
|
|
102
|
+
- To find out what the _Repository_ string and the _Document_ID_ are, you need to open the document and copy the marked section.
|
|
103
|
+
|
|
104
|
+
<img width="1226" height="708" alt="Download_Document" src="https://github.com/user-attachments/assets/ea17fb6d-8fae-4bc9-937d-825eb2a40349" />
|
|
105
|
+
|
|
106
|
+
- The output will be displayed on the right side of the node.
|
|
107
|
+
|
|
108
|
+
<img width="660" height="353" alt="image" src="https://github.com/user-attachments/assets/22da756b-d62f-4be9-b69d-5524355a9068" />
|
|
109
|
+
|
|
110
|
+
**5.1.2 Workflow**
|
|
111
|
+
|
|
112
|
+
<img width="2346" height="766" alt="image" src="https://github.com/user-attachments/assets/c2d338be-17e8-4770-8382-1ba075ea4538" />
|
|
113
|
+
|
|
114
|
+
**_Webhook_**
|
|
115
|
+
|
|
116
|
+
A webhook listens for responses from the Discord bot that has been set up. If the user requests a document, he can fulfill three parameters, two of which are mandatory.
|
|
117
|
+
|
|
118
|
+
- Document ID:
|
|
119
|
+
- Repository
|
|
120
|
+
- Email (optional).
|
|
121
|
+
|
|
122
|
+
**_AI-Agent_**
|
|
123
|
+
|
|
124
|
+
- The Agent connected to the Ollama Chat Model is trained to convert these inputs into a string and filter out the important information.
|
|
125
|
+
- The agent received the following prompt:
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
You are a strict extraction engine.
|
|
129
|
+
|
|
130
|
+
Your only task is to extract two or three values from the user message:
|
|
131
|
+
|
|
132
|
+
- repositoryId
|
|
133
|
+
- documentId
|
|
134
|
+
- Email
|
|
135
|
+
Rules:
|
|
136
|
+
|
|
137
|
+
- Output ONLY valid JSON.
|
|
138
|
+
- No explanations.
|
|
139
|
+
- No markdown.
|
|
140
|
+
- No extra text.
|
|
141
|
+
- Always output both keys.
|
|
142
|
+
- If a value is missing, use null.
|
|
143
|
+
- Never invent values.
|
|
144
|
+
- Extract exact values only from the input.
|
|
145
|
+
|
|
146
|
+
Output format:
|
|
147
|
+
|
|
148
|
+
{
|
|
149
|
+
"repositoryId": "...",
|
|
150
|
+
"documentId": "...",
|
|
151
|
+
"email": "..."
|
|
152
|
+
}
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
**_Code in Java Script_**
|
|
156
|
+
This is a compact code node for custom JavaScript. The node's content is as follows:
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
const parsed = JSON.parse($json.output);
|
|
160
|
+
|
|
161
|
+
return [
|
|
162
|
+
{
|
|
163
|
+
json: parsed
|
|
164
|
+
}
|
|
165
|
+
];
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
This small code block is responsible for parsing the string into individual objects. Therefore, they can be used subsequently.
|
|
169
|
+
|
|
170
|
+
**_d.velop Actions - Download Document_**
|
|
171
|
+
|
|
172
|
+
- This action facilitates the download of the document using the _repository_ and _document ID_.
|
|
173
|
+
- Please note that neither of these is set manually, they are both set using a simple JavaScript expression.
|
|
174
|
+
|
|
175
|
+
<img width="507" height="239" alt="image" src="https://github.com/user-attachments/assets/494a7f5e-4ef2-43d5-ab9f-9527a5c95cea" />
|
|
176
|
+
|
|
177
|
+
**_IF-Statment_**
|
|
178
|
+
|
|
179
|
+
- The IF statement is used to determine whether an email is given.
|
|
180
|
+
|
|
181
|
+
<img width="884" height="312" alt="image" src="https://github.com/user-attachments/assets/616035c5-97bb-4bc6-b677-45d71f43d450" />
|
|
182
|
+
|
|
183
|
+
***Send a Message - Email = True***
|
|
184
|
+
|
|
185
|
+
- The truePath system will send an email when an email exists, containing the data from the d.velop action.
|
|
186
|
+
|
|
187
|
+
<img width="754" height="1102" alt="image" src="https://github.com/user-attachments/assets/c4106c48-57ff-430e-b817-4f7eca3077fb" />
|
|
188
|
+
|
|
189
|
+
- If the email is successful, the user will receive a Discord verification message confirming the request.
|
|
190
|
+
|
|
191
|
+
**_Send a Message - Email = False_**
|
|
192
|
+
|
|
193
|
+
- This simply delegates the email aspect, ensuring that the message is transmitted directly to the intended Discord user.
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
**5.2. Get Document Info**
|
|
198
|
+
|
|
199
|
+
This action shows all the Information the Document has attached to it, for example:
|
|
200
|
+
|
|
201
|
+
- Document ID
|
|
202
|
+
- Document Location (URL)
|
|
203
|
+
- Self Link
|
|
204
|
+
- Delete Link
|
|
205
|
+
- Main content Link
|
|
206
|
+
- PDF Content Link
|
|
207
|
+
- Update Link
|
|
208
|
+
- Update with Content Link
|
|
209
|
+
- Versions Link
|
|
210
|
+
- LAs Modified Date
|
|
211
|
+
- Last Alteration Date
|
|
212
|
+
- Editor ID
|
|
213
|
+
- Editor Name
|
|
214
|
+
- Owner ID
|
|
215
|
+
- Owner Name
|
|
216
|
+
- Document CAption
|
|
217
|
+
- File Name
|
|
218
|
+
- File Type
|
|
219
|
+
- Fike MINE Type
|
|
220
|
+
- Document Number
|
|
221
|
+
- Creation Date
|
|
222
|
+
- File Size
|
|
223
|
+
- Document State
|
|
224
|
+
- Variant Number
|
|
225
|
+
- Last Access Date
|
|
226
|
+
- Document Categoty ID
|
|
227
|
+
- Documnet Category Name
|
|
228
|
+
- Retenition Date
|
|
229
|
+
- Custom Properties
|
|
230
|
+
- Source Categories
|
|
231
|
+
|
|
232
|
+
**5.2.1 Setting up the Action**
|
|
233
|
+
|
|
234
|
+
- To setup the Node manually, you just need to fill in the mandatory fields and you are ready to get the Document Info.
|
|
235
|
+
|
|
236
|
+
<img width="577" height="501" alt="image" src="https://github.com/user-attachments/assets/54410412-5425-4aeb-addf-82db00a9c6ce" />
|
|
237
|
+
|
|
238
|
+
- To find out what the _Repository_ string is, you need to open the Document you want to get the Information from, via. the n8n node and copy the red Marked Link section.
|
|
239
|
+
|
|
240
|
+
- To identify the _Document ID_ you can, open te Details and Look for Document_Nr. This is also circled with a rectangle
|
|
241
|
+
|
|
242
|
+
<img width="1226" height="708" alt="Download_Document" src="https://github.com/user-attachments/assets/ea17fb6d-8fae-4bc9-937d-825eb2a40349" />
|
|
243
|
+
|
|
244
|
+
- The output will be Display in the Rightside of the Node:
|
|
245
|
+
|
|
246
|
+
<img width="1401" height="878" alt="image" src="https://github.com/user-attachments/assets/360cf720-a709-47a9-a1ab-2b681ced2c20" />
|
|
247
|
+
|
|
248
|
+
- This is a lot of JSON, so the whole Output wont be shown.
|
|
249
|
+
|
|
250
|
+
**5.2.2 Workflow**
|
|
251
|
+
|
|
252
|
+
<img width="3247" height="979" alt="image" src="https://github.com/user-attachments/assets/3a46e88f-11be-48e9-91a9-d9028e5e28b4" />
|
|
253
|
+
|
|
254
|
+
**_Webhook_**
|
|
255
|
+
|
|
256
|
+
A webhook listens for responses from the Discord bot that has been set up. If the user requests a document, he can fulfill three parameters, two of which are mandatory.
|
|
257
|
+
|
|
258
|
+
- Document ID:
|
|
259
|
+
- Repository
|
|
260
|
+
- Specific_Metatada
|
|
261
|
+
- Email (optional).
|
|
262
|
+
|
|
263
|
+
**_AI-Agent_**
|
|
264
|
+
|
|
265
|
+
- The Agent connected to the Ollama Chat Model is trained to convert these inputs into JSON and filter out the important information.
|
|
266
|
+
- The agent received the following prompt:
|
|
267
|
+
|
|
268
|
+
```bash
|
|
269
|
+
You are a strict extraction engine.
|
|
270
|
+
|
|
271
|
+
Your only task is to extract the following values from the USER MESSAGE ONLY:
|
|
272
|
+
|
|
273
|
+
repositoryId
|
|
274
|
+
|
|
275
|
+
documentId
|
|
276
|
+
|
|
277
|
+
email
|
|
278
|
+
|
|
279
|
+
Metadata_Specific (user requested metadata fields)
|
|
280
|
+
|
|
281
|
+
CRITICAL OUTPUT RULES:
|
|
282
|
+
|
|
283
|
+
Output EXACTLY one valid JSON object.
|
|
284
|
+
|
|
285
|
+
The output MUST start with { and MUST end with }.
|
|
286
|
+
|
|
287
|
+
Do NOT output anything before {.
|
|
288
|
+
|
|
289
|
+
Do NOT output anything after }.
|
|
290
|
+
|
|
291
|
+
Do NOT output explanations.
|
|
292
|
+
|
|
293
|
+
Do NOT output markdown.
|
|
294
|
+
|
|
295
|
+
Do NOT output text outside the JSON.
|
|
296
|
+
|
|
297
|
+
The JSON MUST be complete and properly closed.
|
|
298
|
+
|
|
299
|
+
EXTRACTION RULES:
|
|
300
|
+
|
|
301
|
+
Never invent values.
|
|
302
|
+
|
|
303
|
+
Extract exact values only from the USER MESSAGE.
|
|
304
|
+
|
|
305
|
+
Do NOT extract values from system data, API responses, or metadata objects.
|
|
306
|
+
|
|
307
|
+
Only extract what the USER explicitly writes.
|
|
308
|
+
|
|
309
|
+
METADATA RULES:
|
|
310
|
+
|
|
311
|
+
Metadata = true if the user requests metadata.
|
|
312
|
+
|
|
313
|
+
Metadata = false if the user does NOT request metadata.
|
|
314
|
+
|
|
315
|
+
Metadata_Specific = null if the user did not request specific metadata fields.
|
|
316
|
+
|
|
317
|
+
Metadata_Specific = array of strings if specific metadata fields are requested.
|
|
318
|
+
|
|
319
|
+
If Metadata_Specific is not null, Metadata MUST be true.
|
|
320
|
+
|
|
321
|
+
If a value is missing, use null.
|
|
322
|
+
|
|
323
|
+
OUTPUT FORMAT (STRICT SCHEMA):
|
|
324
|
+
|
|
325
|
+
{
|
|
326
|
+
"repositoryId": "...",
|
|
327
|
+
"documentId": "...",
|
|
328
|
+
"email": "...",
|
|
329
|
+
"Metadata_Specific": "..."
|
|
330
|
+
}
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
**_Code in Java Script_**
|
|
334
|
+
|
|
335
|
+
This is a compact code node for custom JavaScript. The node's content is as follows:
|
|
336
|
+
|
|
337
|
+
```bash
|
|
338
|
+
const parsed = JSON.parse($json.output);
|
|
339
|
+
|
|
340
|
+
return [
|
|
341
|
+
{
|
|
342
|
+
json: parsed
|
|
343
|
+
}
|
|
344
|
+
];
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
This small code block is responsible for parsing the string into individual objects. Therefore, they can be used subsequently.
|
|
348
|
+
|
|
349
|
+
**_d.velop Actions - Get Document Information_**
|
|
350
|
+
|
|
351
|
+
- This action facilitates the download of the document using the _repository_ and _document ID_.
|
|
352
|
+
- Please note that neither of these is set manually, they are both set using a simple JavaScript expression.
|
|
353
|
+
|
|
354
|
+
<img width="1540" height="217" alt="image" src="https://github.com/user-attachments/assets/d0e253e9-da49-42b3-8099-3ff7f7e6434b" />
|
|
355
|
+
|
|
356
|
+
**_AI-Agent1_**
|
|
357
|
+
|
|
358
|
+
- This Agent is responsible for Filtering out the Information that the _Get Document Information_ is providing.
|
|
359
|
+
- The Promt the the AI got is filled with all the Metadata that the Action Produces, so the AI has access to it
|
|
360
|
+
- If the `{{ $('Code in JavaScript').item.json.Metadata_Specific[0] }}` is set to _null_ the whole Metadata conerning the document will be shown
|
|
361
|
+
The Prompt:
|
|
362
|
+
|
|
363
|
+
```bash
|
|
364
|
+
You are a metadata summarization engine.
|
|
365
|
+
|
|
366
|
+
Your task is to summarize metadata values coming from the node input.
|
|
367
|
+
|
|
368
|
+
The metadata source is:
|
|
369
|
+
|
|
370
|
+
{{ $json.response.sourceProperties[0].key }} : {{ $json.response.sourceProperties[0].value }},
|
|
371
|
+
{{ $json.response.sourceProperties[2].key }} : {{ $json.response.sourceProperties[2].displayValue }},
|
|
372
|
+
{{ $json.response.sourceProperties[3].key }} : {{ $json.response.sourceProperties[3].value }},
|
|
373
|
+
{{ $json.response.sourceProperties[4].key }} : {{ $json.response.sourceProperties[4].value }},
|
|
374
|
+
{{ $json.response.sourceProperties[5].key }} : {{ $json.response.sourceProperties[5].value }},
|
|
375
|
+
{{ $json.response.sourceProperties[6].key }} : {{ $json.response.sourceProperties[6].value }},
|
|
376
|
+
{{ $json.response.sourceProperties[7].key }} : {{ $json.response.sourceProperties[7].value }},
|
|
377
|
+
{{ $json.response.sourceProperties[8].key }} : {{ $json.response.sourceProperties[8].value }},
|
|
378
|
+
{{ $json.response.sourceProperties[9].key }} : {{ $json.response.sourceProperties[9].value }},
|
|
379
|
+
{{ $json.response.sourceProperties[10].key }} : {{ $json.response.sourceProperties[10].value }},
|
|
380
|
+
{{ $json.response.sourceProperties[11].key }} : {{ $json.response.sourceProperties[11].value }},
|
|
381
|
+
{{ $json.response.sourceProperties[12].key }} : {{ $json.response.sourceProperties[12].value }},
|
|
382
|
+
{{ $json.response.sourceProperties[13].key }} : {{ $json.response.sourceProperties[13].value }},
|
|
383
|
+
{{ $json.response.sourceProperties[14].key }} : {{ $json.response.sourceProperties[14].value }},
|
|
384
|
+
{{ $json.response.sourceProperties[15].key }} : {{ $json.response.sourceProperties[15].value }},
|
|
385
|
+
{{ $json.response.sourceProperties[16].key }} : {{ $json.response.sourceProperties[16].value }},
|
|
386
|
+
{{ $json.response.sourceProperties[17].key }} : {{ $json.response.sourceProperties[17].value }},
|
|
387
|
+
{{ $json.response.sourceProperties[18].key }} : {{ $json.response.sourceProperties[18].value }},
|
|
388
|
+
{{ $json.response.sourceProperties[19].key }} : {{ $json.response.sourceProperties[19].displayValue }},
|
|
389
|
+
{{ $json.response.sourceProperties[20].key }} : {{ $json.response.sourceProperties[20].value }},
|
|
390
|
+
{{ $json.response.sourceProperties[21].key }} : {{ $json.response.sourceProperties[21].value }},
|
|
391
|
+
{{ $json.response.sourceProperties[22].key }} : {{ $json.response.sourceProperties[22].value }},
|
|
392
|
+
{{ $json.response.sourceProperties[23].key }} : {{ $json.response.sourceProperties[23].value }};
|
|
393
|
+
|
|
394
|
+
User requested specific metadata:
|
|
395
|
+
|
|
396
|
+
{{ $('Code in JavaScript').item.json.Metadata_Specific }}
|
|
397
|
+
|
|
398
|
+
Rules:
|
|
399
|
+
If Metdata is = null : {{ $('Code in JavaScript').item.json.Metadata_Specific[0] }}
|
|
400
|
+
Print out Everything
|
|
401
|
+
|
|
402
|
+
|
|
403
|
+
If Metadata_Specific is set: {{ $('Code in JavaScript').item.json.Metadata_Specific[0] }}
|
|
404
|
+
|
|
405
|
+
Only summarize the requested metadata fields.
|
|
406
|
+
|
|
407
|
+
Ignore all other metadata.
|
|
408
|
+
|
|
409
|
+
If Metadata_Specific is null:
|
|
410
|
+
|
|
411
|
+
Summarize ALL metadata fields.
|
|
412
|
+
|
|
413
|
+
Only use the metadata provided above.
|
|
414
|
+
|
|
415
|
+
Do NOT invent metadata.
|
|
416
|
+
|
|
417
|
+
Do NOT explain anything.
|
|
418
|
+
|
|
419
|
+
|
|
420
|
+
|
|
421
|
+
Output only the summary.
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
**_IF-Statment_**
|
|
425
|
+
|
|
426
|
+
- The IF statement is used to determine whether an email is given.
|
|
427
|
+
|
|
428
|
+
<img width="884" height="312" alt="image" src="https://github.com/user-attachments/assets/616035c5-97bb-4bc6-b677-45d71f43d450" />
|
|
429
|
+
|
|
430
|
+
***Send a Message - Email = True***
|
|
431
|
+
|
|
432
|
+
- The truePath system will send an email when an email exists, containing the data from Agents Output.
|
|
433
|
+
|
|
434
|
+
<img width="768" height="705" alt="image" src="https://github.com/user-attachments/assets/38c78569-f2ab-406d-aaab-fa943bef0641" />
|
|
435
|
+
|
|
436
|
+
- If the email is successful, the user will receive a Discord verification message confirming the request.
|
|
437
|
+
|
|
438
|
+
<img width="1472" height="199" alt="image" src="https://github.com/user-attachments/assets/e884ae8e-6656-447b-b8d5-fd912bac9f9b" />
|
|
439
|
+
|
|
440
|
+
**_Send a Message - Email = False_**
|
|
441
|
+
|
|
442
|
+
- This simply delegates the email aspect, ensuring that the message is transmitted directly to the intended Discord user.
|
|
443
|
+
|
|
444
|
+
**5.3. Get User Info**
|
|
445
|
+
|
|
446
|
+
This action displays all the information associated with the user. Please find below a list of all the functions that this action returns:
|
|
447
|
+
|
|
448
|
+
- getUserId – Returns the unique internal user ID
|
|
449
|
+
- getExternalId – Returns the external user ID (if available)
|
|
450
|
+
- getUserName – Returns the user's login username
|
|
451
|
+
- getDisplayName – Returns the user's full display name
|
|
452
|
+
- getGivenName – Returns the user's first name
|
|
453
|
+
- getFamilyName – Returns the user's last name
|
|
454
|
+
- getFormattedName – Returns the user's formatted full name
|
|
455
|
+
- getPrimaryEmail – Returns the user's primary email address
|
|
456
|
+
- getEmails – Returns all email addresses of the user
|
|
457
|
+
- getProfileUrl – Returns the user's profile URL
|
|
458
|
+
- getUserTitle – Returns the user's job title or position
|
|
459
|
+
- getPhotos – Returns the user's profile photo information
|
|
460
|
+
- getPhoneNumbers – Returns the user's phone numbers
|
|
461
|
+
- getGroups – Returns all groups the user belongs to
|
|
462
|
+
- getGroupIds – Returns the IDs of the user's groups
|
|
463
|
+
- getGroupDisplayNames – Returns the names of the user's groups
|
|
464
|
+
|
|
465
|
+
**5.3.1 Setting up the Action**
|
|
466
|
+
|
|
467
|
+
- To set this Action up you just need the User_ID.
|
|
468
|
+
|
|
469
|
+
<img width="580" height="421" alt="image" src="https://github.com/user-attachments/assets/21f70d38-d286-4653-b31a-b240af5f15fc" />
|
|
470
|
+
|
|
471
|
+
- To Acquire the User_ID of a DMS User, you need to go in to the Configuration -> Administration -> User account and group management
|
|
472
|
+
- From there you just need to click the User you want the ID From, and Copy the red marked section from the URL
|
|
473
|
+
|
|
474
|
+
<img width="1047" height="781" alt="Screenshot 2026-02-19 110016" src="https://github.com/user-attachments/assets/ddb2a6bb-e8cd-48ec-ac35-dce8445d0b8a" />
|
|
475
|
+
|
|
476
|
+
The output will be Displayed on the Output Tab:
|
|
477
|
+
|
|
478
|
+
<img width="1365" height="1142" alt="image" src="https://github.com/user-attachments/assets/6311374e-0825-42fd-bb55-cb9887a3128f" />
|
|
479
|
+
|
|
480
|
+
**5.3.2 Workflow**
|
|
481
|
+
|
|
482
|
+
- This Workflow is a bit bigger and also Includes 2 Other Actions and a d.velop custom API Call. The _Get User Info_ Action cant be utilized to demonstrate a good Usecase alone.
|
|
483
|
+
Senariao:
|
|
484
|
+
|
|
485
|
+
If a User of the DMS Wants to download a specific Document, the Owner of that Document gets a E-Mail. To Approve or denie the Download request.
|
|
486
|
+
|
|
487
|
+
<img width="2956" height="557" alt="image" src="https://github.com/user-attachments/assets/befc8b7b-da82-4a9d-935e-d3e1d165fd4a" />
|
|
488
|
+
|
|
489
|
+
**_Webhook_**
|
|
490
|
+
|
|
491
|
+
A webhook listens for responses from the Discord bot that has been set up. If the user requests a document, he can fulfill 2 parameters, both of them are mandatory:
|
|
492
|
+
|
|
493
|
+
- Document ID
|
|
494
|
+
- Repository
|
|
495
|
+
|
|
496
|
+
**_AI-Agent_**
|
|
497
|
+
|
|
498
|
+
- The Agent connected to the Ollama Chat Model is trained to convert these inputs into a string and filter out the important information.
|
|
499
|
+
- The agent received the following prompt:
|
|
500
|
+
|
|
501
|
+
```bash
|
|
502
|
+
You are a strict extraction engine.
|
|
503
|
+
|
|
504
|
+
Your only task is to extract two or three values from the user message:
|
|
505
|
+
|
|
506
|
+
- repositoryId
|
|
507
|
+
- documentId
|
|
508
|
+
Rules:
|
|
509
|
+
|
|
510
|
+
- Output ONLY valid JSON.
|
|
511
|
+
- No explanations.
|
|
512
|
+
- No markdown.
|
|
513
|
+
- No extra text.
|
|
514
|
+
- Always output both keys.
|
|
515
|
+
- If a value is missing, use null.
|
|
516
|
+
- Never invent values.
|
|
517
|
+
- Extract exact values only from the input.
|
|
518
|
+
|
|
519
|
+
Output format:
|
|
520
|
+
|
|
521
|
+
{
|
|
522
|
+
"repositoryId": "...",
|
|
523
|
+
"documentId": "...",
|
|
524
|
+
}
|
|
525
|
+
```
|
|
526
|
+
|
|
527
|
+
**_Code in Java Script_**
|
|
528
|
+
This is a compact code node for custom JavaScript. The node's content is as follows:
|
|
529
|
+
|
|
530
|
+
```bash
|
|
531
|
+
const parsed = JSON.parse($json.output);
|
|
532
|
+
|
|
533
|
+
return [
|
|
534
|
+
{
|
|
535
|
+
json: parsed
|
|
536
|
+
}
|
|
537
|
+
];
|
|
538
|
+
```
|
|
539
|
+
|
|
540
|
+
This small code block is responsible for parsing the string into individual objects. Therefore, they can be used subsequently.
|
|
541
|
+
|
|
542
|
+
**_d.velop Actions - Get Document Info_**
|
|
543
|
+
|
|
544
|
+
- Here the repository and the Document ID's are enterd with a Statment
|
|
545
|
+
- This node is Important because here you can get the DisplayValue from the Document Owner. This will be Utalised in the netxt node
|
|
546
|
+
|
|
547
|
+
<img width="764" height="512" alt="image" src="https://github.com/user-attachments/assets/71184366-cf57-419a-baf5-fbf6512bedfd" />
|
|
548
|
+
|
|
549
|
+
**_HTTP-Request_**
|
|
550
|
+
|
|
551
|
+
- THis node is Basicly just a Custom api Call to the identityprivider API
|
|
552
|
+
- The Variable is the Name of the Document Owner
|
|
553
|
+
|
|
554
|
+
```bash
|
|
555
|
+
https://connect-for-n8n-test.d-velop.cloud/identityprovider/scim/users?filter=DisplayName eq "{{ $json.response.sourceProperties[2].displayValue }}"
|
|
556
|
+
```
|
|
557
|
+
|
|
558
|
+
<img width="582" height="798" alt="image" src="https://github.com/user-attachments/assets/89d28697-57cb-4672-ba8d-975a056bb07a" />
|
|
559
|
+
|
|
560
|
+
- If you run this call, you can get the ID, of the Document Owner
|
|
561
|
+
|
|
562
|
+
**_d.velop Actions - Get User Info_**
|
|
563
|
+
|
|
564
|
+
- In this Node the User_ID is being user to get the E-Mail from the Document Owner
|
|
565
|
+
|
|
566
|
+
<img width="506" height="437" alt="image" src="https://github.com/user-attachments/assets/0aa9cc64-2108-4bc3-a314-88c36e42a3e2" />
|
|
567
|
+
|
|
568
|
+
**_G-Mail Send a Message_**
|
|
569
|
+
|
|
570
|
+
- With the E-Mail we got from the _Get User Info_ Action, we now can send a Approve request to the Document Owner
|
|
571
|
+
- Tis E-Mail also Displays who is Requesting this Document
|
|
572
|
+
|
|
573
|
+
<img width="495" height="698" alt="image" src="https://github.com/user-attachments/assets/7d2a6769-4a80-4b18-8544-f64527e4dc48" />
|
|
574
|
+
|
|
575
|
+
**_IF True - Approved_**
|
|
576
|
+
|
|
577
|
+
- If the Document Owner Approved the download the Workflow procceds to Download the Document using the _Download Document_ Action.
|
|
578
|
+
|
|
579
|
+
<img width="500" height="560" alt="image" src="https://github.com/user-attachments/assets/33d896c6-4f6e-47eb-86f6-133d3e5c3d05" />
|
|
580
|
+
|
|
581
|
+
- And the Discord Bot replies to the User who sent the request with the File attatched to the Message.
|
|
582
|
+
|
|
583
|
+
<img width="492" height="1034" alt="image" src="https://github.com/user-attachments/assets/5f09b25d-80b0-418f-9fd7-6f7b6e761129" />
|
|
584
|
+
|
|
585
|
+
**_IF False - Denied_**
|
|
586
|
+
|
|
587
|
+
- If the Download Request was denied by the Owner, the bot sends a message that you request was denied.
|
|
588
|
+
|
|
589
|
+
<img width="496" height="691" alt="image" src="https://github.com/user-attachments/assets/d8e9a75d-aae9-41fd-89a5-5297dc30d144" />
|
|
590
|
+
|
|
591
|
+
---
|
|
592
|
+
|
|
593
|
+
**5.4. Import Document**
|
|
594
|
+
|
|
595
|
+
This Action Allows you to Upload files directly to your DMS, using d.velop Inbound.
|
|
596
|
+
The Action does not return Any Values, it just Uploads Files, so they can be Indexed.
|
|
597
|
+
|
|
598
|
+
**5.4.1 Setting up the Wokflow**
|
|
599
|
+
|
|
600
|
+
- To work with this Action, you need a Minimal Workflow:
|
|
601
|
+
|
|
602
|
+
<img width="1423" height="536" alt="image" src="https://github.com/user-attachments/assets/1d0ccf5e-7a87-4e46-aa5f-de8c63943809" />
|
|
603
|
+
|
|
604
|
+
- In order to Upload a file with the d.velop Action, you need a File in your Workflow.
|
|
605
|
+
- As an small example the _"Read/Write Files from Disk"_ Node is Used to get a file in to the Workflow.
|
|
606
|
+
|
|
607
|
+
**5.4.2 Setting up the Node**
|
|
608
|
+
|
|
609
|
+
- This node in Paticular has an Input from The node before
|
|
610
|
+
|
|
611
|
+
<img width="1162" height="753" alt="image" src="https://github.com/user-attachments/assets/3adb6883-d02f-4c18-9089-064a53aaa0ef" />
|
|
612
|
+
|
|
613
|
+
**File Name**
|
|
614
|
+
|
|
615
|
+
- The File name can either be set manually every Time, or you write a simple Java Script Expression:
|
|
616
|
+
|
|
617
|
+
```bash
|
|
618
|
+
{{ $json.fileName }}
|
|
619
|
+
```
|
|
620
|
+
|
|
621
|
+
**File Source**
|
|
622
|
+
|
|
623
|
+
- When configuring the node, set the File Source to From N8n Binary. This means the file will be taken from the binary data of a previous node in your workflow.
|
|
624
|
+
- Alternatively, you can use From Base64/String as the File Source. This option allows you to upload a file using its Base64-encoded content instead of binary data.
|
|
625
|
+
|
|
626
|
+
**Input Binary Property**
|
|
627
|
+
|
|
628
|
+
- The Input Binary Property defines the name of the binary field that contains the file. In most cases, this property is called: binary.
|
|
629
|
+
|
|
630
|
+
**Import Profile**
|
|
631
|
+
|
|
632
|
+
- In order to get the Import Profile you need to navigate to _configuration_ -> _Document Managment_ -> _Import_ -> _Importoption_ -> _Importprofile_
|
|
633
|
+
|
|
634
|
+
<img width="1076" height="599" alt="image" src="https://github.com/user-attachments/assets/8bac4b1c-b63d-418c-b9a4-66be1800e3e8" />
|
|
635
|
+
|
|
636
|
+
- In this setting you can Copy the red Marked _Import Profile_
|
|
637
|
+
|
|
638
|
+
**5.4.3 DMS Inbound**
|
|
639
|
+
|
|
640
|
+
- STILL UNDER CONSTRUCTION
|
|
641
|
+
- API IS BITCHING
|
|
642
|
+
|
|
643
|
+
## 6. Volatile Action in Detail
|
|
644
|
+
|
|
645
|
+
- The following is an instructional guide to setting up volatile actions and loading the payload correctly.
|
|
646
|
+
|
|
647
|
+
**6.1. Choose from your Actions**
|
|
648
|
+
|
|
649
|
+
<img width="730" height="653" alt="image" src="https://github.com/user-attachments/assets/dff6ac75-d274-4e18-ac10-081af5e83ae0" />
|
|
650
|
+
|
|
651
|
+
- If you chose your action you need to fill the Payload
|
|
652
|
+
|
|
653
|
+
**6.2. Payload of an Action**
|
|
654
|
+
|
|
655
|
+
- To ascertain the payload of an action, it is necessary to utilize an _API client_, such as _Bruno_. -> https://www.usebruno.com
|
|
656
|
+
- To retrieve all volatile actions, run this API call with the _base URL_ and the _API key (token)_.
|
|
657
|
+
<img width="556" height="240" alt="image" src="https://github.com/user-attachments/assets/cb0dbcce-4425-4fcc-906d-b3a643f2d430" />
|
|
658
|
+
|
|
659
|
+
- If you execute this API call, you will receive a list of all the volatile actions.
|
|
660
|
+
- In terms of testing, we will examine the Salesforce_getRecord action.
|
|
661
|
+
|
|
662
|
+
```bash
|
|
663
|
+
{
|
|
664
|
+
"id": "salesforce_get-record",
|
|
665
|
+
"display_name": "Salesforce - Get Record",
|
|
666
|
+
"tags": null,
|
|
667
|
+
"description": "This operation gets a record.",
|
|
668
|
+
"endpoint": "/actions/api/execute/salesforce_get-record",
|
|
669
|
+
"execution_mode": "Synchron",
|
|
670
|
+
"input_properties": [
|
|
671
|
+
{
|
|
672
|
+
"id": "objectApiName",
|
|
673
|
+
"type": "String",
|
|
674
|
+
"title": "Object API Name",
|
|
675
|
+
"description": "",
|
|
676
|
+
"required": true,
|
|
677
|
+
"visibility": "Standard",
|
|
678
|
+
"initial_value": "",
|
|
679
|
+
"object_properties": null,
|
|
680
|
+
"fixed_value_set": null,
|
|
681
|
+
"data_query_url": "",
|
|
682
|
+
"data_query_parameter": null
|
|
683
|
+
},
|
|
684
|
+
{
|
|
685
|
+
"id": "recordId",
|
|
686
|
+
"type": "String",
|
|
687
|
+
"title": "Record ID",
|
|
688
|
+
"description": "",
|
|
689
|
+
"required": true,
|
|
690
|
+
"visibility": "Standard",
|
|
691
|
+
"initial_value": "",
|
|
692
|
+
"object_properties": null,
|
|
693
|
+
"fixed_value_set": null,
|
|
694
|
+
"data_query_url": "",
|
|
695
|
+
"data_query_parameter": null
|
|
696
|
+
},
|
|
697
|
+
{
|
|
698
|
+
"id": "orgUrl",
|
|
699
|
+
"type": "String",
|
|
700
|
+
"title": "Salesforce Org URL",
|
|
701
|
+
"description": "",
|
|
702
|
+
"required": true,
|
|
703
|
+
"visibility": "Advanced",
|
|
704
|
+
"initial_value": "",
|
|
705
|
+
"object_properties": null,
|
|
706
|
+
"fixed_value_set": null,
|
|
707
|
+
"data_query_url": "/salesforce/process/actions/values/orgs",
|
|
708
|
+
"data_query_parameter": null
|
|
709
|
+
}
|
|
710
|
+
],
|
|
711
|
+
"output_properties": [
|
|
712
|
+
{
|
|
713
|
+
"id": "record",
|
|
714
|
+
"type": "Object",
|
|
715
|
+
"title": "Record",
|
|
716
|
+
"description": "",
|
|
717
|
+
"object_properties": null
|
|
718
|
+
}
|
|
719
|
+
],
|
|
720
|
+
"volatile": true
|
|
721
|
+
```
|
|
722
|
+
|
|
723
|
+
- The payload consists of the _input_properties_. So in this instance the payload is:
|
|
724
|
+
|
|
725
|
+
```bash
|
|
726
|
+
{
|
|
727
|
+
"objectApiName": "Account",
|
|
728
|
+
"recordId": "001XXXXXXXXXXXXXXX",
|
|
729
|
+
"orgUrl": "https://your-org.salesforce.com"
|
|
730
|
+
}
|
|
731
|
+
```
|
|
732
|
+
|
|
733
|
+
**6.3 Assamble the Node**
|
|
734
|
+
|
|
735
|
+
- The last step is to Paste the Payload in the Node of your desire, fill the properties wirh values and Execute the Node!
|
|
736
|
+
|
|
737
|
+
<img width="939" height="577" alt="image" src="https://github.com/user-attachments/assets/3811a0fe-15e3-4093-93a5-c5f5d2ffd0cb" />
|
|
738
|
+
|
|
739
|
+
## 7. Error codes
|
|
740
|
+
|
|
741
|
+
- This section describes the most common error code that may occur when using the d.velop Actions Node
|
|
742
|
+
|
|
743
|
+
**7.1 Authentication Errors**
|
|
744
|
+
|
|
745
|
+
| Error Code | Message | Cause | Solution |
|
|
746
|
+
| ---------- | ------------ | ------------------------------- | --------------------------------- |
|
|
747
|
+
| 401 | Unauthorized | Invalid or missing Bearer Token | Verify API key in credentials |
|
|
748
|
+
| 403 | Forbidden | Insufficient permissions | Check user permissions in d.velop |
|
|
749
|
+
| 400 | Bad Request | Invalid Base URL or headers | Verify Base URL and credentials |
|
|
750
|
+
|
|
751
|
+
Example response:
|
|
752
|
+
|
|
753
|
+
```bash
|
|
754
|
+
{
|
|
755
|
+
"error": "Unauthorized"
|
|
756
|
+
}
|
|
757
|
+
```
|
|
758
|
+
|
|
759
|
+
**7.2 Document Errors**
|
|
760
|
+
|
|
761
|
+
| Error Code | Message | Cause | Solution |
|
|
762
|
+
| ---------- | -------------------- | ----------------------- | ------------------------ |
|
|
763
|
+
| 404 | Document not found | Invalid document ID | Verify document ID |
|
|
764
|
+
| 404 | Repository not found | Invalid repository ID | Verify repository string |
|
|
765
|
+
| 400 | Invalid parameters | Missing required fields | Check node configuration |
|
|
766
|
+
|
|
767
|
+
**7.3 Import Errors**
|
|
768
|
+
|
|
769
|
+
| Error Code | Message | Cause | Solution |
|
|
770
|
+
| ---------- | ---------------------- | --------------------- | ---------------------------- |
|
|
771
|
+
| 400 | Invalid import profile | Wrong import profile | Verify import profile |
|
|
772
|
+
| 400 | Missing binary data | Binary property empty | Verify input binary property |
|
|
773
|
+
| 413 | Payload too large | File too large | Reduce file size |
|
|
774
|
+
|
|
775
|
+
**7.4 Volatile Action Errors**
|
|
776
|
+
|
|
777
|
+
| Error Code | Message | Cause | Solution |
|
|
778
|
+
| ---------- | --------------------- | ---------------------- | ------------------------ |
|
|
779
|
+
| 400 | Invalid payload | Missing payload fields | Verify payload structure |
|
|
780
|
+
| 404 | Action not found | Invalid action ID | Verify action exists |
|
|
781
|
+
| 500 | Internal server error | Server-side issue | Check d.velop system |
|
|
782
|
+
|
|
783
|
+
## Compatibility
|
|
784
|
+
|
|
785
|
+
Tested with n8n@2.12.1.
|
|
786
|
+
|
|
787
|
+
## Resources
|
|
788
|
+
|
|
789
|
+
* [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
|
|
790
|
+
* [d.velop Homepage](https://www.d-velop.de)
|
|
791
|
+
* [d.velop Support](support@d-velop.de)
|