N8N中文教程
集成节点/Creating_nodes/Build_your_node/Reference

社区节点的用户体验指南#

您的节点界面必须符合以下指南才能成为已验证的社区节点候选。

凭据配置#

API密钥和敏感凭据必须始终使用密码字段。

OAuth认证#

如果支持OAuth认证,请务必包含OAuth凭据配置。

节点结构#

应包含的操作#

请为每种资源类型尽量包含CRUD操作。 建议在每个节点的资源操作中包含常见操作。n8n使用特定的CRUD操作来保持体验一致性,允许用户对资源执行基础操作。推荐包含以下操作:

  • 创建
  • 创建或更新(增改)
  • 删除
  • 获取单项
  • 获取多项:当支持筛选或搜索功能时也应使用此操作
  • 更新

注意事项:

  1. 这些操作可应用于资源本身或资源内的实体(例如Google表格中的行数据)。当对资源内的实体进行操作时,必须在操作名称中明确实体名称
  2. 命名方式可根据节点和资源类型进行调整。具体请参考后续指南。

资源定位器#

  • 尽可能使用资源定位器组件,这将为用户提供更优的交互体验。当需要选择单个项目时,资源定位器组件尤为实用。
  • 资源定位器组件的默认选项应设置为"从列表选择"(如果该选项可用)。

与其他节点保持一致性#

  • 保持用户体验一致性:n8n致力于维持统一的用户体验。这意味着需要遵循现有的UX模式,特别是最新新建或重构节点中使用的模式。
  • 参考相似节点:例如,如果您正在开发数据库节点,建议参考Postgres节点的实现方式。

排序选项#

  • 通过为用户提供排序选项,可以增强特定的"获取多个"操作。
  • 在专用集合(位于"选项"集合下方)中添加排序功能。请参考 Airtable Record:Search 的示例实现。

节点功能#

删除操作输出#

删除项目(如记录或行)时,返回包含单个对象的数组:{"deleted": true}。这是向用户确认删除操作已成功执行,该条目将触发后续节点。

简化输出字段#

常规节点:'Simplify' 参数#

当接口返回数据包含超过10个字段时,应添加"Simplify"布尔参数以返回最多包含10个字段的简化版本输出。

  • n8n 的主要问题之一可能是数据量过大,Simplify 参数通过减小数据量来缓解此问题。
  • 选择最有用的字段在简化节点中输出,并按使用频率降序排列。
  • 在简化模式下,通常建议将嵌套字段展平
  • 显示名称:Simplify
  • 描述:是否返回简化版本的响应而非原始数据

AI 工具节点:'Output' 参数#

当接口返回数据包含超过10个字段时,需添加包含3种模式的'Output'选项参数。 在 AI 工具节点中,允许用户更精细地选择要输出的字段。其原理是工具可能会超出上下文窗口限制,过多字段会导致混淆,因此最好仅传递必需的字段。

选项:

  • Simplified(简化模式): 功能与上述"Simplify"参数相同。
  • Raw(原始模式): 返回所有可用字段。
  • Selected fields(选择字段模式): 显示多选参数供用户选择要添加到输出并发送给 AI 代理的字段。此选项默认始终返回记录/实体的 ID。

文案规范#

文本大小写#

节点名称参数显示名称(标签)、下拉菜单标题使用首字母大写格式。首字母大写格式是指除某些小词(如冠词和短介词)外,每个单词的首字母都大写。 节点操作名称、节点描述参数描述(工具提示)、提示文本下拉菜单描述使用句子格式

术语规范#

  • 使用第三方服务术语:尽量使用与对接服务相同的术语(例如使用 Notion 的"blocks"而非"paragraphs")。
  • 采用界面用语:遵循服务用户界面使用的术语,而非 API 或技术文档中的表述(例如在 Trello 中您需要"归档"卡片,但 API 中显示为"已关闭",此时应使用"归档")。
  • 避免技术行话:能用简单词汇时不要使用技术行话。例如使用"字段"而非"键"。
  • 保持命名一致性:对同一事物选择单一术语并始终沿用。例如不要混用"目录"和"文件夹"。

占位符#

在参数占位符中插入内容示例通常很有帮助。这些示例应以"例如"开头,字段中的演示内容使用驼峰式大小写。 可复用的占位符示例:

  • 图片:例如 https://example.com/image.png
  • 视频:例如 https://example.com/video.mp4
  • 搜索词:例如 automation
  • 邮箱:例如 nathan@example.com
  • Twitter用户(或类似):例如 n8n
  • 姓名:例如 Nathan Smith
  • 名字:例如 Nathan
  • 姓氏:例如 Smith

操作名称、动作与描述#

  • 名称(Name): 在画布中打开节点时选择框中显示的名称。需采用首字母大写格式(Title Case),且不必包含资源名称(例如"Delete")。
  • 动作(Action): 用户选择节点时在面板中显示的操作名称。需采用句子格式(Sentence Case)且必须包含资源名称(例如"Delete record")。
  • 描述(Description): 在画布中打开节点时,选择框内名称下方显示的子文本。需采用句子格式且必须包含资源名称。可补充简要信息并使用基础资源/操作之外的替代词汇(例如"Retrieve a list of users")。
  • 若操作对象不是资源本身(例如Google表格中的行),需在操作名称中明确说明(例如"Delete Row")。

通用原则是理解操作的对象至关重要。有时操作对象是资源本身(例如删除表格的Sheet:Delete),而有时操作对象不是资源,而是资源内部的内容(例如Table:Delete rows,此时资源是表格,但实际操作对象是其中的行)。

命名规范:name字段#

该字段对应在画布中打开节点时选择框内显示的名称。

  • 参数:name
  • 格式:首字母大写(Title Case)

命名指南:

  • 避免重复资源名(当资源选择框位于上方时): 资源名称通常显示在操作字段上方,因此无需在操作名称中重复(适用于操作对象是资源本身的情况)。
    • 示例:Sheet:Delete → 无需在Delete中重复Sheet,因为n8n已在上方字段显示Sheet,且删除对象就是表格本身。
  • 无资源选择框时需指定资源名: 部分节点没有资源选择框(因为仅存在单一资源)。此时应在操作名称中明确资源。
    • 示例:Delete Records → Airtable节点没有资源选择框,因此最好明确删除操作的对象是记录(Records)。
  • 操作对象非资源时需明确指定: 当操作对象不是资源本身时,应在操作名称中说明具体操作对象。
    • 示例:Table:Get Columns → 指定Columns,因为资源是Table,而实际操作对象是Columns

命名 action#

这是用户选择节点时在面板中显示的操作名称。

  • 参数:action
  • 大小写:句子格式

命名指南:

  • 省略冠词:为保持文本简洁,请省略冠词(a、an、the...)
    • 正确示例Update row in sheet
    • 错误示例Update a row in a sheet
  • 重复资源名称:这种情况下允许重复资源名称。即使资源已在列表中可见,用户可能不会注意到,因此在操作标签中重复显示会很有帮助
  • 若操作对象不是资源则需明确指定:与操作名称规则相同。这种情况下无需重复资源名称
    • 例如:Append Rows → 必须指定 Rows,因为实际追加的对象是行数据。不要添加资源名称(Sheet),因为操作对象不是资源本身

命名 description#

这是在画布中打开节点时,选择列表中名称下方显示的子文本

  • 参数:description
  • 大小写:句子格式

命名指南:

  • 尽可能提供比操作 name 更详细的信息
  • 使用不同的措辞帮助用户更好地理解操作功能。有些用户可能不理解操作中使用的文本(可能英语非其母语),使用替代表述将有助于他们理解

词汇表#

n8n 针对相似应用组(例如数据库或电子表格)使用通用词汇表和特定上下文词汇表。 通用词汇表借鉴了 CRUD 操作的概念:

  • 清空 (Clear)
    • 删除资源的全部内容(清空资源)。
    • 描述:删除 <RESOURCE> 内的所有 <CHILD_ELEMENT>
  • 创建 (Create)
    • 创建资源的新实例。
    • 描述:创建新的 <RESOURCE>
  • 创建或更新 (Create or Update)
    • 创建或更新资源的现有实例。
    • 描述:创建新的 <RESOURCE> 或更新现有实例 (upsert)
  • 删除 (Delete)
    • "删除"有两种使用方式:
      1. 删除资源:
        • 描述:永久删除 <RESOURCE>(仅当确实永久删除时使用"永久")
      2. 删除资源内部的内容(例如行):
        • 这种情况下必须明确操作对象:例如 删除行删除记录
        • 描述:永久删除 <CHILD_ELEMENT>
  • 获取 (Get)
    • "获取"有两种使用方式:
      1. 获取资源:
        • 描述:检索 <RESOURCE>
      2. 获取资源内部的项(例如记录):
        • 这种情况下必须明确操作对象:例如 获取行获取记录
        • 描述:从 <RESOURCE> 中检索 <CHILD_ELEMENT>
  • 获取多个 (Get Many)
    • "获取多个"有两种使用方式:
      1. 获取资源列表(无筛选条件):
        • 描述:检索 <RESOURCE> 列表
      2. 获取资源内部的项列表(例如记录):
        • 这种情况下必须明确操作对象:例如 获取多行获取多条记录
        • 可省略"Many":获取多行 可简写为 获取行
        • 描述:列出 <RESOURCE> 中的所有 <CHILD_ELEMENT>
  • 插入 (Insert)追加 (Append)
    • 向资源内部添加内容。
    • 数据库节点使用 insert
    • 描述:在 <RESOURCE> 中插入 <CHILD_ELEMENT>
  • 插入或更新 (Insert or Update)追加或更新 (Append or Update)
    • 添加或更新资源内部的内容。
    • 数据库节点使用 insert
    • 描述:插入 <CHILD_ELEMENT> 或更新现有项 (upsert)
  • 更新 (Update)
    • "更新"有两种使用方式:
      1. 更新资源:
        • 描述:更新一个或多个 <RESOURCE>
      2. 更新资源内部的内容(例如行):
        • 这种情况下必须明确操作对象:例如 更新行更新记录
        • 描述:更新 <RESOURCE> 内的 <CHILD_ELEMENT>

参数与字段名称引用#

在文本中需要引用参数名称或字段名称时,请使用单引号将其包裹(例如:"请填写 'name' 参数")。

布尔值描述#

布尔组件的描述应以"是否..."开头

错误处理#

基本原则#

错误是用户痛点的来源。因此 n8n 始终坚持向用户传达:

  • 发生了什么:错误描述及问题成因
  • 如何解决:至少提供摆脱困境并继续顺畅使用 n8n 的方法。n8n 不希望用户持续受阻,应借此机会引导他们解决问题

输出面板中的错误结构#

错误信息 - 问题说明#

此类信息需向用户说明当前状况及阻碍执行完成的问题:

  • 若已知触发错误的参数displayName,请将其包含在错误信息或描述中(或同时包含)
  • 条目索引:若已知触发错误的条目ID,请在错误信息后附加[条目 X]。例如:参数"Release ID"中的发布ID未找到 [条目 2]
  • 避免使用"错误"、"问题"、"故障"、"失误"等词汇

错误描述 - 如何解决或继续操作#

描述内容需向用户阐明如何解决问题、需要调整节点配置(若适用)或如何从当前状态继续操作。此处应引导用户执行下一步操作并解除阻碍。

避免使用"错误"、"问题"、"故障"、"失误"等词汇。