
# 自动化 API

自动化是由多个步骤组成的工作流：一个或多个启动它的触发器，随后是动作、条件、延迟、AI 步骤以及其他连接成图的组件。这与您在 [自动化](../automations/automations.md) 页面中看到并编辑的自动化是同一个概念。本指南涵盖了如何通过 API 读取和构建这些自动化。

- **基础 URL**: `https://api.dmchamp.com/v1`
- **身份验证**: 您的 API 密钥（请参阅[身份验证](authentication.md)）
- **字段与主体**: 每个参数和响应字段均在[API 参考](reference.md#tag/automations)中说明
- **错误**: 请参阅下方的[错误与分页](errors-and-pagination.md)和[错误](#errors)

> **代理机构：** 本页面上的每个端点都接受 `sub_account_id` 作为查询参数，因此您可以使用您的代理机构密钥读取和构建客户的自动化。如果 `sub_account_id` 不是您的客户账户之一，则会返回 `404`。请参阅 [代理机构 API](../agency/api-for-agencies.md)。

---

## 工作原理：先创建草稿

该 API 的构建旨在确保没有任何内容会意外启动。

1. **读取目录。** `GET /automations/steps` 列出了您可以使用的每种触发器、动作和步骤类型，以及编写图表的语法（`graph_rules`）。
2. **创建草稿。** `POST /automations` 会在**关闭**状态下存储自动化。此时没有任何内容运行。
3. **检查它。** 读取它，在构建器中打开它（响应会为您提供其 `open_path`），并确保账户所有者已了解其功能及作用对象。
4. **开启它。** `POST /automations/{automationId}/enable` 是一个单独的调用。这是使实际操作发生的步骤：发送消息、更改记录、为 AI 代理提供工具。

编辑操作永远不会改变自动化的开启或关闭状态。这也意味着对**已开启**的自动化所做的编辑会立即生效，作用于实时运行的自动化。若要安全地更改正在运行的自动化，请先禁用它，进行编辑和检查，然后再重新启用。

您发送的每个图表都会经过构建器画布所应用的相同检查。如果图表无法打开或运行，系统将拒绝该请求并返回一个 `400`，其中列出了需要修复的具体内容。

### 访问权限

- 账户需要具备“自动化”功能。如果没有该功能，本页面上的每个调用都会返回 `403`。
- 团队成员的访问权限遵循其在 [团队管理](../settings/team-management.md) 中“自动化”区域的设置：读取（列表、获取、步骤、运行、文件夹）需要**查看**权限，任何涉及更改的操作都需要**编辑**权限。
- 在其套餐不支持创建和编辑自动化的客户账户上，写入调用会返回 `403`，这与应用程序中构建器的表现一致。

---

## 端点

| 任务 | 方法 + 路径 | 资源管理器 |
|---|---|---|
| 列出自动化 | `GET /automations` | [在 API 参考中打开](reference.md#tag/automations/GET/automations) |
| 获取自动化及其图表 | `GET /automations/{automationId}` | [在 API 参考中打开](reference.md#tag/automations/GET/automations/{automationId}) |
| 读取步骤目录 | `GET /automations/steps` | [在 API 参考中打开](reference.md#tag/automations/GET/automations/steps) |
| 创建自动化（草稿） | `POST /automations` | [在 API 参考中打开](reference.md#tag/automations/POST/automations) |
| 更新自动化 | `PUT /automations/{automationId}` | [在 API 参考中打开](reference.md#tag/automations/PUT/automations/{automationId}) |
| 开启 | `POST /automations/{automationId}/enable` | [在 API 参考中打开](reference.md#tag/automations/POST/automations/{automationId}/enable) |
| 关闭 | `POST /automations/{automationId}/disable` | [在 API 参考中打开](reference.md#tag/automations/POST/automations/{automationId}/disable) |
| 读取运行历史记录 | `GET /automations/{automationId}/runs` | [在 API 参考中打开](reference.md#tag/automations/GET/automations/{automationId}/runs) |
| 列出文件夹 | `GET /automations/folders` | [在 API 参考中打开](reference.md#tag/automations/GET/automations/folders) |
| 创建文件夹 | `POST /automations/folders` | [在 API 参考中打开](reference.md#tag/automations/POST/automations/folders) |
| 重命名文件夹 | `PUT /automations/folders/{folderId}` | [在 API 参考中打开](reference.md#tag/automations/PUT/automations/folders/{folderId}) |
| 删除文件夹 | `DELETE /automations/folders/{folderId}` | [在 API 参考中打开](reference.md#tag/automations/DELETE/automations/folders/{folderId}) |
| 将自动化移动到文件夹 | `PUT /automations/{automationId}/folder` | [在 API 参考中打开](reference.md#tag/automations/PUT/automations/{automationId}/folder) |

---

## 读取自动化

`GET /automations` 返回摘要（不含步骤），按最近更改时间排序；`folder_id=none` 列出未归入任何文件夹的自动化。`GET /automations/{automationId}` 添加完整的 `graph`：每个步骤 (`nodes[]`) 及其 `kind`、`label`、`alias`、`action`、`params` 和 `config`，以及带有 `from`、`to` 和（在条件等之后）`branch` 的连接 (`edges[]`)。

```bash
curl "https://api.dmchamp.com/v1/automations/8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f?apiKey=YOUR_API_KEY"
```

**值得注意**

- **`alias` 是后续步骤读取前一步输出的方式**，即 `${nodes.<alias>.<field>}`。没有输出的步骤通过其 id 引用。
- `params` 保留用于旧版读取器；`config` 承载相同的值以及更多信息（条件的规则、AI 步骤的提示词、延迟时长、操作的 slug 和参数）。
- **机密信息已隐藏。** 看起来像凭据的值（Webhook 机密、令牌、API 密钥、密码、标头值）将作为 `"[redacted]"` 返回。原样发送 `"[redacted]"`，存储的值将保持不变。
- **长文本会被截断。** 超过约 4,000 个字符的单个文本会被截断并以省略号结尾。如果您要发回该步骤，请先填回完整的文本。
- 如果无法连接到自动化服务，您将收到 `503`，而不是空列表。空列表始终表示没有任何自动化。

### 步骤目录

`GET /automations/steps` 返回构建自动化所需的一切：8 种 `node_kinds`、每个触发器及其设置 `fields` 和 `output_keys`、内置 `actions` 及其参数、`api_actions`（操作步骤可以调用的此 API 的操作）、`graph_rules` 语法以及 `counts`。这是构建器**提供**的内容，而非账户已构建的内容：在断定某个触发器或操作不存在之前，请先检查此目录。

- 如果没有 `q`，数百个 API 操作将作为按区域分组的标签返回在 `api_actions_by_tag` 中，而扁平列表为空。
- 使用 `q`（不区分大小写的单词）时，`api_actions` 是匹配项的扁平列表，上限为 60（`api_actions_truncated` 说明了原因）。已连接的第三方应用程序的操作也会被搜索并返回在 `app_actions` 中：按应用程序名称搜索，例如 `q=hubspot`。每个结果都会说明账户是否已`connected`该应用程序，`connected_apps` 列出了已连接的应用程序。`app_actions_unavailable` 为 `true` 表示此次无法搜索应用程序操作；其他列表仍然完整。

---

## 创建与编辑

### 创建草稿

```bash
curl -X POST "https://api.dmchamp.com/v1/automations?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Price question auto-reply",
    "description": "Replies with the price list when someone asks about prices.",
    "graph": {
      "nodes": [
        { "id": "trigger_1", "type": "trigger", "label": "Incoming message",
          "data": { "trigger": { "kind": "incoming_message", "message_filter_contains": "price" } } },
        { "id": "send_prices", "type": "action", "label": "Send message",
          "data": { "action": { "provider": "native", "slug": "SEND_MESSAGE",
            "params": { "contact_id": "${trigger.contact.id}", "body": "Hi ${trigger.contact.first_name}, here is our price list: https://example.com/prices" } } } }
      ],
      "edges": [{ "source": "trigger_1", "target": "send_prices" }]
    }
  }'
```

```json
{ "success": true, "automation": { "id": "8d2c7f1e-…", "enabled": false, "…": "…" }, "draft": true, "open_path": "/automations/8d2c7f1e-…", "warnings": [] }
```

`draft: true` 和 `enabled: false` 是正常的，并非失败：新的自动化在启用之前始终是草稿。`warnings` 列出了构建器无法完成的内容，以短标签形式显示（例如 `agent_function:not_linked`）。

**编写图表。** 来自目录的 `graph_rules` 是完整的语法。简而言之：

- 每个节点都有一个 `id`（在图中唯一）、一个 `type`（8 种[步骤类型](#step-kinds)之一）、一个可选的 `label`，以及其在 `data` 中以类型命名的键下的设置（`data.trigger`、`data.action`、`data.condition`、`data.delay`、`data.ai`、`data.loop`、`data.transform`、`data.respond`）。
- 自动化至少需要一个触发器。实时语法允许最多 10 个，当其中任何一个触发时，自动化就会启动。
- 所有其他步骤必须能够从触发器到达，且没有任何连接可以指向之前的步骤。
- 离开条件的边带有 `sourceHandle` `true` 或 `false`；循环带有 `body` 或 `done`；“等待回复”延迟带有 `replied` 或 `timed_out`。其他边则没有。
- 操作的 slug 和参数来自目录。**永远不要猜测 id**（代理、标签、列表、阶段）：请先通过 API 查找，或者将该字段留为 `""`，以便用户在构建器中选择。
- 位置是可选的；没有位置的步骤会自动布局。
- 来自先前步骤的值写为 `${trigger.<field>}` 和 `${nodes.<step>.<field>}`。请参阅[使用先前步骤的返回值](../automations/automations.md#using-what-an-earlier-step-returned)和[表达式](../automations/automations.md#expressions)。
- 图表接受两种拼写方式：构建器自己的（上文）和读取响应的（`kind`、`config`、`from`、`to`、`branch`）。因此，您可以读取一个自动化，更改一个步骤，然后将其发回。
- **创建操作不建议盲目重复。** 如果请求超时，请在再次发送之前列出您的自动化，否则您可能会得到两个草稿。

### 更新

`PUT /automations/{automationId}` 更改 `name`、`description` 和/或 `graph`（至少一个，或 `400`）。`graph` 会替换**整个**图表，因此请始终基于已存储的内容进行操作：读取它，更改您需要的内容，然后将整个图表发送回去。

```bash
curl -X PUT "https://api.dmchamp.com/v1/automations/8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Price question auto-reply (EN)" }'
```

- **保留每个步骤的 `alias`，确保与您获取时完全一致。** 如果更改或删除它，该步骤的所有引用都将变为空。请参阅 [命名您的步骤](../automations/automations.md#naming-your-steps)。
- **保持 `"[redacted]"` 值不变**，并**恢复被截断的文本**（以省略号结尾的文本在读取时已被截断）。
- 自动化的开启状态在此处不会被更改。如果它处于开启状态，您的编辑在保存后会立即生效。当它处于开启状态时，任何可能导致其自我触发的更改都将被拒绝：请先将其禁用。

### 启用和禁用

`POST /automations/{automationId}/enable` 用于开启自动化，使其从现在起根据触发器运行。请仅在账户所有者查看过自动化执行的操作及其对象，并表示同意后才调用此接口。构建器会拒绝开启无法运行的图表（没有触发器、存在循环、步骤自我触发），并返回一个说明原因的 `400`。

```bash
curl -X POST "https://api.dmchamp.com/v1/automations/8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f/enable?apiKey=YOUR_API_KEY"
```

`POST /automations/{automationId}/disable` 用于暂停自动化：已在进行的运行会完成，但不会开始新的运行。始终允许禁用。这两个调用都不需要请求体。

---

## 运行历史

`GET /automations/{automationId}/runs` 返回一个自动化的运行记录，按最新时间排序（`limit` 1 到 50，默认 10）：包括每次运行的开始和结束时间、触发原因、是否成功以及失败时的错误信息。读取自动化配置可以告诉您它**将要**做什么；运行历史记录则告诉您它**已经**做了什么，这是区分“从未运行的自动化”与“运行但每次都失败的自动化”的唯一方法。

```bash
curl "https://api.dmchamp.com/v1/automations/8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f/runs?apiKey=YOUR_API_KEY&limit=20"
```

- `mode` 对于实际运行为 `live`，对于编辑器中的**安全运行 (Safe run)** 则为 `safe`。安全运行不会发送任何内容，因此不能证明自动化在实际使用中有效。
- 空的 `runs` 列表是一个有效的响应，而不是缺失。此时响应会携带一个 `note`：要么是触发器从未触发，要么是自动化已关闭。

---

## 文件夹

文件夹仅用于在列表中对自动化进行分组。它们不会改变自动化的行为或其启用状态。请参阅 [在文件夹中组织自动化](../automations/automations.md#organizing-automations-in-folders)。

```bash
curl -X PUT "https://api.dmchamp.com/v1/automations/8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f/folder?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "folder_id": "f1a2b3c4-5d6e-7f80-91a2-b3c4d5e6f708" }'
```

- 列出文件夹也会返回 `unfiled_count`，即有多少自动化不在任何文件夹中。
- 文件夹名称是必需的，最多 100 个字符，且在账户内必须唯一（`409`，`code: "folder_name_taken"`）。您也可以在创建自动化时通过传递 `folder_id` 将其归档。
- 重命名不会改变自动化所在的位置。
- **删除文件夹仅删除文件夹本身。** 其包含的自动化将移动到“无文件夹”状态，并像以前一样继续运行；响应会说明移动了多少个自动化（`moved_to_no_folder`）。
- 移动时，`folder_id` 是必需的；发送 `null` 可将自动化移出其文件夹。

---

## 目录

### 步骤类型

| 类型 | 功能 |
|---|---|
| `trigger` | 当发生某事时启动自动化流程。 |
| `action` | 运行一个步骤：内置操作、API 操作、已连接应用的操作、HTTP 请求或电子邮件。 |
| `condition` | 根据规则拆分流程，分为 `true` 和 `false` 分支。 |
| `transform` | 运行一小段代码以在步骤之间重塑数据。 |
| `ai` | 使用您编写的提示词询问 AI。它可以返回文本、分离字段或从多个分支中选择一个。 |
| `delay` | 等待设定的时间，或等待联系人回复（带超时设置）。 |
| `loop` | 对列表中的每一项重复执行其中的步骤。 |
| `respond` | 向触发运行的 Webhook 调用或 AI 代理函数调用返回响应。 |

### 触发器

这些是目录目前列出的 40 个触发器，按构建器中的分组方式进行分类。**设置**列包含触发器自身的设置键 (`fields`)，用于缩小触发范围。每个触发器还接受 `respect_quiet_hours`、`run_hours`、`reentry` 和 `stop_on_response`；请参阅 [自动化设置](../automations/automations.md#automation-settings)。

**消息传递**

| 触发器 (`kind`) | 触发条件 | 设置 |
|---|---|---|
| 收到消息 (`incoming_message`) | 联系人在任何渠道发送消息。 | `campaign`（限制为一个 AI 代理）、`channel`、`message_filter_contains`（关键词）、`message_filter_regex`（模式） |
| 未接来电 (`missed_call`) | 有人拨打您的 WhatsApp Web 号码或您的个人短信号码且无人接听。 | `to_number` |
| 消息已送达 (`message_delivered`) | 您发送的消息被渠道确认送达。 | `channel`、`agent` |
| 消息发送失败 (`message_failed`) | 您发送的消息无法送达，并附带错误信息。 | `channel`、`agent` |
| 消息已发送 (`message_sent`) | 任何离开您账户的消息：AI 的、您的、广播或后续跟进。请进行过滤，否则它会在所有消息上运行。 | `channel`、`sent_by` |
| 已发送后续跟进 (`follow_up_sent`) | 自动后续跟进已发出。 | 无 |
| 已跳过后续跟进 (`follow_up_skipped`) | 因发送条件未满足而未发送后续跟进。 | 无 |
| 后续跟进已完成 (`follow_up_exhausted`) | 联系人收到了序列中的最后一条后续跟进，且没有更多排队内容。 | 无 |
| 对话已关闭 (`conversation_closed`) | 聊天已关闭，包含结束方式和摘要。 | `channel`、`agent` |
| 广播已完成 (`broadcast_completed`) | 广播发送完毕，包含发送数量和失败数量。 | 无 |
| 线索回复已分类 (`outreach_reply_labelled`) | 冷邮件线索的回复已分类，例如标记为“感兴趣”。 | `label` |
| 收到 Skool 评论 (`skool_comment_received`) | 成员在您评论规则监控的 Skool 帖子下发表评论。 | 无 |

**联系人**

| 触发器 (`kind`) | 触发条件 | 设置 |
|---|---|---|
| 新联系人 (`contact_created`) | 新人首次通过任何渠道联系您，也适用于导入、API 和您手动创建的联系人。 | 无 |
| 联系人已更新 (`contact_updated`) | 联系人字段发生变化。 | `field` |
| 您在此处添加的联系人 (`contact_added`) | 仅适用于您从“联系人”页面手动放入此自动化流程的联系人。每个联系人运行一次。 | 无 |
| 标签已添加 (`tag_applied`) | 标签被您的 AI 代理、人员、自动化流程或导入操作添加到联系人。 | `tag_name`、`channel`、`applied_by` |
| 标签已移除 (`tag_removed`) | 标签从联系人身上移除。 | `tag_name`、`channel` |
| Skool 成员加入 (`skool_member_joined`) | 有人加入您拥有或管理的 Skool 社区，包含其个人资料、回答和匹配分数。 | `group_id`、`create_contact` |
| Skool 成员已合格 (`skool_member_qualified`) | 新 Skool 成员的回答分数达到或超过您的阈值。 | `min_score` |

**交易**

| 触发器 (`kind`) | 触发条件 | 设置 |
|---|---|---|
| 交易已创建 (`deal_created`) | 新交易被添加到您的某个管道中。 | `pipeline_id`、`stage_id` |
| 交易阶段已更改 (`deal_stage_changed`) | 交易移动到不同阶段，标明离开的阶段和进入的阶段。 | `pipeline_id`、`to_stage_id`、`from_stage_id` |
| 交易已更新 (`deal_updated`) | 交易字段发生变化。 | `field` |

**预约**

| 触发器 (`kind`) | 触发条件 | 设置 |
|---|---|---|
| 预约已预订 (`appointment_booked`) | 新预约已预订。 | 无 |
| 预约已取消 (`appointment_cancelled`) | 已预订的预约被取消。 | 无 |
| 预约已改期 (`appointment_rescheduled`) | 已预订的预约移动到其他时间，显示旧时间和新时间。 | `event_id` |
| 预约前 (`appointment_upcoming`) | 在每次确认的预约前设定的时间，用于提醒。每个自动化流程最多五个提醒。 | `offsets_minutes` |

**任务**

| 触发器 (`kind`) | 触发条件 | 设置 |
|---|---|---|
| 任务已创建 (`task_created`) | 任务已创建。 | `task_type` |
| 任务已完成 (`task_completed`) | 任务被移动到已完成阶段。 | 无 |

**账户**

| 触发器 (`kind`) | 触发条件 | 设置 |
|---|---|---|
| 信用余额不足 (`low_credit_balance`) | 您的信用余额低于警报阈值。 | 无 |
| 渠道已连接 (`channel_connected`) | 您的某个渠道完成连接。 | `channel` |
| 渠道已断开 (`channel_disconnected`) | 您的某个渠道掉线：已登出、取消关联或被切断。自动重新连接的 WhatsApp Web 号码仅在 30 分钟后仍处于断开状态时才计入。 | `channel` |

**代理机构**

| 触发器 (`kind`) | 触发条件 | 设置 |
|---|---|---|
| 子账户已创建 (`sub_account_created`) | 从您的仪表板、API 或注册页面创建了新的客户账户。 | 无 |
| 子账户活动 (`sub_account_event`) | 您的某个客户账户发生变动：信用额度不足、渠道连接、计划变更。 | `event`、`threshold` |

**常规与应用**

| 触发器 (`kind`) | 触发条件 | 设置 |
|---|---|---|
| 按计划 (`schedule`) | 按 cron 计划执行。 | `cron`, `timezone` |
| Webhook (`webhook`) | 外部系统调用自动化的 Webhook 地址。 | `webhook_secret` |
| AI 智能体函数 (`agent_function`) | 您的 AI 智能体在对话期间将此自动化作为函数调用。 | `function_name`, `function_description`, `parameters`, `agent_ids`, `campaign_ids` |
| 新订阅源项目 (`rss`) | RSS 或 Atom 订阅源中出现新项目。 | `feed_url` |
| 收到电子邮件 (`email_received`) | 您的已连接邮箱收到一封电子邮件。 | `from_contains`, `subject_contains` |
| 应用事件 (`app_event`) | 已连接的应用中发生了某些情况：交易阶段变更、收到付款、提交了表单等。 | `toolkit`, `trigger_slug`, `connected_account_id`, `config` |
| 手动运行 (`manual`) | 仅在手动启动时触发。 | 无 |

每个自动化最多可以包含 `webhook`、`app_event`、`agent_function`、`rss`、`schedule`、`email_received`、`appointment_upcoming` 和 `contact_added` 各一个触发器。在记录创建时触发的触发器不能与创建相同记录的操作配对，因为这会导致自动化自我触发。

关于每个触发器传递给后续步骤的内容 (`output_keys`) 以及包含参数的操作完整列表，请阅读 `GET /automations/steps`。[自动化指南](../automations/automations.md#triggers) 以构建器的视角解释了每个触发器。

---

## 错误

每个错误都具有通用的 `{ "success": false, "error_code": <status>, "error": "..." }` 格式。被拒绝的图表会添加 `code` 和 `errors`：`errors` 列出了每个问题，每个问题用一个可修复的句子描述，`error` 是其中的第一个。请修复列出的内容并再次发送整个图表。`code` 是 `invalid_graph`、`automation_graph_has_a_cycle`、`self_triggering_automation`、`no_trigger` 之一，或者是来自构建器的其他代码。

| 状态 | 何时 |
|---|---|
| `400` | 图表被拒绝，缺少必需字段（创建时为 `name` 或 `graph`，移动时为 `folder_id`），更新请求未发送任何更改，ID 无效，或者文件夹名称缺失、为空或过长（`code: "invalid_name"`）。 |
| `403` | 账户没有自动化功能；客户账户的套餐不包含创建和编辑自动化（仅限写入）；或者团队成员的**自动化**访问权限过低。 |
| `404` | 此账户中没有该 ID 的自动化，没有该 ID 的文件夹（`code: "folder_not_found"`），或者 `sub_account_id` 不是您的客户账户之一。 |
| `409` | 同名文件夹已存在（`code: "folder_name_taken"`）。 |
| `413` | 自动化超过了构建器接受的 1 MB 大小限制。请将大型代码或数据移出其步骤。 |
| `422` | 构建器因其他原因拒绝了请求。请对照 `GET /automations/steps` 检查图表；再次发送相同的请求无济于事。 |
| `503` | 无法连接到自动化服务。请稍后再试。对于创建操作，请先列出您的自动化列表，以免创建第二个草稿。 |

::: master-only
## 通过 MCP 使用这些端点

此页面上的每个端点也是您 [通过 MCP 连接](../integrations/connect-ai-clients.md) 的 AI 助手的工具，遵循相同的规则：新的自动化在启用前为草稿，对正在运行的自动化进行的编辑会立即生效。

| 工具 | 端点 |
|---|---|
| `list_automations` | `GET /automations` |
| `get_automation` | `GET /automations/{automationId}` |
| `list_automation_steps` | `GET /automations/steps` |
| `create_automation` | `POST /automations` |
| `update_automation` | `PUT /automations/{automationId}` |
| `enable_automation` | `POST /automations/{automationId}/enable` |
| `disable_automation` | `POST /automations/{automationId}/disable` |
| `list_automation_runs` | `GET /automations/{automationId}/runs` |
| `list_automation_folders` | `GET /automations/folders` |
| `create_automation_folder` | `POST /automations/folders` |
| `rename_automation_folder` | `PUT /automations/folders/{folderId}` |
| `delete_automation_folder` | `DELETE /automations/folders/{folderId}` |
| `move_automation_to_folder` | `PUT /automations/{automationId}/folder` |
:::

---

## 后续步骤

- [自动化](../automations/automations.md)：触发器、步骤、变量和运行历史在构建器中是如何工作的。
- [代理 API](../agency/api-for-agencies.md)：使用 `sub_account_id` 在客户账户上构建自动化。
- [API 参考](reference.md)：完整的交互式端点浏览器。
