Change repo links to absolute file paths (#2829)

Co-authored-by: Nick Veitch <nick.veitch@n8n.io>
This commit is contained in:
Justin Ellingwood 2025-02-11 17:40:26 +00:00 committed by GitHub
parent ec6469a9c9
commit a7dc52d6e1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1063 changed files with 3368 additions and 3319 deletions

54
_doctools/change_link_style.py Executable file
View File

@ -0,0 +1,54 @@
#!/usr/bin/env python3
from pathlib import Path
import argparse
import re
def find_markdown_files(directory):
"""Return a list of path objects for all markdown files in the given directory."""
return list(Path(directory).rglob("*.[mM][dD]"))
def map_urls_to_files(path_list, root_dir):
"""Return a dictionary mapping URL link targets to file targets."""
path_maps = dict()
for path in path_list:
# Here, we convert file paths to absolute paths from the root_dir
md_link_target = "/" / path.relative_to(root_dir)
url_link_target = get_url_path_from_file_path(md_link_target)
path_maps[url_link_target] = str(md_link_target)
return path_maps
def get_url_path_from_file_path(file_path):
"""Return the URL path for a given file path."""
if file_path.name == "index.md":
return str(file_path.parent)
else:
return str(file_path.parent / file_path.stem)
def main(directory):
"""
Finds Markdown files, calculates URL paths associated with them, then finds and
replaces URL paths with file paths in links throughout the repo.
"""
markdown_files = find_markdown_files(directory)
snippet_files = find_markdown_files("../_snippets")
link_maps = map_urls_to_files(markdown_files, directory)
for file in markdown_files + snippet_files:
text = file.read_text()
for url_target, file_target in link_maps.items():
find_pattern = fr"]\({url_target}/?(#[0-9A-Za-z-]+)?\)"
replace_pattern = fr"]({file_target}\1)"
text = re.sub(find_pattern, replace_pattern, text)
file.write_text(text)
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Replace URL style link targets with markdown file targets")
parser.add_argument("--dir", type=str, default="../docs", help="Directory to scan (default: '../docs')")
args = parser.parse_args()
main(args.dir)

View File

@ -2,5 +2,5 @@
If you have issues with expressions in 1.9.0:
* Please report the issue on the [forums](https://community.n8n.io/){:target=_blank .external-link}.
* Self-hosted users can switch back to RiotTmpl: set `N8N_EXPRESSION_EVALUATOR` to `tmpl`. Refer to [Environment variables](/hosting/configuration/environment-variables/) for more information on configuring self-hosted n8n.
* Self-hosted users can switch back to RiotTmpl: set `N8N_EXPRESSION_EVALUATOR` to `tmpl`. Refer to [Environment variables](/hosting/configuration/environment-variables/index.md) for more information on configuring self-hosted n8n.
///

View File

@ -1,4 +1,4 @@
Use n8n's item linking to access data from items that precede the current item. It also has implications when using the Code node. Most nodes link every output item to an input item. This creates a chain of items that you can work back along to access previous items. For a deeper conceptual overview of this topic, refer to [Item linking concepts](/data/data-mapping/data-item-linking/item-linking-concepts). This document focuses on practical usage examples.
Use n8n's item linking to access data from items that precede the current item. It also has implications when using the Code node. Most nodes link every output item to an input item. This creates a chain of items that you can work back along to access previous items. For a deeper conceptual overview of this topic, refer to [Item linking concepts](/data/data-mapping/data-item-linking/item-linking-concepts.md). This document focuses on practical usage examples.
When using the Code node, there are some scenarios where you need to manually supply item linking information if you want to be able to use `$("<node-name>").item` later in the workflow. All these scenarios only apply if you have more than one incoming item. n8n automatically handles item linking for single items.
@ -8,7 +8,7 @@ These scenarios are when you:
* Return new items.
* Want to manually control the item linking.
[n8n's automatic item linking](/data/data-mapping/data-item-linking/item-linking-concepts/) handles the other scenarios.
[n8n's automatic item linking](/data/data-mapping/data-item-linking/item-linking-concepts.md) handles the other scenarios.
To control item linking, set `pairedItem` when returning data. For example, to link to the item at index 0:

View File

@ -4,9 +4,9 @@ This guidance applies to programmatic-style nodes. If you're using declarative s
Use n8n's item linking to access data from items that precede the current item. n8n needs to know which input item a given output item comes from. If this information is missing, expressions in other nodes may break. As a node developer, you must ensure any items returned by your node support this.
This applies to programmatic nodes (including trigger nodes). You don't need to consider item linking when building a declarative-style node. Refer to [Choose your node building approach](/integrations/creating-nodes/plan/choose-node-method/) for more information on node styles.
This applies to programmatic nodes (including trigger nodes). You don't need to consider item linking when building a declarative-style node. Refer to [Choose your node building approach](/integrations/creating-nodes/plan/choose-node-method.md) for more information on node styles.
Start by reading [Item linking concepts](/data/data-mapping/data-item-linking/item-linking-concepts/), which provides a conceptual overview of item linking, and details of the scenarios where n8n can handle the linking automatically.
Start by reading [Item linking concepts](/data/data-mapping/data-item-linking/item-linking-concepts.md), which provides a conceptual overview of item linking, and details of the scenarios where n8n can handle the linking automatically.
If you need to handle item linking manually, do this by setting `pairedItem` on each item your node returns:

View File

@ -4,12 +4,12 @@
1. Create a new workflow.
/// note | Create sub-workflows from existing workflows
You can optionally create a sub-workflow directly from an existing parent workflow using the [Execute Sub-workflow](/integrations/builtin/core-nodes/n8n-nodes-base.executeworkflow/) node. In the node, select the **Database** and **From list** options and select **Create a sub-workflow** in the list.
You can optionally create a sub-workflow directly from an existing parent workflow using the [Execute Sub-workflow](/integrations/builtin/core-nodes/n8n-nodes-base.executeworkflow.md) node. In the node, select the **Database** and **From list** options and select **Create a sub-workflow** in the list.
///
1. **Optional**: configure which workflows can call the sub-workflow:
1. Select the **Options** <span class="inline-image">![Options menu](/_images/common-icons/three-dot-options-menu.png){.off-glb}</span> menu > **Settings**. n8n opens the **Workflow settings** modal.
1. Change the **This workflow can be called by** setting. Refer to [Workflow settings](/workflows/settings/) for more information on configuring your workflows.
1. Change the **This workflow can be called by** setting. Refer to [Workflow settings](/workflows/settings.md) for more information on configuring your workflows.
1. Add the **Execute Sub-workflow** trigger node (if you are searching under trigger nodes, this is also titled **When Executed by Another Workflow**).
1. Set the **Input data mode** to choose how you will define the sub-workflow's input data:
* **Define using fields below**: Choose this mode to define individual input names and data types that the calling workflow needs to provide.
@ -22,15 +22,15 @@
If there are errors in the sub-workflow, the parent workflow can't trigger it.
///
/// note | Load data into sub-workflow before building
This requires the ability to [load data from previous executions](/workflows/executions/debug/), which is available on n8n Cloud and registered Community plans.
This requires the ability to [load data from previous executions](/workflows/executions/debug.md), which is available on n8n Cloud and registered Community plans.
If you want to load data into your sub-workflow to use while building it:
1. Create the sub-workflow and add the **Execute Sub-workflow Trigger**.
1. Set the node's **Input data mode** to **Accept all data** or define the input items using fields or JSON if they're already known.
1. In the sub-workflow [settings](/workflows/settings/), set **Save successful production executions** to **Save**.
1. In the sub-workflow [settings](/workflows/settings.md), set **Save successful production executions** to **Save**.
1. Skip ahead to setting up the parent workflow, and run it.
1. Follow the steps to [load data from previous executions](/workflows/executions/debug/).
1. Follow the steps to [load data from previous executions](/workflows/executions/debug.md).
1. Adjust the **Input data mode** to match the input sent by the parent workflow if necessary.
You can now pin example data in the trigger node, enabling you to work with real data while configuring the rest of the workflow.

View File

@ -1,6 +1,6 @@
## What to do if your operation isn't supported
If this node doesn't support the operation you want to do, you can use the [HTTP Request node](/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service's API.
If this node doesn't support the operation you want to do, you can use the [HTTP Request node](/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/index.md) to call the service's API.
You can use the credential you created for this service in the HTTP Request node:
@ -8,4 +8,4 @@ You can use the credential you created for this service in the HTTP Request node
1. Select the service you want to connect to.
1. Select your credential.
Refer to [Custom API operations](/integrations/custom-operations/) for more information.
Refer to [Custom API operations](/integrations/custom-operations.md) for more information.

View File

@ -1 +1 @@
View n8n's [Advanced AI](/advanced-ai/) documentation.
View n8n's [Advanced AI](/advanced-ai/index.md) documentation.

View File

@ -1,7 +1,7 @@
| Method | Description |
| ------ | ----------- |
| `this.addInputData(inputName, data)` | Populate the data of a specified non-main input. Useful for mocking data.<ul><li>`inputName` is the input connection type, and must be one of: `ai_agent`, `ai_chain`, `ai_document`, `ai_embedding`, `ai_languageModel`, `ai_memory`, `ai_outputParser`, `ai_retriever`, `ai_textSplitter`, `ai_tool`, `ai_vectorRetriever`, `ai_vectorStore`</li><li>`data` contains the data you want to add. Refer to [Data structure](/data/data-structure/) for information on the data structure expected by n8n.</li></ul> |
| `this.addOutputData(outputName, data)` | Populate the data of a specified non-main output. Useful for mocking data.<ul><li>`outputName` is the input connection type, and must be one of: `ai_agent`, `ai_chain`, `ai_document`, `ai_embedding`, `ai_languageModel`, `ai_memory`, `ai_outputParser`, `ai_retriever`, `ai_textSplitter`, `ai_tool`, `ai_vectorRetriever`, `ai_vectorStore`</li><li>`data` contains the data you want to add. Refer to [Data structure](/data/data-structure/) for information on the data structure expected by n8n.</li></ul> |
| `this.addInputData(inputName, data)` | Populate the data of a specified non-main input. Useful for mocking data.<ul><li>`inputName` is the input connection type, and must be one of: `ai_agent`, `ai_chain`, `ai_document`, `ai_embedding`, `ai_languageModel`, `ai_memory`, `ai_outputParser`, `ai_retriever`, `ai_textSplitter`, `ai_tool`, `ai_vectorRetriever`, `ai_vectorStore`</li><li>`data` contains the data you want to add. Refer to [Data structure](/data/data-structure.md) for information on the data structure expected by n8n.</li></ul> |
| `this.addOutputData(outputName, data)` | Populate the data of a specified non-main output. Useful for mocking data.<ul><li>`outputName` is the input connection type, and must be one of: `ai_agent`, `ai_chain`, `ai_document`, `ai_embedding`, `ai_languageModel`, `ai_memory`, `ai_outputParser`, `ai_retriever`, `ai_textSplitter`, `ai_tool`, `ai_vectorRetriever`, `ai_vectorStore`</li><li>`data` contains the data you want to add. Refer to [Data structure](/data/data-structure.md) for information on the data structure expected by n8n.</li></ul> |
| `this.getInputConnectionData(inputName, itemIndex, inputIndex?)` | Get data from a specified non-main input.<ul><li>`inputName` is the input connection type, and must be one of: `ai_agent`, `ai_chain`, `ai_document`, `ai_embedding`, `ai_languageModel`, `ai_memory`, `ai_outputParser`, `ai_retriever`, `ai_textSplitter`, `ai_tool`, `ai_vectorRetriever`, `ai_vectorStore`</li><li>`itemIndex` should always be `0` (this parameter will be used in upcoming functionality)</li><li>Use `inputIndex` if there is more than one node connected to the specified input.</li></ul> |
| `this.getInputData(inputIndex?, inputName?)` | Get data from the main input. |
| `this.getNode()` | Get the current node. |

View File

@ -1,5 +1,5 @@
This parameter controls whether you want the node to require a specific output format. When turned on, n8n prompts you to connect one of these output parsers to the node:
* [Auto-fixing Output Parser](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.outputparserautofixing/)
* [Item List Output Parser](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.outputparseritemlist/)
* [Structured Output Parser](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.outputparserstructured/)
* [Auto-fixing Output Parser](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.outputparserautofixing.md)
* [Item List Output Parser](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.outputparseritemlist.md)
* [Structured Output Parser](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.outputparserstructured/index.md)

View File

@ -2,4 +2,4 @@ Available in **Get Many** mode. When searching for data, use this to match with
This is an `AND` query. If you specify more than one metadata filter field, all of them must match.
When inserting data, the metadata is set using the document loader. Refer to [Default Data Loader](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.documentdefaultdataloader/) for more information on loading documents.
When inserting data, the metadata is set using the document loader. Refer to [Default Data Loader](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.documentdefaultdataloader.md) for more information on loading documents.

View File

@ -1 +1 @@
You can use this agent with the [Chat Trigger](/integrations/builtin/core-nodes/n8n-nodes-langchain.chattrigger/) node. Attach a memory sub-node so that users can have an ongoing conversation with multiple queries. Memory doesn't persist between sessions.
You can use this agent with the [Chat Trigger](/integrations/builtin/core-nodes/n8n-nodes-langchain.chattrigger/index.md) node. Attach a memory sub-node so that users can have an ongoing conversation with multiple queries. Memory doesn't persist between sessions.

View File

@ -1,11 +1,11 @@
Use the Code node to write custom JavaScript or Python and run it as a step in your workflow.
/// note | Coding in n8n
This page gives usage information about the Code node. For more guidance on coding in n8n, refer to the [Code](/code/) section. It includes:
This page gives usage information about the Code node. For more guidance on coding in n8n, refer to the [Code](/code/index.md) section. It includes:
* Reference documentation on [Built-in methods and variables](/code/builtin/overview/)
* Guidance on [Handling dates](/code/cookbook/luxon/) and [Querying JSON](/code/cookbook/jmespath/)
* A growing collection of examples in the [Cookbook](/code/cookbook/)
* Reference documentation on [Built-in methods and variables](/code/builtin/overview.md)
* Guidance on [Handling dates](/code/cookbook/luxon.md) and [Querying JSON](/code/cookbook/jmespath.md)
* A growing collection of examples in the [Cookbook](/code/cookbook/code-node/index.md)
///
/// note | Examples and templates
@ -39,7 +39,7 @@ The Code node supports:
### External libraries
If you self-host n8n, you can import and use built-in and external npm modules in the Code node. To learn how to enable external modules, refer to the [Enable modules in Code node](/hosting/configuration/configuration-examples/modules-in-code-node/) guide.
If you self-host n8n, you can import and use built-in and external npm modules in the Code node. To learn how to enable external modules, refer to the [Enable modules in Code node](/hosting/configuration/configuration-examples/modules-in-code-node.md) guide.
If you use n8n Cloud, you can't import external npm modules. n8n makes two modules available for you:
@ -48,13 +48,13 @@ If you use n8n Cloud, you can't import external npm modules. n8n makes two modul
### Built-in methods and variables
n8n provides built-in methods and variables for working with data and accessing n8n data. Refer to [Built-in methods and variables](/code/builtin/overview/) for more information.
n8n provides built-in methods and variables for working with data and accessing n8n data. Refer to [Built-in methods and variables](/code/builtin/overview.md) for more information.
The syntax to use the built-in methods and variables is `$variableName` or `$methodName()`. Type `$` in the Code node or expressions editor to see a list of suggested methods and variables.
### Keyboard shortcuts
The Code node editing environment supports time-saving and useful keyboard shortcuts for a range of operations from autocompletion to code-folding and using multiple-cursors. A full list can be found in the [list of keyboard shortcuts](/integrations/builtin/core-nodes/n8n-nodes-base.code/keyboard-shortcuts).
The Code node editing environment supports time-saving and useful keyboard shortcuts for a range of operations from autocompletion to code-folding and using multiple-cursors. A full list can be found in the [list of keyboard shortcuts](/integrations/builtin/core-nodes/n8n-nodes-base.code/keyboard-shortcuts.md).
## Python
@ -65,20 +65,20 @@ The Code node takes longer to process Python than JavaScript. This is due to the
///
### Built-in methods and variables
n8n provides built-in methods and variables for working with data and accessing n8n data. Refer to [Built-in methods and variables](/code/builtin/overview/) for more information.
n8n provides built-in methods and variables for working with data and accessing n8n data. Refer to [Built-in methods and variables](/code/builtin/overview.md) for more information.
The syntax to use the built-in methods and variables is `_variableName` or `_methodName()`. Type `_` in the Code node to see a list of suggested methods and variables.
### Keyboard shortcuts
The Code node editing environment supports time-saving and useful keyboard shortcuts for a range of operations from autocompletion to code-folding and using multiple-cursors. A full list can be found in the [list of keyboard shortcuts](/integrations/builtin/core-nodes/n8n-nodes-base.code/keyboard-shortcuts).
The Code node editing environment supports time-saving and useful keyboard shortcuts for a range of operations from autocompletion to code-folding and using multiple-cursors. A full list can be found in the [list of keyboard shortcuts](/integrations/builtin/core-nodes/n8n-nodes-base.code/keyboard-shortcuts.md).
## File system and HTTP requests
You can't access the file system or make HTTP requests. Use the following nodes instead:
* [Read/Write File From Disk](/integrations/builtin/core-nodes/n8n-nodes-base.readwritefile/)
* [HTTP Request](/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/)
* [Read/Write File From Disk](/integrations/builtin/core-nodes/n8n-nodes-base.readwritefile.md)
* [HTTP Request](/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/index.md)
## Coding in n8n
@ -88,8 +88,8 @@ There are two places where you can use code in n8n: the Code node and the expres
When working with the Code node, you need to understand the following concepts:
* [Data structure](/data/data-structure/): understand the data you receive in the Code node, and requirements for outputting data from the node.
* [Item linking](/data/data-mapping/data-item-linking/): learn how data items work, and how to link to items from previous nodes. You need to handle item linking in your code when the number of input and output items doesn't match.
* [Data structure](/data/data-structure.md): understand the data you receive in the Code node, and requirements for outputting data from the node.
* [Item linking](/data/data-mapping/data-item-linking/index.md): learn how data items work, and how to link to items from previous nodes. You need to handle item linking in your code when the number of input and output items doesn't match.
### Built-in methods and variables
@ -99,7 +99,7 @@ n8n includes built-in methods and variables. These provide support for:
* Accessing data about workflows, executions, and your n8n environment
* Convenience variables to help with data and time
Refer to [Built-in methods and variables](/code/builtin/overview) for more information.
Refer to [Built-in methods and variables](/code/builtin/overview.md) for more information.

View File

@ -1 +1 @@
Learn more about [data structure and data flow](/data/) in n8n workflows.
Learn more about [data structure and data flow](/data/index.md) in n8n workflows.

View File

@ -1,5 +1,5 @@
/// info | 0.236.0 and below
n8n removed this execution behavior in version 1.0. This section applies to workflows using the **v0 (legacy)** workflow execution order. By default, this is all workflows built before version 1.0. You can change the execution order in your [workflow settings](/workflows/settings/).
n8n removed this execution behavior in version 1.0. This section applies to workflows using the **v0 (legacy)** workflow execution order. By default, this is all workflows built before version 1.0. You can change the execution order in your [workflow settings](/workflows/settings.md).
///
If you add a Merge node to a workflow containing an If node, it can result in both output data streams of the If node executing.

View File

@ -1,6 +1,6 @@
/// note | Timezone settings
The node relies on the timezone setting. n8n uses either:
1. The workflow timezone, if set. Refer to [Workflow settings](/workflows/settings/) for more information.
2. The n8n instance timezone, if the workflow timezone isn't set. The default is `America/New York` for self-hosted instances. n8n Cloud tries to detect the instance owner's timezone when they sign up, falling back to GMT as the default. Self-hosted users can change the instance setting using [Environment variables](/hosting/configuration/environment-variables/timezone-localization). Cloud admins can change the instance timezone in the [Admin dashboard](/manage-cloud/set-cloud-timezone/).
1. The workflow timezone, if set. Refer to [Workflow settings](/workflows/settings.md) for more information.
2. The n8n instance timezone, if the workflow timezone isn't set. The default is `America/New York` for self-hosted instances. n8n Cloud tries to detect the instance owner's timezone when they sign up, falling back to GMT as the default. Self-hosted users can change the instance setting using [Environment variables](/hosting/configuration/environment-variables/timezone-localization.md). Cloud admins can change the instance timezone in the [Admin dashboard](/manage-cloud/set-cloud-timezone.md).
///

View File

@ -1 +1 @@
You can use these credentials to authenticate when using the [HTTP Request node](/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to make a [Custom API call](/integrations/custom-operations/).
You can use these credentials to authenticate when using the [HTTP Request node](/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/index.md) to make a [Custom API call](/integrations/custom-operations.md).

View File

@ -1,4 +1,4 @@
One of the most complex parts of setting up API calls is managing authentication. n8n provides credentials support for operations and services beyond those supported by built-in nodes.
* Custom operations for existing nodes: n8n supplies hundreds of nodes to create workflows that link multiple products. However, some nodes don't include all the possible operations supported by a product's API. You can work around this by making a custom API call using the [HTTP Request](/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) node.
* Custom operations for existing nodes: n8n supplies hundreds of nodes to create workflows that link multiple products. However, some nodes don't include all the possible operations supported by a product's API. You can work around this by making a custom API call using the [HTTP Request](/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/index.md) node.
* Credential-only nodes: n8n includes credential-only nodes. These are integrations where n8n supports setting up credentials for use in the HTTP Request node, but doesn't provide a standalone node. You can find a credential-only node in the nodes panel, as you would for any other integration.

View File

@ -1,11 +1,11 @@
/// note | Note for n8n Cloud users
For the following nodes, you can authenticate by selecting **Sign in with Google** in the OAuth section:
* [Google Calendar](/integrations/builtin/app-nodes/n8n-nodes-base.googlecalendar/)
* [Google Contacts](/integrations/builtin/app-nodes/n8n-nodes-base.googlecontacts/)
* [Google Drive](/integrations/builtin/app-nodes/n8n-nodes-base.googledrive/)
* [Google Mail](/integrations/builtin/app-nodes/n8n-nodes-base.gmail/)
* [Google Sheets](/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets/)
* [Google Sheets Trigger](/integrations/builtin/trigger-nodes/n8n-nodes-base.googlesheetstrigger/)
* [Google Tasks](/integrations/builtin/app-nodes/n8n-nodes-base.googletasks/)
* [Google Calendar](/integrations/builtin/app-nodes/n8n-nodes-base.googlecalendar/index.md)
* [Google Contacts](/integrations/builtin/app-nodes/n8n-nodes-base.googlecontacts.md)
* [Google Drive](/integrations/builtin/app-nodes/n8n-nodes-base.googledrive/index.md)
* [Google Mail](/integrations/builtin/app-nodes/n8n-nodes-base.gmail/index.md)
* [Google Sheets](/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets/index.md)
* [Google Sheets Trigger](/integrations/builtin/trigger-nodes/n8n-nodes-base.googlesheetstrigger/index.md)
* [Google Tasks](/integrations/builtin/app-nodes/n8n-nodes-base.googletasks.md)
///

View File

@ -4,7 +4,7 @@ This error displays when you've exceeded [OpenAI's rate limits](https://platform
There are two ways to work around this issue:
1. Split your data up into smaller chunks using the [Loop Over Items](/integrations/builtin/core-nodes/n8n-nodes-base.splitinbatches/) node and add a [Wait](/integrations/builtin/core-nodes/n8n-nodes-base.wait/) node at the end for a time amount that will help. Copy the code below and paste it into a workflow to use as a template.
1. Split your data up into smaller chunks using the [Loop Over Items](/integrations/builtin/core-nodes/n8n-nodes-base.splitinbatches.md) node and add a [Wait](/integrations/builtin/core-nodes/n8n-nodes-base.wait.md) node at the end for a time amount that will help. Copy the code below and paste it into a workflow to use as a template.
```
{
"nodes": [
@ -113,7 +113,7 @@ There are two ways to work around this issue:
"pinData": {}
}
```
2. Use the [HTTP Request](/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) node with the built-in batch-limit option against the [OpenAI API](https://platform.openai.com/docs/quickstart){:target=_blank .external-link} instead of using the OpenAI node.
2. Use the [HTTP Request](/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/index.md) node with the built-in batch-limit option against the [OpenAI API](https://platform.openai.com/docs/quickstart){:target=_blank .external-link} instead of using the OpenAI node.
## Insufficient quota
@ -138,8 +138,8 @@ After topping up your balance, there may be a delay before your OpenAI account r
In n8n:
* check that the [OpenAI credentials](/integrations/builtin/credentials/openai/) use a valid [OpenAI API key](https://platform.openai.com/api-keys){:target=_blank .external-link} for the account you've added money to
* ensure that you connect the [OpenAI node](/integrations/builtin/app-nodes/n8n-nodes-langchain.openai/) to the correct [OpenAI credentials](/integrations/builtin/credentials/openai/)
* check that the [OpenAI credentials](/integrations/builtin/credentials/openai.md) use a valid [OpenAI API key](https://platform.openai.com/api-keys){:target=_blank .external-link} for the account you've added money to
* ensure that you connect the [OpenAI node](/integrations/builtin/app-nodes/n8n-nodes-langchain.openai/index.md) to the correct [OpenAI credentials](/integrations/builtin/credentials/openai.md)
If you find yourself frequently running out of account credits, consider turning on auto recharge in your [OpenAI billing settings](https://platform.openai.com/settings/organization/billing/overview){:target=_blank .external-link} to automatically reload your account with credits when your balance reaches $0.
@ -147,4 +147,4 @@ If you find yourself frequently running out of account credits, consider turning
This error displays when the request results in an error but n8n wasn't able to interpret the error message from OpenAI.
To begin troubleshooting, try running the same operation using the [HTTP Request](/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) node, which should provide a more detailed error message.
To begin troubleshooting, try running the same operation using the [HTTP Request](/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/index.md) node, which should provide a more detailed error message.

View File

@ -6,7 +6,7 @@ Community nodes are npm packages, hosted in the npm registry.
When building a node to submit to the community node repository, use the following resources to make sure your node setup is correct:
* View the [starter node](https://github.com/n8n-io/n8n-nodes-starter){:target=_blank .external-link} and [n8n's own nodes](https://github.com/n8n-io/n8n/tree/master/packages/nodes-base/nodes){:target=_blank .external-link} for some examples.
* Refer to the documentation on [building your own nodes](/integrations/creating-nodes/).
* Refer to the documentation on [building your own nodes](/integrations/creating-nodes/overview.md).
* Make sure your node follows the [standards](#standards) for community nodes.
## Standards
@ -16,6 +16,6 @@ To make your node available to the n8n community node repository, you must:
* Make sure the package name starts with `n8n-nodes-` or `@<scope>/n8n-nodes-`. For example, `n8n-nodes-weather` or `@weatherPlugins/n8n-nodes-weather`.
* Include `n8n-community-node-package` in your package keywords.
* Make sure that you add your nodes and credentials to the `package.json` file inside the `n8n` attribute. Refer to the [package.json in the starter node](https://github.com/n8n-io/n8n-nodes-starter/blob/master/package.json){:target=_blank .external-link} for an example.
* Check your node using the [linter](/integrations/creating-nodes/test/node-linter/) and test it locally to ensure it works.
* Check your node using the [linter](/integrations/creating-nodes/test/node-linter.md) and test it locally to ensure it works.
* Submit the package to the npm registry. Refer to npm's documentation on [Contributing packages to the registry](https://docs.npmjs.com/packages-and-modules/contributing-packages-to-the-registry){:target=_blank .external-link} for more information.

View File

@ -1,3 +1,3 @@
* Update frequently: this avoids having to jump multiple versions at once, reducing the risk of a disruptive update. Try to update at least once a month.
* Check the [Release notes](/release-notes/) for breaking changes.
* Use [Environments](/source-control-environments/) to create a test version of your instance. Test the update there first.
* Check the [Release notes](/release-notes.md) for breaking changes.
* Use [Environments](/source-control-environments/index.md) to create a test version of your instance. Test the update there first.

View File

@ -1 +1 @@
If you self-host n8n, you are responsible for deleting user data. If you need to delete data on behalf of one of your users, you can delete the respective execution. n8n recommends configuring n8n to prune execution data automatically every few days to avoid effortful GDPR request handling as much as possible. Configure this using the `EXECUTIONS_DATA_MAX_AGE` environment variable. Refer to [Environment variables](/hosting/configuration/environment-variables/) for more information.
If you self-host n8n, you are responsible for deleting user data. If you need to delete data on behalf of one of your users, you can delete the respective execution. n8n recommends configuring n8n to prune execution data automatically every few days to avoid effortful GDPR request handling as much as possible. Configure this using the `EXECUTIONS_DATA_MAX_AGE` environment variable. Refer to [Environment variables](/hosting/configuration/environment-variables/index.md) for more information.

View File

@ -1,3 +1,3 @@
/// note | File-based configuration
You can add `_FILE` to individual variables to provide their configuration in a separate file. Refer to [Keeping sensitive data in separate files](/hosting/configuration/configuration-methods/#keeping-sensitive-data-in-separate-files) for more details.
You can add `_FILE` to individual variables to provide their configuration in a separate file. Refer to [Keeping sensitive data in separate files](/hosting/configuration/configuration-methods.md#keeping-sensitive-data-in-separate-files) for more details.
///

View File

@ -1,2 +1,2 @@
* Learn more about [configuring](/hosting/configuration/environment-variables/) and [scaling](/hosting/scaling/overview) n8n.
* Or explore using n8n: try the [Quickstarts](/try-it-out/).
* Learn more about [configuring](/hosting/configuration/environment-variables/index.md) and [scaling](/hosting/scaling/overview.md) n8n.
* Or explore using n8n: try the [Quickstarts](/try-it-out/index.md).

View File

@ -3,6 +3,6 @@
* Avoid manual executions when processing larger amounts of data.
* Split the workflow up into sub-workflows and ensure each sub-workflow returns a limited amount of data to its parent workflow.
Splitting the workflow might seem counter-intuitive at first as it usually requires adding at least two more nodes: the [Loop Over Items](/integrations/builtin/core-nodes/n8n-nodes-base.splitinbatches/) node to split up the items into smaller batches and the [Execute Workflow](/integrations/builtin/core-nodes/n8n-nodes-base.executeworkflow/) node to start the sub-workflow.
Splitting the workflow might seem counter-intuitive at first as it usually requires adding at least two more nodes: the [Loop Over Items](/integrations/builtin/core-nodes/n8n-nodes-base.splitinbatches.md) node to split up the items into smaller batches and the [Execute Workflow](/integrations/builtin/core-nodes/n8n-nodes-base.executeworkflow.md) node to start the sub-workflow.
However, as long as your sub-workflow does the heavy lifting for each batch and then returns only a small result set to the main workflow, this reduces memory consumption. This is because the sub-workflow only holds the data for the current batch in memory, after which the memory is free again.

View File

@ -1,3 +1,3 @@
## Self-hosted AI Starter Kit
New to working with AI and using self-hosted n8n? Try n8n's [self-hosted AI Starter Kit](/hosting/starter-kits/ai-starter-kit/) to get started with a proof-of-concept or demo playground using Ollama, Qdrant, and PostgreSQL.
New to working with AI and using self-hosted n8n? Try n8n's [self-hosted AI Starter Kit](/hosting/starter-kits/ai-starter-kit.md) to get started with a proof-of-concept or demo playground using Ollama, Qdrant, and PostgreSQL.

View File

@ -2,5 +2,5 @@ The advantage of this pattern is that work is instantly available to other envir
The disadvantages are:
* If you push by mistake, there is a risk the work will make it into your production instance. If you [use a GitHub Action to automate pulls](/source-control-environments/create-environments/#optional-use-a-github-action-to-automate-pulls) to production, you must either use the multi-instance, multi-branch pattern, or be careful to never push work that you don't want in production.
* If you push by mistake, there is a risk the work will make it into your production instance. If you [use a GitHub Action to automate pulls](/source-control-environments/create-environments.md#optional-use-a-github-action-to-automate-pulls) to production, you must either use the multi-instance, multi-branch pattern, or be careful to never push work that you don't want in production.
* Pushing and pulling to the same instance can cause data loss as changes are overridden when performing these actions. You should set up processes to ensure content flows in one direction.

View File

@ -1,4 +1,4 @@
/// note | Skip this section if you've already installed n8n or signed up for a Cloud account
///
n8n is available as a [Cloud](/choose-n8n/cloud/) service, [npm](/hosting/installation/npm/) module, and [Docker](/hosting/installation/docker/) image. For this quickstart, n8n recommends using Cloud. A free trial is available for new users.
n8n is available as a [Cloud](/manage-cloud/overview.md) service, [npm](/hosting/installation/npm.md) module, and [Docker](/hosting/installation/docker.md) image. For this quickstart, n8n recommends using Cloud. A free trial is available for new users.

View File

@ -2,7 +2,7 @@
The steps to update your n8n depend on which n8n platform you use. Refer to the documentation for your n8n:
* [Cloud](/manage-cloud/update-cloud-version/)
* [Cloud](/manage-cloud/update-cloud-version.md)
* Self-hosted options:
* [npm](/hosting/installation/npm/)
* [Docker](/hosting/installation/docker/)
* [npm](/hosting/installation/npm.md)
* [Docker](/hosting/installation/docker.md)

View File

@ -8,7 +8,7 @@ Available from version 0.225.0.
This section provides guidance on using SAML SSO (single sign-on) with n8n. It assumes you're familiar with SAML. If you're not, [SAML Explained in Plain English](https://www.onelogin.com/learn/saml){:target=_blank .external-link} can help you understand how SAML works, and its benefits.
* [Set up SAML](/user-management/saml/setup/): a general guide to setting up SAML in n8n, and links to resources for common IdPs. Start here.
* [Okta Workforce Identity SAML setup](/user-management/saml/okta/): step-by-step guidance to configuring Okta.
* [Troubleshooting](/user-management/saml/troubleshooting/): a list of things to check if you encounter issues.
* [Managing users with SAML](/user-management/saml/managing/): performing user management tasks with SAML enabled.
* [Set up SAML](/user-management/saml/setup.md): a general guide to setting up SAML in n8n, and links to resources for common IdPs. Start here.
* [Okta Workforce Identity SAML setup](/user-management/saml/okta.md): step-by-step guidance to configuring Okta.
* [Troubleshooting](/user-management/saml/troubleshooting.md): a list of things to check if you encounter issues.
* [Managing users with SAML](/user-management/saml/managing.md): performing user management tasks with SAML enabled.

View File

@ -15,7 +15,7 @@ The release of n8n 1.0 marks a milestone in n8n's journey to make n8n available
### Python support in the Code node
Although JavaScript remains the default language, you can now also select Python as an option in the [Code node](/code/code-node/) and even make use of [many Python modules](https://pyodide.org/en/stable/usage/packages-in-pyodide.html#packages-in-pyodide){:target=_blank .external link}. Note that Python is unavailable in Code nodes added to a workflow before v1.0.
Although JavaScript remains the default language, you can now also select Python as an option in the [Code node](/code/code-node.md) and even make use of [many Python modules](https://pyodide.org/en/stable/usage/packages-in-pyodide.html#packages-in-pyodide){:target=_blank .external link}. Note that Python is unavailable in Code nodes added to a workflow before v1.0.
[PR #4295](https://github.com/n8n-io/n8n/pull/4295){:target=_blank .external link}, [PR #6209](https://github.com/n8n-io/n8n/pull/6209){:target=_blank .external link}
@ -27,7 +27,7 @@ In multi-branch workflows, n8n needs to determine the order in which to execute
n8n used to execute multi-input nodes as long as they received data on their first input. Nodes connected to the second input of multi-input nodes automatically executed regardless of whether they received data. The new execution order introduced in n8n 1.0 simplifies this behavior: Nodes are now executed only when they receive data, and multi-input nodes require data on at least one of their inputs to execute.
Your existing workflows will use the legacy order, while new workflows will execute using the v1 order. You can configure the execution order for each workflow in [workflow settings](/workflows/settings/).
Your existing workflows will use the legacy order, while new workflows will execute using the v1 order. You can configure the execution order for each workflow in [workflow settings](/workflows/settings.md).
[PR #4238](https://github.com/n8n-io/n8n/pull/4238){:target=_blank .external link}, [PR #6246](https://github.com/n8n-io/n8n/pull/6246){:target=_blank .external link}, [PR #6507](https://github.com/n8n-io/n8n/pull/6507){:target=_blank .external link}
@ -43,7 +43,7 @@ n8n has removed support for MySQL and MariaDB as storage backends for n8n. These
Previously, you could use the `EXECUTIONS_PROCESS` environment variable to specify whether executions should run in the `main` process or in their `own` processes. This option and `own` mode are now deprecated and will be removed in a future version of n8n. This is because it led to increased code complexity while offering marginal benefits. Starting from n8n 1.0, `main` will be the new default.
Note that executions start much faster in `main` mode than in `own` mode. However, if a workflow consumes more memory than is available, it might crash the entire n8n application instead of just the worker thread. To mitigate this, make sure to allocate enough system resources or configure [queue mode](/hosting/scaling/queue-mode/) to distribute executions among multiple workers.
Note that executions start much faster in `main` mode than in `own` mode. However, if a workflow consumes more memory than is available, it might crash the entire n8n application instead of just the worker thread. To mitigate this, make sure to allocate enough system resources or configure [queue mode](/hosting/scaling/queue-mode.md) to distribute executions among multiple workers.
[PR #6196](https://github.com/n8n-io/n8n/pull/6196){:target=_blank .external link}
@ -79,7 +79,7 @@ Workflow executions may fail due to syntax or runtime errors in expressions, suc
### Mandatory owner account
This change makes [User Management](/user-management/) mandatory and removes support for other authentication methods, such as BasicAuth and External JWT. Note that the number of permitted users on [n8n.cloud](http://n8n.cloud/){:target=_blank .external link} or custom plans still varies depending on your subscription.
This change makes [User Management](/user-management/index.md) mandatory and removes support for other authentication methods, such as BasicAuth and External JWT. Note that the number of permitted users on [n8n.cloud](http://n8n.cloud/){:target=_blank .external link} or custom plans still varies depending on your subscription.
[PR #6362](https://github.com/n8n-io/n8n/pull/6362){:target=_blank .external link}
@ -102,7 +102,7 @@ n8n provides various transformation functions that operate on dates. These funct
To identify any workflows and nodes that might be impacted by this change, you can use this [utility workflow](https://n8n.io/workflows/1929-v1-helper-find-params-with-affected-expressions/){:target=_blank .external link}.
For more information about date transformation functions, please refer to the [official documentation](/code/builtin/data-transformation-functions/dates/).
For more information about date transformation functions, please refer to the [official documentation](/code/builtin/data-transformation-functions/dates.md).
[PR #6435](https://github.com/n8n-io/n8n/pull/6435){:target=_blank .external link}
@ -116,13 +116,13 @@ Starting from n8n 1.0, all successful, failed, and manual workflow executions wi
The legacy `request` library has been deprecated for some time now. As of n8n 1.0, the ability to fall back to it in the HTTP Request node by setting the `N8N_USE_DEPRECATED_REQUEST_LIB` environment variable has been fully removed. The HTTP Request node will now always use the new `HttpRequest` interface.
If you build custom nodes, refer to [HTTP request helpers](/integrations/creating-nodes/build/reference/http-helpers/) for more information on migrating to the new interface.
If you build custom nodes, refer to [HTTP request helpers](/integrations/creating-nodes/build/reference/http-helpers.md) for more information on migrating to the new interface.
[PR #6413](https://github.com/n8n-io/n8n/pull/6413){:target=_blank .external link}
### Removed WEBHOOK_TUNNEL_URL
As of version 0.227.0, n8n has renamed the `WEBHOOK_TUNNEL_URL` configuration option to `WEBHOOK_URL`. In n8n 1.0, `WEBHOOK_TUNNEL_URL` has been removed. Update your setup to reflect the new name. For more information about this configuration option, refer to [the docs](/hosting/configuration/configuration-examples/webhook-url/).
As of version 0.227.0, n8n has renamed the `WEBHOOK_TUNNEL_URL` configuration option to `WEBHOOK_URL`. In n8n 1.0, `WEBHOOK_TUNNEL_URL` has been removed. Update your setup to reflect the new name. For more information about this configuration option, refer to [the docs](/hosting/configuration/configuration-examples/webhook-url.md).
[PR #1408](https://github.com/n8n-io/n8n/pull/1408){:target=_blank .external link}

View File

@ -1 +1 @@
If you add more than one [[ page.title ]] node to your workflow, all nodes access the same memory instance by default. Be careful when doing destructive actions that override existing memory contents, such as the override all messages operation in the [Chat Memory Manager](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memorymanager/) node. If you want more than one memory instance in your workflow, set different session IDs in different memory nodes.
If you add more than one [[ page.title ]] node to your workflow, all nodes access the same memory instance by default. Be careful when doing destructive actions that override existing memory contents, such as the override all messages operation in the [Chat Memory Manager](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memorymanager.md) node. If you want more than one memory instance in your workflow, set different session IDs in different memory nodes.

View File

@ -15,10 +15,10 @@ In this workflow you can choose whether your chat query goes to an agent or chai
This workflow uses:
* [Chat Trigger](/integrations/builtin/core-nodes/n8n-nodes-langchain.chattrigger/): start your workflow and respond to user chat interactions. The node provides a customizable chat interface.
* [Switch node](/integrations/builtin/core-nodes/n8n-nodes-base.switch/): directs your query to either the agent or chain, depending on which you specify in your query. If you say "agent" it sends it to the agent. If you say "chain" it sends it to the chain.
* [Agent](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/): the Agent node interacts with other components of the workflow and makes decisions about what tools to use.
* [Basic LLM Chain](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.chainllm/): the Basic LLM Chain node supports chatting with a connected LLM, but doesn't support memory or tools.
* [Chat Trigger](/integrations/builtin/core-nodes/n8n-nodes-langchain.chattrigger/index.md): start your workflow and respond to user chat interactions. The node provides a customizable chat interface.
* [Switch node](/integrations/builtin/core-nodes/n8n-nodes-base.switch.md): directs your query to either the agent or chain, depending on which you specify in your query. If you say "agent" it sends it to the agent. If you say "chain" it sends it to the chain.
* [Agent](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/index.md): the Agent node interacts with other components of the workflow and makes decisions about what tools to use.
* [Basic LLM Chain](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.chainllm.md): the Basic LLM Chain node supports chatting with a connected LLM, but doesn't support memory or tools.
## Using the example

View File

@ -7,7 +7,7 @@ description: Use the n8n workflow tool to load data from an API using the HTTP R
# Call an API to fetch data
Use n8n to bring data from any API to your AI. This workflow uses the [Chat Trigger](/integrations/builtin/core-nodes/n8n-nodes-langchain.chattrigger/) to provide the chat interface, and the [Custom n8n Workflow Tool](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolworkflow/) to call a second workflow that calls the API. The second workflow uses AI functionality to refine the API request based on the user's query.
Use n8n to bring data from any API to your AI. This workflow uses the [Chat Trigger](/integrations/builtin/core-nodes/n8n-nodes-langchain.chattrigger/index.md) to provide the chat interface, and the [Custom n8n Workflow Tool](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolworkflow.md) to call a second workflow that calls the API. The second workflow uses AI functionality to refine the API request based on the user's query.
[[ workflowDemo("file:///advanced-ai/examples/let_your_ai_call_an_api.json") ]]
@ -15,10 +15,10 @@ Use n8n to bring data from any API to your AI. This workflow uses the [Chat Trig
This workflow uses:
* [Chat Trigger](/integrations/builtin/core-nodes/n8n-nodes-langchain.chattrigger/): start your workflow and respond to user chat interactions. The node provides a customizable chat interface.
* [Agent](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/): the key piece of the AI workflow. The Agent interacts with other components of the workflow and makes decisions about what tools to use.
* [Custom n8n Workflow Tool](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolworkflow/): plug in n8n workflows as custom tools. In AI, a tool is an interface the AI can use to interact with the world (in this case, the data provided by your workflow). The AI model uses the tool to access information beyond its built-in dataset.
* A [Basic LLM Chain](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.chainllm/) with an [Auto-fixing Output Parser](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.outputparserautofixing/) and [Structured Output Parser](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.outputparserstructured/) to read the user's query and set parameters for the API call based on the user input.
* [Chat Trigger](/integrations/builtin/core-nodes/n8n-nodes-langchain.chattrigger/index.md): start your workflow and respond to user chat interactions. The node provides a customizable chat interface.
* [Agent](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/index.md): the key piece of the AI workflow. The Agent interacts with other components of the workflow and makes decisions about what tools to use.
* [Custom n8n Workflow Tool](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolworkflow.md): plug in n8n workflows as custom tools. In AI, a tool is an interface the AI can use to interact with the world (in this case, the data provided by your workflow). The AI model uses the tool to access information beyond its built-in dataset.
* A [Basic LLM Chain](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.chainllm.md) with an [Auto-fixing Output Parser](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.outputparserautofixing.md) and [Structured Output Parser](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.outputparserstructured/index.md) to read the user's query and set parameters for the API call based on the user input.
## Using the example

View File

@ -7,7 +7,7 @@ description: Use the n8n workflow tool to load data from Google Sheets into your
# Chat with a Google Sheet using AI
Use n8n to bring your own data to AI. This workflow uses the [Chat Trigger](/integrations/builtin/core-nodes/n8n-nodes-langchain.chattrigger/) to provide the chat interface, and the [Custom n8n Workflow Tool](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolworkflow/) to call a second workflow that queries Google Sheets.
Use n8n to bring your own data to AI. This workflow uses the [Chat Trigger](/integrations/builtin/core-nodes/n8n-nodes-langchain.chattrigger/index.md) to provide the chat interface, and the [Custom n8n Workflow Tool](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolworkflow.md) to call a second workflow that queries Google Sheets.
[[ workflowDemo("file:///advanced-ai/examples/chat_with_google_sheets_docs_version.json") ]]
@ -15,9 +15,9 @@ Use n8n to bring your own data to AI. This workflow uses the [Chat Trigger](/int
This workflow uses:
* [Chat Trigger](/integrations/builtin/core-nodes/n8n-nodes-langchain.chattrigger/): start your workflow and respond to user chat interactions. The node provides a customizable chat interface.
* [Agent](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/): the key piece of the AI workflow. The Agent interacts with other components of the workflow and makes decisions about what tools to use.
* [Custom n8n Workflow Tool](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolworkflow/): plug in n8n workflows as custom tools. In AI, a tool is an interface the AI can use to interact with the world (in this case, the data provided by your workflow). The AI model uses the tool to access information beyond its built-in dataset.
* [Chat Trigger](/integrations/builtin/core-nodes/n8n-nodes-langchain.chattrigger/index.md): start your workflow and respond to user chat interactions. The node provides a customizable chat interface.
* [Agent](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/index.md): the key piece of the AI workflow. The Agent interacts with other components of the workflow and makes decisions about what tools to use.
* [Custom n8n Workflow Tool](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolworkflow.md): plug in n8n workflows as custom tools. In AI, a tool is an interface the AI can use to interact with the world (in this case, the data provided by your workflow). The AI model uses the tool to access information beyond its built-in dataset.
## Using the example

View File

@ -9,7 +9,7 @@ description: Have a workflow that triggers a human answer when the AI can't help
This is a workflow that tries to answer user queries using the standard GPT-4 model. If it can't answer, it sends a message to Slack to ask for human help. It prompts the user to supply an email address.
This workflow uses the [Chat Trigger](/integrations/builtin/core-nodes/n8n-nodes-langchain.chattrigger/) to provide the chat interface, and the [Custom n8n Workflow Tool](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolworkflow/) to call a second workflow that handles checking for email addresses and sending the Slack message.
This workflow uses the [Chat Trigger](/integrations/builtin/core-nodes/n8n-nodes-langchain.chattrigger/index.md) to provide the chat interface, and the [Custom n8n Workflow Tool](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolworkflow.md) to call a second workflow that handles checking for email addresses and sending the Slack message.
[[ workflowDemo("file:///advanced-ai/examples/ask_a_human.json") ]]
@ -17,9 +17,9 @@ This workflow uses the [Chat Trigger](/integrations/builtin/core-nodes/n8n-nodes
This workflow uses:
* [Chat Trigger](/integrations/builtin/core-nodes/n8n-nodes-langchain.chattrigger/): start your workflow and respond to user chat interactions. The node provides a customizable chat interface.
* [Agent](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/): the key piece of the AI workflow. The Agent interacts with other components of the workflow and makes decisions about what tools to use.
* [Custom n8n Workflow Tool](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolworkflow/): plug in n8n workflows as custom tools. In AI, a tool is an interface the AI can use to interact with the world (in this case, the data provided by your workflow). It allows the AI model to access information beyond its built-in dataset.
* [Chat Trigger](/integrations/builtin/core-nodes/n8n-nodes-langchain.chattrigger/index.md): start your workflow and respond to user chat interactions. The node provides a customizable chat interface.
* [Agent](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/index.md): the key piece of the AI workflow. The Agent interacts with other components of the workflow and makes decisions about what tools to use.
* [Custom n8n Workflow Tool](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolworkflow.md): plug in n8n workflows as custom tools. In AI, a tool is an interface the AI can use to interact with the world (in this case, the data provided by your workflow). It allows the AI model to access information beyond its built-in dataset.
## Using the example

View File

@ -17,32 +17,32 @@ This section provides explanations of important AI concepts, and workflow templa
Learn about agents and chains in AI, including exploring key differences using the example workflow.
[:octicons-arrow-right-24: What's a chain in AI?](/advanced-ai/examples/understand-chains/)
[:octicons-arrow-right-24: What's an agent in AI?](/advanced-ai/examples/understand-agents/)
[:octicons-arrow-right-24: Demonstration of key differences between agents and chains](/advanced-ai/examples/agents-vs-chains/)
[:octicons-arrow-right-24: What's a chain in AI?](/advanced-ai/examples/understand-chains.md)
[:octicons-arrow-right-24: What's an agent in AI?](/advanced-ai/examples/understand-agents.md)
[:octicons-arrow-right-24: Demonstration of key differences between agents and chains](/advanced-ai/examples/agent-chain-comparison.md)
- __Custom n8n Workflow Tool__
Learn about tools in AI, then explore examples that use n8n workflows as custom tools to give your AI workflow access to more data.
[:octicons-arrow-right-24: What's a tool in AI?](/advanced-ai/examples/understand-tools/)
[:octicons-arrow-right-24: Chat with Google Sheets](/advanced-ai/examples/data-google-sheets/)
[:octicons-arrow-right-24: Call an API to fetch data](/advanced-ai/examples/api-workflow-tool/)
[:octicons-arrow-right-24: Set up a human fallback](/advanced-ai/examples/human-fallback/)
[:octicons-arrow-right-24: Let AI specify tool parameters with `$fromAI()`](/advanced-ai/examples/using-the-fromai-function/)
[:octicons-arrow-right-24: What's a tool in AI?](/advanced-ai/examples/understand-tools.md)
[:octicons-arrow-right-24: Chat with Google Sheets](/advanced-ai/examples/data-google-sheets.md)
[:octicons-arrow-right-24: Call an API to fetch data](/advanced-ai/examples/api-workflow-tool.md)
[:octicons-arrow-right-24: Set up a human fallback](/advanced-ai/examples/human-fallback.md)
[:octicons-arrow-right-24: Let AI specify tool parameters with `$fromAI()`](/advanced-ai/examples/using-the-fromai-function.md)
- __Vector databases__
Learn about vector databases in AI, along with related concepts including embeddings and retrievers.
[:octicons-arrow-right-24: What's a vector database?](/advanced-ai/examples/understand-vector-databases/)
[:octicons-arrow-right-24: Populate a Pinecone vector database from a website](/advanced-ai/examples/vector-store-website/)
[:octicons-arrow-right-24: What's a vector database?](/advanced-ai/examples/understand-vector-databases.md)
[:octicons-arrow-right-24: Populate a Pinecone vector database from a website](/advanced-ai/examples/vector-store-website.md)
- __Memory__
Learn about memory in AI.
[:octicons-arrow-right-24: What's memory in AI?](/advanced-ai/examples/understand-memory/)
[:octicons-arrow-right-24: What's memory in AI?](/advanced-ai/examples/understand-memory.md)
- __AI workflow templates__

View File

@ -7,12 +7,12 @@ contentType: explanation
# What's an agent in AI?
One way to think of an agent is as a [chain](/advanced-ai/examples/understand-chains/) that knows how to make decisions. Where a chain follows a predetermined sequence of calls to different AI components, an agent uses a language model to determine which actions to take.
One way to think of an agent is as a [chain](/advanced-ai/examples/understand-chains.md) that knows how to make decisions. Where a chain follows a predetermined sequence of calls to different AI components, an agent uses a language model to determine which actions to take.
Agents are the part of AI that act as decision-makers. They can interact with other agents and tools. When you send a query to an agent, it tries to choose the best tools to use to answer. Agents adapt to your specific queries, as well as the prompts that configure their behavior.
## Agents in n8n
n8n provides one Agent node, which can act as different types of agent depending on the settings you choose. Refer to the [Agent node documentation](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/) for details on the available agent types.
n8n provides one Agent node, which can act as different types of agent depending on the settings you choose. Refer to the [Agent node documentation](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/index.md) for details on the available agent types.
When execute a workflow containing an agent, the agent runs multiple times. For example, it may do an initial setup, followed by a run to call a tool, then another run to evaluate the tool response and respond to the user.

View File

@ -14,8 +14,8 @@ Chains bring together different components of AI to create a cohesive system. Th
n8n provides three chain nodes:
* [Basic LLM Chain](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.chainllm/): use to interact with an LLM, without any additional components.
* [Question and Answer Chain](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.chainretrievalqa/): can connect to a vector store using a retriever, or to an n8n workflow using the Workflow Retriever node. Use this if you want to create a workflow that supports asking questions about specific documents.
* [Summarization Chain](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.chainsummarization/): takes an input and returns a summary.
* [Basic LLM Chain](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.chainllm.md): use to interact with an LLM, without any additional components.
* [Question and Answer Chain](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.chainretrievalqa/index.md): can connect to a vector store using a retriever, or to an n8n workflow using the Workflow Retriever node. Use this if you want to create a workflow that supports asking questions about specific documents.
* [Summarization Chain](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.chainsummarization.md): takes an input and returns a summary.
There's an important difference between chains in n8n and in other tools such as LangChain: none of the chain nodes support memory. This means they can't remember previous user queries. If you use LangChain to code an AI application, you can give your application memory. In n8n, if you need your workflow to support memory, use an agent. This is essential if you want users to be able to have a natural ongoing conversation with your app.

View File

@ -13,14 +13,14 @@ Memory is a key part of AI chat services. The memory keeps a history of previous
To add memory to your AI workflow you can use either:
* [Window Buffer Memory](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memorybufferwindow/): stores a customizable length of chat history for the current session. This is the easiest to get started with.
* [Window Buffer Memory](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memorybufferwindow/index.md): stores a customizable length of chat history for the current session. This is the easiest to get started with.
* One of the memory services that n8n provides nodes for. These include:
* [Motorhead](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memorymotorhead/)
* [Redis Chat Memory](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memoryredischat/)
* [Postgres Chat Memory](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memorypostgreschat/)
* [Xata](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memoryxata/)
* [Zep](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memoryzep/)
* [Motorhead](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memorymotorhead.md)
* [Redis Chat Memory](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memoryredischat.md)
* [Postgres Chat Memory](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memorypostgreschat.md)
* [Xata](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memoryxata.md)
* [Zep](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memoryzep.md)
If you need to do advanced AI memory management in your workflows, use the [Chat Memory Manager](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memorymanager/) node.
If you need to do advanced AI memory management in your workflows, use the [Chat Memory Manager](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memorymanager.md) node.
--8<-- "_snippets/integrations/builtin/cluster-nodes/langchain-sub-nodes/chat-memory-manager-purpose.md"

View File

@ -19,16 +19,16 @@ Here are a couple of other ways of expressing it:
## AI tools in n8n
n8n provides tool sub-nodes that you can connect to your AI agent. As well as providing some popular tools, such as [Wikipedia](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolwikipedia/) and [SerpAPI](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolserpapi/), n8n provides three especially powerful tools:
n8n provides tool sub-nodes that you can connect to your AI agent. As well as providing some popular tools, such as [Wikipedia](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolwikipedia.md) and [SerpAPI](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolserpapi.md), n8n provides three especially powerful tools:
* [Custom n8n Workflow Tool](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolworkflow/): use this to load any n8n workflow as a tool.
* [Custom Code Tool](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolcode/): write code that your agent can run.
* [HTTP Request Tool](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolhttprequest/): make calls to fetch a website or data from an API.
* [Custom n8n Workflow Tool](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolworkflow.md): use this to load any n8n workflow as a tool.
* [Custom Code Tool](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolcode.md): write code that your agent can run.
* [HTTP Request Tool](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolhttprequest.md): make calls to fetch a website or data from an API.
The next three examples highlight the Custom n8n Workflow Tool:
- [Chat with Google Sheets](/advanced-ai/examples/data-google-sheets/)
- [Call an API to fetch data](/advanced-ai/examples/api-workflow-tool/)
- [Set up a human fallback](/advanced-ai/examples/human-fallback/)
- [Chat with Google Sheets](/advanced-ai/examples/data-google-sheets.md)
- [Call an API to fetch data](/advanced-ai/examples/api-workflow-tool.md)
- [Set up a human fallback](/advanced-ai/examples/human-fallback.md)
You can also learn how to [let AI dynamically specify parameters for tools with the `$fromAI()` function](/advanced-ai/examples/using-the-fromai-function/).
You can also learn how to [let AI dynamically specify parameters for tools with the `$fromAI()` function](/advanced-ai/examples/using-the-fromai-function.md).

View File

@ -14,7 +14,7 @@ hide:
# Let AI specify the tool parameters
When configuring [app node](/integrations/builtin/app-nodes/) tools connected to the Tools Agent, many parameters can be filled in by the AI model itself. The AI model will use the context from the task and information from other connected tools to fill in the appropriate details.
When configuring [app node](/integrations/builtin/app-nodes/index.md) tools connected to the Tools Agent, many parameters can be filled in by the AI model itself. The AI model will use the context from the task and information from other connected tools to fill in the appropriate details.
There are two ways to do this, and you can switch between them.
@ -35,10 +35,10 @@ Activating this feature will overwrite any manual definition you may have alread
## Use the `$fromAI()` function
The `$fromAI()` function uses AI to dynamically fill in parameters for tools connected to the [Tools AI agent](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/tools-agent/). You can use the `$fromAI()` function in expressions within [app nodes](/integrations/builtin/app-nodes/) (like [Gmail](/integrations/builtin/app-nodes/n8n-nodes-base.gmail/), [Notion](/integrations/builtin/app-nodes/n8n-nodes-base.notion/), or [Slack](/integrations/builtin/app-nodes/n8n-nodes-base.slack/)) which are connected to the **AI Agent** as tools.
The `$fromAI()` function uses AI to dynamically fill in parameters for tools connected to the [Tools AI agent](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/tools-agent.md). You can use the `$fromAI()` function in expressions within [app nodes](/integrations/builtin/app-nodes/index.md) (like [Gmail](/integrations/builtin/app-nodes/n8n-nodes-base.gmail/index.md), [Notion](/integrations/builtin/app-nodes/n8n-nodes-base.notion/index.md), or [Slack](/integrations/builtin/app-nodes/n8n-nodes-base.slack.md)) which are connected to the **AI Agent** as tools.
/// note | Only for the Node Tools
The `$fromAI()` function is only available for [app node](/integrations/builtin/app-nodes/) tools connected to the Tools Agent. It isn't possible to use the `$fromAI()` function with the [Call n8n Workflow](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolworkflow/), [Code](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolcode/), [HTTP Request](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolhttprequest/), or [other cluster sub-nodes](/integrations/builtin/cluster-nodes/sub-nodes/).
The `$fromAI()` function is only available for [app node](/integrations/builtin/app-nodes/index.md) tools connected to the Tools Agent. It isn't possible to use the `$fromAI()` function with the [Call n8n Workflow](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolworkflow.md), [Code](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolcode.md), [HTTP Request](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolhttprequest.md), or [other cluster sub-nodes](/integrations/builtin/cluster-nodes/sub-nodes/index.md).
///
To use the `$fromAI()` function, call it with the required `key` parameter:

View File

@ -7,7 +7,7 @@ description: Scrape a website, load the data into Pinecone, then query it using
# Populate a Pinecone vector database from a website
Use n8n to scrape a website, load the data into Pinecone, then query it using a chat workflow. This workflow uses the [HTTP node](/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to get website data, extracts the relevant content using the [HTML node](/integrations/builtin/core-nodes/n8n-nodes-base.html/), then uses the [Pinecone Vector Store node](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.vectorstorepinecone/) to send it to Pinecone.
Use n8n to scrape a website, load the data into Pinecone, then query it using a chat workflow. This workflow uses the [HTTP node](/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/index.md) to get website data, extracts the relevant content using the [HTML node](/integrations/builtin/core-nodes/n8n-nodes-base.html.md), then uses the [Pinecone Vector Store node](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.vectorstorepinecone.md) to send it to Pinecone.
[[ workflowDemo("file:///advanced-ai/examples/populate_a_pinecone_vector_database_from_a_website.json") ]]
@ -15,10 +15,10 @@ Use n8n to scrape a website, load the data into Pinecone, then query it using a
This workflow uses:
* [HTTP node](/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/): fetches website data.
* [HTML node](/integrations/builtin/core-nodes/n8n-nodes-base.html/): simplifies the data by extracting the main content from the page.
* [Pinecone Vector Store node](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.vectorstorepinecone/) and [Embeddings OpenAI](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.embeddingsopenai/): transform the data into vectors and store it in Pinecone.
* [Chat Trigger](/integrations/builtin/core-nodes/n8n-nodes-langchain.chattrigger/) and [Question and Answer Chain](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.chainretrievalqa/) to query the vector database.
* [HTTP node](/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/index.md): fetches website data.
* [HTML node](/integrations/builtin/core-nodes/n8n-nodes-base.html.md): simplifies the data by extracting the main content from the page.
* [Pinecone Vector Store node](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.vectorstorepinecone.md) and [Embeddings OpenAI](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.embeddingsopenai.md): transform the data into vectors and store it in Pinecone.
* [Chat Trigger](/integrations/builtin/core-nodes/n8n-nodes-langchain.chattrigger/index.md) and [Question and Answer Chain](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.chainretrievalqa/index.md) to query the vector database.
## Using the example

View File

@ -19,25 +19,25 @@ This feature is available on Cloud and self-hosted n8n, in version 1.19.4 and ab
Work through the short tutorial to learn the basics of building AI workflows in n8n.
[:octicons-arrow-right-24: Tutorial](/advanced-ai/intro-tutorial/)
[:octicons-arrow-right-24: Tutorial](/advanced-ai/intro-tutorial.md)
- __Use a Starter Kit__
Try n8n's Self-hosted AI Starter Kit to quickly start building AI workflows.
[:octicons-arrow-right-24: Self-hosted AI Starter Kit](/hosting/starter-kits/ai-starter-kit/)
[:octicons-arrow-right-24: Self-hosted AI Starter Kit](/hosting/starter-kits/ai-starter-kit.md)
- __Explore examples and concepts__
Browse examples and workflow templates to help you build. Includes explanations of important AI concepts.
[:octicons-arrow-right-24: Examples](/advanced-ai/examples/introduction/)
[:octicons-arrow-right-24: Examples](/advanced-ai/examples/introduction.md)
- __How n8n uses LangChain__
Learn more about how n8n builds on LangChain.
[:octicons-arrow-right-24: LangChain in n8n](/advanced-ai/langchain/overview/)
[:octicons-arrow-right-24: LangChain in n8n](/advanced-ai/langchain/overview.md)
- __Browse AI templates__
@ -53,7 +53,7 @@ Related documentation and tools.
### Node types
This feature uses [Cluster nodes](/integrations/builtin/cluster-nodes/): groups of [root](/integrations/builtin/cluster-nodes/root-nodes/) and [sub](/integrations/builtin/cluster-nodes/sub-nodes/) nodes that work together.
This feature uses [Cluster nodes](/integrations/builtin/cluster-nodes/index.md): groups of [root](/integrations/builtin/cluster-nodes/root-nodes/index.md) and [sub](/integrations/builtin/cluster-nodes/sub-nodes/index.md) nodes that work together.
--8<-- "_snippets/integrations/builtin/cluster-nodes/cluster-nodes-summary.md"
@ -61,11 +61,11 @@ This feature uses [Cluster nodes](/integrations/builtin/cluster-nodes/): groups
You can browse workflow templates in-app or on the n8n website [Workflows](https://n8n.io/workflows/?categories=25,26){:target=_blank .external-link} page.
Refer to [Templates](/workflows/templates/) for information on accessing templates in-app.
Refer to [Templates](/workflows/templates.md) for information on accessing templates in-app.
### Chat trigger
Use the [n8n Chat Trigger](/integrations/builtin/core-nodes/n8n-nodes-langchain.chattrigger/) to trigger a workflow based on chat interactions.
Use the [n8n Chat Trigger](/integrations/builtin/core-nodes/n8n-nodes-langchain.chattrigger/index.md) to trigger a workflow based on chat interactions.
### Chatbot widget

View File

@ -16,8 +16,8 @@ Many people find it easier to take in new information in video format. This tuto
### What you will need
- **n8n**: For this tutorial we recommend using the [n8n cloud](/choose-n8n/cloud/) service - there is a free trial for new users! For a self hosted service, refer to the [installation pages](/hosting/installation/docker/).
- **Credentials for a chat model**: This tutorial uses OpenAI, but you can easily use DeepSeek, Google Gemini, Groq, Azure, and others (see the [sub-nodes documentation](/integrations/builtin/cluster-nodes/sub-nodes/) for more).
- **n8n**: For this tutorial we recommend using the [n8n cloud](/manage-cloud/overview.md) service - there is a free trial for new users! For a self hosted service, refer to the [installation pages](/hosting/installation/docker.md).
- **Credentials for a chat model**: This tutorial uses OpenAI, but you can easily use DeepSeek, Google Gemini, Groq, Azure, and others (see the [sub-nodes documentation](/integrations/builtin/cluster-nodes/sub-nodes/index.md) for more).
### What you will learn
@ -101,7 +101,7 @@ AI agents require a chat model to be attached to process the incoming prompts.
## 5. Add credentials (if needed)
In order for n8n to communicate with the chat model, it will need some [credentials](/credentials/) (login data giving it access to an account on a different online service). If you already have credentials set up for OpenAI, these should appear by default in the credentials selector. Otherwise you can use the Credentials selector to help you add a new credential.
In order for n8n to communicate with the chat model, it will need some [credentials](/credentials/index.md) (login data giving it access to an account on a different online service). If you already have credentials set up for OpenAI, these should appear by default in the credentials selector. Otherwise you can use the Credentials selector to help you add a new credential.
![image showing the credentials dialog for OpenAI](/_images/advanced-ai/ai-tutorial-credentials.png)
@ -172,6 +172,6 @@ You have taken your first steps in building useful and effective workflows with
Now you have seen how to create a basic AI workflow, there are plenty of resources to build on that knowledge and plenty of examples to give you ideas of where to go next:
* Learn more about AI concepts and view examples in [Examples and concepts](/advanced-ai/examples/introduction/).
* Learn more about AI concepts and view examples in [Examples and concepts](/advanced-ai/examples/introduction.md).
* Browse AI [Workflow templates](https://n8n.io/workflows/?categories=25){:target=_blank .external-link}.
* Find out how to [enhance the AI agent with tools](/advanced-ai/examples/understand-tools/).
* Find out how to [enhance the AI agent with tools](/advanced-ai/examples/understand-tools.md).

View File

@ -9,7 +9,7 @@ description: How LangChain concepts map to n8n, and which n8n nodes to use.
This page explains how LangChain concepts and features map to n8n nodes.
This page includes lists of the LangChain-focused nodes in n8n. You can use any n8n node in a workflow where you interact with LangChain, to link LangChain to other services. The LangChain features uses n8n's [Cluster nodes](/integrations/builtin/cluster-nodes/).
This page includes lists of the LangChain-focused nodes in n8n. You can use any n8n node in a workflow where you interact with LangChain, to link LangChain to other services. The LangChain features uses n8n's [Cluster nodes](/integrations/builtin/cluster-nodes/index.md).
/// note | n8n implements LangChain JS
@ -17,7 +17,7 @@ This feature is n8n's implementation of [LangChain's JavaScript framework](https
///
## Trigger nodes
[Chat Trigger](/integrations/builtin/core-nodes/n8n-nodes-langchain.chattrigger/)
[Chat Trigger](/integrations/builtin/core-nodes/n8n-nodes-langchain.chattrigger/index.md)
## Cluster nodes
@ -33,11 +33,11 @@ A chain is a series of LLMs, and related tools, linked together to support funct
Available nodes:
* [Basic LLM Chain](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.chainllm/)
* [Retrieval Q&A Chain](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.chainretrievalqa/)
* [Summarization Chain](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.chainsummarization/)
* [Sentiment Analysis](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.sentimentanalysis/)
* [Text Classifier](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.text-classifier/)
* [Basic LLM Chain](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.chainllm.md)
* [Retrieval Q&A Chain](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.chainretrievalqa/index.md)
* [Summarization Chain](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.chainsummarization.md)
* [Sentiment Analysis](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.sentimentanalysis.md)
* [Text Classifier](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.text-classifier.md)
Learn more about [chaining in LangChain](https://js.langchain.com/docs/concepts/lcel){:target=_blank .external-link}.
@ -47,7 +47,7 @@ Learn more about [chaining in LangChain](https://js.langchain.com/docs/concepts/
Available nodes:
* [Agent](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/)
* [Agent](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/index.md)
Learn more about [Agents in LangChain](https://js.langchain.com/docs/concepts/agents){:target=_blank .external-link}.
@ -55,12 +55,12 @@ Learn more about [Agents in LangChain](https://js.langchain.com/docs/concepts/ag
Vector stores store embedded data, and perform vector searches on it.
* [In Memory Vector Store](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.vectorstoreinmemory/)
* [PGVector Vector Store](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.vectorstorepgvector/)
* [Pinecone Vector Store](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.vectorstorepinecone/)
* [Qdrant Vector Store](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.vectorstoreqdrant/)
* [Supabase Vector Store](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.vectorstoresupabase/)
* [Zep Vector Store](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.vectorstorezep/)
* [In Memory Vector Store](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.vectorstoreinmemory.md)
* [PGVector Vector Store](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.vectorstorepgvector.md)
* [Pinecone Vector Store](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.vectorstorepinecone.md)
* [Qdrant Vector Store](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.vectorstoreqdrant.md)
* [Supabase Vector Store](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.vectorstoresupabase.md)
* [Zep Vector Store](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.vectorstorezep.md)
Learn more about [Vector stores in LangChain](https://js.langchain.com/docs/concepts/vectorstores/){:target=_blank .external-link}.
@ -68,7 +68,7 @@ Learn more about [Vector stores in LangChain](https://js.langchain.com/docs/conc
Utility nodes.
[LangChain Code](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.code/): import LangChain. This means if there is functionality you need that n8n hasn't created a node for, you can still use it.
[LangChain Code](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.code.md): import LangChain. This means if there is functionality you need that n8n hasn't created a node for, you can still use it.
### Sub-nodes
@ -80,8 +80,8 @@ Document loaders add data to your chain as documents. The data source can be a f
Available nodes:
* [Default Document Loader](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.documentdefaultdataloader/)
* [GitHub Document Loader](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.documentgithubloader/)
* [Default Document Loader](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.documentdefaultdataloader.md)
* [GitHub Document Loader](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.documentgithubloader.md)
Learn more about [Document loaders in LangChain](https://js.langchain.com/docs/concepts/document_loaders){:target=_blank .external-link}.
@ -91,14 +91,14 @@ LLMs (large language models) are programs that analyze datasets. They're the key
Available nodes:
* [Anthropic Chat Model](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatanthropic/)
* [AWS Bedrock Chat Model](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatawsbedrock)
* [Cohere Model](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmcohere/)
* [Hugging Face Inference Model](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmopenhuggingfaceinference/)
* [Mistral Cloud Chat Model](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatmistralcloud/)
* [Ollama Chat Model](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatollama/)
* [Ollama Model](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmollama/)
* [OpenAI Chat Model](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatopenai/)
* [Anthropic Chat Model](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatanthropic.md)
* [AWS Bedrock Chat Model](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatawsbedrock.md)
* [Cohere Model](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmcohere.md)
* [Hugging Face Inference Model](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmopenhuggingfaceinference.md)
* [Mistral Cloud Chat Model](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatmistralcloud.md)
* [Ollama Chat Model](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatollama/index.md)
* [Ollama Model](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmollama/index.md)
* [OpenAI Chat Model](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatopenai/index.md)
Learn more about [Language models in LangChain](https://js.langchain.com/docs/concepts/chat_models){:target=_blank .external-link}.
@ -108,12 +108,12 @@ Memory retains information about previous queries in a series of queries. For ex
Available nodes:
* [Motorhead](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memorymotorhead/)
* [Redis Chat Memory](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memoryredischat/)
* [Postgres Chat Memory](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memorypostgreschat/)
* [Window Buffer Memory](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memorybufferwindow/)
* [Xata](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memoryxata/)
* [Zep](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memoryzep/)
* [Motorhead](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memorymotorhead.md)
* [Redis Chat Memory](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memoryredischat.md)
* [Postgres Chat Memory](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memorypostgreschat.md)
* [Window Buffer Memory](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memorybufferwindow/index.md)
* [Xata](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memoryxata.md)
* [Zep](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memoryzep.md)
Learn more about [Memory in LangChain](https://langchain-ai.github.io/langgraphjs/concepts/memory/){:target=_blank .external-link}.
@ -123,19 +123,19 @@ Output parsers take the text generated by an LLM and format it to match the stru
Available nodes:
* [Auto-fixing Output Parser](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.outputparserautofixing/)
* [Item List Output Parser](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.outputparseritemlist/)
* [Structured Output Parser](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.outputparserstructured/)
* [Auto-fixing Output Parser](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.outputparserautofixing.md)
* [Item List Output Parser](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.outputparseritemlist.md)
* [Structured Output Parser](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.outputparserstructured/index.md)
Learn more about [Output parsers in LangChain](https://js.langchain.com/docs/concepts/output_parsers/){:target=_blank .external-link}.
#### Retrievers
* [Contextual Compression Retriever](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.retrievercontextualcompression/)
* [MultiQuery Retriever](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.retrievermultiquery/)
* [Vector Store Retriever](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.retrievervectorstore/)
* [Workflow Retriever](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.retrieverworkflow/)
* [Contextual Compression Retriever](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.retrievercontextualcompression.md)
* [MultiQuery Retriever](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.retrievermultiquery.md)
* [Vector Store Retriever](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.retrievervectorstore.md)
* [Workflow Retriever](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.retrieverworkflow.md)
#### Text splitters
@ -144,9 +144,9 @@ Text splitters break down data (documents), making it easier for the LLM to proc
Available nodes:
* [Character Text Splitter](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.textsplittercharactertextsplitter/)
* [Recursive Character Text Splitter](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.textsplitterrecursivecharactertextsplitter/)
* [Token Splitter](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.textsplittertokensplitter/)
* [Character Text Splitter](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.textsplittercharactertextsplitter.md)
* [Recursive Character Text Splitter](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.textsplitterrecursivecharactertextsplitter.md)
* [Token Splitter](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.textsplittertokensplitter.md)
n8n's text splitter nodes implements parts of [LangChain's text_splitter API](https://js.langchain.com/docs/concepts/text_splitters/){:target=_blank .external-link}.
@ -154,13 +154,13 @@ n8n's text splitter nodes implements parts of [LangChain's text_splitter API](ht
Utility tools.
* [Calculator](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolcalculator/)
* [Code Tool](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolcode/)
* [SerpAPI](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolserpapi/)
* [Vector Store Tool](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolvectorstore/)
* [Wikipedia](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolwikipedia/)
* [Wolfram|Alpha](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolwolframalpha/)
* [Workflow Tool](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolworkflow/)
* [Calculator](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolcalculator.md)
* [Code Tool](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolcode.md)
* [SerpAPI](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolserpapi.md)
* [Vector Store Tool](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolvectorstore.md)
* [Wikipedia](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolwikipedia.md)
* [Wolfram|Alpha](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolwolframalpha.md)
* [Workflow Tool](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolworkflow.md)
#### Embeddings
@ -169,20 +169,20 @@ Utility tools.
Available nodes:
* [Embeddings AWS Bedrock](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.embeddingsawsbedrock)
* [Embeddings Cohere](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.embeddingscohere/)
* [Embeddings Google PaLM](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.embeddingsgooglepalm/)
* [Embeddings Hugging Face Inference](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.embeddingshuggingfaceinference/)
* [Embeddings Mistral Cloud](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.embeddingsmistralcloud/)
* [Embeddings Ollama](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.embeddingsollama/)
* [Embeddings OpenAI](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.embeddingsopenai/)
* [Embeddings AWS Bedrock](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.embeddingsawsbedrock.md)
* [Embeddings Cohere](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.embeddingscohere.md)
* [Embeddings Google PaLM](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.embeddingsgooglepalm.md)
* [Embeddings Hugging Face Inference](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.embeddingshuggingfaceinference.md)
* [Embeddings Mistral Cloud](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.embeddingsmistralcloud.md)
* [Embeddings Ollama](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.embeddingsollama.md)
* [Embeddings OpenAI](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.embeddingsopenai.md)
Learn more about [Text embeddings in LangChain](https://js.langchain.com/docs/concepts/embedding_models/){:target=_blank .external-link}.
#### Miscellaneous
* [Chat Memory Manager](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memorymanager/)
* [Chat Memory Manager](/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memorymanager.md)

View File

@ -24,7 +24,7 @@ Self-hosted n8n only.
| LANGCHAIN_TRACING_V2 | `true` |
| LANGCHAIN_API_KEY | Set this to your API key |
Set the variables so that they're available globally in the environment where you host your n8n instance. You can do this in the same way as the rest of your general configuration. These aren't n8n environment variables, so don't try to set them using the [n8n configuration file](/hosting/configuration/configuration-methods/#set-environment-variables-using-a-file).
Set the variables so that they're available globally in the environment where you host your n8n instance. You can do this in the same way as the rest of your general configuration. These aren't n8n environment variables, so don't try to set them using the [n8n configuration file](/hosting/configuration/configuration-methods.md#set-environment-variables-using-a-file).
1. Restart n8n.

View File

@ -11,5 +11,5 @@ hide:
n8n provides a collection of nodes that implement LangChain's functionality. The LangChain nodes are configurable, meaning you can choose your preferred agent, LLM, memory, and so on. Alongside the LangChain nodes, you can connect any n8n node as normal: this means you can integrate your LangChain logic with other data sources and services.
* [Learning resources](/advanced-ai/langchain/langchain-learning-resources/): n8n's documentation for LangChain assumes you're familiar with AI and LangChain concepts. This page provides links to learning resources.
* [LangChain concepts and features in n8n](/advanced-ai/langchain/langchain-n8n/): how n8n represents LangChain concepts and features.
* [Learning resources](/advanced-ai/langchain/langchain-learning-resources.md): n8n's documentation for LangChain assumes you're familiar with AI and LangChain concepts. This page provides links to learning resources.
* [LangChain concepts and features in n8n](/advanced-ai/langchain/langchain-n8n.md): how n8n represents LangChain concepts and features.

View File

@ -15,12 +15,12 @@ The n8n API isn't available during the free trial. Please upgrade to access this
Using n8n's public API, you can programmatically perform many of the same tasks as you can in the GUI. This section introduces n8n's REST API, including:
* How to [authenticate](/api/authentication/)
* [Paginating](/api/pagination/) results
* Using the [built-in API playground](/api/using-api-playground/) (self-hosted n8n only)
* [Endpoint reference](/api/api-reference/)
* How to [authenticate](/api/authentication.md)
* [Paginating](/api/pagination.md) results
* Using the [built-in API playground](/api/using-api-playground.md) (self-hosted n8n only)
* [Endpoint reference](/api/api-reference.md)
n8n provides an [n8n API node](/integrations/builtin/core-nodes/n8n-nodes-base.n8n/) to access the API in your workflows.
n8n provides an [n8n API node](/integrations/builtin/core-nodes/n8n-nodes-base.n8n.md) to access the API in your workflows.
## Learn about REST APIs
@ -32,5 +32,5 @@ The API documentation assumes you are familiar with REST APIs. If you're not, th
* [MDN web docs - An overview of HTTP](https://developer.mozilla.org/en-US/docs/Web/HTTP/Overview){:target=_blank .external-link}: REST APIs work over HTTP and use HTTP verbs, or methods, to specify the action to perform.
/// tip | Use the API playground (self-hosted n8n only)
Trying out the API in the [playground](/api/using-api-playground/) can help you understand how APIs work. If you're worried about changing live data, consider setting up a test workflow, or test n8n instance, to explore safely.
Trying out the API in the [playground](/api/using-api-playground.md) can help you understand how APIs work. If you're worried about changing live data, consider setting up a test workflow, or test n8n instance, to explore safely.
///

View File

@ -12,12 +12,12 @@ This section contains information on n8n's range of platforms, pricing plans, an
There are different ways to set up n8n depending on how you intend to use it:
* [n8n Cloud](/manage-cloud/overview/): hosted solution, no need to install anything.
* [Self-host](/hosting/): recommended method for production or customized use cases.
* [npm](/hosting/installation/npm/)
* [Docker](/hosting/installation/docker/)
* [Server setup guides](/hosting/installation/server-setups/) for popular platforms
* [Embed](/embed/): n8n Embed allows you to white label n8n and build it into your own product. Contact n8n on the [Embed website](https://n8n.io/embed/){:target=_blank .external-link} for pricing and support.
* [n8n Cloud](/manage-cloud/overview.md): hosted solution, no need to install anything.
* [Self-host](/hosting/index.md): recommended method for production or customized use cases.
* [npm](/hosting/installation/npm.md)
* [Docker](/hosting/installation/docker.md)
* [Server setup guides](/hosting/installation/server-setups/index.md) for popular platforms
* [Embed](/embed/index.md): n8n Embed allows you to white label n8n and build it into your own product. Contact n8n on the [Embed website](https://n8n.io/embed/){:target=_blank .external-link} for pricing and support.
--8<-- "_snippets/self-hosting/warning.md"
@ -26,7 +26,7 @@ There are different ways to set up n8n depending on how you intend to use it:
n8n's [Sustainable Use License](https://github.com/n8n-io/n8n/blob/master/LICENSE.md){:target=\_blank .external-link} and [n8n Enterprise License](https://github.com/n8n-io/n8n/blob/master/LICENSE_EE.md){:target=\_blank .external-link} are based on the [fair-code](http://faircode.io) model.
For a detailed explanation of the license, refer to [Sustainable Use License](/sustainable-use-license/).
For a detailed explanation of the license, refer to [Sustainable Use License](/sustainable-use-license.md).
## Free versions

View File

@ -47,7 +47,7 @@ And some n8n-specific guidance:
* Think about the input data: make sure ChatGPT knows which pieces of the data you want to access, and what the incoming data represents. You may need to tell ChatGPT about the availability of n8n's built-in methods and variables.
* Declare interactions between nodes: if your logic involves data from multiple nodes, specify how they should interact. "Merge the output of 'Node A' with 'Node B' based on the 'userID' property". if you prefer data to come from certain nodes or to ignore others, be clear: "Only consider data from the 'Purchases' node and ignore the 'Refunds' node."
* Ensure the output is compatible with n8n. Refer to [Data structure](/data/data-structure/) for more information on the data structure n8n requires.
* Ensure the output is compatible with n8n. Refer to [Data structure](/data/data-structure.md) for more information on the data structure n8n requires.
### Example prompts
@ -190,4 +190,4 @@ Pluralsight offer a short guide on [How to use ChatGPT to write code](https://ww
## Fixing the code
The AI-generated code may work without any changes, but you may have to edit it. You need to be aware of n8n's [Data structure](/data/data-structure/). You may also find n8n's built-in methods and variables useful.
The AI-generated code may work without any changes, but you may have to edit it. You need to be aware of n8n's [Data structure](/data/data-structure.md). You may also find n8n's built-in methods and variables useful.

View File

@ -17,20 +17,20 @@ You can use Python in the Code node. It isn't available in expressions.
| Method | Description | Available in Code node? |
| ------ | ----------- | :-------------------------: |
| `$binary` | Shorthand for `$input.item.binary`. Incoming binary data from a node | :x: |
| `$input.item` | The input item of the current node that's being processed. Refer to [Item linking](/data/data-mapping/data-item-linking/) for more information on paired items and item linking. | :white_check_mark: |
| `$input.item` | The input item of the current node that's being processed. Refer to [Item linking](/data/data-mapping/data-item-linking/index.md) for more information on paired items and item linking. | :white_check_mark: |
| `$input.all()` | All input items in current node. | :white_check_mark: |
| `$input.first()` | First input item in current node. | :white_check_mark: |
| `$input.last()` | Last input item in current node. | :white_check_mark: |
| `$input.params` | Object containing the query settings of the previous node. This includes data such as the operation it ran, result limits, and so on. | :white_check_mark: |
| `$json` | Shorthand for `$input.item.json`. Incoming JSON data from a node. Refer to [Data structure](/data/data-structure/) for information on item structure. | :white_check_mark: (when running once for each item) |
| `$json` | Shorthand for `$input.item.json`. Incoming JSON data from a node. Refer to [Data structure](/data/data-structure.md) for information on item structure. | :white_check_mark: (when running once for each item) |
| `$input.context.noItemsLeft` | Boolean. Only available when working with the Loop Over Items node. Provides information about what's happening in the node. Use this to determine whether the node is still processing items. | :white_check_mark: |
=== "Python"
| Method | Description |
| ------ | ----------- |
| `_input.item` | The input item of the current node that's being processed. Refer to [Item linking](/data/data-mapping/data-item-linking/) for more information on paired items and item linking. |
| `_input.item` | The input item of the current node that's being processed. Refer to [Item linking](/data/data-mapping/data-item-linking/index.md) for more information on paired items and item linking. |
| `_input.all()` | All input items in current node. |
| `_input.first()` | First input item in current node. |
| `_input.last()` | Last input item in current node. |
| `_input.params` | Object containing the query settings of the previous node. This includes data such as the operation it ran, result limits, and so on. |
| `_json` | Shorthand for `_input.item.json`. Incoming JSON data from a node. Refer to [Data structure](/data/data-structure/) for information on item structure. Available when you set **Mode** to **Run Once for Each Item**. |
| `_json` | Shorthand for `_input.item.json`. Incoming JSON data from a node. Refer to [Data structure](/data/data-structure.md) for information on item structure. Available when you set **Mode** to **Run Once for Each Item**. |
| `_input.context.noItemsLeft` | Boolean. Only available when working with the Loop Over Items node. Provides information about what's happening in the node. Use this to determine whether the node is still processing items. |

View File

@ -10,7 +10,7 @@ contentType: reference
A reference document listing built-in convenience functions to support data transformation in expressions for arrays.
/// note | JavaScript in expressions
You can use any JavaScript in expressions. Refer to [Expressions](/code/expressions/) for more information.
You can use any JavaScript in expressions. Refer to [Expressions](/code/expressions.md) for more information.
///
[[% import "_macros/data-functions.html" as dataFunctions %]]

View File

@ -10,7 +10,7 @@ contentType: reference
A reference document listing built-in convenience functions to support data transformation in expressions for arrays.
/// note | JavaScript in expressions
You can use any JavaScript in expressions. Refer to [Expressions](/code/expressions/) for more information.
You can use any JavaScript in expressions. Refer to [Expressions](/code/expressions.md) for more information.
///
[[% import "_macros/data-functions.html" as dataFunctions %]]

View File

@ -10,7 +10,7 @@ contentType: reference
A reference document listing built-in convenience functions to support data transformation in expressions for dates.
/// note | JavaScript in expressions
You can use any JavaScript in expressions. Refer to [Expressions](/code/expressions/) for more information.
You can use any JavaScript in expressions. Refer to [Expressions](/code/expressions.md) for more information.
///
[[% import "_macros/data-functions.html" as dataFunctions %]]

View File

@ -10,15 +10,15 @@ contentType: overview
Data transformation functions are helper functions to make data transformation easier in expressions.
/// note | JavaScript in expressions
You can use any JavaScript in expressions. Refer to [Expressions](/code/expressions/) for more information.
You can use any JavaScript in expressions. Refer to [Expressions](/code/expressions.md) for more information.
///
For a list of available functions, refer to the page for your data type:
* [Arrays](/code/builtin/data-transformation-functions/arrays/)
* [Dates](/code/builtin/data-transformation-functions/dates/)
* [Numbers](/code/builtin/data-transformation-functions/numbers/)
* [Objects](/code/builtin/data-transformation-functions/objects/)
* [Strings](/code/builtin/data-transformation-functions/strings/)
* [Arrays](/code/builtin/data-transformation-functions/arrays.md)
* [Dates](/code/builtin/data-transformation-functions/dates.md)
* [Numbers](/code/builtin/data-transformation-functions/numbers.md)
* [Objects](/code/builtin/data-transformation-functions/objects.md)
* [Strings](/code/builtin/data-transformation-functions/strings.md)
## Usage

View File

@ -10,7 +10,7 @@ contentType: reference
A reference document listing built-in convenience functions to support data transformation in expressions for numbers.
/// note | JavaScript in expressions
You can use any JavaScript in expressions. Refer to [Expressions](/code/expressions/) for more information.
You can use any JavaScript in expressions. Refer to [Expressions](/code/expressions.md) for more information.
///
[[% import "_macros/data-functions.html" as dataFunctions %]]

View File

@ -10,7 +10,7 @@ contentType: reference
A reference document listing built-in convenience functions to support data transformation in expressions for objects.
/// note | JavaScript in expressions
You can use any JavaScript in expressions. Refer to [Expressions](/code/expressions/) for more information.
You can use any JavaScript in expressions. Refer to [Expressions](/code/expressions.md) for more information.
///
[[% import "_macros/data-functions.html" as dataFunctions %]]

View File

@ -10,7 +10,7 @@ contentType: reference
A reference document listing built-in convenience functions to support data transformation in expressions for strings.
/// note | JavaScript in expressions
You can use any JavaScript in expressions. Refer to [Expressions](/code/expressions/) for more information.
You can use any JavaScript in expressions. Refer to [Expressions](/code/expressions.md) for more information.
///
[[% import "_macros/data-functions.html" as dataFunctions %]]

View File

@ -24,6 +24,6 @@ You can use Python in the Code node. It isn't available in expressions.
| `_now` | A Luxon object containing the current timestamp. Equivalent to `DateTime.now()`. |
| `_today` | A Luxon object containing the current timestamp, rounded down to the day. Equivalent to `DateTime.now().set({ hour: 0, minute: 0, second: 0, millisecond: 0 })`. |
n8n passes dates between nodes as strings, so you need to parse them. Luxon helps you do this. Refer to [Date and time with Luxon](/code/cookbook/luxon/) for more information.
n8n passes dates between nodes as strings, so you need to parse them. Luxon helps you do this. Refer to [Date and time with Luxon](/code/cookbook/luxon.md) for more information.
n8n provides built-in convenience functions to support data transformation in expressions for dates. Refer to [Data transformation functions | Dates](/code/builtin/data-transformation-functions/dates/) for more information.
n8n provides built-in convenience functions to support data transformation in expressions for dates. Refer to [Data transformation functions | Dates](/code/builtin/data-transformation-functions/dates.md) for more information.

View File

@ -10,9 +10,9 @@ hide:
Variables for working with HTTP node requests and responses when using pagination.
Refer to [HTTP Request](/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) for guidance on using the HTTP node, including configuring pagination.
Refer to [HTTP Request](/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/index.md) for guidance on using the HTTP node, including configuring pagination.
Refer to [HTTP Request node cookbook | Pagination](/code/cookbook/http-node/pagination/) for example pagination configurations.
Refer to [HTTP Request node cookbook | Pagination](/code/cookbook/http-node/pagination.md) for example pagination configurations.
/// note | HTTP node only
These variables are for use in expressions in the HTTP node. You can't use them in other nodes.

View File

@ -8,7 +8,7 @@ hide:
# JMESPath method
This is an n8n-provided method for working with the [JMESPath](/code/cookbook/jmespath/) library.
This is an n8n-provided method for working with the [JMESPath](/code/cookbook/jmespath.md) library.
/// note | Python support
You can use Python in the Code node. It isn't available in expressions.

View File

@ -7,7 +7,7 @@ hide:
---
# LangChain Code node methods
n8n provides these methods to make it easier to perform common tasks in the [LangChain Code node](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.code/).
n8n provides these methods to make it easier to perform common tasks in the [LangChain Code node](/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.code.md).
/// note | LangChain Code node only
These variables are for use in expressions in the LangChain Code node. You can't use them in other nodes.

View File

@ -14,7 +14,7 @@ This includes:
* Access to n8n environment variables for self-hosted n8n.
* Metadata about workflows, executions, and nodes.
* Information about instance [Variables](/code/variables/) and [External secrets](/external-secrets/).
* Information about instance [Variables](/code/variables.md) and [External secrets](/external-secrets.md).
/// note | Python support
You can use Python in the Code node. It isn't available in expressions.
@ -22,12 +22,12 @@ You can use Python in the Code node. It isn't available in expressions.
=== "JavaScript"
| Method | Description | Available in Code node? |
| ------ | ----------- | :-------------------------: |
| `$env` | Contains n8n instance configuration [environment variables](/hosting/configuration/environment-variables/). | :white_check_mark: |
| `$execution.customData` | Set and get custom execution data. Refer to [Custom executions data](/workflows/executions/custom-executions-data/) for more information. | :white_check_mark: |
| `$env` | Contains n8n instance configuration [environment variables](/hosting/configuration/environment-variables/index.md). | :white_check_mark: |
| `$execution.customData` | Set and get custom execution data. Refer to [Custom executions data](/workflows/executions/custom-executions-data.md) for more information. | :white_check_mark: |
| `$execution.id` | The unique ID of the current workflow execution. | :white_check_mark: |
| `$execution.mode` | Whether the execution was triggered automatically, or by manually running the workflow. Possible values are `test` and `production`. | :white_check_mark: |
| `$execution.resumeUrl` | The webhook URL to call to resume a workflow waiting at a [Wait node](/integrations/builtin/core-nodes/n8n-nodes-base.wait/). | :white_check_mark: |
| `$getWorkflowStaticData(type)` | View an [example](/code/cookbook/builtin/get-workflow-static-data/). Static data doesn't persist when testing workflows. The workflow must be active and called by a trigger or webhook to save static data. This gives access to the static workflow data. | :white_check_mark: |
| `$execution.resumeUrl` | The webhook URL to call to resume a workflow waiting at a [Wait node](/integrations/builtin/core-nodes/n8n-nodes-base.wait.md). | :white_check_mark: |
| `$getWorkflowStaticData(type)` | View an [example](/code/cookbook/builtin/get-workflow-static-data.md). Static data doesn't persist when testing workflows. The workflow must be active and called by a trigger or webhook to save static data. This gives access to the static workflow data. | :white_check_mark: |
| `$("<node-name>").isExecuted` | Check whether a node has already executed. | :white_check_mark: |
| `$itemIndex` | The index of an item in a list of items. | :x: |
| `$nodeVersion` | Get the version of the current node. | :white_check_mark: |
@ -35,8 +35,8 @@ You can use Python in the Code node. It isn't available in expressions.
| `$prevNode.outputIndex` | The index of the output connector that the current input came from. Use this when the previous node had multiple outputs (such as an If or Switch node). When using the Merge node, note that `$prevNode` always uses the first input connector. | :white_check_mark: |
| `$prevNode.runIndex` | The run of the previous node that generated the current input. When using the Merge node, note that `$prevNode` always uses the first input connector. | :white_check_mark: |
| `$runIndex` | How many times n8n has executed the current node. Zero-based (the first run is 0, the second is 1, and so on). | :white_check_mark: |
| `$secrets` | Contains information about your [External secrets](/external-secrets/) setup. | :white_check_mark: |
| `$vars` | Contains the [Variables](/code/variables/) available in the active environment. | :white_check_mark: |
| `$secrets` | Contains information about your [External secrets](/external-secrets.md) setup. | :white_check_mark: |
| `$vars` | Contains the [Variables](/code/variables.md) available in the active environment. | :white_check_mark: |
| `$version` | The node version. | :x: |
| `$workflow.active` | Whether the workflow is active (true) or not (false). | :white_check_mark: |
| `$workflow.id` | The workflow ID. | :white_check_mark: |
@ -44,20 +44,20 @@ You can use Python in the Code node. It isn't available in expressions.
=== "Python"
| Method | Description |
| ------ | ----------- |
| `_env` | Contains n8n instance configuration [environment variables](/hosting/configuration/environment-variables/). |
| `_execution.customData` | Set and get custom execution data. Refer to [Custom executions data](/workflows/executions/custom-executions-data/) for more information. |
| `_env` | Contains n8n instance configuration [environment variables](/hosting/configuration/environment-variables/index.md). |
| `_execution.customData` | Set and get custom execution data. Refer to [Custom executions data](/workflows/executions/custom-executions-data.md) for more information. |
| `_execution.id` | The unique ID of the current workflow execution. |
| `_execution.mode` | Whether the execution was triggered automatically, or by manually running the workflow. Possible values are `test` and `production`. |
| `_execution.resumeUrl` | The webhook URL to call to resume a workflow waiting at a [Wait node](/integrations/builtin/core-nodes/n8n-nodes-base.wait/). |
| `_getWorkflowStaticData(type)` | View an [example](/code/cookbook/builtin/get-workflow-static-data/). Static data doesn't persist when testing workflows. The workflow must be active and called by a trigger or webhook to save static data. This gives access to the static workflow data. |
| `_execution.resumeUrl` | The webhook URL to call to resume a workflow waiting at a [Wait node](/integrations/builtin/core-nodes/n8n-nodes-base.wait.md). |
| `_getWorkflowStaticData(type)` | View an [example](/code/cookbook/builtin/get-workflow-static-data.md). Static data doesn't persist when testing workflows. The workflow must be active and called by a trigger or webhook to save static data. This gives access to the static workflow data. |
| `_("<node-name>").isExecuted` | Check whether a node has already executed. |
| `_nodeVersion` | Get the version of the current node. | :white_check_mark: |
| `_prevNode.name` | The name of the node that the current input came from. When using the Merge node, note that `_prevNode` always uses the first input connector. |
| `_prevNode.outputIndex` | The index of the output connector that the current input came from. Use this when the previous node had multiple outputs (such as an If or Switch node). When using the Merge node, note that `_prevNode` always uses the first input connector. |
| `_prevNode.runIndex` | The run of the previous node that generated the current input. When using the Merge node, note that `_prevNode` always uses the first input connector. |
| `_runIndex` | How many times n8n has executed the current node. Zero-based (the first run is 0, the second is 1, and so on). |
| `_secrets` | Contains information about your [External secrets](/external-secrets/) setup. |
| `_vars` | Contains the [Variables](/code/variables/) available in the active environment. |
| `_secrets` | Contains information about your [External secrets](/external-secrets.md) setup. |
| `_vars` | Contains the [Variables](/code/variables.md) available in the active environment. |
| `_workflow.active` | Whether the workflow is active (true) or not (false). |
| `_workflow.id` | The workflow ID. |
| `_workflow.name` | The workflow name. |

View File

@ -19,7 +19,7 @@ You can use Python in the Code node. It isn't available in expressions.
| `$("<node-name>").all(branchIndex?, runIndex?)` | Returns all items from a given node. If `branchIndex` isn't given it will default to the output that connects `node-name` with the node where you use the expression or code. | :white_check_mark: |
| `$("<node-name>").first(branchIndex?, runIndex?)` | The first item output by the given node. If `branchIndex` isn't given it will default to the output that connects `node-name` with the node where you use the expression or code. | :white_check_mark: |
| `$("<node-name>").last(branchIndex?, runIndex?)` | The last item output by the given node. If `branchIndex` isn't given it will default to the output that connects `node-name` with the node where you use the expression or code. | :white_check_mark: |
| `$("<node-name>").item` | The linked item. This is the item in the specified node used to produce the current item. Refer to [Item linking](/data/data-mapping/data-item-linking/) for more information on item linking. | :x: |
| `$("<node-name>").item` | The linked item. This is the item in the specified node used to produce the current item. Refer to [Item linking](/data/data-mapping/data-item-linking/index.md) for more information on item linking. | :x: |
| `$("<node-name>").params` | Object containing the query settings of the given node. This includes data such as the operation it ran, result limits, and so on. | :white_check_mark: |
| `$("<node-name>").context` | Boolean. Only available when working with the Loop Over Items node. Provides information about what's happening in the node. Use this to determine whether the node is still processing items. | :white_check_mark: |
| `$("<node-name>").itemMatching(currentNodeInputIndex)` | Use instead of `$("<node-name>").item` in the Code node if you need to trace back from an input item. | :white_check_mark: |
@ -29,7 +29,7 @@ You can use Python in the Code node. It isn't available in expressions.
| `_("<node-name>").all(branchIndex?, runIndex?)` | Returns all items from a given node. If `branchIndex` isn't given it will default to the output that connects`node-name` with the node where you use the expression or code. | :white_check_mark: |
| `_("<node-name>").first(branchIndex?, runIndex?)` | The first item output by the given node. If `branchIndex` isn't given it will default to the output that connects`node-name` with the node where you use the expression or code. | :white_check_mark: |
| `_("<node-name>").last(branchIndex?, runIndex?)` | The last item output by the given node. If `branchIndex` isn't given it will default to the output that connects`node-name` with the node where you use the expression or code. | :white_check_mark: |
| `_("<node-name>").item` | The linked item. This is the item in the specified node used to produce the current item. Refer to [Item linking](/data/data-mapping/data-item-linking/) for more information on item linking. | :x: |
| `_("<node-name>").item` | The linked item. This is the item in the specified node used to produce the current item. Refer to [Item linking](/data/data-mapping/data-item-linking/index.md) for more information on item linking. | :x: |
| `_("<node-name>").params` | Object containing the query settings of the given node. This includes data such as the operation it ran, result limits, and so on. | :white_check_mark: |
| `_("<node-name>").context` | Boolean. Only available when working with the Loop Over Items node. Provides information about what's happening in the node. Use this to determine whether the node is still processing items. | :white_check_mark: |
| `_("<node-name>").itemMatching(currentNodeInputIndex)` | Use instead of `_("<node-name>").item` in the Code node if you need to trace back from an input item. Refer to [Retrieve linked items from earlier in the workflow](/code/cookbook/builtin/itemmatching/) for an example. | :white_check_mark: |
| `_("<node-name>").itemMatching(currentNodeInputIndex)` | Use instead of `_("<node-name>").item` in the Code node if you need to trace back from an input item. Refer to [Retrieve linked items from earlier in the workflow](/code/cookbook/builtin/itemmatching.md) for an example. | :white_check_mark: |

View File

@ -15,7 +15,7 @@ All data transformation functions are only available in the expressions editor.
///
The [Cookbook](/code/cookbook/) contains examples for some common tasks, including some [Code node only](/code/cookbook/code-node/) functions.
The [Cookbook](/code/index.md) contains examples for some common tasks, including some [Code node only](/code/cookbook/code-node/index.md) functions.
[[% import "_macros/section-toc.html" as sectionToc %]]

View File

@ -20,9 +20,9 @@ Contains the unique ID of the current workflow execution.
## `execution.resumeUrl`
The webhook URL to call to resume a [waiting](/integrations/builtin/core-nodes/n8n-nodes-base.wait/) workflow.
The webhook URL to call to resume a [waiting](/integrations/builtin/core-nodes/n8n-nodes-base.wait.md) workflow.
See the [Wait > On webhook call](/integrations/builtin/core-nodes/n8n-nodes-base.wait/#webhook-call) documentation to learn more.
See the [Wait > On webhook call](/integrations/builtin/core-nodes/n8n-nodes-base.wait.md#on-webhook-call) documentation to learn more.
## `execution.customData`
@ -57,4 +57,4 @@ This is only available in the Code node.
customData = _execution.customData.get("key")
```
Refer to [Custom executions data](/workflows/executions/custom-executions-data/) for more information.
Refer to [Custom executions data](/workflows/executions/custom-executions-data.md) for more information.

View File

@ -13,6 +13,6 @@ n8n provides built-in methods and variables for working with data and accessing
## Related resources
* [Built-in methods and variables reference](/code/builtin/overview/)
* [Expressions](/code/expressions/)
* [Code node](/code/code-node/)
* [Built-in methods and variables reference](/code/builtin/overview.md)
* [Expressions](/code/expressions.md)
* [Code node](/code/code-node.md)

View File

@ -11,7 +11,7 @@ contentType: reference
* You need access to the n8n instance owner account to create variables.
///
`vars` contains all [Variables](/code/variables/) for the active environment. It's read-only: you can access variables using `vars`, but must set them using the UI.
`vars` contains all [Variables](/code/variables.md) for the active environment. It's read-only: you can access variables using `vars`, but must set them using the UI.
=== "JavaScript"
```js
@ -25,5 +25,5 @@ contentType: reference
```
/// note | `vars` and `env`
`vars` gives access to user-created variables. It's part of the [Environments](/source-control-environments/) feature. `env` gives access to the [configuration environment variables](/hosting/configuration/environment-variables/) for your n8n instance.
`vars` gives access to user-created variables. It's part of the [Environments](/source-control-environments/index.md) feature. `env` gives access to the [configuration environment variables](/hosting/configuration/environment-variables/index.md) for your n8n instance.
///

View File

@ -14,5 +14,5 @@ This section contains examples and recipes for tasks you can do with the Code no
## Related resources
* [Built-in methods and variables reference](/code/builtin/overview/)
* [Code node](/code/code-node/)
* [Built-in methods and variables reference](/code/builtin/overview.md)
* [Code node](/code/code-node.md)

View File

@ -7,7 +7,7 @@ contentType: howto
# Expressions common issues
Here are some common errors and issues related to [expressions](/code/expressions/) and steps to resolve or troubleshoot them.
Here are some common errors and issues related to [expressions](/code/expressions.md) and steps to resolve or troubleshoot them.
## The 'JSON Output' in item 0 contains invalid JSON

View File

@ -17,5 +17,5 @@ You can use Python in the Code node. It isn't available in expressions.
## Related resources
* [Built-in methods and variables reference](/code/builtin/overview/)
* [Expressions](/code/expressions/)
* [Built-in methods and variables reference](/code/builtin/overview.md)
* [Expressions](/code/expressions.md)

View File

@ -7,7 +7,7 @@ contentType: overview
The HTTP Request node is one of the most versatile nodes in n8n. Use this node to make HTTP requests to query data from any app or service with a REST API.
Refer to [HTTP Request](/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) for information on node settings.
Refer to [HTTP Request](/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/index.md) for information on node settings.
[[% import "_macros/section-toc.html" as sectionToc %]]
@ -15,6 +15,6 @@ Refer to [HTTP Request](/integrations/builtin/core-nodes/n8n-nodes-base.httprequ
## Related resources
* [HTTP Request](/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/)
* [Built-in methods and variables reference](/code/builtin/overview/)
* [Expressions](/code/expressions/)
* [HTTP Request](/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/index.md)
* [Built-in methods and variables reference](/code/builtin/overview.md)
* [Expressions](/code/expressions.md)

View File

@ -6,9 +6,9 @@ contentType: howto
# Pagination in the HTTP Request node
The HTTP Request node supports pagination. This page provides some example configurations, including using the [HTTP node variables](/code/builtin/http-node-variables/).
The HTTP Request node supports pagination. This page provides some example configurations, including using the [HTTP node variables](/code/builtin/http-node-variables.md).
Refer to [HTTP Request](/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) for more information on the node.
Refer to [HTTP Request](/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/index.md) for more information on the node.
--8<-- "_snippets/integrations/builtin/core-nodes/http/pagination-api-differences.md"

View File

@ -59,7 +59,7 @@ Note that these variables can return different time formats when cast as a strin
# For example "Today's date is 1646834498755"
```
n8n provides built-in convenience functions to support data transformation in expressions for dates. Refer to [Data transformation functions | Dates](/code/builtin/data-transformation-functions/dates/) for more information.
n8n provides built-in convenience functions to support data transformation in expressions for dates. Refer to [Data transformation functions | Dates](/code/builtin/data-transformation-functions/dates.md) for more information.
## Date and time behavior in n8n
@ -254,7 +254,7 @@ The scenario: you want a countdown to 25th December. Every day, it should tell y
* `$today.diff()`: This is similar to the example in [Get the time between two dates](#get-the-time-between-two-dates), but it uses n8n's custom `$today` variable.
* `DateTime.fromISO($today.year + '-12-25'), 'days'`: this part gets the current year using `$today.year`, turns it into an ISO string along with the month and date, and then takes the whole ISO string and converts it to a Luxon DateTime data structure. It also tells Luxon that you want the duration in days.
* `toObject()` turns the result of diff() into a more usable object. At this point, the expression returns `[Object: {"days":-<number-of-days>}]`. For example, on 9th March, `[Object: {"days":-291}]`.
* `.days` uses JMESPath syntax to retrieve just the number of days from the object. For more information on using JMESPath with n8n, refer to our [JMESpath](/code/cookbook/jmespath/) documentation. This gives you the number of days to Christmas, as a negative number.
* `.days` uses JMESPath syntax to retrieve just the number of days from the object. For more information on using JMESPath with n8n, refer to our [JMESpath](/code/cookbook/jmespath.md) documentation. This gives you the number of days to Christmas, as a negative number.
* `.toString().substring(1)` turns the number into a string and removes the `-`.
* `+ " days to Christmas!"`: another string, with a `+` to join it to the previous string.
* `}}`: indicates the end of the expression.
@ -274,6 +274,6 @@ The scenario: you want a countdown to 25th December. Every day, it should tell y
* `$today.diff()`: This is similar to the example in [Get the time between two dates](#get-the-time-between-two-dates), but it uses n8n's custom `$today` variable.
* `DateTime.fromISO($today.year + '-12-25'), 'days'`: this part gets the current year using `$today.year`, turns it into an ISO string along with the month and date, and then takes the whole ISO string and converts it to a Luxon DateTime data structure. It also tells Luxon that you want the duration in days.
* `toObject()` turns the result of diff() into a more usable object. At this point, the expression returns `[Object: {"days":-<number-of-days>}]`. For example, on 9th March, `[Object: {"days":-291}]`.
* `.days` uses JMESPath syntax to retrieve just the number of days from the object. For more information on using JMESPath with n8n, refer to our [JMESpath](/code/cookbook/jmespath/) documentation. This gives you the number of days to Christmas, as a negative number.
* `.days` uses JMESPath syntax to retrieve just the number of days from the object. For more information on using JMESPath with n8n, refer to our [JMESpath](/code/cookbook/jmespath.md) documentation. This gives you the number of days to Christmas, as a negative number.
* `.toString().substring(1)` turns the number into a string and removes the `-`.
* `+ " days to Christmas!"`: another string, with a `+` to join it to the previous string.

View File

@ -15,7 +15,7 @@ Use expressions to set node parameters dynamically based on data from:
You can execute JavaScript within an expression.
n8n created and uses a templating language called [Tournament](https://github.com/n8n-io/tournament){:target=_blank .external-link}, and extends it with [custom methods and variables](/code-examples/methods-variables-reference/) and [data transformation functions](/code-examples/expressions/data-transformation-functions/) that help with common tasks, such as retrieving data from other nodes, or accessing metadata.
n8n created and uses a templating language called [Tournament](https://github.com/n8n-io/tournament){:target=_blank .external-link}, and extends it with [custom methods and variables](/code/builtin/overview.md) and [data transformation functions](/code/builtin/data-transformation-functions/index.md) that help with common tasks, such as retrieving data from other nodes, or accessing metadata.
n8n supports two libraries:
@ -26,7 +26,7 @@ n8n supports two libraries:
Expressions must use JavaScript.
///
/// note | Data in n8n
When writing expressions, it's helpful to understand data structure and behavior in n8n. Refer to [Data](/data/) for more information on working with data in your workflows.
When writing expressions, it's helpful to understand data structure and behavior in n8n. Refer to [Data](/data/index.md) for more information on working with data in your workflows.
///
## Writing expressions
@ -110,4 +110,4 @@ While the second example is valid:
## Common issues
For common errors or issues with expressions and suggested resolution steps, refer to [Common Issues](/code/cookbook/expressions/common-issues/).
For common errors or issues with expressions and suggested resolution steps, refer to [Common Issues](/code/cookbook/expressions/common-issues.md).

View File

@ -17,15 +17,15 @@ There are two places in your workflows where you can use code:
- __Expressions__
Use expressions to transform [data](/data/) in your nodes. You can use JavaScript in expressions, as well as n8n's [Built-in methods and variables](/code/builtin/overview/) and [Data transformation functions](/code/builtin/data-transformation-functions/).
Use expressions to transform [data](/data/index.md) in your nodes. You can use JavaScript in expressions, as well as n8n's [Built-in methods and variables](/code/builtin/overview.md) and [Data transformation functions](/code/builtin/data-transformation-functions/index.md).
[:octicons-arrow-right-24: Expressions](/code/expressions/)
[:octicons-arrow-right-24: Expressions](/code/expressions.md)
- __Code node__
Use the Code node to add JavaScript or Python to your workflow.
[:octicons-arrow-right-24: Code node](/code/code-node/)
[:octicons-arrow-right-24: Code node](/code/code-node.md)
</div>
@ -42,17 +42,17 @@ n8n provides core nodes, which simplify adding key functionality such as API req
- __Write a backend__
The [HTTP Request](/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/), [Webhook](/integrations/builtin/core-nodes/n8n-nodes-base.webhook/), and [Code](/code/code-node/) nodes help you make API calls, respond to webhooks, and write any JavaScript in your workflow.
The [HTTP Request](/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/index.md), [Webhook](/integrations/builtin/core-nodes/n8n-nodes-base.webhook/index.md), and [Code](/code/code-node.md) nodes help you make API calls, respond to webhooks, and write any JavaScript in your workflow.
Use this do things like [Create an API endpoint](https://n8n.io/workflows/1750-creating-an-api-endpoint/){:target=_blank .external-link}.
[:octicons-arrow-right-24: Core nodes](/integrations/builtin/core-nodes/)
[:octicons-arrow-right-24: Core nodes](/integrations/builtin/core-nodes/index.md)
- __Represent complex logic__
You can build complex flows, using nodes like [If](/integrations/builtin/core-nodes/n8n-nodes-base.if/), [Switch](/integrations/builtin/core-nodes/n8n-nodes-base.switch/), and [Merge](/integrations/builtin/core-nodes/n8n-nodes-base.merge/) nodes.
You can build complex flows, using nodes like [If](/integrations/builtin/core-nodes/n8n-nodes-base.if.md), [Switch](/integrations/builtin/core-nodes/n8n-nodes-base.switch.md), and [Merge](/integrations/builtin/core-nodes/n8n-nodes-base.merge.md) nodes.
[:octicons-arrow-right-24: Flow logic](/flow-logic/)
[:octicons-arrow-right-24: Flow logic](/flow-logic/index.md)
</div>
@ -62,20 +62,20 @@ n8n provides core nodes, which simplify adding key functionality such as API req
- __The n8n API__
n8n provides an API, where you can programmatically perform many of the same tasks as you can in the GUI. There's an [n8n API node](/integrations/builtin/core-nodes/n8n-nodes-base.n8n/) to access the API in your workflows.
n8n provides an API, where you can programmatically perform many of the same tasks as you can in the GUI. There's an [n8n API node](/integrations/builtin/core-nodes/n8n-nodes-base.n8n.md) to access the API in your workflows.
[:octicons-arrow-right-24: API](/api/)
[:octicons-arrow-right-24: API](/api/index.md)
- __Self-host__
You can self-host n8n. This keeps your data on your own infrastructure.
[:octicons-arrow-right-24: Hosting](/hosting/)
[:octicons-arrow-right-24: Hosting](/hosting/index.md)
- __Build your own nodes__
You can build custom nodes, install them on your n8n instance, and publish them to [npm](https://www.npmjs.com/){:target=_blank .external-link}.
[:octicons-arrow-right-24: Creating nodes](/integrations/creating-nodes/overview/)
[:octicons-arrow-right-24: Creating nodes](/integrations/creating-nodes/overview.md)
</div>

View File

@ -48,4 +48,4 @@ All variables are strings.
During workflow execution, n8n replaces the variables with the variable value. If the variable has no value, n8n treats its value as `undefined`. Workflows don't automatically fail in this case.
Variables are read-only. You must use the UI to change the values. If you need to set and access custom data within your workflow, use [Workflow static data](/code/cookbook/builtin/get-workflow-static-data/).
Variables are read-only. You must use the UI to change the values. If you need to set and access custom data within your workflow, use [Workflow static data](/code/cookbook/builtin/get-workflow-static-data.md).

View File

@ -15,5 +15,5 @@ These tasks can and should be automated! And you don't need advanced technical k
## Available courses
- [Level 1: Beginner course](/courses/level-one/)
- [Level 2: Intermediate course](/courses/level-two/)
- [Level 1: Beginner course](/courses/level-one/index.md)
- [Level 2: Intermediate course](/courses/level-two/index.md)

View File

@ -12,9 +12,9 @@ In this lesson you will learn how to navigate the Editor UI. We will walk throug
Begin by setting up n8n. There are two ways you can do this:
- [n8n Cloud](https://app.n8n.cloud/register){:target="_blank" .external} - Hosted solution, no installation needed. Great for all levels of experience.
- [Self-host](/hosting/){:target="_blank" .external} - Recommended for advanced users with technical knowledge
- [Self-host](/hosting/index.md){:target="_blank" .external} - Recommended for advanced users with technical knowledge
For more details on the different ways to set up n8n, see our [platforms documentation](/choose-n8n/#platforms){:target="_blank" .external}.
For more details on the different ways to set up n8n, see our [platforms documentation](/choose-n8n.md#platforms){:target="_blank" .external}.
/// warning | n8n version
This course was developed on n8n version 1.30.0. In other versions, some of the user interface might look different, but the core functionality shouldn't be impacted.
@ -25,7 +25,7 @@ Once you have n8n running, open the Editor UI in a browser window. It should loo
## Editor UI settings
The [Editor UI](/editor-ui/) is the web interface where you build [workflows](/workflows/workflows/). You can access all your workflows and credentials, as well as support pages, from the Editor UI.
The editor UI is the web interface where you build [workflows](/workflows/index.md). You can access all your workflows and credentials, as well as support pages, from the Editor UI.
### Left-side panel
@ -63,7 +63,7 @@ The **canvas** is the gray dotted grid background in the Editor UI. It displays
- Buttons to zoom the canvas to fit the screen, zoom in or out of the canvas, and reset the canvas to the original resolution.
- A button to **Execute Workflow**. When you click on it, all nodes on the canvas are executed.
- A button with a **+** sign inside. This button opens the nodes panel.
- A button with a note icon inside. This button adds a [sticky note](/workflows/sticky-notes){:target="_blank" .external} to the canvas. (Visible when hovering on the top right + icon)
- A button with a note icon inside. This button adds a [sticky note](/workflows/components/sticky-notes.md) to the canvas. (Visible when hovering on the top right + icon)
- A dotted square with the text "Add first step." This is where you add your first node.
<figure><img src="/_images/courses/level-one/chapter-one/l1-c1-canvas.png" alt="Workflow canvas" style="width:100%"><figcaption align = "center"><i>Workflow canvas</i></figcaption></figure>
@ -89,13 +89,13 @@ A node is an individual step in your workflow: one that either (a) loads, (b) pr
Based on their function, n8n classifies nodes into four types:
- **App** or **Action Nodes** add, remove, and edit data; request and send external data; and trigger events in other systems. Refer to the [Action nodes library](/integrations/builtin/app-nodes/) for a full list of these nodes.
- **Trigger Nodes** start a workflow and supply the initial data. Refer to the [Trigger nodes library](/integrations/builtin/trigger-nodes/) for a full list of trigger nodes.
- **App** or **Action Nodes** add, remove, and edit data; request and send external data; and trigger events in other systems. Refer to the [Action nodes library](/integrations/builtin/app-nodes/index.md) for a full list of these nodes.
- **Trigger Nodes** start a workflow and supply the initial data. Refer to the [Trigger nodes library](/integrations/builtin/trigger-nodes/index.md) for a full list of trigger nodes.
- **Core Nodes** can be core or app nodes. Whereas most nodes connect to a specific external service, core nodes provide functionality such as logic, scheduling, or generic API calls. Refer to the [Core Nodes library](https://docs.n8n.io/integrations/builtin/core-nodes/) for a full list of core nodes.
- **Cluster Nodes** are node groups that work together to provide functionality in a workflow. Refer to [Cluster nodes](/integrations/builtin/cluster-nodes/) for more information.
- **Cluster Nodes** are node groups that work together to provide functionality in a workflow. Refer to [Cluster nodes](/integrations/builtin/cluster-nodes/index.md) for more information.
/// note | Learn more
Refer to [Node types](/builtin/node-types/) for a more detailed explanation of all node types.
Refer to [Node types](/integrations/builtin/node-types.md) for a more detailed explanation of all node types.
///
### Finding nodes
@ -128,7 +128,7 @@ If you hover on a node, you'll notice that three icons appear on top:
- Deactivate/Activate the node (Power icon)
- Delete the node (Trash icon)
Additionally, you'll see an elipsis icon, which opens a context menu containing other [node options](/workflows/components/nodes/#node-controls).
Additionally, you'll see an elipsis icon, which opens a context menu containing other [node options](/workflows/components/nodes.md#node-controls).
/// note | Moving a workflow
To move a workflow around the canvas, select all nodes with your mouse or by selecting **Ctrl + A**, select and hold on a node, then drag it to any point you want on the canvas.

View File

@ -26,14 +26,14 @@ n8n provides integrations for all these steps, so Nathan's workflow in n8n would
You will build this workflow in eight steps:
1. [Getting data from the data warehouse](/courses/level-one/chapter-5/chapter-5.1/)
2. [Inserting data into Airtable](/courses/level-one/chapter-5/chapter-5.2/)
3. [Filtering orders](/courses/level-one/chapter-5/chapter-5.3/)
4. [Setting values for processing orders](/courses/level-one/chapter-5/chapter-5.4/)
5. [Calculating booked orders](/courses/level-one/chapter-5/chapter-5.5/)
6. [Notifying the team](/courses/level-one/chapter-5/chapter-5.6/)
7. [Scheduling the workflow](/courses/level-one/chapter-5/chapter-5.7/)
8. [Activating and examining the workflow](/courses/level-one/chapter-5/chapter-5.8/)
1. [Getting data from the data warehouse](/courses/level-one/chapter-5/chapter-5.1.md)
2. [Inserting data into Airtable](/courses/level-one/chapter-5/chapter-5.2.md)
3. [Filtering orders](/courses/level-one/chapter-5/chapter-5.3.md)
4. [Setting values for processing orders](/courses/level-one/chapter-5/chapter-5.4.md)
5. [Calculating booked orders](/courses/level-one/chapter-5/chapter-5.5.md)
6. [Notifying the team](/courses/level-one/chapter-5/chapter-5.6.md)
7. [Scheduling the workflow](/courses/level-one/chapter-5/chapter-5.7.md)
8. [Activating and examining the workflow](/courses/level-one/chapter-5/chapter-5.8.md)
To build this workflow, you will need the credentials that were sent in the email from n8n when you signed up for this course. If you haven't signed up already, you can do it [here](https://n8n-community.typeform.com/to/PDEMrevI?typeform-source=127.0.0.1){:target="_blank" .external-link}. If you haven't received a confirmation email after signing up, [contact us](mailto:help@n8n.io).

View File

@ -5,7 +5,7 @@ contentType: tutorial
# 1. Getting data from the data warehouse
In this part of the workflow you will learn how to get data by making HTTP requests using the [**HTTP Request**](/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) node.
In this part of the workflow you will learn how to get data by making HTTP requests using the [**HTTP Request**](/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/index.md) node.
First, let's set up the scene for building Nathan's workflow.
@ -22,7 +22,7 @@ The first thing you need to do is get data from ABCorp's old data warehouse.
In the previous chapter, you used an action node connected to a specific app (Hacker News). But not all apps or services have dedicated nodes, like the legacy data warehouse from Nathan's company.
Though we can't directly export the data, Nathan told us that the data warehouse has a couple of API endpoints. That's all we need to access the data using the [HTTP Request node](/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) in n8n.
Though we can't directly export the data, Nathan told us that the data warehouse has a couple of API endpoints. That's all we need to access the data using the [HTTP Request node](/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/index.md) in n8n.
/// note | No node for that service?
The HTTP Request node is one of the most versatile nodes, allowing you to make HTTP requests to query data from apps and services. You can use it to access data from apps or services that don't have a dedicated node in n8n.
@ -30,7 +30,7 @@ The HTTP Request node is one of the most versatile nodes, allowing you to make H
## Add an HTTP Request node
Now, in your Editor UI, add an HTTP Request node like you learned in the lesson [Adding nodes](/courses/level-one/chapter-1/#adding-nodes). The node window will open, where you need to configure some parameters.
Now, in your Editor UI, add an HTTP Request node like you learned in the lesson [Adding nodes](/courses/level-one/chapter-1.md#adding-nodes). The node window will open, where you need to configure some parameters.
<figure><img src="/_images/courses/level-one/chapter-five/l1-c5-5-1-http-request-node.png" alt="HTTP Request node" style="width:100%"><figcaption align = "center"><i>HTTP Request node</i></figcaption></figure>
@ -67,7 +67,7 @@ Select the **Test step** button in the HTTP Request node window. The result of t
<figure><img src="/_images/courses/level-one/chapter-five/l1-c5-5-1-http-request-node-window.png" alt="HTTP Request node output" style="width:100%"><figcaption align = "center"><i>HTTP Request node output</i></figcaption></figure>
This view should be familiar to you from the [Building a mini-workflow](/courses/level-one/chapter-2/).
This view should be familiar to you from the [Building a mini-workflow](/courses/level-one/chapter-2.md).
This is the data from ABCorp's data warehouse that Nathan needs to work with. This data set includes sales information of 30 customers with five columns:

View File

@ -5,10 +5,10 @@ contentType: tutorial
# 2. Inserting data into Airtable
In this step of the workflow, you will learn how to insert the data received from the HTTP Request node into Airtable using the [Airtable node](/integrations/builtin/app-nodes/n8n-nodes-base.airtable/).
In this step of the workflow, you will learn how to insert the data received from the HTTP Request node into Airtable using the [Airtable node](/integrations/builtin/app-nodes/n8n-nodes-base.airtable/index.md).
/// note | Spreadsheet nodes
You can replace the Airtable node with another spreadsheet app/service. For example, n8n also has a node for [**Google Sheets**](/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets/).
You can replace the Airtable node with another spreadsheet app/service. For example, n8n also has a node for [**Google Sheets**](/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets/index.md).
///
After this step, your workflow should look like this:
@ -56,7 +56,7 @@ In the Airtable node window, configure the following parameters:
- **Credential to connect with**:
- Select 'Create new credential'
- Keep the default option 'Connect using: Access Token' selected
- **Access token**: Follow the instructions [here](/integrations/builtin/credentials/airtable/){:target="_blank"} to create your token.
- **Access token**: Follow the instructions [here](/integrations/builtin/credentials/airtable.md){:target="_blank"} to create your token.
Adding credentials for Airtable is similar to the HTTP Request node you configured in the previous chapter. However, the process of obtaining an API key for Airtable (and other apps/services) is different.
- **Resource**: Record
- **Operation**: Create. This operation will create the new record in the table.

View File

@ -9,10 +9,10 @@ In this step of the workflow you will learn how to filter data using conditional
To insert only processing orders into Airtable we need to filter our data by `orderStatus`. Basically, we want to tell the program that _if_ the `orderStatus` is processing, _then_ insert all records with this status into Airtable; _else_, for example, if the `orderStatus` isn't *processing*, calculate the sum of all orders with the other `orderStatus (booked)`.
This if-then-else command is conditional logic. In n8n workflows, conditional logic can be implemented with the [If node](/integrations/builtin/core-nodes/n8n-nodes-base.if/){:target="_blank" .external}, which splits a workflow conditionally based on comparison operations.
This if-then-else command is conditional logic. In n8n workflows, conditional logic can be implemented with the [If node](/integrations/builtin/core-nodes/n8n-nodes-base.if.md){:target="_blank" .external}, which splits a workflow conditionally based on comparison operations.
/// note | If vs. Switch
If you need to filter data on more than two conditional routes that are possible with the If node (true and false), use the [Switch node](/integrations/builtin/core-nodes/n8n-nodes-base.switch/){:target="_blank" .external}. The Switch node is similar to the If node, but supports multiple output routes.
If you need to filter data on more than two conditional routes that are possible with the If node (true and false), use the [Switch node](/integrations/builtin/core-nodes/n8n-nodes-base.switch.md){:target="_blank" .external}. The Switch node is similar to the If node, but supports multiple output routes.
///
## Remove the connection to the Airtable node
@ -65,7 +65,7 @@ Note that the orders with `orderStatus` equal to `processing` should show for th
## Insert data into Airtable
Next, we want to insert this data into Airtable. Remember what Nathan said at the end of the [Inserting data into Airtable](/courses/level-one/chapter-5/chapter-5.2/) lesson?
Next, we want to insert this data into Airtable. Remember what Nathan said at the end of the [Inserting data into Airtable](/courses/level-one/chapter-5/chapter-5.2.md) lesson?
> I actually need to insert only processing orders in the table...

View File

@ -9,7 +9,7 @@ In this step of the workflow, you will learn how to select and set data before t
The next step in Nathan's workflow is to insert the `employeeName` and `orderID` of all `processing` orders into Airtable.
For this, you need to use the [Edit Fields (Set) node](/integrations/builtin/core-nodes/n8n-nodes-base.set/), which allows you to select and set the data you want to transfer from one app/service to another.
For this, you need to use the [Edit Fields (Set) node](/integrations/builtin/core-nodes/n8n-nodes-base.set.md), which allows you to select and set the data you want to transfer from one app/service to another.
/// note | Edit Fields node
The Edit Fields node can set completely new data as well as overwrite data that already exists. This node is crucial in workflows which expect incoming data from previous nodes, such as when inserting values into spreadsheets or databases.
@ -17,7 +17,7 @@ The Edit Fields node can set completely new data as well as overwrite data that
## Disconnect the Airtable node
In your workflow, disconnect the Airtable node** from the **If node in the same way we disconnected it in the [Filtering Orders](/courses/level-one/chapter-5/chapter-5.3/) lesson.
In your workflow, disconnect the Airtable node** from the **If node in the same way we disconnected it in the [Filtering Orders](/courses/level-one/chapter-5/chapter-5.3.md) lesson.
## Configure the Edit Fields node
@ -26,7 +26,7 @@ Now add a new Edit Fields (Set) node** attached to the **If node's `true` connec
With the Edit Fields node window open, configure these parameters:
- Ensure **Mode** is set to **Manual Mapping**.
- While you can use the **Expression editor** we used in the [Filtering Orders](/courses/level-one/chapter-5/chapter-5.3/) lesson, this time, let's drag the fields from the **Input** into the **Fields to Set**:
- While you can use the **Expression editor** we used in the [Filtering Orders](/courses/level-one/chapter-5/chapter-5.3.md) lesson, this time, let's drag the fields from the **Input** into the **Fields to Set**:
- Drag **orderID** as the first field.
- Drag **employeeName** as the second field.
- Ensure that **Include Other Input Fields** is set to false.
@ -46,7 +46,7 @@ Next, let's insert these values into Airtable:
- `employeeName`: Single line text
///note | Reminder
If you get stuck, refer back to the [Inserting data into Airtable](/courses/level-one/chapter-5/chapter-5.2/) lesson.
If you get stuck, refer back to the [Inserting data into Airtable](/courses/level-one/chapter-5/chapter-5.2.md) lesson.
///
4. Be sure to delete the three empty rows in the new table!

View File

@ -17,7 +17,7 @@ To calculate data and add more functionality to your workflows you can use the C
## About the Code node
/// warning | Code node modes
The Code node has two operational **Modes** that change the way it processes data. The **Run Once for All Items** mode allows you to accumulate data from all items on the input list. The **Run Once for Each Item** is used to add custom snippets of JavaScript code that should be executed once for every item that it receives as the input. Learn more about how to use the [Code node](/integrations/builtin/core-nodes/n8n-nodes-base.code/).
The Code node has two operational **Modes** that change the way it processes data. The **Run Once for All Items** mode allows you to accumulate data from all items on the input list. The **Run Once for Each Item** is used to add custom snippets of JavaScript code that should be executed once for every item that it receives as the input. Learn more about how to use the [Code node](/integrations/builtin/core-nodes/n8n-nodes-base.code/index.md).
///
- Create your own node.
- Write custom expressions.
@ -86,7 +86,7 @@ Now select **Test step** and you should see the following results:
<figure><img src="/_images/courses/level-one/chapter-five/l1-c5-5-5-code-node.png" alt="Code node output" style="width:100%"><figcaption align = "center"><i>Code node output</i></figcaption></figure>
/// note | Using Python in code nodes
You can also use Python in the Code node. To learn more about this, refer to the [Code node](/code/code-node/) documentation.
You can also use Python in the Code node. To learn more about this, refer to the [Code node](/code/code-node.md) documentation.
///
## What's next?

View File

@ -5,14 +5,14 @@ contentType: tutorial
# 6. Notifying the Team
In this step of the workflow, you will learn how to send messages to a Discord channel using the [Discord node](/integrations/builtin/app-nodes/n8n-nodes-base.discord/).
In this step of the workflow, you will learn how to send messages to a Discord channel using the [Discord node](/integrations/builtin/app-nodes/n8n-nodes-base.discord/index.md).
Now that you have a calculated summary of the booked orders, you need to notify Nathan's team in their Discord channel. For this workflow, you will send messages to the [n8n server](https://discord.gg/G98WXzsjky){:target="_blank" .external} on Discord.
Before you begin the steps below, use the link above to connect to the n8n server on Discord. Be sure you can access the `#course-level-1` channel.
/// note | Communication nodes
You can replace the Discord node with another communication app. For example, n8n also has nodes for [Slack](/integrations/builtin/app-nodes/n8n-nodes-base.slack/){:target="_blank" .external} and [Mattermost](/integrations/builtin/app-nodes/n8n-nodes-base.mattermost/){:target="_blank" .external}.
You can replace the Discord node with another communication app. For example, n8n also has nodes for [Slack](/integrations/builtin/app-nodes/n8n-nodes-base.slack.md){:target="_blank" .external} and [Mattermost](/integrations/builtin/app-nodes/n8n-nodes-base.mattermost.md){:target="_blank" .external}.
///
In your workflow, add a Discord node connected to the Code node.

View File

@ -7,7 +7,7 @@ contentType: tutorial
In this step of the workflow, you will learn how to schedule your workflow so that it runs automatically at a set time/interval using the Schedule Trigger node.
The workflow you've built so far executes only when you click on **Test Workflow**. But Nathan needs it to run automatically every Monday morning. You can do this with the [Schedule Trigger](/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/), which allows you to schedule workflows to run periodically at fixed dates, times, or intervals.
The workflow you've built so far executes only when you click on **Test Workflow**. But Nathan needs it to run automatically every Monday morning. You can do this with the [Schedule Trigger](/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/index.md), which allows you to schedule workflows to run periodically at fixed dates, times, or intervals.
To achieve this, we'll remove the Manual Trigger node we started with and replace it with a Schedule Trigger node instead.
@ -38,7 +38,7 @@ Your Schedule Trigger node should look like this:
<figure><img src="/_images/courses/level-one/chapter-five/l1-c5-5-7-schedule-trigger-node.png" alt="Schedule Trigger Node" style="width:100%"><figcaption align = "center"><i>Schedule Trigger Node</i></figcaption></figure>
/// warning | Keep in mind
To ensure accurate scheduling with the Schedule Trigger node, be sure the timezone is set correctly for your [n8n instance](/manage-cloud/set-cloud-timezone/) or the [workflow's settings](/workflows/settings/). The Schedule Trigger node will use the workflow's timezone if it's set; it will fall back to the n8n instance's timezone if it's not.
To ensure accurate scheduling with the Schedule Trigger node, be sure the timezone is set correctly for your [n8n instance](/manage-cloud/set-cloud-timezone.md) or the [workflow's settings](/workflows/settings.md). The Schedule Trigger node will use the workflow's timezone if it's set; it will fall back to the n8n instance's timezone if it's not.
///
## Connect the Schedule Trigger node

View File

@ -30,13 +30,13 @@ The **Executions** window displays a table with the following information:
/// note | Workflow execution status
You can filter the displayed **Executions** by workflow and by status (**Any Status**, **Failed**, **Cancelled**, **Running**, **Success**, or **Waiting**).
The information displayed here depends on which executions are configured to be saved in the [**Workflow Settings**](/workflows/settings/).
The information displayed here depends on which executions are configured to be saved in the [**Workflow Settings**](/workflows/settings.md).
///
## Workflow Settings
You can customize your workflows and executions, or overwrite some of the global default settings in [**Workflow Settings**](/workflows/settings/).
You can customize your workflows and executions, or overwrite some of the global default settings in [**Workflow Settings**](/workflows/settings.md).
Access these settings by selecting the three dots in the upper right corner of the Editor UI, then select **Settings**.
@ -44,9 +44,9 @@ Access these settings by selecting the three dots in the upper right corner of t
In the **Workflow Settings** window you can configure the following settings:
- [**Error Workflow**](/flow-logic/error-handling/): A workflow to run in case the execution of the current workflow fails.
- **This workflow can be called by**: Workflows that are allowed to call this workflow using the [Execute Sub-workflow node](/integrations/builtin/core-nodes/n8n-nodes-base.executeworkflow/).
- **Timezone**: The timezone to use in the current workflow. If not set, the global timezone (by default "New York") is used. This setting is particularly important for the [Schedule Trigger node](/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/), as you want to make sure that the workflow gets executed at the right time.
- [**Error Workflow**](/flow-logic/error-handling.md): A workflow to run in case the execution of the current workflow fails.
- **This workflow can be called by**: Workflows that are allowed to call this workflow using the [Execute Sub-workflow node](/integrations/builtin/core-nodes/n8n-nodes-base.executeworkflow.md).
- **Timezone**: The timezone to use in the current workflow. If not set, the global timezone (by default "New York") is used. This setting is particularly important for the [Schedule Trigger node](/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/index.md), as you want to make sure that the workflow gets executed at the right time.
- **Save failed production executions**: If the Execution data of the workflow should be saved when it fails. Default is to save.
- **Save successful production executions**: If the Execution data of the workflow should be saved when it succeeds. Default is to save.
- **Save manual executions**: If executions started from the Editor UI should be saved. Default is to save.

View File

@ -21,8 +21,8 @@ You can export and import workflows in two ways:
* Export: From the top navigation bar, select the three dots in the upper right, then select **Download**. This will download your current workflow as a JSON file on your computer.
* Import: From the top navigation bar, select the three dots in the upper right, then select **Import from URL** (to import a published workflow) or **Import from File** (to import a workflow as a JSON file).
* From the command line:
* Export: See the [full list of commands ](/hosting/cli-commands/){:target="_blank" .external} for exporting workflows or credentials.
* Import: See the [full list of commands ](/hosting/cli-commands/#import-workflows-and-credentials){:target="_blank" .external} for importing workflows or credentials.
* Export: See the [full list of commands ](/hosting/cli-commands.md){:target="_blank" .external} for exporting workflows or credentials.
* Import: See the [full list of commands ](/hosting/cli-commands.md#import-workflows-and-credentials){:target="_blank" .external} for importing workflows or credentials.
<!--
## Sharing workflows

View File

@ -24,4 +24,4 @@ You can test your knowledge by taking a **quiz**, which consists of questions ab
## What's next?
* Create new workflows for your work or personal use and share them with us. Don't have any ideas? Find inspiration on our [blog](https://n8n.io/blog/){:target="_blank" .external}, [YouTube channel](https://www.youtube.com/c/n8n-io){:target="_blank" .external}, [community forum](https://community.n8n.io){:target="_blank" .external}, and [Discord server](https://discord.gg/vWwMVThRta){:target="_blank" .external}.
* Take the n8n [Course Level 2](/courses/level-two/).
* Take the n8n [Course Level 2](/courses/level-two/index.md).

View File

@ -39,7 +39,7 @@ You will build two workflows:
## What do I need to get started?
1. **n8n set up**: You can use the [self-hosted version](/hosting/installation/npm/){:target="_blank" .external}, or [n8n Cloud](/manage-cloud/overview/){:target="_blank" .external}.
1. **n8n set up**: You can use the [self-hosted version](/hosting/installation/npm.md){:target="_blank" .external}, or [n8n Cloud](/manage-cloud/overview.md){:target="_blank" .external}.
2. **A user ID**: [Sign up here](https://n8n-community.typeform.com/to/PDEMrevI){:target="_blank" .external} to get your unique ID and other credentials you will need in the course.
3. Basic knowledge of JavaScript and [APIs](https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/){:target="_blank" .external} would be helpful, but isn't necessary.
4. An [account on the n8n community forum](https://community.n8n.io/){:target="_blank" .external} if you wish to receive a profile badge and avatar upon successful completion
@ -52,7 +52,7 @@ Completing the course should take around **two hours**. You don't have to comple
There are two milestones in this course that test your knowledge of what you have learned in the lessons:
- [x] Building the [main workflow](/courses/level-one/chapter-5/chapter-5.1/){:target="_blank" .external}
- [x] Building the [main workflow](/courses/level-one/chapter-5/chapter-5.1.md){:target="_blank" .external}
- [x] Passing the [quiz](https://n8n-community.typeform.com/to/JMoBXeGA){:target="_blank" .external-link} at the end of the course
/// note | Check your progress

View File

@ -5,7 +5,7 @@ contentType: tutorial
# Understanding the data structure
In this chapter, you will learn about the data structure of n8n and how to use the [Code node](/integrations/builtin/core-nodes/n8n-nodes-base.code/){:target="_blank"} to transform data and simulate node outputs.
In this chapter, you will learn about the data structure of n8n and how to use the [Code node](/integrations/builtin/core-nodes/n8n-nodes-base.code/index.md){:target="_blank"} to transform data and simulate node outputs.
## Data structure of n8n
@ -64,7 +64,7 @@ An n8n node performs its action on each item of incoming data.
## Creating data sets with the Code node
Now that you are familiar with the n8n data structure, you can use it to create your own data sets or simulate node outputs. To do this, use the [Code node](/integrations/builtin/core-nodes/n8n-nodes-base.code/){:target="_blank"} to write JavaScript code defining your array of objects with the following structure:
Now that you are familiar with the n8n data structure, you can use it to create your own data sets or simulate node outputs. To do this, use the [Code node](/integrations/builtin/core-nodes/n8n-nodes-base.code/index.md){:target="_blank"} to write JavaScript code defining your array of objects with the following structure:
```javascript
return [
@ -138,7 +138,7 @@ In a Code node, create an array of objects named `myContacts` that contains the
## Referencing node data with the Code node
Just like you can use [expressions](/code/expressions/) to reference data from other nodes, you can also use some [methods and variables](/code/builtin/overview/) in the **Code node**.
Just like you can use [expressions](/code/expressions.md) to reference data from other nodes, you can also use some [methods and variables](/code/builtin/overview.md) in the **Code node**.
Please make sure you read these pages before continuing to the next exercise.
@ -162,7 +162,7 @@ Let's build on the previous exercise, in which you used the Code node to create
## Transforming data
The incoming data from some nodes may have a different data structure than the one used in n8n. In this case, you need to [transform the data](/data/transforming-data/){:target="_blank" .external}, so that each item can be processed individually.
The incoming data from some nodes may have a different data structure than the one used in n8n. In this case, you need to [transform the data](/data/transforming-data.md){:target="_blank" .external}, so that each item can be processed individually.
The two most common operations for data transformation are:
@ -171,9 +171,9 @@ The two most common operations for data transformation are:
There are several ways to transform data for the purposes mentioned above:
- Use n8n's [data transformation nodes](/data/#data-transformation-nodes). Use these nodes to modify the structure of incoming data that contain lists (arrays) without needing to use JavaScript code in the **Code node**:
- Use the [**Split Out node**](/integrations/builtin/core-nodes/n8n-nodes-base.splitout/) to separate a single data item containing a list into multiple items.
- Use the [**Aggregate node**](/integrations/builtin/core-nodes/n8n-nodes-base.aggregate/) to take separate items, or portions of them, and group them together into individual items.
- Use n8n's [data transformation nodes](/data/index.md#data-transformation-nodes). Use these nodes to modify the structure of incoming data that contain lists (arrays) without needing to use JavaScript code in the **Code node**:
- Use the [**Split Out node**](/integrations/builtin/core-nodes/n8n-nodes-base.splitout.md) to separate a single data item containing a list into multiple items.
- Use the [**Aggregate node**](/integrations/builtin/core-nodes/n8n-nodes-base.aggregate.md) to take separate items, or portions of them, and group them together into individual items.
- Use the **Code node** to write JavaScript functions to modify the data structure of incoming data using the **Run Once for All Items** mode:
- To create multiple items from a single item, you can use JavaScript code like this. This example assumes that the item has a key named `data` set to an array of items in the form of: `[{ "data": [{<item_1>}, {<item_2>}, ...] }]`:
```javascript

View File

@ -5,7 +5,7 @@ contentType: tutorial
# Processing different data types
In this chapter, you will learn how to process different types of data using [n8n core nodes](/workflows/components/nodes/).
In this chapter, you will learn how to process different types of data using [n8n core nodes](/workflows/components/nodes.md).
## HTML and XML data
@ -15,7 +15,7 @@ You're most likely familiar with HTML and XML.
/// note | HTML vs. XML
HTML is a markup language used to describe the structure and semantics of a web page. XML looks similar to HTML, but the tag names are different, as they describe the kind of data they hold.
///
If you need to process HTML or XML data in your n8n workflows, use the [**HTML node**](/integrations/builtin/core-nodes/n8n-nodes-base.html/) or the [**XML node**](/integrations/builtin/core-nodes/n8n-nodes-base.xml/).
If you need to process HTML or XML data in your n8n workflows, use the [**HTML node**](/integrations/builtin/core-nodes/n8n-nodes-base.html.md) or the [**XML node**](/integrations/builtin/core-nodes/n8n-nodes-base.xml.md).
Use the **HTML node** to extract HTML content of a webpage by referencing CSS selectors. This is useful if you want to collect structured information from a website (web-scraping).
@ -57,7 +57,7 @@ Use the **XML node** to convert XML to JSON and JSON to XML. This operation is u
### XML Exercise
In the [final exercise of Chapter 1](/courses/level-two/chapter-1/#exercise_2), you used an **HTTP Request node** to make a request to the Quotable API. In this exercise, we'll return to that same API but we'll convert the output to XML:
In the [final exercise of Chapter 1](/courses/level-two/chapter-1.md#exercise_2), you used an **HTTP Request node** to make a request to the Quotable API. In this exercise, we'll return to that same API but we'll convert the output to XML:
1. Add an **HTTP Request node** that makes the same request to the Quotable API at `https://api.quotable.io/quotes`.
2. Use the XML node to convert the JSON output to XML.
@ -91,12 +91,12 @@ Date and time data types include `DATE`, `TIME`, `DATETIME`, `TIMESTAMP`, and `Y
<!-- vale on -->
There are a few ways you can work with dates and times:
- Use the [**Date & Time node**](/integrations/builtin/core-nodes/n8n-nodes-base.datetime/) to convert date and time data to different formats and calculate dates.
- Use [**Schedule Trigger node**](/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/) to schedule workflows to run at a specific time, interval, or duration.
- Use the [**Date & Time node**](/integrations/builtin/core-nodes/n8n-nodes-base.datetime.md) to convert date and time data to different formats and calculate dates.
- Use [**Schedule Trigger node**](/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/index.md) to schedule workflows to run at a specific time, interval, or duration.
Sometimes, you might need to pause the workflow execution. This might be necessary if you know that a service doesn't process the data instantly or it's slow to return all the results. In these cases, you don't want n8n to pass incomplete data to the next node.
If you run into situations like this, use the [**Wait node**](/integrations/builtin/core-nodes/n8n-nodes-base.wait/) after the node that you want to delay. The **Wait node** pauses the workflow execution and will resume execution:
If you run into situations like this, use the [**Wait node**](/integrations/builtin/core-nodes/n8n-nodes-base.wait.md) after the node that you want to delay. The **Wait node** pauses the workflow execution and will resume execution:
- At a specific time.
- After a specified time interval.
@ -106,7 +106,7 @@ If you run into situations like this, use the [**Wait node**](/integrations/buil
### Date Exercise
Build a workflow that adds five days to an input date from the Customer Datastore node that you used before. Then, if the calculated date occurred after 1959, the workflow waits 1 minute before [setting](/integrations/builtin/core-nodes/n8n-nodes-base.set/) the calculated date as a value. The workflow should be triggered every 30 minutes.
Build a workflow that adds five days to an input date from the Customer Datastore node that you used before. Then, if the calculated date occurred after 1959, the workflow waits 1 minute before [setting](/integrations/builtin/core-nodes/n8n-nodes-base.set.md) the calculated date as a value. The workflow should be triggered every 30 minutes.
To begin:
@ -116,7 +116,7 @@ To begin:
3. Add the **If node** to check if that new rounded date is after `1960-01-01 00:00:00`.
4. Add the **Wait node** to the True output of that node and set it to wait for one minute.
5. Add the **Edit Fields (Set) node** to set a new field called outputValue to a String containing new-date. Include all input fields.
6. Add the **Schedule Trigger node** at the beginning of the workflow to trigger it every 30 minutes. (You can keep the [Manual Trigger node](/integrations/builtin/core-nodes/n8n-nodes-base.manualworkflowtrigger/) for testing!)
6. Add the **Schedule Trigger node** at the beginning of the workflow to trigger it every 30 minutes. (You can keep the [Manual Trigger node](/integrations/builtin/core-nodes/n8n-nodes-base.manualworkflowtrigger.md) for testing!)
??? note "Show me the solution"
@ -149,7 +149,7 @@ To begin:
<figure><img src="/_images/courses/level-two/chapter-two/exercise_datetime.png" alt="Workflow for transforming dates" style="width:100%"><figcaption align = "center"><i>Workflow for transforming dates</i></figcaption></figure>
To check the configuration of each node, you can copy the JSON code of this workflow and either paste it into the Editor UI or save it as a file and import from file into a new workflow. See [Export and import workflows](/workflows/export-import/) for more information.
To check the configuration of each node, you can copy the JSON code of this workflow and either paste it into the Editor UI or save it as a file and import from file into a new workflow. See [Export and import workflows](/workflows/export-import.md) for more information.
```json
{
@ -370,10 +370,10 @@ Up to now, you have mainly worked with text data. But what if you want to proces
In n8n, you can process binary data with the following nodes:
- [HTTP Request](/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to request and send files from/to web resources and APIs.
- [Read/Write Files from Disk](/integrations/builtin/core-nodes/n8n-nodes-base.readwritefile/) to read and write files from/to the machine where n8n is running.
- [Convert to File](/integrations/builtin/core-nodes/n8n-nodes-base.converttofile/) to take input data and output it as a file.
- [Extract From File](/integrations/builtin/core-nodes/n8n-nodes-base.extractfromfile/) to get data from a binary format and convert it to JSON.
- [HTTP Request](/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/index.md) to request and send files from/to web resources and APIs.
- [Read/Write Files from Disk](/integrations/builtin/core-nodes/n8n-nodes-base.readwritefile.md) to read and write files from/to the machine where n8n is running.
- [Convert to File](/integrations/builtin/core-nodes/n8n-nodes-base.converttofile.md) to take input data and output it as a file.
- [Extract From File](/integrations/builtin/core-nodes/n8n-nodes-base.extractfromfile.md) to get data from a binary format and convert it to JSON.
/// note | Reading and writing files is only available on self-hosted n8n
Reading and writing files to disk isn't available on n8n Cloud. You'll read and write to the machine where you installed n8n. If you run n8n in Docker, your command runs in the n8n container and not the Docker host. The Read/Write Files From Disk node looks for files relative to the n8n install path. n8n recommends using absolute file paths to prevent any errors.

View File

@ -26,14 +26,14 @@ In a two-way sync, data is synchronized in both directions (between both systems
///
In n8n, you can merge data from two different nodes using the [Merge node](/integrations/builtin/core-nodes/n8n-nodes-base.merge/){:target="_blank"}, which provides several merging options:
In n8n, you can merge data from two different nodes using the [Merge node](/integrations/builtin/core-nodes/n8n-nodes-base.merge.md){:target="_blank"}, which provides several merging options:
- [Append](/integrations/builtin/core-nodes/n8n-nodes-base.merge/#append){:target="_blank"}
- [Combine](/integrations/builtin/core-nodes/n8n-nodes-base.merge/#combine){:target="_blank"}
- [Merge by Fields](/integrations/builtin/core-nodes/n8n-nodes-base.merge/#merge-by-fields){:target="_blank"}: requires input fields to match on
- [Merge by Position](/integrations/builtin/core-nodes/n8n-nodes-base.merge/#merge-by-position){:target="_blank"}
- [Multiplex](/integrations/builtin/core-nodes/n8n-nodes-base.merge/#multiplex){:target="_blank"}
- [Choose Branch](/integrations/builtin/core-nodes/n8n-nodes-base.merge/#choose-branch){:target="_blank"}
- [Append](/integrations/builtin/core-nodes/n8n-nodes-base.merge.md#append){:target="_blank"}
- [Combine](/integrations/builtin/core-nodes/n8n-nodes-base.merge.md#combine){:target="_blank"}
- [Merge by Fields](/integrations/builtin/core-nodes/n8n-nodes-base.merge.md#combine-by-matching-fields){:target="_blank"}: requires input fields to match on
- [Merge by Position](/integrations/builtin/core-nodes/n8n-nodes-base.merge.md#combine-by-position){:target="_blank"}
- [Combine all possible combinations](/integrations/builtin/core-nodes/n8n-nodes-base.merge.md#combine-by-all-possible-combinations){:target="_blank"}
- [Choose Branch](/integrations/builtin/core-nodes/n8n-nodes-base.merge.md#choose-branch){:target="_blank"}
Notice that Combine > Merge by Fields requires you enter input fields to match on. These fields should contain identical values between the data sources so n8n can properly match data together. In the **Merge node**, they're called `Input 1 Field` and `Input 2 Field`.
@ -188,15 +188,15 @@ In some cases, you might need to perform the same operation on each element of a
n8n generally handles this repetitive processing automatically, as the nodes run once for each item, so you don't need to build loops into your workflows.
However, there are some [exceptions of nodes and operations](/flow-logic/looping/#node-exceptions){:target="_blank"} that will require you to build a loop into your workflow.
However, there are some [exceptions of nodes and operations](/flow-logic/looping.md#node-exceptions){:target="_blank"} that will require you to build a loop into your workflow.
To [create a loop in an n8n workflow](/flow-logic/looping/#using-loops-in-n8n){:target="_blank"}, you need to connect the output of one node to the input of a previous node, and add an **If node** to check when to stop the loop.
To [create a loop in an n8n workflow](/flow-logic/looping.md#using-loops-in-n8n){:target="_blank"}, you need to connect the output of one node to the input of a previous node, and add an **If node** to check when to stop the loop.
## Splitting data in batches
If you need to process large volumes of incoming data, execute the **Code node** multiple times, or avoid API rate limits, it's best to split the data into batches (groups) and process these batches.
For these processes, use the [**Loop Over Items node**](/integrations/builtin/core-nodes/n8n-nodes-base.splitinbatches/){:target="_blank"}. This node splits input data into a specified batch size and, with each iteration, returns a predefined amount of data.
For these processes, use the [**Loop Over Items node**](/integrations/builtin/core-nodes/n8n-nodes-base.splitinbatches.md){:target="_blank"}. This node splits input data into a specified batch size and, with each iteration, returns a predefined amount of data.
/// warning | Execution of Loop Over Items node
The **Loop Over Items node** stops executing after all the incoming items get divided into batches and passed on to the next node in the workflow, so it's not necessary to add an **If node** to stop the loop.
@ -209,7 +209,7 @@ Build a workflow that reads the RSS feed from Medium and dev.to. The workflow sh
1. A **Code node** that returns the URLs of the RSS feeds of Medium (`https://medium.com/feed/n8n-io`) and dev.to (`https://dev.to/feed/n8n`).
2. A **Loop Over Items node** with `Batch Size: 1`, that takes in the inputs from the **Code node** and **RSS Read node** and iterates over the items.
3. An **RSS Read node** that gets the URL of the Medium RSS feed, passed as an expression: `{{ $json.url }}`.
- The **RSS Read node** is one of the [exception nodes](/flow-logic/looping/#node-exceptions){:target="_blank"} which processes only the first item it receives, so the **Loop Over Items node** is necessary for iterating over multiple items.
- The **RSS Read node** is one of the [exception nodes](/flow-logic/looping.md#node-exceptions){:target="_blank"} which processes only the first item it receives, so the **Loop Over Items node** is necessary for iterating over multiple items.
??? note "Show me the solution"

View File

@ -16,7 +16,7 @@ n8n tracks executions of your workflows.
When one of your workflows fails, you can check the Executions log to see what went wrong. The Executions log shows you a list of the latest execution time, status, mode, and running time of your saved workflows.
Open the Executions log by selecting [**Executions**](/editor-ui/#executions) in the left-side panel.
Open the Executions log by selecting [**Executions**](/workflows/executions/index.md#execution-modes) in the left-side panel.
To investigate a specific failed execution from the list, select the name or the **View** button that appears when you hover over the row of the respective execution.
@ -31,11 +31,11 @@ To toggle between viewing the execution and the editor, select the **Editor | Ex
## Catching erroring workflows
To catch failed workflows, create a separate [**Error Workflow**](/flow-logic/error-handling/error-workflows/) with the [**Error Trigger node**](/integrations/builtin/core-nodes/n8n-nodes-base.errortrigger/). This workflow will only execute if the main workflow execution fails.
To catch failed workflows, create a separate [**Error Workflow**](/flow-logic/error-handling.md) with the [**Error Trigger node**](/integrations/builtin/core-nodes/n8n-nodes-base.errortrigger.md). This workflow will only execute if the main workflow execution fails.
Use additional nodes in your **Error Workflow** that make sense, like sending notifications about the failed workflow and its errors using email or Slack.
To receive error messages for a failed workflow, set the **Error Workflow** in the [Workflow Settings](/workflows/settings/) to an Error Workflow that uses an **Error Trigger node**.
To receive error messages for a failed workflow, set the **Error Workflow** in the [Workflow Settings](/workflows/settings.md) to an Error Workflow that uses an **Error Trigger node**.
The only difference between a regular workflow and an Error Workflow is that the latter contains an **Error Trigger node**. Make sure to create this node before you set this as another workflow's designated Error Workflow.
@ -52,8 +52,8 @@ In the previous chapters, you've built several small workflows. Now, pick one of
1. Create a new Error Workflow.
2. Add the **Error Trigger node**.
3. Connect a node for the communication platform of your choice to the Error Trigger node, like [Slack](/integrations/builtin/app-nodes/n8n-nodes-base.slack/), [Discord](/integrations/builtin/app-nodes/n8n-nodes-base.discord/), [Telegram](/integrations/builtin/app-nodes/n8n-nodes-base.telegram/), or even [Gmail](/integrations/builtin/app-nodes/n8n-nodes-base.gmail/) or a more generic [Send Email](/integrations/builtin/core-nodes/n8n-nodes-base.sendemail/).
4. In the workflow you want to monitor, open the [Workflow Settings](/workflows/settings/) and select the new Error Workflow you just created. Note that this workflow needs to run automatically to trigger the error workflow.
3. Connect a node for the communication platform of your choice to the Error Trigger node, like [Slack](/integrations/builtin/app-nodes/n8n-nodes-base.slack.md), [Discord](/integrations/builtin/app-nodes/n8n-nodes-base.discord/index.md), [Telegram](/integrations/builtin/app-nodes/n8n-nodes-base.telegram/index.md), or even [Gmail](/integrations/builtin/app-nodes/n8n-nodes-base.gmail/index.md) or a more generic [Send Email](/integrations/builtin/core-nodes/n8n-nodes-base.sendemail.md).
4. In the workflow you want to monitor, open the [Workflow Settings](/workflows/settings.md) and select the new Error Workflow you just created. Note that this workflow needs to run automatically to trigger the error workflow.
??? note "Show me the solution"
@ -118,7 +118,7 @@ In the previous chapters, you've built several small workflows. Now, pick one of
## Throwing exceptions in workflows
Another way of troubleshooting workflows is to include a [**Stop and Error node**](/integrations/builtin/core-nodes/n8n-nodes-base.stopanderror/) in your workflow. This node throws an error. You can specify the error type:
Another way of troubleshooting workflows is to include a [**Stop and Error node**](/integrations/builtin/core-nodes/n8n-nodes-base.stopanderror.md) in your workflow. This node throws an error. You can specify the error type:
- **Error Message**: returns a custom message about the error
- **Error Object**: returns the type of error

View File

@ -5,7 +5,7 @@ contentType: tutorial
# Automating a business workflow
Remember [our friend Nathan](/courses/level-one/chapter-3)?
Remember [our friend Nathan](/courses/level-one/chapter-3.md)?
**Nathan 🙋:** Hello, it's me again. My manager was so impressed with my first workflow automation solution that she entrusted me with more responsibility.<br/>
**You 👩‍🔧:** More work and responsibility. Congratulations, I guess. What do you need to do now?<br/>
@ -22,7 +22,7 @@ Now that we know what Nathan wants to automate, let's list the steps he needs to
3. Write binary files.
4. Send notifications using email and Discord.
n8n provides [core nodes](/integrations/builtin/node-types/#core-nodes) for all these steps. This use case is somewhat complex. We should build it from three separate workflows:
n8n provides [core nodes](/integrations/builtin/node-types.md#core-nodes) for all these steps. This use case is somewhat complex. We should build it from three separate workflows:
1. A workflow that merges the company data with external information.
2. A workflow that generates the reports.
@ -32,8 +32,8 @@ n8n provides [core nodes](/integrations/builtin/node-types/#core-nodes) for all
To build the workflows, you will need the following:
* An [Airtable](https://airtable.com/){:target="_blank" .external-link} account and [credentials](/integrations/builtin/credentials/airtable/).
* A [Google](https://www.google.com/account/about/){:target="_blank" .external-link} account and [credentials](/integrations/builtin/credentials/google/) to access Gmail.
* An [Airtable](https://airtable.com/){:target="_blank" .external-link} account and [credentials](/integrations/builtin/credentials/airtable.md).
* A [Google](https://www.google.com/account/about/){:target="_blank" .external-link} account and [credentials](/integrations/builtin/credentials/google/index.md) to access Gmail.
* A [Discord](https://discord.com/){:target="_blank" .external-link} account and webhook URL (you receive this using email when you sign up for this course).
Next, you will build these three workflows with step-by-step instructions.

View File

@ -13,9 +13,9 @@ To accomplish this task, you first need to make a copy of this table in your Air
Next, build a small workflow that merges data from Airtable and a REST Countries API:
1. Use the [**Airtable node**](/integrations/builtin/app-nodes/n8n-nodes-base.airtable/) to list the data in the Airtable table named `customers`.
2. Use the [**HTTP Request node**](/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to get data from the REST Countries API: `https://restcountries.com/v3.1/all`. This will return data about world countries, split out into separate items.
3. Use the [**Merge node**](/integrations/builtin/core-nodes/n8n-nodes-base.merge/) to merge data from Airtable and the Countries API by country name, represented as `customerCountry` in Airtable and `name.common` in the Countries API, respectively.
1. Use the [**Airtable node**](/integrations/builtin/app-nodes/n8n-nodes-base.airtable/index.md) to list the data in the Airtable table named `customers`.
2. Use the [**HTTP Request node**](/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/index.md) to get data from the REST Countries API: `https://restcountries.com/v3.1/all`. This will return data about world countries, split out into separate items.
3. Use the [**Merge node**](/integrations/builtin/core-nodes/n8n-nodes-base.merge.md) to merge data from Airtable and the Countries API by country name, represented as `customerCountry` in Airtable and `name.common` in the Countries API, respectively.
4. Use another Airtable node to update the fields `region` and `subregion` in Airtable with the data from the Countries API.
The workflow should look like this:

View File

@ -17,7 +17,7 @@ The first part of the workflow consists of five nodes:
<figure><img src="/_images/courses/level-two/chapter-five/workflow2_1.png" alt="Workflow 1: Getting data from different sources" style="width:100%"><figcaption align = "center"><i>Workflow 1: Getting data from different sources</i></figcaption></figure>
1. Use the [**HTTP Request node**](/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to get data from the API endpoint that stores company data. Configure the following node parameters:
1. Use the [**HTTP Request node**](/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/index.md) to get data from the API endpoint that stores company data. Configure the following node parameters:
- **Method**: Get
- **URL**: The **Dataset URL** you received in the email when you signed up for this course.
@ -29,9 +29,9 @@ The first part of the workflow consists of five nodes:
- **Name**: `unique_id`
- **Value**: The unique ID you received in the email when you signed up for this course.
2. Use the [**Airtable node**](/integrations/builtin/app-nodes/n8n-nodes-base.airtable/) to list data from the `customers` table (where you updated the fields `region` and `subregion`).
3. Use the [**Merge node**](/integrations/builtin/core-nodes/n8n-nodes-base.merge/) to merge data from the Airtable and HTTP Request node, based on matching the input fields for `customerID`.
4. Use the [**Sort node**](/integrations/builtin/core-nodes/n8n-nodes-base.sort/) to sort data by `orderPrice` in descending order.
2. Use the [**Airtable node**](/integrations/builtin/app-nodes/n8n-nodes-base.airtable/index.md) to list data from the `customers` table (where you updated the fields `region` and `subregion`).
3. Use the [**Merge node**](/integrations/builtin/core-nodes/n8n-nodes-base.merge.md) to merge data from the Airtable and HTTP Request node, based on matching the input fields for `customerID`.
4. Use the [**Sort node**](/integrations/builtin/core-nodes/n8n-nodes-base.sort.md) to sort data by `orderPrice` in descending order.
/// question | Quiz questions
* What's the name of the employee assigned to customer 1?
@ -45,10 +45,10 @@ The second part of the workflow consists of four nodes:
<figure><img src="/_images/courses/level-two/chapter-five/workflow2_2.png" alt="Workflow 2: Generating file for regional sales" style="width:100%"><figcaption align = "center"><i>Workflow 2: Generating file for regional sales</i></figcaption></figure>
1. Use the [**If node**](/integrations/builtin/core-nodes/n8n-nodes-base.if/) to filter to only display orders from the region `Americas`.
2. Use the [**Convert to File**](/integrations/builtin/core-nodes/n8n-nodes-base.converttofile/) to transform the incoming data from JSON to binary format. Convert each item to a separate file. (Bonus points if you can figure out how to name each report based on the orderID!)
3. Use the [**Gmail node**](/integrations/builtin/app-nodes/n8n-nodes-base.gmail/) (or another email node) to send the files using email to an address you have access to. Note that you need to add an attachment with the data property.
4. Use the [**Discord node**](/integrations/builtin/app-nodes/n8n-nodes-base.discord/) to send a message in the n8n Discord channel `#course-level-two`. In the node, configure the following parameters:
1. Use the [**If node**](/integrations/builtin/core-nodes/n8n-nodes-base.if.md) to filter to only display orders from the region `Americas`.
2. Use the [**Convert to File**](/integrations/builtin/core-nodes/n8n-nodes-base.converttofile.md) to transform the incoming data from JSON to binary format. Convert each item to a separate file. (Bonus points if you can figure out how to name each report based on the orderID!)
3. Use the [**Gmail node**](/integrations/builtin/app-nodes/n8n-nodes-base.gmail/index.md) (or another email node) to send the files using email to an address you have access to. Note that you need to add an attachment with the data property.
4. Use the [**Discord node**](/integrations/builtin/app-nodes/n8n-nodes-base.discord/index.md) to send a message in the n8n Discord channel `#course-level-two`. In the node, configure the following parameters:
* **Webhook URL**: The Discord URL you received in the email when you signed up for this course.
* **Text**: "I sent the file using email with the label ID `{label ID}`. My ID: " followed by the unique ID emailed to you when you registered for this course. <br/> Note that you need to replace the text in curly braces `{}` with expressions that reference the data from the nodes.
@ -64,12 +64,12 @@ The third part of the workflow consists of five nodes:
<figure><img src="/_images/courses/level-two/chapter-five/workflow2_3.png" alt="Workflow 3: Generating files for total sales" style="width:100%"><figcaption align = "center"><i>Workflow 3: Generating files for total sales</i></figcaption></figure>
1. Use the [**Loop Over Items node**](/integrations/builtin/core-nodes/n8n-nodes-base.splitinbatches/) to split data from the Item Lists node into batches of 5.
2. Use the [**Set node**](/integrations/builtin/core-nodes/n8n-nodes-base.set/) to set four values, referenced with expressions from the previous node: `customerEmail`, `customerRegion`, `customerSince`, and `orderPrice`.
3. Use the [**Date & Time node**](/integrations/builtin/core-nodes/n8n-nodes-base.datetime/) to change the date format of the field `customerSince` to the format MM/DD/YYYY.
1. Use the [**Loop Over Items node**](/integrations/builtin/core-nodes/n8n-nodes-base.splitinbatches.md) to split data from the Item Lists node into batches of 5.
2. Use the [**Set node**](/integrations/builtin/core-nodes/n8n-nodes-base.set.md) to set four values, referenced with expressions from the previous node: `customerEmail`, `customerRegion`, `customerSince`, and `orderPrice`.
3. Use the [**Date & Time node**](/integrations/builtin/core-nodes/n8n-nodes-base.datetime.md) to change the date format of the field `customerSince` to the format MM/DD/YYYY.
- Set the **Include Input Fields** option to keep all the data together.
4. Use the [**Convert to File node**](/integrations/builtin/core-nodes/n8n-nodes-base.converttofile/) to create a CSV spreadsheet with the file name set as the expression: `{{$runIndex > 0 ? 'file_low_orders':'file_high_orders'}}`.
5. Use the [**Discord node**](/integrations/builtin/app-nodes/n8n-nodes-base.discord/) to send a message in the n8n Discord channel `#course-level-two`. In the node, configure the following parameters:
4. Use the [**Convert to File node**](/integrations/builtin/core-nodes/n8n-nodes-base.converttofile.md) to create a CSV spreadsheet with the file name set as the expression: `{{$runIndex > 0 ? 'file_low_orders':'file_high_orders'}}`.
5. Use the [**Discord node**](/integrations/builtin/app-nodes/n8n-nodes-base.discord/index.md) to send a message in the n8n Discord channel `#course-level-two`. In the node, configure the following parameters:
* **Webhook URL**: The Discord URL you received in the email when you signed up for this course.
* **Text**: "I created the spreadsheet `{file name}`. My ID:" followed by the unique ID emailed to you when you registered for this course. <br/> Note that you need to replace `{file name}` with an expression that references data from the previous **Convert to File node**.<br/>

View File

@ -22,4 +22,4 @@ You can test your knowledge by taking a **quiz**, which consists of questions ab
## What's next?
- Create new workflows for your work or personal use and share them with us. Don't have any ideas? Find inspiration on the [workflows page](https://n8n.io/workflows){:target="_blank" .external-link} and on our [blog](https://n8n.io/blog/){:target="_blank" .external-link}.
- Dive deeper into n8n's features by reading the [docs](/).
- Dive deeper into n8n's features by reading the [docs](/index.md).

Some files were not shown because too many files have changed in this diff Show More