---
title: "在画布上构建活动"
description: "创建活动，添加和连接节点，配置它们，然后保存并启用——两个独立的动作，将一个活动在一篇主页上上线。"
canonical: https://docs.afp.monster/zh-cn/guides/build-a-campaign
updated: 2026-08-19
pageType: guide
---

活动是你在画布上绘制的图：选择它监听已连接主页，从调色板添加一个触发节点，将它连接到一个条件，然后将操作挂在条件的输出上。**Save campaign** 写入活动图的新版本；打开活动是一个独立的操作，会先验证活动图。你主页上的事件只有在两者都完成后才会到达活动。

![活动画布：左侧的节点调色板、标题栏中的主页选择和保存及启用控件、中间的图，以及右侧的节点设置面板](../../../../assets/screenshots/guides/build-a-campaign/canvas-anatomy.webp)

## 你需要什么

- 一个已连接的 Facebook 主页或 Instagram 商业账户。参见 [连接主页](/zh-cn/start/connect-a-page)。
- 一个活跃的订阅，且有另一个活动的空间。活动列表标题显示你的活动数量相对于套餐配额的情况。参见 [套餐和配额](/zh-cn/reference/plans-and-quotas)。
- 一个关键词列表（如果活动将消息文本与列表匹配）。参见 [用关键词列表匹配评论](/zh-cn/guides/keyword-lists)。

## 如何创建活动并选择主页？

1. 打开 **Campaigns** → **+ New automation**。打开一个空画布。
2. 在画布标题栏中选择已连接主页。AFP 从该主页派生平台：独立的 Instagram 商业账户生成 Instagram 活动，Facebook 主页生成 Facebook 活动。
3. 在标题栏中命名活动。
4. 按照下面的说明构建图。
5. 点击 **Save campaign**。

一个活动只绑定到一个主页，创建它会将该主页订阅到其事件，所以没有单独的订阅步骤。

稍后更改主页不会触碰活动图——只有活动监听的事件会变化——且移动到另一个平台会从新主页重新派生活动的平台。

## 如何添加节点并连接它们？

左侧的调色板只显示适用于当前平台的节点类型，且当你从现有节点的句柄添加时，只显示可以合法跟随它的类型。有三种方法添加一个节点：

1. 从调色板拖拽一个图块到画布上。
2. 点击节点输出句柄上的 **+** 占位符，然后选择一个类型——节点会被创建并连接，一步完成。
3. 右键点击画布并选择 **Add node**。

要连接两个节点，从一个空闲的输出句柄拖拽到目标节点；拖拽时画布会进行验证，并立即拒绝无效的连接。在空画布上放下会重新打开调色板并记住该句柄，所以你选择的下一个类型会已经连接好。

连接从它们离开的输出进行标记：一个条件有 **Match** 和 **No Match**，一个随机分割每个分支一个，其他所有节点一个输出。

```d2 title="A campaign that replies publicly then sends a DM on a keyword match, and stops otherwise"
direction: right
trigger: trigger_comment
cond: "condition\nkeyword list" {shape: diamond}
reply: reply_comment
dm: send_dm
halt: stop
trigger -> cond
cond -> reply: Match
reply -> dm
cond -> halt: "No Match"
```

添加、移动、连接和配置都在你的浏览器中进行，节点位置与图一起存储，所以重新打开活动会将每个节点放回你离开时的位置。在你保存之前，没有任何内容到达 AFP。

## 画布会拒绝哪些连接？

| 你不能连接的内容 | 原因 |
|---|---|
| 任何内容连接到触发节点 | 触发器启动活动，所以它没有输入 |
| 节点连接到自身 | 节点不能是自己的下一步 |
| 任何让图到达它已经经过的节点连接 | 图只向前运行 |
| 第二个连接到同一个节点 | 一个节点接受一个传入连接 |
| 从一个输出句柄的第二个连接 | 一个句柄携带一个连接——用条件或随机分割分支 |
| 触发节点连接到除条件之外的任何内容 | 触发器之后的第一个节点始终是条件 |
| 条件连接到另一个条件 | 条件不能链接 |
| 触发器是 `trigger_dm` 时连接评论操作 | 一个由私信触发的活动没有评论可以操作 |
| `delete_comment` 之后连接 `reply_comment` 或 `hide_comment` | 评论在那时已不存在 |

两个编辑也会移除你已经画的连接，因为它们离开的句柄消失了：从 `send_dm` 节点删除一个按钮会丢弃从该按钮离开的分支，将条件设置为匹配任何消息会丢弃它的 **No Match** 分支。

## 如何配置节点？

点击节点。设置面板在右侧打开，显示该类型的表单，你的更改与其余未保存的工作一起保存。

| 节点 | 你设置的内容 |
|---|---|
| `trigger_comment` | 主页上的每篇帖子或一篇特定帖子，以及一个人是否可以多次触发它 |
| `trigger_dm` | 一个人是否可以多次触发它 |
| `condition` | 匹配类型——任何消息、包含、精确或关键词列表——要匹配的文本或列表、是否反转关键词结果、是否等待回复，以及图片、GIF 和链接的过滤器 |
| `send_dm` | 消息类型（文本、图片、卡片或带按钮的文本）及其内容 |
| `reply_comment` / `send_comment` | 评论文本；`send_comment` 还需要评论的帖子 |
| `delay` | 等待多长时间，从 1 到 31536000 秒，以及是否仅在人在活动等待期间未回复时继续 |

剩余类型各需要一个设置：`random_split` 每个分支的百分比（0 到 100，总计不超过 100），`add_tag` 和 `remove_tag` 上要应用的标签，以及 `hide_comment` 和 `delete_comment` 上是否阻止作者（仅 Facebook）。`stop` 没有设置。[节点类型](/zh-cn/reference/node-types) 列出每个字段。

配置无效的节点会在画布上标记，**Save campaign** 会被禁用并显示"Fix errors to save"，直到你修正它。

## 保存和启用有什么区别？

保存存储活动图。启用决定存储的活动图是否可以运行。一个活动需要两者。

每次保存都会写入活动图的**新版本**。已经在进行中的执行记录保留在它开始的版本上，所以编辑不会改变进行中的执行记录。只有当前版本的触发器启动新执行记录，且旧版本在没有任何执行记录引用它们时被清除。

你切换启用的位置决定检查什么：

- **在画布中**，**Active** 切换是你未保存更改的一部分，在你按下 **Save campaign** 时生效，这会要求你确认第一次打开。此处的启用会验证活动图——至少一个触发节点、每个其他节点有一个传入连接、没有配置错误的节点——一个失败的活动图永远不会发送，其错误会列出供你查看。
- **在活动列表中**，切换立即生效且不查看活动图。当前版本没有触发节点的活动在那里打开时显示为活跃，但不会产生任何内容。

保存空活动图是允许的：活动保留其名称和主页，但没有触发器，所以没有事件可以启动它。

关闭一个活动不会将其主页从事件订阅中移除。该订阅只在该主页的最后一条活动被删除时结束。

:::note
保存不会启用。一个活跃的活动运行你最后保存的版本，而不是你浏览器中仍打开的编辑。
:::

## 如何再次找到活动？

打开 **Campaigns**。每行显示活动名称、它绑定的主页以及开/关切换开关，标题显示你的活动数量相对于套餐配额的情况。

| 控件 | 作用 |
|---|---|
| 搜索 | 按活动名称过滤，匹配其中的任何部分。它不搜索活动图内部。 |
| 主页过滤器 | 将列表缩小到绑定到一个已连接主页的活动。 |
| 排序 | 按每个活动最后更新的时间排序，最新的在前，可以反转。 |
| 分页 | 列表按页返回，所以旧的活动在分页器后面，而不是缺失。 |

如果你的账户位于一个主账户之下，列表也覆盖该共享范围内主页上的活动，不仅仅是你自己添加的主页。参见 [在一个账户下管理社交账号](/zh-cn/guides/profiles-and-master-accounts)。

## 如何重命名、复制或删除活动？

通过编辑画布标题栏中的名称来**重命名**。新名称随你的下一个 **Save campaign** 写入，连同主页绑定和活跃状态——这三者一起移动，独立于活动图本身。

**复制**不是画布为你提供的功能：创建第二个活动并重新构建其活动图。

从活动行**删除**，然后确认。删除会移除活动、其活动图的所有保存版本和执行记录，包括测试执行。如果它是该主页上的最后一个活动，AFP 也会停止订阅该主页的事件。

:::caution
删除活动会同时删除其执行记录，所以你会用来了解其行为的记录也会消失。先阅读它——参见 [测试和调试活动](/zh-cn/guides/test-and-debug-campaigns)。
:::

## 为什么我看到的是表单而不是画布？

在画布存在之前构建的活动没有保存的活动图。打开一个活动会从它较旧的定义构建一个活动图，所以画布可以显示任何活动；从画布保存会写入一个真正的活动图，活动从那时起表现得像每个其他画布活动一样。

画布标题栏中的 **Form** 按钮切换到那个较旧的表单视图。没有等价物的节点——一个随机分割、一条带多个按钮的私信、多标签操作——会阻止切换：一个对话框会命名它们并提供从画布中移除它们的选项。一个配置只能部分映射的条件会产生警告，其节点保留。

切换视图时不会写入任何内容。活跃状态会跨视图携带，你必须保存表单视图中的内容才能持久化。

## 为什么我的活动无法保存或触发？

| 症状 | 原因 | 修复方法 |
|---|---|---|
| **Save campaign** 被禁用，显示"Fix errors to save" | 一个节点有无效配置 | 完成被标记节点的设置面板 |
| 提示活动在没有主页的情况下无法启用 | **Active** 在选择了主页之前被打开 | 在画布标题栏中选择主页 |
| 使用 **Active** 保存时列出活动图错误且没有写入 | 没有触发节点，或一个没有传入连接的节点 | 将所有节点连接回触发器，然后保存 |
| 创建活动被订阅错误拒绝 | 订阅不活跃或已过期，或套餐的活动配额已用完 | 续订订阅，或删除你不再运行的活动 |
| 活动出现在列表中但其画布为空 | 活动行已创建，但第一次活动图保存未成功 | 重新构建节点并再次保存 |
| 活动已打开但没有任何反应 | 当前版本没有触发节点 | 添加触发器，保存，然后确认切换开关仍处于打开状态 |
| 两个浏览器标签中的一个无法保存 | 版本按活动编号，所以同时保存会冲突，其中一个会丢失 | 重新加载画布，检查哪些编辑存活，然后再次保存 |
| 一个曾经打开的活动现在返回"未找到" | 它绑定的主页离开了你的范围，例如主账户链接被移除时 | 恢复链接，或在你拥有的主页上重建活动 |

## 相关

- [将评论路由到私信](/zh-cn/guides/route-comments-to-dm) — 大多数活动开始的四节点模式。
- [节点类型](/zh-cn/reference/node-types) — 每个节点及其每个字段。
- [测试和调试活动](/zh-cn/guides/test-and-debug-campaigns) — 运行测试执行并查看它走的路径。
- [活动图模式](/zh-cn/reference/campaign-graph-schema) — 节点、边和版本如何组合在一起。
- [发送你的第一条自动回复](/zh-cn/start/first-auto-reply) — 此页面的最短版本。
