N8N中文教程
使用 n8n/Getting_started/Text_courses/Level_two

处理工作流中的错误#

有时你构建了一个理想的工作流,但在执行时却失败了。工作流执行失败的原因多种多样,可能是节点配置错误等简单问题,也可能是第三方服务故障,甚至是更复杂难解的错误。

但不要惊慌。在本课中,你将学习如何排查这些错误,以便尽快让工作流恢复正常运行。

检查失败的工作流#

n8n 会记录你工作流的执行情况。

当你的某个工作流执行失败时,你可以查看 执行日志(Executions log) 来了解问题所在。执行日志会列出已保存工作流的最近执行时间、状态、模式以及运行时长。

通过左侧面板中的 执行(Executions) 打开执行日志。

要调查列表中某次具体的失败执行,可以点击该执行行对应的名称,或在其上悬停后出现的 查看(View) 按钮。

执行日志执行日志

这将以只读模式打开工作流,你可以看到每个节点的执行情况。这种视图有助于你识别工作流在哪个环节出现了问题。

若要在执行视图和编辑器之间切换,请点击页面顶部的 编辑器 | 执行(Editor | Executions) 按钮。

工作流执行视图工作流执行视图

捕获出错的工作流#

为了捕获失败的工作流,你可以创建一个独立的 错误工作流(Error Workflow),并使用 错误触发节点(Error Trigger node)。这个工作流仅在主工作流执行失败时才会被触发。

你可以在 错误工作流 中添加其他有意义的节点,例如通过电子邮件或 Slack 发送关于失败工作流及其错误的通知。

若希望接收工作流失败时的错误信息,请在 工作流设置(Workflow Settings) 中指定一个包含 错误触发节点 的工作流作为错误处理工作流。

普通工作流与错误工作流之间的唯一区别在于后者包含一个 错误触发节点(Error Trigger node)。请确保在将某个工作流设为其他工作流的错误处理工作流之前,先创建此节点。

错误工作流注意事项:

  • 如果一个工作流使用了错误触发节点,则无需手动激活该工作流。
  • 如果一个工作流包含错误触发节点,默认情况下它会将自身作为其错误处理工作流。
  • 无法在手动运行工作流时测试错误工作流。错误触发器仅在自动执行模式下发生错误时才会运行。
  • 可以为多个工作流设置同一个错误工作流。

练习#

在前面的章节中,你已经构建了几个小型工作流。现在,请选择其中一个你希望监控的工作流,并为其创建一个错误处理工作流(Error Workflow):

  1. 创建一个新的错误处理工作流。
  2. 添加 Error Trigger 节点
  3. 将你选择的通信平台节点连接到 Error Trigger 节点,例如 Slack、Discord、Telegram,甚至 Gmail 或更通用的 Send Email。
  4. 打开你想监控的工作流中的 工作流设置(Workflow Settings),然后选择你刚刚创建的错误处理工作流。请注意,该工作流必须能够自动运行,才能触发错误处理流程。

显示解决方案 本练习的工作流如下所示: 错误处理工作流 要查看节点的具体配置,你可以复制下面的 JSON 工作流代码,并粘贴到你的编辑器界面(Editor UI)中:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48

| ``` { "nodes":[ { "parameters":{}, "name":"Error Trigger", "type":"n8n-nodes-base.errorTrigger", "typeVersion":1, "position":[ 720, -380 ] }, { "parameters":{ "channel":"channelname", "text":"=This workflow {{$node["Error Trigger"].json["workflow"]["name"]}}failed.\nHave a look at it here: {{$node["Error Trigger"].json["execution"]["url"]}}", "attachments":[], "otherOptions":{} }, "name":"Slack", "type":"n8n-nodes-base.slack", "position":[ 900, -380 ], "typeVersion":1, "credentials":{ "slackApi":{ "id":"17", "name":"slack_credentials" } } } ], "connections":{ "Error Trigger":{ "main":[ [ { "node":"Slack", "type":"main", "index":0 } ] ] } } }


---|---
## 在工作流中抛出异常#
另一种排查工作流问题的方法是在工作流中加入 **Stop and Error 节点**。该节点会主动抛出一个错误,你可以指定错误类型:
  * **错误消息(Error Message)**:返回关于该错误的自定义信息
  * **错误对象(Error Object)**:返回错误的类型

你只能将 **Stop and Error 节点** 用作工作流中的最后一个节点。
何时抛出错误
使用 **Stop and Error 节点** 抛出异常,有助于验证来自某个节点的数据(或对数据的假设),并返回自定义的错误消息。
当你在处理来自第三方服务的数据时,可能会遇到以下问题:
  * JSON 输出格式错误
  * 数据类型不正确(例如,数值型数据包含非数值内容)
  * 缺失值
  * 远程服务器返回的错误

尽管这类无效数据可能不会立即导致工作流失败,但后续可能会引发问题,而此时追踪错误源头会变得困难。因此,最好在发现潜在问题时立即抛出错误。
[带有错误消息的 Stop and Error 节点](https://docs.n8n.io/_images/courses/level-two/chapter-four/exercise_errors_stopanderror.png)_带有错误消息的 Stop and Error 节点_