# Escalate：转交给人工

暂停这个对话上的 AI，并提醒一个人 —— 当 AI 无法或不应该独自走完一条路径时的保底机制。

## 快速上手

1. 进入 **Automate → Workflows** 打开一个工作流。点 **+**，选 **Escalate**。
2. 没有需要配置的内容 —— 它会立刻暂停 AI 并提醒一个人。
3. 在 Escalate 前面加一个 **Assign To (human)** 步骤，这样提醒会发给某一个人，而不是每一位所有者和管理员。
4. 在顶部工具栏把 **Status** 设成 **Published**，点 **Save**，再确认 **发布**。客服请找所有者或管理员。

## 注意

- 团队里任何人在 **Settings → Profile → 已连接的应用** 下连接的 AI 应用，之后照样可以给客户发消息 —— 它不理会这个暂停。
- 即使实际上没有人收到提醒，Escalate 也会显示为已完成 —— 不要把它当成唯一的确认方式。

## 在哪里找到它

**Automate → Workflows**，打开一个工作流，在画布上点 **+**，然后在 **Add Steps** 里选 **Escalate**。

## 开始之前

- **所有者**、**管理员** 或 **客服** 都可以添加这一步并保存工作流。发布它是 **所有者** 或 **管理员** 的操作。
- 能不能搭建和运行工作流取决于你的套餐，详见[价格](/pricing)。
- 不需要连接 Inchat 以外的任何东西，也没有需要配置的内容 —— Escalate 不带任何字段。

## 设置步骤

1. 打开工作流，在需要转交给人工的位置点 **+**。
2. 选 **Escalate**。没有需要配置的内容。
3. 保存这一步。要发布：在编辑器顶部的工具栏把 **Status** 设成 **Published**，点 **Save**，再用 **发布** 确认。只改下拉框、不保存的话什么都不会生效。

## 它如何运作

- 这一步会在对话的时间线上写一条仅内部可见的备注，记录这个对话被工作流转交了 —— 客户永远看不到这条备注。
- 它会把这次转交和 AI 自己决定的转交记在一起，方便在同一个地方查看。
- 它暂停这个对话上 AI 的方式，和客户主动说「我要找人工」一样。
- 这个暂停会被客户发来的下一条消息读取到，也会被这次运行、或它转交出去的那个运行里的 **AI Reply** 步骤读取到。
- 但通过 MCP 连接的 AI 应用不会读取这个暂停 —— 那条路径只检查 **Pause AI / Unassign** 单独设的那个暂停，不检查这个。
- 所以即使 Escalate 刚让这个对话安静下来，MCP 连接的应用照样可以给客户发消息。
- 这是目前已知的一个缺口，不是这一步现在打算去防止的情况。
- Escalate 还可能加上一条 AI 写的摘要备注和一个第二天的任务，交给负责人 —— 但如果自你的团队上次回复之后 AI 已经写过摘要，就不会再加。
- **AI Reply** 步骤自己拒答时已经会写一条这样的摘要，所以紧跟在它后面的 Escalate 步骤，通常两样都不会再加。
- 它会提醒一个人：通过和其他「需要人工」时刻一样的渠道推送通知。
- 这条提醒会遵循每个人自己的通知设置 —— 他们的通知范围、静音设置和在岗状态。
- 它还会发一条应用内通知：如果对话有负责人且他还能触达这个渠道，就发给这位负责人；如果没有，就发给每一位所有者和管理员。
- 它不会把对话分配给任何人 —— 一个对话可以已经转人工，却仍然显示为未分配。

## 它在什么时候会失败

- 提醒可能谁都没提醒到 —— 推送通知和应用内通知可能各自独立地失败。
- 即使两个都没送达，这一步目前仍然会被记录为成功。
- 所以运行日志里，没有单独的信号能看出提醒谁都没送到。
- 这一步自己有两处写入可能会让它失败，却不带任何原因说明 —— 暂停本身，以及把这次转交记录下来供查看。
- 所以运行日志可能只显示这一步失败了，却说不清是这两处里的哪一处。
- 不过还有第三种原因会说明自己：这一步运行期间对话被人拿走了 —— 比如恰好有人在同一时刻接管了它。
- 这种情况会让运行停下来，而不是继续往下走。

## 它不会做什么

- 它不会给客户发任何东西 —— 它写的备注和起草的交接摘要，都只是内部可见。
- 它不会把对话分配给某个人；**Assign To (human)** 才是把对话放进某人队列的那一步。
- 如果这段对话已经有摘要了，摘要备注和跟进任务都会被跳过。
- 这个任务还需要对话已经有负责人 —— 它只会交给这位负责人，绝不会新挑一个人 —— 并且需要 AI agent 自己的跟进任务设置是开启的。
- 有同事回复，或者有人点击 **恢复 AI**，这个暂停就会解除。
- 人工回复还会单独触发一段几小时的 AI 静默期，所以人工一回复，机器人不一定会立刻说话。
- 在已转人工的对话上，收件箱在网页和应用里都会提供 **恢复 AI**，取代 **接管**。
- 在转交之后运行一个 **Assign To (AI)** 步骤，并不会解除这个暂停，因为那一步从不会清除它。
- 同一次运行里，那个 Assign To (AI) 步骤会显示成功，但 AI 仍然保持沉默。
- 另一次遇到这个暂停的自动运行会被拒绝，并在那里停下。
- 它设置的暂停和 **Pause AI / Unassign** 设置的是不同的 —— 清除一个不会清除另一个。
- 目前在运行日志里，失败的提醒和成功的提醒无法区分 —— 不管哪种情况，这一步都会显示成功。
- MCP 的 `send_message` 工具完全不会检查这个暂停 —— 见「它如何运作」。
- 把 Escalate 理解成让 Inchat 自己的自动回复和工作流路径安静下来，而不是堵住所有 AI 撰写的消息触达这个对话的途径。

## 最佳做法

- 在转交之前，先把对话分配给一个人，而不是之后再分配。
- Escalate 自己的提醒，是发给对话现有的负责人 —— 如果还没有负责人，就发给每一位所有者和管理员。
- 所以先分配，才能让提醒发给某个具体的人，而不是整个团队。
- 当重点是「需要有人现在就看一下」时用 Escalate。当重点只是「这归他们管」、不带紧急含义时，用 **Assign To (human)** 或 **Assign To (team)**。
- 不要以为在同一条路径上，**AI Reply** 拒答之后，Escalate 一定会再加一个自己的跟进任务。
- 拒答本身已经会写一条摘要，所以紧跟在它后面的 Escalate 步骤，通常既不会再写第二条备注，也不会再建任务。
- 如果流程在那里确实需要一个任务，就明确加一个 **Create a Task** 步骤。

## 使用场景

- **AI Reply** 步骤拒绝回答；这条路径先把对话分配给一个人，再转交。
- AI 的拒答已经提醒了当时持有这个对话的人；Escalate 在此之上增加的是 AI 暂停，以及一条专门发给这位负责人的提醒。
- 客户的消息匹配了一个专门用来识别投诉的 Condition，流程立刻转交，而不是让 AI 先尝试回答。

## 常见问题与排查

### 客户能看到对话被转交了吗？

不能。它写的备注只是内部可见，只有团队能看到，客户永远看不到。

### Escalate 会把对话分配给谁吗？

不会。它只会提醒人并暂停 AI，之后对话仍然可能显示为未分配。如果还需要落进某个具体的队列，要配合一个分配步骤一起用。

### 我怎么知道提醒有没有真的送到人？

目前运行日志看不出来 —— 即使推送通知和应用内通知都没送到任何人，这一步也会被记录为成功。

### Escalate 也会建任务吗？

有时候会。它可以起草第二条 AI 写的摘要备注，以及一个第二天的跟进任务。如果这段对话（从上次人工回复算起）已经有摘要了，两样都会被跳过；AI Reply 步骤自己拒答时会写一条摘要，所以紧跟在它后面的 Escalate 通常两样都不会建。任务还额外需要对话已经有负责人，并且需要 AI agent 自己的跟进任务设置是开启的；备注则不依赖这两个条件。

### 通过 MCP 连接的 AI 应用，在 Escalate 之后还能给客户发消息吗？

可以，目前确实可以 —— MCP 的发送工具检查的是另一个暂停，也就是 Pause AI / Unassign 设置的那个，不是 Escalate 设置的这个。这是产品目前已知的一个缺口，不是这一步现在能阻止的。

## 相关文章

- [Assign To (human)：转给同事](https://inchat.inseller.my/help/zh/workflows/assign-to-human)
- [Assign To (team)](https://inchat.inseller.my/help/workflows/assign-to-team)
- [Pause AI / Unassign](https://inchat.inseller.my/help/workflows/pause-ai-unassign)
- [AI Reply](https://inchat.inseller.my/help/workflows/ai-reply)
- [Create a Task](https://inchat.inseller.my/help/workflows/create-a-task)

---

Source files: `src/lib/workflows/ai-builder/spec.ts`, `src/lib/workflows/canvas-model.ts`, `src/components/workflows/WorkflowStepConfigDrawer.tsx`, `src/lib/workflows/engine-message-actions.ts`, `src/lib/orchestrator/thread-gate.ts`, `src/lib/notifications/human-needed.ts`, `src/lib/inbox/send-reply.ts`, `src/lib/inbox/takeover.ts`, `src/lib/inbox/human-reply-hold.ts`, `src/lib/ai/handoff-summary.ts`, `src/lib/ai/handoff-note.ts`, `src/lib/mcp/tools.ts`, `src/components/inbox/ThreadOwnerToggle.tsx`, `src/lib/workflows/engine.test.ts`
