---
title: "节点类型"
description: "画布上可以添加到活动中的每种节点类型，包括其类别、输出、所需配置，以及执行记录到达它时它会做什么。"
canonical: https://docs.afp.monster/zh-cn/reference/node-types
updated: 2026-08-19
pageType: reference
---

画布调色板中可以添加到活动的节点类型共有十三种：两种触发器、四种逻辑节点、一种消息节点、四种评论操作，以及两种联系人操作。每种类型都有自己的配置键和固定数量的输出，这两点共同决定了执行记录到达该节点时会做什么，以及接下来去往哪里。运行时存在但没有调色板图块的节点类型，列在 [活动图模式](/zh-cn/reference/campaign-graph-schema) 中。

## 概览

| 节点类型 | 类别 | 输出 | 所需配置 | 作用 |
|---|---|---|---|---|
| `trigger_comment` | 触发 | 1 | `post_scope` 为 `specific` 时需要 `post_id` | 当有人评论主页时启动活动 |
| `trigger_dm` | 触发 | 1 | 无 | 当有人向主页发送私信时启动活动 |
| `condition` | 逻辑 | 2（Match / No Match） | `match_type`，以及读取它们的匹配类型所需的 `text` 或 `keyword_list_id` | 匹配消息文本并选择分支，或将执行记录停留直到回复到达 |
| `send_dm` | 消息 | 1，外加每个 `postback` 按钮各一个 | `message_type` 及该类型读取的键 | 发送一条私信：文本、图片、卡片，或带按钮的文本 |
| `reply_comment` | 评论 | 1 | `text` | 在启动执行记录的评论下方公开回复 |
| `send_comment` | 评论 | 1 | `text`、`post_id` | 在指定的帖子上发布一条新评论 |
| `hide_comment` | 评论 | 1 | 无 | 隐藏启动执行记录的评论 |
| `delete_comment` | 评论 | 1 | 无 | 删除启动执行记录的评论 |
| `delay` | 逻辑 | 1 | 无 | 暂停执行记录并稍后继续 |
| `random_split` | 逻辑 | 每个分支一个 | `paths` | 随机选择一个分支发送每次执行记录 |
| `add_tag` | 联系人 | 1 | `tag_ids` | 为联系人添加标签 |
| `remove_tag` | 联系人 | 1 | `tag_ids` | 从联系人移除标签 |
| `stop` | 逻辑 | 0 | 无 | 结束执行记录 |

## `trigger_comment`

- **类别：** 触发
- **输出：** 1，且只能连接到一个 `condition`
- **所需配置：** `post_scope` 为 `specific` 时需要 `post_id`

| 键 | 类型 | 设置内容 |
|---|---|---|
| `post_scope` | string | `all` 或 `specific`。缺少该键则按 `all` 处理。 |
| `post_id` | string | `specific` 范围监听的帖子。设置面板会提供已连接主页的帖子供选择。 |
| `unique_per_user` | boolean | 开启下文描述的每人一次限制。 |

当已连接主页上出现一条评论时启动一次执行记录。当 `post_scope` 设置为 `specific` 时，只有 `post_id` 指定帖子上的评论会启动活动；主页上的其他所有评论都会被忽略。

`unique_per_user` 将活动限制为每人只能有一次执行记录。 

```json
{
  "post_scope": "specific",
  "post_id": "104857392017465_998234511",
  "unique_per_user": true
}
```

## `trigger_dm`

- **类别：** 触发
- **输出：** 1，且只能连接到一个 `condition`
- **所需配置：** 无

| 键 | 类型 | 设置内容 |
|---|---|---|
| `unique_per_user` | boolean | 开启下文描述的每人一次限制。 |

当有人向已连接主页发送私信时启动一次执行记录。这里没有 `post_scope` 键，因为私信不附属于任何帖子。触发器为 `trigger_dm` 的活动中，评论操作不可用。

`unique_per_user` 与 `trigger_comment` 上的设置相同，将活动限制为每人只能有一次执行记录。 

```json
{
  "unique_per_user": false
}
```

## `condition`

- **类别：** 逻辑
- **输出：** 2——output 0 是 Match，output 1 是 No Match
- **所需配置：** `match_type`，以及读取它们的匹配类型所需的 `text` 或 `keyword_list_id`

| 键 | 类型 | 设置内容 |
|---|---|---|
| `match_type` | string | `any`、`contains`、`exact` 或 `keyword_list`。决定比较方式以及下方哪些键会被读取。 |
| `text` | string | `contains` 和 `exact` 所比较的文本。 |
| `keyword_list_id` | number | `keyword_list` 所比较的已保存关键词列表。 |
| `reverse_keywords` | boolean | 反转 `keyword_list` 比较的结果。 |
| `wait_for_reply` | boolean | 将执行记录停留在此节点，而不是评估到达它的消息。 |
| `filter_images` | boolean | 对传入消息的媒体过滤器。 |
| `filter_gifs` | boolean | 对传入消息的媒体过滤器。 |
| `filter_links` | boolean | 对传入消息的媒体过滤器。 |

评估消息并将执行记录沿 Match 或 No Match 输出发送。[关键词匹配规则](/zh-cn/reference/keyword-matching) 介绍了每种匹配类型比较什么，以及产生哪个输出。

`wait_for_reply` 会将执行记录停留在此节点，而不是立即评估，并一直停留到那个人回复为止。[执行状态](/zh-cn/reference/execution-states) 介绍了一次停留的执行记录能存活多久，以及是什么唤醒它。

媒体过滤器是同一节点上的独立设置，不参与关键词比较。[用关键词列表匹配评论](/zh-cn/guides/keyword-lists) 介绍了如何构建 `keyword_list_id` 指向的列表。

```json
{
  "match_type": "keyword_list",
  "keyword_list_id": 41,
  "reverse_keywords": false,
  "wait_for_reply": true
}
```

## `send_dm`

- **类别：** 消息
- **输出：** 1，外加每个 `postback` 按钮各一个额外输出
- **所需配置：** `message_type` 及该类型读取的键

| 键 | 类型 | 设置内容 |
|---|---|---|
| `message_type` | string | `text`、`image`、`card` 或 `text_with_buttons`。决定下方哪些键会被读取。 |
| `text` | string | 消息文本。 |
| `image_url` | string | `image` 消息的图片，以及 `card` 上的图片。 |
| `title` | string | `card` 上的标题。 |
| `subtitle` | string | `card` 上的第二行文字。 |
| `buttons` | array | 卡片或按钮消息上的按钮。每个条目携带一个 `id`、一个 `web_url` 或 `postback` 类型的 `type`、一个 `title`，以及 `web_url` 按钮的 `url`。 |
| `buttons_text` | string | 用于 `text_with_buttons` 消息，每行一个按钮标签。每一行都会成为一个 `postback` 按钮，其负载即为该标签。 |

向执行记录所针对的人发送一条私信。`message_type` 决定读取哪些键：纯文本消息读取 `text`，图片读取 `image_url`，卡片读取 `title`、`subtitle` 和 `image_url`，带按钮的文本读取 `buttons_text`。

`text`、`title` 和 `subtitle` 中的发件人姓名变量会在发送消息之前被替换。

一个 `postback` 按钮会为该节点增加一个自己的输出，所以执行记录可以根据那个人按下的按钮走向不同的分支。

没有任何配置的节点不会发送任何内容，执行记录会继续前往下一个节点。

```json
{
  "message_type": "text_with_buttons",
  "text": "Thanks for commenting. Which size do you want?",
  "buttons_text": "Small\nMedium\nLarge"
}
```

## `reply_comment`

- **类别：** 评论
- **输出：** 1
- **所需配置：** `text`

| 键 | 类型 | 设置内容 |
|---|---|---|
| `text` | string | 发布在触发评论下方的回复。 |

在启动执行记录的评论下方发布一条公开回复。`text` 中的发件人姓名变量会在回复发布之前被替换。

该节点在由 `trigger_dm` 触发的活动中不可用，且画布拒绝将其放在 `delete_comment` 的下游。

```json
{
  "text": "Sent you the price list in a DM."
}
```

## `send_comment`

- **类别：** 评论
- **输出：** 1
- **所需配置：** `text`、`post_id`

| 键 | 类型 | 设置内容 |
|---|---|---|
| `text` | string | 发布在指定帖子上的评论。 |
| `post_id` | string | 发布该评论的帖子。 |

在 `post_id` 指定的帖子上发布一条新的顶级评论。它不会回退到执行记录来源的帖子：没有 `post_id` 时，该节点什么都不做，执行记录继续前往下一个节点。

该节点在由 `trigger_dm` 触发的活动中不可用。

```json
{
  "text": "Restocked today — sizes S to XL are back.",
  "post_id": "104857392017465_998234511"
}
```

## `hide_comment`

- **类别：** 评论
- **输出：** 1
- **所需配置：** 无

| 键 | 类型 | 设置内容 |
|---|---|---|
| `also_block_user` | boolean | 在同一步骤中屏蔽评论作者。仅限 Facebook。 |

隐藏启动执行记录的评论。

`also_block_user` 会在同一步骤中屏蔽评论作者，且仅在 Facebook 上有效——该选项在 Instagram 活动上被禁用。

## `delete_comment`

- **类别：** 评论
- **输出：** 1
- **所需配置：** 无

| 键 | 类型 | 设置内容 |
|---|---|---|
| `also_block_user` | boolean | 在同一步骤中屏蔽评论作者。仅限 Facebook。 |

删除启动执行记录的评论。`also_block_user` 仅在 Facebook 上有效，与 `hide_comment` 上相同。

在该节点的下游，画布会拒绝 `reply_comment` 和 `hide_comment`，因为这些节点本应操作的评论已经不存在。

## `delay`

- **类别：** 逻辑
- **输出：** 1
- **所需配置：** 无

| 键 | 类型 | 设置内容 |
|---|---|---|
| `delay_seconds` | number | 执行记录等待的时长，范围为 1 到 31536000 秒。 |
| `only_if_no_reply` | boolean | 如果那个人在等待期间已经回复，则取消执行记录的其余部分。 |

暂停执行记录并调度它稍后继续。`delay_seconds` 被限制在 1 到 31536000 秒（365 天）之间，超出该范围的值会被裁剪而不报错。未配置数值的节点默认等待 60 秒。

`only_if_no_reply` 会在等待结束时被检查：如果那个人在此期间的任何时候回复过，执行记录就会在该延迟节点结束，而不是继续沿分支走下去。

```json
{
  "delay_seconds": 3600,
  "only_if_no_reply": true
}
```

## `random_split`

- **类别：** 逻辑
- **输出：** `paths` 中每个条目对应一个
- **所需配置：** `paths`

| 键 | 类型 | 设置内容 |
|---|---|---|
| `paths` | array | 每个输出对应一个 `{ "percent": number }` 条目。每个百分比为 0 到 100，总和不能超过 100。 |

在分支之间分流：每次执行记录都会随机选择一个分支。在画布中为每个分支设置一个百分比；每个百分比为 0 到 100，总和不能超过 100。

请将这些百分比理解为你要求的分配比例，而不是有保证的比率，在依赖它处理任何重要事务之前，先在过往的执行记录中确认实际分布情况。 

未配置任何百分比时，该节点会回退为两个相等的分支。

被选中的分支决定执行记录沿哪个输出走。如果该输出没有连接，执行记录就会在此节点结束。

```json
{
  "paths": [{ "percent": 70 }, { "percent": 30 }]
}
```

## `add_tag`

- **类别：** 联系人
- **输出：** 1
- **所需配置：** `tag_ids`

| 键 | 类型 | 设置内容 |
|---|---|---|
| `tag_ids` | array | 要添加的标签的数字标识符。 |

将指定的 [标签](/zh-cn/guides/tags) 添加到执行记录所针对的联系人身上，与该联系人已有的标签共存。

当执行记录背后没有联系人时，该节点不会做任何改变，执行记录会继续前往下一个节点。

```json
{
  "tag_ids": [12, 19]
}
```

## `remove_tag`

- **类别：** 联系人
- **输出：** 1
- **所需配置：** `tag_ids`

| 键 | 类型 | 设置内容 |
|---|---|---|
| `tag_ids` | array | 要移除的标签的数字标识符。 |

从执行记录所针对的联系人身上移除指定的标签，并保留该联系人的其他标签不变。[联系人字段](/zh-cn/reference/contact-fields) 列出了联系人记录的其余部分。

当执行记录背后没有联系人时，该节点不会做任何改变，执行记录会继续前往下一个节点。

```json
{
  "tag_ids": [19]
}
```

## `stop`

- **类别：** 逻辑
- **输出：** 0
- **所需配置：** 无

一旦到达该节点就立即结束执行记录，并记录该流程已被停止。该节点没有输出，所以之后不能连接任何内容。

## 调色板之外的节点类型

运行时中还存在另外八种节点类型，它们没有调色板图块和设置面板，永远不会出现在画布构建的活动中。[活动图模式](/zh-cn/reference/campaign-graph-schema) 列出了它们的名称，并说明执行记录在每一种上会做什么。请将它们视为仅存在于运行时，而不是产品功能。

## 说明

- 输出从 0 开始编号。`condition` 用 0 表示 Match、1 表示 No Match，`random_split` 按配置顺序为每个分支使用一个编号，其他所有节点都从 0 继续。
- 执行记录会沿该节点选中的输出所连接的连接前进。当该输出没有连接时，执行记录会在该节点结束。
- 一个操作引发错误的节点，会将该错误记录到执行记录上且不会前进，所以执行记录不会超过该节点。
- 到达一个已经访问过的节点的执行记录，会以指出该节点的循环错误结束。每个节点在每次执行记录中最多运行一次。
- 运行时无法识别的节点类型会被跳过并发出警告，执行记录从 output 0 继续。
- 没有评论可以操作的评论操作什么都不做，执行记录继续。
- 调色板图块按活动的平台过滤，所以 Instagram 活动的调色板提供的节点类型可能比 Facebook 活动的更少。
- 哪些节点类型可以跟随哪些节点，是在拖拽连接时强制执行的，而不是在保存活动时。[活动图模式](/zh-cn/reference/campaign-graph-schema) 列出了这些约束。
- 在测试执行中，`add_tag` 和 `remove_tag` 会记录它们本应做的操作，但不改变联系人，而 `delay` 会结束测试执行，而不是调度一次恢复。

## 相关

- [活动图模式](/zh-cn/reference/campaign-graph-schema) — 节点、连接和配置如何存储
- [在画布上构建活动](/zh-cn/guides/build-a-campaign) — 在画布上添加并连接这些节点
- [关键词匹配规则](/zh-cn/reference/keyword-matching) — 每种 `condition` 匹配类型比较什么
- [执行状态](/zh-cn/reference/execution-states) — 执行记录经过这些节点时是什么样子
- [联系人字段](/zh-cn/reference/contact-fields) — 标签节点写入的联系人记录
