# Wait：暂停流程

暂停这次运行，等待一段时长或到某个时间点，也可以选择只在营业时间或每天的固定时段内继续。

## 快速上手

1. 进入 **Automate → Workflows** 打开一个工作流。点 **+**，选 **Wait**。
2. 选择 **Wait for a duration**（1–15 秒，或分钟、小时、天）或 **Wait until a time of day**。
3. 可选：勾选 **Only continue during business hours** 或 **Only continue between set hours, every day**（两者不能同时选）。
4. 选固定时段的话，填写 **From** 和 **to**（默认 09:00–21:00）。
5. 在顶部工具栏把 **Status** 设成 **Published**，点 **Save**，再确认 **发布**。客服请找所有者或管理员。

## 注意

- 停止、取消发布，或编辑后重新发布工作流，都会丢弃每位客户还没走完的等待 —— 排在已回答的 **Ask a Question** 之后的等待除外。

## 在哪里找到它

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

## 开始之前

- **所有者**、**管理员** 或 **客服** 都可以添加这一步并保存工作流。发布它是 **所有者** 或 **管理员** 的操作。
- 能不能搭建和运行工作流取决于你的套餐，详见[价格](/pricing)。
- 不需要连接 Inchat 以外的任何东西。要把等待限制在营业时间内，需要先在 **Settings → General** 里设置营业时间。

## 设置步骤

1. 打开工作流，在需要暂停的位置点 **+**。
2. 选 **Wait**。
3. 选择 **Wait for a duration**（秒、分钟、小时或天）或 **Wait until a time of day**。
4. 可选：勾选 **Only continue during business hours**，或 **Only continue between set hours, every day** —— 不能两个都选。
5. 保存这一步。要发布：在编辑器顶部的工具栏把 **Status** 设成 **Published**，点 **Save**，再用 **发布** 确认。只改下拉框、不保存的话什么都不会生效。

## 字段

| 字段 | 含义 | 默认值 | 限制 |
| --- | --- | --- | --- |
| Wait for a duration | 一个数字加一个单位 —— 秒、分钟、小时或天。 | — | 秒数必须是 1 到 15，或者 60（一分钟）以上 —— 中间的数值不可以。总上限是 90 天。 |
| Wait until a time of day | 一天中的某个时间点。会在这个时间点下一次出现时恢复 —— 如果今天已经过了，就是明天。 | — | 这个模式没有时区选择 —— 它始终按 Asia/Kuala_Lumpur 时间恢复，不管工作区或联系人在哪个时区。 |
| Only continue during business hours | 如果等待结束的时间落在工作区营业时间之外，会一直等到工作区下一次开始营业。 | 关闭 | 使用 Settings → General 里设置的营业时间。不能和下面的固定时段限制同时使用。 |
| Only continue between set hours, every day | 如果等待结束的时间落在每天固定时段（每周每天都算，包括周末）之外，会被拉到这个时段内离它最近的时刻。 | 关闭；打开后默认 09:00–21:00 | 按这种方式限制的等待，如果本来会落在时段之外，会被推迟到下一个时段开始 —— 比如夜间的等待会改到第二天早上发。如果那个早上仍然在消息窗口之外（例如 WhatsApp 的 24 小时窗口），消息会改在窗口关闭前的最后一刻发出，确保还能送达。这个提前机制只对不到一天长的等待有效；更长的等待会照样跨过窗口，不会被修正。如果时段内根本没有合适的时刻，就不会往回拉，发送到点时可能会失败。不能和上面的营业时间限制同时使用。 |

## 它如何运作

- 短等待 —— 15 秒以内，并且要这次运行到目前为止累计的短等待时间，仍然落在同一个窗口内 —— 才会真的原地暂停这次运行。
- 更长的等待会改为排队调度，在下一次队列检查时恢复，而不是一直占着不放。
- 排队调度的等待，会在检查到期等待的任务运行时恢复，大约每分钟一次 —— 这是和处理客户新消息不同的另一项检查。
- 排队的等待到期时，恢复之前会重新检查一次工作流和对话状态。
- 如果工作区套餐已经不再包含工作流功能，这个等待会被悄悄取消，而不是恢复。
- 如果工作流已被删除，恢复操作一律会被拒绝。
- 如果工作流已被停止、取消发布，或者编辑后重新发布，恢复操作也会被拒绝。
- 如果期间有同事接管了对话、AI 被暂停，或联系人被屏蔽，恢复操作同样会被拒绝。
- 有一种情况例外：排在已回答的 Ask a Question 之后的等待，即使工作流被停止、取消发布或重新发布，也会继续恢复 —— 但如果工作流被删除就不行；见「它不会做什么」。
- **Only continue during business hours** 只会把到期时间往后推，推到下一次开门的时刻。
- **Only continue between set hours, every day** 本身也只会往后推。
- 但如果往后推会让发送超出渠道自己的消息窗口，这个限制会改成拉回到窗口内最晚还来得及的那一刻。
- 这样发送可能会落在当晚更早的时间，而不是第二天早上。

## 它在什么时候会失败

- 等待期间工作区套餐不再包含工作流功能：后续会被悄悄取消 —— 不会运行，事后也不会把原本那次运行标记为失败。
- 客户有等待排队时，工作流被停止、取消发布，或编辑后重新发布：这位客户排队中的后续会被丢弃。
- 它既不会按旧状态恢复，也不会按新状态恢复 —— 除非这个等待排在同一条流程里已回答的 **Ask a Question** 之后；见「它不会做什么」。
- 即使是那种例外情况，工作流被删除也从不豁免。
- 排队的等待到期时，如果同事已经接管了对话、AI 被暂停，或联系人被屏蔽：恢复操作会被拒绝。
- 唯一的例外是剩下的步骤都只写内部数据 —— 标签、字段、备注 —— 不会触达客户。
- 这种后续即使在自动化被暂停的对话上，也照样会运行。
- 原因可以在工作流的 **Activity** 标签页里查看：在 **Execution log** 下选中那次运行，这一步的那一行会写明原因。

## 它不会做什么

- 单个步骤的暂停时长不能超过 90 天。
- 一天以上的等待，通常会超过 WhatsApp 上 24 小时的窗口，所以在这个渠道上，长时间等待之后接的应该是一个[模板](/help/workflows/send-whatsapp-template)，而不是普通消息。
- 停止、取消发布，或编辑后重新发布工作流，意味着当前所有在这个工作流上等待的客户，都不会收到他们的下一步。
- 有一种例外：排在同一条流程里已回答的 Ask a Question 之后的等待。
- 这种后续绑定的是客户当时被问到时看到的那个工作流版本，所以即使工作流之后被停止或重新发布，它也会一直按那个已经过时的版本恢复。
- 即便如此，删除工作流也不在豁免之列。
- 两个限制选项互斥 —— 两个都设置的话，保存会被拒绝。

## 最佳做法

- 给客户的跟进，应该限制在固定时段而不是营业时间。
- 固定时段每天都适用，包括周末，所以周六晚上的等待会在周日早上恢复，而不用等到周一。
- 把营业时间限制留给下一步需要团队而不是客户处理的等待 —— 比如转交，或者回电承诺。
- 如果排队中的跟进很重要，就先别重新发布还有长等待正在进行中的工作流 —— 等这些等待清空之后再发布改动。

## 使用场景

- 付款提醒等待一天，检查发票是否还没结清，然后才发下一条催促。
- 深夜发出的报价，等待两小时后再跟进，并限制在固定时段内，好让跟进落在第二天早上，而不是午夜之后。

## 常见问题与排查

### Wait 能不能暂停到一个具体日期，比如「3 月 5 日晚上 6 点」？

不能直接做到 —— Wait 只能暂停一段时长，或到一天中的某个时间点。要用固定日期，请改用带日期范围的 Date & Time（营业时间），或者改从 [**Contact Date Reached**](/help/workflows/workflow-triggers#contact_date_reached) 启动这个工作流。

### 我重新发布（或停止）了工作流，但客户的跟进消息一直没发出去。

一个工作流被停止、取消发布，或编辑后重新发布时，排在它上面的等待会被丢弃 —— 它既不会按旧状态恢复，也不会按新状态恢复。唯一的例外是排在已回答的 Ask a Question 之后的等待：这种后续绑定的是客户当时看到的那个版本，所以即便如此也会继续按那个版本恢复。删除工作流的话，不管哪种情况，等待都会被丢弃。要么等排队中的等待清空之后再发布改动，要么就接受其他正在进行中的等待不会触发。

## 相关文章

- [Date & Time (business hours)](https://inchat.inseller.my/help/workflows/date-and-time-business-hours)
- [Remove from Workflow](https://inchat.inseller.my/help/workflows/remove-from-workflow)
- [Avoid workflow loops](https://inchat.inseller.my/help/workflows/avoid-workflow-loops)

---

Source files: `src/lib/workflows/ai-builder/spec.ts`, `src/lib/workflows/canvas-model.ts`, `src/components/workflows/WorkflowStepConfigDrawer.tsx`, `src/lib/workflows/wait-until.ts`, `src/lib/workflows/pending.ts`, `src/lib/workflows/engine.ts`, `src/lib/workflows/workflow-input-schema.ts`, `src/lib/workflows/execution-guard.ts`, `src/lib/workflows/internal-actions.ts`, `src/lib/workflows/question-resolve.ts`, `src/app/api/cron/pending-actions/route.ts`
