Skip to content

d-velop/n8n-nodes-dvelop

Repository files navigation

@dvelop/n8n-nodes-dvelop

This is an n8n community node. It lets you use d.velop documents in your n8n workflows. This is a community node and not affiliated with n8n GmbH. Use at your own risk.

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.

n8n is a fair-code licensed workflow automation platform.

Installation Operations Credentials Documentation Compatibility Resources

1. Installation

Follow the installation guide in the n8n community nodes documentation.

2. Operations

  • Download documents automatically
  • Import documents automatically to the DMS
  • Retrieve the metadata from documents
  • Retrieve user information

3. Credentials

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.

image

3.1 Base URL

  • This is just the Base URL of your instance, marked in blue (don't copy the last /)
image

3.2 Authentication Method

  • The Bearer Token is nothing else except the API key you can find in the d.velop instance configuration, under Login -> API key
  • 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.

3.3 Allowed HTTP Request

  • For the node to work you need to allow the HTTP requests.

4. Documentation

To use this node in a workflow you need to open the Nodes Panel and search for d.velop Actions


4.1 Pick an Action Mode

  • Here you can choose between 4 stable actions or your volatile actions.
image

4.2 Stable Actions

Stable actions are predefined, and they will always be the same.

They are the standard features such as:

  • Download a document
  • Get document info
  • Get user info
  • Import document

4.3 Volatile Actions

  • 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.
  • These actions can also be created in the Process Studio script tab, and can be used in this node.

As an example:

image
  • Those are standard volatile Salesforce actions, and the Hello_World action is a script from the Process Studio.
  • These actions are dynamic and the payload that they carry isn't displayed.

5. Stable Actions in Detail

This is going to showcase how the stable Actions work in detail.


5.1 Download Document

  • To set up the download node manually, you just need to fill in the mandatory fields and you are ready to download the file.
image
  • To find out what the Repository string and the Document_ID are, you need to open the document and copy the marked section.
Download_Document
  • The output will be displayed on the right side of the node.
image

5.1.2 Workflow

image

Webhook

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.

  • Document ID:
  • Repository
  • Email (optional).

AI-Agent

  • The Agent connected to the Ollama Chat Model is trained to convert these inputs into a string and filter out the important information.
  • The agent received the following prompt:
You are a strict extraction engine.

Your only task is to extract two or three values from the user message:

- repositoryId
- documentId
- Email
Rules:

- Output ONLY valid JSON.
- No explanations.
- No markdown.
- No extra text.
- Always output both keys.
- If a value is missing, use null.
- Never invent values.
- Extract exact values only from the input.

Output format:

{
  "repositoryId": "...",
  "documentId": "...",
  "email": "..."
}

Code in Java Script This is a compact code node for custom JavaScript. The node's content is as follows:

const parsed = JSON.parse($json.output);

return [
  {
    json: parsed
  }
];

This small code block is responsible for parsing the string into individual objects. Therefore, they can be used subsequently.

d.velop Actions - Download Document

  • This action facilitates the download of the document using the repository and document ID.
  • Please note that neither of these is set manually, they are both set using a simple JavaScript expression.
image

IF-Statment

  • The IF statement is used to determine whether an email is given.
image

Send a Message - Email = True

  • The truePath system will send an email when an email exists, containing the data from the d.velop action.
image
  • If the email is successful, the user will receive a Discord verification message confirming the request.

Send a Message - Email = False

  • This simply delegates the email aspect, ensuring that the message is transmitted directly to the intended Discord user.

5.2. Get Document Info

This action shows all the Information the Document has attached to it, for example:

  • Document ID
  • Document Location (URL)
  • Self Link
  • Delete Link
  • Main content Link
  • PDF Content Link
  • Update Link
  • Update with Content Link
  • Versions Link
  • LAs Modified Date
  • Last Alteration Date
  • Editor ID
  • Editor Name
  • Owner ID
  • Owner Name
  • Document CAption
  • File Name
  • File Type
  • Fike MINE Type
  • Document Number
  • Creation Date
  • File Size
  • Document State
  • Variant Number
  • Last Access Date
  • Document Categoty ID
  • Documnet Category Name
  • Retenition Date
  • Custom Properties
  • Source Categories

5.2.1 Setting up the Action

  • To setup the Node manually, you just need to fill in the mandatory fields and you are ready to get the Document Info.
image
  • 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.

  • To identify the Document ID you can, open te Details and Look for Document_Nr. This is also circled with a rectangle

Download_Document
  • The output will be Display in the Rightside of the Node:
image
  • This is a lot of JSON, so the whole Output wont be shown.

5.2.2 Workflow

image

Webhook

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.

  • Document ID:
  • Repository
  • Specific_Metatada
  • Email (optional).

AI-Agent

  • The Agent connected to the Ollama Chat Model is trained to convert these inputs into JSON and filter out the important information.
  • The agent received the following prompt:
You are a strict extraction engine.

Your only task is to extract the following values from the USER MESSAGE ONLY:

repositoryId

documentId

email

Metadata_Specific (user requested metadata fields)

CRITICAL OUTPUT RULES:

Output EXACTLY one valid JSON object.

The output MUST start with { and MUST end with }.

Do NOT output anything before {.

Do NOT output anything after }.

Do NOT output explanations.

Do NOT output markdown.

Do NOT output text outside the JSON.

The JSON MUST be complete and properly closed.

EXTRACTION RULES:

Never invent values.

Extract exact values only from the USER MESSAGE.

Do NOT extract values from system data, API responses, or metadata objects.

Only extract what the USER explicitly writes.

METADATA RULES:

Metadata = true if the user requests metadata.

Metadata = false if the user does NOT request metadata.

Metadata_Specific = null if the user did not request specific metadata fields.

Metadata_Specific = array of strings if specific metadata fields are requested.

If Metadata_Specific is not null, Metadata MUST be true.

If a value is missing, use null.

OUTPUT FORMAT (STRICT SCHEMA):

{
"repositoryId": "...",
"documentId": "...",
"email": "...",
"Metadata_Specific": "..."
}

Code in Java Script

This is a compact code node for custom JavaScript. The node's content is as follows:

const parsed = JSON.parse($json.output);

return [
  {
    json: parsed
  }
];

This small code block is responsible for parsing the string into individual objects. Therefore, they can be used subsequently.

d.velop Actions - Get Document Information

  • This action facilitates the download of the document using the repository and document ID.
  • Please note that neither of these is set manually, they are both set using a simple JavaScript expression.
image

AI-Agent1

  • This Agent is responsible for Filtering out the Information that the Get Document Information is providing.
  • The Promt the the AI got is filled with all the Metadata that the Action Produces, so the AI has access to it
  • If the {{ $('Code in JavaScript').item.json.Metadata_Specific[0] }} is set to null the whole Metadata conerning the document will be shown The Prompt:
You are a metadata summarization engine.

Your task is to summarize metadata values coming from the node input.

The metadata source is:

{{ $json.response.sourceProperties[0].key }} : {{ $json.response.sourceProperties[0].value }},
{{ $json.response.sourceProperties[2].key }} : {{ $json.response.sourceProperties[2].displayValue }},
{{ $json.response.sourceProperties[3].key }} : {{ $json.response.sourceProperties[3].value }},
{{ $json.response.sourceProperties[4].key }} : {{ $json.response.sourceProperties[4].value }},
{{ $json.response.sourceProperties[5].key }} : {{ $json.response.sourceProperties[5].value }},
{{ $json.response.sourceProperties[6].key }} : {{ $json.response.sourceProperties[6].value }},
{{ $json.response.sourceProperties[7].key }} : {{ $json.response.sourceProperties[7].value }},
{{ $json.response.sourceProperties[8].key }} : {{ $json.response.sourceProperties[8].value }},
{{ $json.response.sourceProperties[9].key }} : {{ $json.response.sourceProperties[9].value }},
{{ $json.response.sourceProperties[10].key }} : {{ $json.response.sourceProperties[10].value }},
{{ $json.response.sourceProperties[11].key }} : {{ $json.response.sourceProperties[11].value }},
{{ $json.response.sourceProperties[12].key }} : {{ $json.response.sourceProperties[12].value }},
{{ $json.response.sourceProperties[13].key }} : {{ $json.response.sourceProperties[13].value }},
{{ $json.response.sourceProperties[14].key }} : {{ $json.response.sourceProperties[14].value }},
{{ $json.response.sourceProperties[15].key }} : {{ $json.response.sourceProperties[15].value }},
{{ $json.response.sourceProperties[16].key }} : {{ $json.response.sourceProperties[16].value }},
{{ $json.response.sourceProperties[17].key }} : {{ $json.response.sourceProperties[17].value }},
{{ $json.response.sourceProperties[18].key }} : {{ $json.response.sourceProperties[18].value }},
{{ $json.response.sourceProperties[19].key }} : {{ $json.response.sourceProperties[19].displayValue }},
{{ $json.response.sourceProperties[20].key }} : {{ $json.response.sourceProperties[20].value }},
{{ $json.response.sourceProperties[21].key }} : {{ $json.response.sourceProperties[21].value }},
{{ $json.response.sourceProperties[22].key }} : {{ $json.response.sourceProperties[22].value }},
{{ $json.response.sourceProperties[23].key }} : {{ $json.response.sourceProperties[23].value }};

User requested specific metadata:

{{ $('Code in JavaScript').item.json.Metadata_Specific }}

Rules:
If Metdata is = null : {{ $('Code in JavaScript').item.json.Metadata_Specific[0] }}
Print out Everything


If Metadata_Specific is set: {{ $('Code in JavaScript').item.json.Metadata_Specific[0] }}

Only summarize the requested metadata fields.

Ignore all other metadata.

If Metadata_Specific is null:

Summarize ALL metadata fields.

Only use the metadata provided above.

Do NOT invent metadata.

Do NOT explain anything.



Output only the summary.

IF-Statment

  • The IF statement is used to determine whether an email is given.
image

Send a Message - Email = True

  • The truePath system will send an email when an email exists, containing the data from Agents Output.
image
  • If the email is successful, the user will receive a Discord verification message confirming the request.
image

Send a Message - Email = False

  • This simply delegates the email aspect, ensuring that the message is transmitted directly to the intended Discord user.

5.3. Get User Info

This action displays all the information associated with the user. Please find below a list of all the functions that this action returns:

  • getUserId – Returns the unique internal user ID
  • getExternalId – Returns the external user ID (if available)
  • getUserName – Returns the user's login username
  • getDisplayName – Returns the user's full display name
  • getGivenName – Returns the user's first name
  • getFamilyName – Returns the user's last name
  • getFormattedName – Returns the user's formatted full name
  • getPrimaryEmail – Returns the user's primary email address
  • getEmails – Returns all email addresses of the user
  • getProfileUrl – Returns the user's profile URL
  • getUserTitle – Returns the user's job title or position
  • getPhotos – Returns the user's profile photo information
  • getPhoneNumbers – Returns the user's phone numbers
  • getGroups – Returns all groups the user belongs to
  • getGroupIds – Returns the IDs of the user's groups
  • getGroupDisplayNames – Returns the names of the user's groups

5.3.1 Setting up the Action

  • To set this Action up you just need the User_ID.
image
  • To Acquire the User_ID of a DMS User, you need to go in to the Configuration -> Administration -> User account and group management
  • From there you just need to click the User you want the ID From, and Copy the red marked section from the URL
Screenshot 2026-02-19 110016

The output will be Displayed on the Output Tab:

image

5.3.2 Workflow

  • 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. Senariao:

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.

image

Webhook

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:

  • Document ID
  • Repository

AI-Agent

  • The Agent connected to the Ollama Chat Model is trained to convert these inputs into a string and filter out the important information.
  • The agent received the following prompt:
You are a strict extraction engine.

Your only task is to extract two or three values from the user message:

- repositoryId
- documentId
Rules:

- Output ONLY valid JSON.
- No explanations.
- No markdown.
- No extra text.
- Always output both keys.
- If a value is missing, use null.
- Never invent values.
- Extract exact values only from the input.

Output format:

{
  "repositoryId": "...",
  "documentId": "...",
}

Code in Java Script This is a compact code node for custom JavaScript. The node's content is as follows:

const parsed = JSON.parse($json.output);

return [
  {
    json: parsed
  }
];

This small code block is responsible for parsing the string into individual objects. Therefore, they can be used subsequently.

d.velop Actions - Get Document Info

  • Here the repository and the Document ID's are enterd with a Statment
  • This node is Important because here you can get the DisplayValue from the Document Owner. This will be Utalised in the netxt node
image

HTTP-Request

  • THis node is Basicly just a Custom api Call to the identityprivider API

  • The Variable is the Name of the Document Owner

    https://connect-for-n8n-test.d-velop.cloud/identityprovider/scim/users?filter=DisplayName eq "{{ $json.response.sourceProperties[2].displayValue }}"
image
  • If you run this call, you can get the ID, of the Document Owner

d.velop Actions - Get User Info

  • In this Node the User_ID is being user to get the E-Mail from the Document Owner
image

G-Mail Send a Message

  • With the E-Mail we got from the Get User Info Action, we now can send a Approve request to the Document Owner
  • Tis E-Mail also Displays who is Requesting this Document
image

IF True - Approved

  • If the Document Owner Approved the download the Workflow procceds to Download the Document using the Download Document Action.
image
  • And the Discord Bot replies to the User who sent the request with the File attatched to the Message.
image

IF False - Denied

  • If the Download Request was denied by the Owner, the bot sends a message that you request was denied.
image

5.4. Import Document

This Action Allows you to Upload files directly to your DMS, using d.velop Inbound. The Action does not return Any Values, it just Uploads Files, so they can be Indexed.

5.4.1 Setting up the Wokflow

  • To work with this Action, you need a Minimal Workflow:
image
  • In order to Upload a file with the d.velop Action, you need a File in your Workflow.
  • As an small example the "Read/Write Files from Disk" Node is Used to get a file in to the Workflow.

5.4.2 Setting up the Node

  • This node in Paticular has an Input from The node before
image

File Name

  • The File name can either be set manually every Time, or you write a simple Java Script Expression:

    {{ $json.fileName }}

    File Source

  • 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.

  • 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.

Input Binary Property

  • The Input Binary Property defines the name of the binary field that contains the file. In most cases, this property is called: binary.

Import Profile

  • In order to get the Import Profile you need to navigate to configuration -> Document Managment -> Import -> Importoption -> Importprofile
image
  • In this setting you can Copy the red Marked Import Profile

5.4.3 DMS Inbound

  • This action submits a file to d.velop Inbound for automatic import into the Document Management System (DMS).
  • Unlike the Download Document action, this action does not return any document data, it sends the file to d.velop and lets the configured import profile handle archiving and indexing.

6. Volatile Action in Detail

  • The following is an instructional guide to setting up volatile actions and loading the payload correctly.

6.1. Choose from your Actions

image
  • If you chose your action you need to fill the Payload

6.2. Payload of an Action

  • To ascertain the payload of an action, it is necessary to utilize an API client, such as Bruno. -> https://www.usebruno.com

  • To retrieve all volatile actions, run this API call with the base URL and the API key (token). image

  • If you execute this API call, you will receive a list of all the volatile actions.

  • In terms of testing, we will examine the Salesforce_getRecord action.

{
    "id": "salesforce_get-record",
    "display_name": "Salesforce - Get Record",
    "tags": null,
    "description": "This operation gets a record.",
    "endpoint": "/actions/api/execute/salesforce_get-record",
    "execution_mode": "Synchron",
    "input_properties": [
      {
        "id": "objectApiName",
        "type": "String",
        "title": "Object API Name",
        "description": "",
        "required": true,
        "visibility": "Standard",
        "initial_value": "",
        "object_properties": null,
        "fixed_value_set": null,
        "data_query_url": "",
        "data_query_parameter": null
      },
      {
        "id": "recordId",
        "type": "String",
        "title": "Record ID",
        "description": "",
        "required": true,
        "visibility": "Standard",
        "initial_value": "",
        "object_properties": null,
        "fixed_value_set": null,
        "data_query_url": "",
        "data_query_parameter": null
      },
      {
        "id": "orgUrl",
        "type": "String",
        "title": "Salesforce Org URL",
        "description": "",
        "required": true,
        "visibility": "Advanced",
        "initial_value": "",
        "object_properties": null,
        "fixed_value_set": null,
        "data_query_url": "/salesforce/process/actions/values/orgs",
        "data_query_parameter": null
      }
    ],
    "output_properties": [
      {
        "id": "record",
        "type": "Object",
        "title": "Record",
        "description": "",
        "object_properties": null
      }
    ],
    "volatile": true
  • The payload consists of the input_properties. So in this instance the payload is:
{
  "objectApiName": "Account",
  "recordId": "001XXXXXXXXXXXXXXX",
  "orgUrl": "https://your-org.salesforce.com"
}

6.3 Assamble the Node

  • The last step is to Paste the Payload in the Node of your desire, fill the properties wirh values and Execute the Node!
image

7. Error codes

  • This section describes the most common error code that may occur when using the d.velop Actions Node

7.1 Authentication Errors

Error Code Message Cause Solution
401 Unauthorized Invalid or missing Bearer Token Verify API key in credentials
403 Forbidden Insufficient permissions Check user permissions in d.velop
400 Bad Request Invalid Base URL or headers Verify Base URL and credentials

Example response:

{
  "error": "Unauthorized"
}

7.2 Document Errors

Error Code Message Cause Solution
404 Document not found Invalid document ID Verify document ID
404 Repository not found Invalid repository ID Verify repository string
400 Invalid parameters Missing required fields Check node configuration

7.3 Import Errors

Error Code Message Cause Solution
400 Invalid import profile Wrong import profile Verify import profile
400 Missing binary data Binary property empty Verify input binary property
413 Payload too large File too large Reduce file size

7.4 Volatile Action Errors

Error Code Message Cause Solution
400 Invalid payload Missing payload fields Verify payload structure
404 Action not found Invalid action ID Verify action exists
500 Internal server error Server-side issue Check d.velop system

Compatibility

Tested with n8n@2.12.1.

Resources

About

d.velop connect for n8n.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors