## 开始之前

- 如果这是您第一次使用小程序，请先阅读 [什么是小程序？](/docs/what-is-a-mini-app)。它会说明小程序的作用，以及客户在 WhatsApp 中会看到什么。
- 发布前，您的 WhatsApp Business 账户必须已连接到 EasyBiz。请参阅 [连接和配置 WhatsApp](/docs/connect-and-configure-whatsapp)。
- 您需要 WhatsApp 设置的权限。如果要发布到尚未加入订阅的 WhatsApp 号码，还需要有账单权限的人员确认。

<Callout type="note" title="📝 如果您之前设置过小程序">
小程序现在位于“设置”的 **销售渠道** 部分，编辑器的样子和 WhatsApp 模板编辑器一样。您原有的小程序、页面和问题都还在，不需要重新设置。
</Callout>

---

## 在哪里找到

1. 点击右上角的 ⚙️ 设置图标。
2. 在 **销售渠道** 部分，点击 **WhatsApp 小程序**。
3. 点击您要编辑的小程序。

把鼠标指向列表中的某个小程序时，右侧的手机会显示它的第一个页面，方便您在打开前找到正确的那个。每个小程序都会显示它有几个页面，以及当前状态。

| 状态 | 含义 |
| --- | --- |
| <Badge>草稿</Badge> | 从未发布过，客户还收不到 |
| <Badge>已发布</Badge> | 客户收到的就是您在编辑器中看到的内容 |
| <Badge>有未发布的更改</Badge> | 已上线，但有些修改要等您再次发布后客户才会收到 |

如需新建，点击 <Badge>添加小程序</Badge> 并选择一个模板。每个模板都有自己的设置指南，从 [设置客户注册小程序](/docs/setting-up-a-customer-sign-up-mini-app) 开始。

![设置中的“WhatsApp 小程序”列表，红框标出“添加小程序”按钮，右侧手机预览显示鼠标所指小程序的第一个页面](https://cdn.easybizcloud.app/knowledge/ba264061-847f-421c-bf02-4ace00e8f590.png)

---

## 编辑器的两侧

打开小程序后，编辑器分为两侧。

- **左侧** 是您的设置。顶部的路径，例如 WhatsApp 小程序 › Laundry Pickup & Delivery › Pickup Date & Time，显示您当前所在的位置。点击路径中的任意一级即可返回上一层。
- **右侧** 是手机预览。它显示客户看到的页面，并会随着您的编辑即时更新。手机上方是工具栏，里面有 <Badge>发布</Badge>；小程序上线后，还会出现 <Badge>发送测试</Badge> 以及 <Badge>草稿</Badge> 和 <Badge>实时预览</Badge> 切换。

如需让预览更大，点击工具栏中的 <Badge>隐藏设置</Badge>。点击 <Badge>显示设置</Badge> 即可恢复。

编辑器没有“保存”按钮。每次修改都会自动保存到草稿中。在您点击 <Badge>发布</Badge> 之前，客户收到的仍是上一次发布的版本。

<Callout type="note" title="📝 注意">
如果您是从现成模板开始，页面、问题和页脚操作都已经为您设置好了。通常您只需要根据自己的店铺调整问题、标签和选项。
</Callout>

![Laundry Pickup & Delivery 小程序的编辑器：左侧是页面列表和小程序设置，右侧是 Contact 页面的手机预览，工具栏中有“发布”](https://cdn.easybizcloud.app/knowledge/fc47c8e9-e6c0-4ff6-97c3-d1e786d52b22.png)

---

## 页面

页面就是客户点按继续之前需要填写的一页。打开小程序后，**页面** 列表会按客户经过的顺序，从上到下列出所有页面。每个页面名称下方会显示它属于哪一种页面，例如 Contact Form 或 Pickup Options。

- **调整顺序：** 按住页面的拖动手柄，向上或向下拖动。
- **预览页面：** 把鼠标指向它，手机就会显示该页面。
- **编辑页面：** 点击它。页面会在自己的层级中打开，详见 [页面内部](#页面内部)。

<Callout type="important" title="⚠️ 调整顺序后请检查最后一个页面">
每个页面底部的按钮会把客户带到列表中的下一个页面。如果把另一个页面移到了最后，请检查它的页脚操作，因为最后一个页面负责创建订单或保存预约。
</Callout>

![Laundry Pickup & Delivery 小程序的页面列表，红框标出 Address 行的拖动手柄，手机预览显示 Address 页面](https://cdn.easybizcloud.app/knowledge/c1d84d14-2318-4fc5-b634-147a827e7db9.png)

---

## 添加页面

1. 在 **页面** 列表中，点击 <Badge>添加页面</Badge>。
2. **添加屏幕** 面板打开，列出六种页面。点击您需要的那一种。

| 选择这个 | 它的作用 | 页面名称为 |
| --- | --- | --- |
| <Badge>Contact Form</Badge>（联系方式表单） | 收集客户姓名、电话号码和电子邮件 | Contact |
| <Badge>Address Form</Badge>（地址表单） | 收集地址，并支持按邮政编码查询 | Address |
| <Badge>服务选项</Badge> | 让客户选择想要的服务，价格来自您的服务目录 | Service Options |
| <Badge>Pickup Options</Badge>（取件选项） | 让客户选择取件日期和时间段 | Pickup Date & Time |
| <Badge>Delivery Options</Badge>（配送选项） | 让客户选择配送日期和时间段 | Delivery Date & Time |
| <Badge>Blank</Badge>（空白） | 一个由您自己搭建的空页面 | 您输入的任何名称 |

3. **屏幕标题** 框中会显示建议的名称。您可以修改，然后点击 <Badge>添加</Badge>。空白页面没有建议名称，请先输入一个。
4. 新页面会加在列表末尾，并立即打开。回到小程序层级后，把它拖到列表中合适的位置。

<Callout type="tip" title="💡 提示">
请选择最接近您所需信息的现成页面。只有当五种现成页面都不适合您想问的问题时，才使用 <Badge>Blank</Badge>。
</Callout>

![“添加屏幕”面板，列出六种页面，红框标出 Pickup Options 卡片](https://cdn.easybizcloud.app/knowledge/4a85dea9-3b53-4cd2-a27b-23bc97e6b3fd.png)

---

## 页面内部

在列表中点击一个页面即可打开它。它的设置从上到下分为四部分：

- **页面：** 页面的 **名称**。修改后点击框外或按 Enter 即可保留。这个名称会显示在客户手机上该页面的顶部。
- **内容：** 页面上显示和询问的所有内容。
- **页脚操作：** 页面底部的按钮。
- <Badge>移除页面</Badge>：把整个页面从小程序中移除。

### 内容

**内容** 列表中的每一项都是页面上的一样东西：标题、一段文字、一张图片或一个问题，例如客户的姓名或电话号码。如果您以前用过小程序，这些就是编辑器以前所说的“区块”。

1. 点击某一项，它的设置就会直接在列表中展开。您输入时，手机预览会同步更新。
2. 再次点击该项即可收起。
3. 如需移动某一项，按住它的手柄向上或向下拖动。
4. 如需把某一项从页面中拿掉，展开它并点击 <Badge>移除</Badge>，然后再次点击 <Badge>移除</Badge> 确认。发布后客户就看不到它了。

![Contact 页面，Customer name 一项已就地展开，显示“输入数据字段”“标签”“必填”和“可见性”，红框标出展开的这一项，右侧是手机预览](https://cdn.easybizcloud.app/knowledge/2a13c3cf-e3d6-491f-812a-0c9b681e8ad6.png)

### 添加内容

点击内容列表顶部的 <Badge>添加内容</Badge>，选择您要添加的东西。新项目会加在列表底部并自动展开，方便您填写。如果它应该放得更靠前，把它往上拖即可。

**用于显示信息**

| 选择这个 | 它会添加 |
| --- | --- |
| <Badge>Heading</Badge> / <Badge>Subheading</Badge> | 大标题或小标题 |
| <Badge>Body</Badge> / <Badge>Caption</Badge> | 一段正文，或较小的提示文字 |
| <Badge>Rich Text</Badge> | 带格式的文字，例如粗体和列表 |
| <Badge>Image</Badge> / <Badge>Image Carousel</Badge> | 一张图片，或多张可以左右滑动的图片 |
| <Badge>Embedded Link</Badge> | 一行客户可以点按的文字，例如“查看我们的条款” |

**用于提问**

| 选择这个 | 客户要做的事 |
| --- | --- |
| <Badge>Text Input</Badge> / <Badge>Text Area</Badge> | 输入简短回答，或较长的备注 |
| <Badge>Dropdown</Badge> / <Badge>Radio Buttons</Badge> | 从列表中选一个答案 |
| <Badge>Checkbox Group</Badge> / <Badge>Chips Selector</Badge> | 选一个或多个答案 |
| <Badge>Checkbox</Badge> | 勾选一个框，例如同意您的条款 |
| <Badge>Date Picker</Badge> / <Badge>Calendar Picker</Badge> | 选择一个日期 |
| <Badge>Navigation List</Badge> | 点按列表中的选项，前往另一个页面 |

菜单中还有 <Badge>Switch</Badge>，它会根据某个答案显示不同的内容。大多数店铺都用不到。

![名为 Special Instructions 的空白页面上打开的“添加内容”菜单，列出 Heading、Subheading、Body、Caption、Rich Text、Text Input 等内容类型，红框标出“添加内容”](https://cdn.easybizcloud.app/knowledge/5e20ea6d-364c-46a7-86df-b7d178e0f495.png)

### 问题的设置

大多数问题展开后都有以下四项设置。

**输入数据字段** 会把问题关联到 EasyBiz 中的某个字段，让系统知道把答案保存到哪里。例如，Customer name 问题会保存到客户资料中的姓名字段。您可以在 ⚙️ 设置的 **库** 部分，打开 **自定义字段** 创建自己的字段。

**标签** 是客户在手机上看到的文字。您可以随意修改，不会影响答案保存的位置。

**必填**

| 选择这个 | 会发生什么 |
| --- | --- |
| <Badge>非必填</Badge> | 客户可以跳过 |
| <Badge>始终必填</Badge> | 客户必须回答后才能继续 |
| <Badge>条件式</Badge> | 只有在您设置的条件成立时才必填 |

**可见性**

| 选择这个 | 会发生什么 |
| --- | --- |
| <Badge>始终可见</Badge> | 每位客户都会看到这个问题 |
| <Badge>条件式</Badge> | 只有在您设置的条件成立时，这个问题才会出现，例如只有 HDB 或 Condo 住户才显示单元号 |

<Callout type="note" title="📝 注意">
标题、文字、图片和链接只用来显示信息，所以没有输入数据字段。在五种现成页面上，问题只能保存到该页面专用的字段。
</Callout>

### 条件式如何运作

只有当某个问题只需对部分客户显示或必填时，才需要用到它。选择 <Badge>条件式</Badge> 后，请设置以下三个部分：

- <Badge>何时</Badge>：EasyBiz 要检查的问题或字段。
- <Badge>操作员</Badge>：EasyBiz 如何检查答案。
- <Badge>值</Badge>：让条件成立的答案。

| 比较方式 | 简单含义 |
| --- | --- |
| <Badge>等于</Badge> | 答案必须正好是这个值 |
| <Badge>不是</Badge> | 答案不能是这个值 |
| <Badge>属于任意</Badge> | 答案与您所选的任意一个值相同即可 |
| <Badge>包含任意</Badge> | 对于可以选多个答案的问题，已选答案中至少有一个相符 |
| <Badge>有值</Badge> | 客户已经输入或选择了答案 |
| <Badge>为空</Badge> | 客户还没有输入或选择答案 |

EasyBiz 只会显示适用于您所选字段的比较方式，所以您不一定能看到此表中的每个选项。

<Callout type="example" title="💡 示例">
CleanFast Laundry 只需要为公寓住户收集单元号。他们在 <Badge>何时</Badge> 中选择 Property Type，<Badge>操作员</Badge> 选择“属于任意”，然后在 <Badge>值</Badge> 中选择 HDB 和 Condo。
</Callout>

---

## 页脚操作

每个页面设置的最下方都有 **页脚操作**。这是客户点按以继续往下走的按钮，它决定 EasyBiz 在那一刻做什么。

它有两项设置：

- <Badge>操作类型</Badge> 决定客户点按按钮时 EasyBiz 做什么。
- <Badge>操作标签</Badge> 是按钮上的文字，例如 **Continue**、**Book Pickup** 或 **Confirm Reschedule**。如果留空，按钮会显示 **Continue**，在最后一个页面上则显示 **Complete**。修改标签只会改变按钮上的文字，不会改变按钮的作用。

![Pickup Date & Time 页面，红框标出“页脚操作”部分：操作类型为 Schedule Job，操作标签为 Book Pickup，手机预览中显示 Book Pickup 按钮](https://cdn.easybizcloud.app/knowledge/9053907d-272b-4ce3-b056-137aa8745909.png)

### 操作类型

EasyBiz 只会提供适合当前页面的操作类型，所以您不会在每个页面上都看到所有选项。

| 操作类型 | 客户点按后会发生什么 | 何时使用 |
| --- | --- | --- |
| <Badge>Next</Badge>（下一步） | 前往下一个页面，不保存任何内容 | 只需要让客户继续往下走的中间页面 |
| <Badge>Save Customer</Badge>（保存客户） | 创建或更新客户资料，然后继续 | Contact 页面 |
| <Badge>Save Address</Badge>（保存地址） | 把地址保存到该客户名下，然后继续 | Address 页面，放在客户资料保存之后 |
| <Badge>Schedule Job</Badge>（安排任务） | 在已有的订单上预约取件或配送，然后关闭表单 | Schedule Delivery 或 Reschedule 小程序的最后一个页面 |
| <Badge>Create Order</Badge>（创建订单） | 在 EasyBiz 中创建新订单并关闭表单 | New Order 小程序的最后一个页面 |
| <Badge>Fetch Booking Options</Badge>（获取预订选项） | 不离开页面，重新加载可选的日期和时间段 | 很少需要，因为日期页面上已经有“刷新”链接 |
| <Badge>Complete Flow</Badge>（完成流程） | 不保存任何内容，直接关闭表单 | 最后的感谢页或信息页 |
| <Badge>Go Back</Badge>（返回） | 让客户回到之前的某个页面 | 在空白页面上多给客户一个返回的方式 |

<Callout type="note" title="📝 注意">
<Badge>Schedule Job</Badge> 会自己判断该做什么。如果订单已经预约了取件或配送，它会把那个预约改到新的日期；如果还没有，它会新建一个。所以同一个操作可以同时用于 Schedule Delivery 和 Reschedule 小程序。
</Callout>

### 每个页面提供哪些操作

| 页面 | 您可以选择的操作类型 |
| --- | --- |
| Contact | Next, Complete Flow, Save Customer |
| Address | Next, Complete Flow, Save Address |
| Service Options | Next, Complete Flow, Create Order |
| Pickup Date & Time | Next, Complete Flow, Fetch Booking Options, Schedule Job, Create Order |
| Delivery Date & Time | Next, Complete Flow, Fetch Booking Options, Schedule Job, Create Order |
| Blank | 全部操作类型，包括一些大多数店铺用不到的高级选项 |

<Callout type="important" title="⚠️ 重要">
每个现成模板都已经在每个页面上设好了正确的页脚操作。除非您新增页面或调整页面顺序，否则请保持不变。服务选项页面不能作为 Schedule Delivery 或 Reschedule 小程序的最后一个页面，因为它没有 Schedule Job。
</Callout>

---

## 移除页面

1. 打开您要移除的页面。
2. 滚动到设置的最下方，点击 <Badge>移除页面</Badge>。
3. 点击 <Badge>删除</Badge> 确认。

您会回到小程序的页面列表。在您再次发布之前，客户仍会收到这个页面。移除页面后，请检查现在排在最后的页面的页脚操作。

---

## 小程序设置

在小程序层级，页面列表下方的 **小程序设置** 存放整个小程序的设置。

**按钮文本** 是客户在 WhatsApp 聊天中点按以打开小程序的按钮上的文字，例如 **Book Now** 或 **Open Form**。请保持简短清楚。

只有当某个页面的页脚操作是 **Create Order** 时，才需要下面两项设置。它们也只在这种情况下出现，决定新订单归到哪里。

**业务单元** 是订单所属的业务部分，例如 CleanFast Laundry 的 Laundry 或 Bag Repair。

**销售渠道** 是新订单记录在哪个应用下。这里不会列出网上商店。

如需删除整个小程序，点击最下方的 <Badge>删除小程序</Badge>，再点击 <Badge>删除</Badge> 确认。此操作无法撤销。

![红框标出“小程序设置”部分，显示“业务单元”“销售渠道”和按钮文本 Book Pickup](https://cdn.easybizcloud.app/knowledge/8c60b2f4-2593-4901-8e5c-ca6aef37f6dc.png)

---

## 发布和测试

发布工具位于手机预览上方的工具栏中。

1. 点击预览右上方的 <Badge>发布</Badge>。当您有客户还没收到的修改时，这个按钮会以实心显示。
2. **发布小程序** 窗口打开。检查是否选择了正确的 <Badge>WhatsApp 账户</Badge>，然后点击 <Badge>发布</Badge>。
3. 您会看到“小程序发布成功！”，预览会切换到 <Badge>实时预览</Badge>。

<Callout type="note" title="📝 在新的 WhatsApp 号码上发布，会把 WhatsApp 小程序加入您的订阅">
在当前的 EasyBiz 方案中，WhatsApp 小程序按 WhatsApp 号码收费，每个号码每月 SGD 99。如果该账户中有尚未加入订阅的号码，窗口会显示“将在您的订阅中添加 WhatsApp 迷你应用”和每月总额，按钮会显示为 <Badge>添加到订阅并发布</Badge>。只有拥有账单权限的人员才能确认。
</Callout>

小程序发布后，<Badge>发布</Badge> 旁边会多出两样工具。

| 工具 | 它的作用 |
| --- | --- |
| <Badge>草稿</Badge> | 在手机中显示您当前的草稿，包括尚未发布的修改 |
| <Badge>实时预览</Badge> | 显示 WhatsApp 对客户当前所用版本的预览。点击下方的 <Badge>刷新</Badge> 可重新加载 |
| <Badge>发送测试</Badge> | 把已发布的小程序发送到您选择的电话号码，让您像真实客户一样填写 |

给自己发送测试：

1. 用您自己的手机给店铺的 WhatsApp 号码发任意一条消息。
2. 点击 <Badge>发送测试</Badge>，选择 WhatsApp 账户并输入您的 **电话号码**。
3. 当窗口显示“消息窗口已开启”时，点击 <Badge>发送测试</Badge>。
4. 在手机上打开 WhatsApp，完整填写一遍表单。

<Callout type="important" title="⚠️ 先给店铺号码发一条消息">
WhatsApp 只允许您的店铺向过去 24 小时内给您的 WhatsApp 号码发过消息的手机发送测试。如果跳过第 1 步，窗口会显示“24小时消息窗口已关闭”，测试不会发出。
</Callout>

![已发布小程序的工具栏，红框标出“草稿 / 实时预览”切换、“发送测试”按钮和“发布”按钮](https://cdn.easybizcloud.app/knowledge/8a2dd735-0b16-439d-933f-5b095cf7c0c6.png)

---

## 常见问题

**每次做一点小改动，都需要重新发布吗？**
> 是的。您的修改会马上保存到草稿，但在您点击“发布”之前，客户收到的仍是上一次发布的版本。在此之前，小程序列表会一直显示“有未发布的更改”。

**如果我把预览切换到“草稿”，客户会失去这个小程序吗？**
> 不会。“草稿”和“实时预览”只改变编辑器里手机显示的内容。客户收到的仍是上一次发布的版本。

**为什么服务选项页面上的问题不能移动或移除？**
> 这个问题会列出您服务目录中的服务选项，是页面自带的。打开页面时它会自动展开，您仍然可以在里面选择服务选项并调整顺序。

**我创建了自定义字段，但它没有出现在输入数据字段列表中。为什么？**
> 自定义字段只会出现在空白页面上。五种现成页面只能使用它们自带的字段。

**必填和可见性有什么区别？**
> 可见性决定客户能不能看到这个问题。必填决定客户不回答能不能继续。被隐藏的问题永远不会是必填的。

**为什么我看不到“发送测试”或“实时预览”？**
> 它们只在小程序至少发布过一次之后才会出现。草稿无法通过 WhatsApp 发送，所以请先发布，再给自己发送测试。

**手机预览会显示真实的价格和时间段吗？**
> “草稿”预览显示的是版面，不是您实时的日期和价格。发布后使用“发送测试”，就能在手机上看到真实的日期、时间段和价格。

**发布需要付费吗？**
> 在当前方案中，WhatsApp 小程序按您发布小程序的每个 WhatsApp 号码收费，每月 SGD 99，小程序和预约数量不限。每个号码只需在第一次发布时确认一次。

---

## 接下来

现在您已经熟悉了编辑器：页面、内容、页脚操作、小程序设置，以及如何发布和测试。接下来，请在 [设置客户注册小程序](/docs/setting-up-a-customer-sign-up-mini-app) 中动手做出您的第一个小程序。
