---
title: "测试和调试活动"
description: "从画布运行测试执行，阅读执行记录以找出哪个节点失败以及失败原因，并了解编辑活动对正在进行的运行的影响。"
canonical: https://docs.afp.monster/zh-cn/guides/test-and-debug-campaigns
updated: 2026-08-19
pageType: guide
---

测试执行会遍历你保存的图，不会接触 Facebook 或 Instagram：在画布上点击 **Test**，可选地输入活动应视为传入的消息，画布会切换到 **Executions** 视图，并用高亮显示该执行记录所经过的路径。真实执行记录也出现在同一列表中，因此一个视图就能告诉你哪个节点运行了、哪个节点失败了，以及执行记录为何停止。

## 准备工作

- 在画布上保存一个活动，其中至少包含一个触发节点。测试执行运行的是活动当前保存的版本，因此未保存的编辑不会被测试。参见 [在画布上构建活动](/zh-cn/guides/build-a-campaign)。
- 除了该活动之外不需要设置主页。测试执行不绑定到已连接主页，也不会向 Facebook 或 Instagram 发起调用。

## 如何运行测试执行？

1. 在画布上打开活动，如果有未保存的内容，点击 **Save**。
2. 点击 **Test**。
3. 输入样本消息，让执行记录将其视为传入的评论或私信。留空则执行记录会假设消息文本为 `test`。
4. 点击 **Run test**。
5. 画布切换到 **Executions** 视图，新的测试执行出现在列表顶部。
6. 点击该执行记录，在画布上叠加显示其路径：经过的节点标记为已访问，停止的节点标记为当前节点，未到达的节点变暗。

![活动画布上的测试对话框，包含一个文本框，用于输入测试执行应视为传入评论的消息](../../../../assets/screenshots/guides/test-and-debug-campaigns/test-dialog.webp)

整个遍历在画布响应之前完成，因此没有执行记录逐步遍历节点的动画——你看到的是完成后的状态。

## 测试执行与真实执行有何不同？

测试执行使用相同的引擎和相同的图，并且因相同的原因停止。它跳过的是每一个会联系到真实用户的调用。

| 行为 | 测试执行 | 真实执行 |
|---|---|---|
| 启动方式 | **Test** 按钮 | 与触发节点匹配的评论或私信 |
| 接收者 | 合成的测试接收者 | 评论或发送私信的人 |
| 已连接主页 | 无 | 活动绑定的主页 |
| 私信、评论回复、隐藏、删除 | 记录为对将要执行操作的描述；不发送任何内容 | 通过 Facebook 或 Instagram 发送 |
| 标签 | 不添加，不移除 | 应用到联系人 |
| `delay` 节点 | 记录为已跳过，执行记录在此处结束 | 已调度，等待结束后恢复 |
| `condition` 设置为等待回复 | 停留并保持——不会有回复到达 | 当人回复时恢复 |
| 在执行记录列表中 | 是，标记为测试 | 是 |

由于测试执行在第一个 `delay` 节点处结束，它无法告诉你该延迟之后节点的情况。暂时移除延迟，或用真实评论验证那部分。

## 执行记录告诉我什么？

**Executions** 视图列出该活动最近的 20 条执行记录，最新的在前，测试和真实执行记录混在一起。每行携带的信息包括：是否为测试、是否仍活跃、接收者、何时开始、何时完成、当前所在节点，以及错误消息（如果有）。

选择一条执行记录会加载该执行记录启动时的图版本，并标记其访问过的每个节点。每个已访问节点记录其类型、运行时间，以及对该节点所做操作的描述或它抛出的错误——这正是你区分"私信节点发送成功"和"私信节点失败"的方式。

列表不会自动刷新。使用面板上的刷新控制来重新拉取一条仍在活跃的执行记录。

### 每个节点的路径记录什么？

| 针对节点的条目 | 含义 |
|---|---|
| Trigger fired | 执行记录从此处开始。每条执行记录都有这一条目作为其第一条 |
| 对操作的描述 | 一个操作节点运行了：发送了私信、回复或隐藏了评论、标签已更改 |
| Waiting for reply | 执行记录停在一个设置为等待回复的 `condition` 上，尚未被唤醒 |
| Scheduled delay，附带等待秒数 | 一个 `delay` 节点调度了恢复并停止前进 |
| Took arm 2 | 一个 `random_split` 选择了该分支，执行记录沿其继续 |
| Flow stopped | 一个 `stop` 节点有意结束了执行记录 |
| 错误消息 | 节点抛出了错误。执行记录不会继续前进 |

```d2 title="What each kind of next node does to a run: continue, park, schedule, complete, or stop with an error" data-wide="true"
direction: right
starts: "执行记录从触发节点开始"
next: "下一个节点" {shape: diamond}
visited: "记录为已访问，执行记录继续"
parked: "已停留：仍活跃，\n当前节点是 condition"
scheduled: "已调度：仍活跃，\n等待结束后恢复"
completed: "已完成"
cycle: "因循环错误停止"
errored: "仍活跃，错误已记录，\n执行记录不会继续"
starts -> next
next -> visited: "trigger、action 或 tag 节点"
visited -> next
next -> parked: "condition 设置为等待回复"
next -> scheduled: "delay 节点"
next -> completed: "stop 节点，或没有连接的输出"
next -> cycle: 已访问过的节点
next -> errored: 操作抛出错误
```

### 如何阅读一条执行记录的状态？

| 你看到的 | 含义 | 操作 |
|---|---|---|
| 不活跃，带有完成时间 | 执行记录到达了 `stop` 节点，或到达了一个后面没有连接的输出 | 无需操作。这是正常结束 |
| 仍活跃，当前节点是 `condition` | 该条件设置为等待回复，且没有回复到达 | 等待回复。测试执行会停留在此处，因为不会有回复到达 |
| 仍活跃，当前节点是 `delay` | 等待已调度，且尚未过去 | 等待延迟结束 |
| 仍活跃，最后访问的节点上有错误消息 | 一个操作失败了。执行记录会记下错误，并不会越过该节点继续前进 | 修复原因，然后启动一条新的执行记录——这一条不会自动恢复 |
| 不活跃，错误命名了节点处的循环 | 路径返回到了一个已访问过的节点。每条执行记录中每个节点最多运行一次 | 重新设计分支，使路径不再重复访问节点 |
| 不活跃，错误说调度步骤未运行 | 一个 `delay` 被调度但恢复从未发生 | 再次测试该分支。如果重复发生，向支持团队报告 |
| 不活跃，错误说该人在 7 天内未回复 | 执行记录在一个 `condition` 上等待回复达一周 | 无需操作。过期是没有人继续的会话的预期结束 |

重试的范围很窄。`delay` 后的恢复在执行记录被标记为失败之前最多尝试三次。在执行记录遍历图时失败的操作不会重试，且永远不会从开始重新运行任何执行记录。

## 执行记录等待回复多长时间？

七天。一条停在等待回复的 `condition` 上的执行记录，在七天沉默后关闭为失败，消息说明该人未回复，测试执行也以相同方式过期。

从未发生的调度恢复会被单独捕获：一旦超时超过一小时，执行记录关闭为失败，消息说明该步骤未运行。

两个截止日期都由周期性扫描检查，而不是在它们经过的瞬间检查，因此执行记录在其时间过后仍可能显示为活跃一段时间。

## 编辑或删除活动时，正在进行的执行记录会发生什么？

保存活动会写入图的新版本。已经在进行中的执行记录会绑定到它们启动时的版本并完成，因此编辑活动永远不会重新连接已经在进行中的会话。新事件仅在当前保存的版本上启动执行记录，且仅在旧版本中存在的触发节点不会再触发。

旧版本会保留到仍有执行记录引用它们为止，这就是为什么你在 **Executions** 视图中打开的执行记录可能显示你正在编辑的图中不再存在的节点。对于足够旧的执行记录，其使用的版本从未被记录，叠加显示也可能无法对齐——面板会回退到当前图。

删除活动会移除其图的所有保存版本以及与其关联的所有执行记录，包括活跃的执行记录。

:::caution
删除活动不可撤销，执行记录也会随之消失。一条正在等待延迟的执行记录不会恢复——不会再为它发送任何内容。
:::

## 为什么我测试时没有任何反应？

| 症状 | 原因 | 修复 |
|---|---|---|
| **Test** 报告活动没有触发节点 | 保存的图中没有触发节点 | 添加触发节点，点击 **Save**，然后再次测试 |
| 执行记录在一两个节点后完成 | 它需要的输出没有连接任何东西，因此执行记录在此结束 | 连接分支并保存 |
| `send_dm` 节点显示为已访问但没有消息到达 | 测试执行会记录操作而不是发送它们 | 通过已连接主页上的真实评论或私信确认发送 |
| 真实评论也没有收到任何内容 | 活动已保存但未启用，或评论未匹配触发节点和条件 | 检查 **Active** 开关，然后阅读 [用关键词列表匹配评论](/zh-cn/guides/keyword-lists) |
| 同一个人的第二条评论没有任何反应 | 一个人不能同时有同一活动的两条活跃执行记录，因此第二个匹配事件被跳过 | 等待第一条执行记录完成，或用不同账户测试 |
| 执行记录在操作节点上停止并带有错误 | 该操作在 Facebook 或 Instagram 上失败，且执行记录不会在失败的操作之后继续 | 修复原因，然后启动一条新的执行记录 |

## 相关

- [执行状态](/zh-cn/reference/execution-states) — 执行记录可以处于的每种状态，以及如何离开每种状态。
- [用关键词列表匹配评论](/zh-cn/guides/keyword-lists) — `condition` 为何选择 **Match** 或 **No Match**。
- [节点类型](/zh-cn/reference/node-types) — 执行记录到达每个节点时每个节点做什么。
- [在画布上构建活动](/zh-cn/guides/build-a-campaign) — 你正在测试的图。
