# 自动化条件

> 每个触发器下Condition步骤的栏位、运算符和匹配逻辑，以及BCL怎样决定工作流程是否继续。
>
> Source: https://docs.bcl.my/zh/automation-conditions/

Condition步骤就像一道关卡：只有规则符合时，工作流程才会继续往下走。如果不符合，那个分支就停止，后面的步骤都会被跳过。这里没有“else”路径，所以要处理两种情况，就创建两个条件相反的自动化。

## 添加条件

你需要一个画布上已经有触发器的自动化。

1. 点击**Add Node**，在**Flow Control**下选择**Condition**。一个**Check Condition**步骤会加到工作流程的最后。
2. 双击它，打开**Condition Settings**。
3. 输入**Condition Name**（最多20个字符）。它会成为这个步骤的名称。
4. 点击**Add Condition**，然后选择**Field**、**Operator**和**Value**。
5. 要添加更多规则，再点击**Add Condition**，并选择**Match Logic**。
6. 点击**Save Condition**。

   *(Screenshot: Condition Settings里的一条规则：Booking Service ID、Equals (=)、Latte Art Class)*

## 每个触发器的栏位

**Field**列表取决于触发器。有固定选项的栏位（状态、表单、产品）会显示**Value**下拉菜单；其他栏位则输入文字或数字。

| 触发器 | 可以检查的栏位 |
| --- | --- |
| 付款触发器（Order Shipped除外） | **Form Type**、**Form Name (ID)**、**Product ID**、**Ticket ID**、**Booking Service ID**、**Payer Name**、**Payer Email**、**Payer Phone**、**Order Number**、**Payment Amount (Final)**、**Subtotal Amount**、**Discount Amount**、**Additional Fee**、**Payment Gateway Fee**、**Shipping Cost**、**Total Items Count**、**Payment Status**、**Is Paid**、**Payment Channel**、**Coupon Code** |
| **Payment Successful**、**Payment Completed**、**Status Changed** | 以上全部，再加上**Is Retry Payment** |
| **Order Shipped** | **Form Type**、**Form Name (ID)**、**Product ID**、**Ticket ID**、**Booking Service ID**、**Courier**、**Tracking Number**、**Payer Name**、**Payer Email**、**Payer Phone**、**Order Number**、**Payment Amount (Final)**、**Payment Status**、**Payment Channel** |
| 活动触发器 | **Event Form**、**Ticket ID**、**Attendee Name**、**Attendee Email**、**Attendee Phone**、**Ticket Name**、**Event Name**、**Event Type**、**Price Paid**、**Seat Number**、**Status**、**Order Number** |
| **New Lead Received** | **Form Title**、**Submission ID**，以及用于任何lead表单栏位的**Custom Field** |
| **New Affiliate Registered** | **Affiliate Name**、**Affiliate Email**、**Affiliate Phone** |
| **Referral Approved**、**Referral Rejected** | **Affiliate Name**、**Affiliate Email**、**Order Number**、**Order Amount**、**Commission Amount**、**Referral Status** |
| **Payout Requested** | **Affiliate Name**、**Affiliate Email**、**Payout Amount**、**Payout Status**、**Total Referrals** |

要检查lead表单栏位，选择**Custom Field**，并在**Field Key**以`name:id`格式输入它的key，例如`email_address:2`。步骤里的**Variables**列表会显示你lead表单栏位的key。

## 从列表选择的值

这些栏位在**Value**提供固定选项：

| 栏位 | 选项 |
| --- | --- |
| **Payment Status** | **Pending**、**Failed**、**Successful**、**Cancelled**、**Completed** |
| **Form Type** | **Payment Form**、**Event Form**、**Booking Form**、**QR Terminal** |
| **Form Name (ID)** | 你启用中的表单，显示为`[Payment] #67 - Form title (slug)`，活动和预约表单也一样 |
| **Product ID**、**Ticket ID**、**Booking Service ID** | 你启用中的产品、门票或服务，按表单分组 |
| **Is Paid**、**Is Retry Payment** | **Yes**、**No** |
| **Payment Channel** | BCL支持的付款方式 |
| **Payout Status** | **Pending**、**Approved**、**Rejected**、**Completed** |
| **Event Form**（活动触发器） | 你启用中的活动表单 |

只要订单里有该产品，即使还有其他产品，**Product ID**、**Ticket ID**和**Booking Service ID**也会匹配。

## 运算符

数字栏位（金额、数量、ID、状态）提供比较运算符。文字栏位提供文字运算符。

| 运算符 | 适用于 | 栏位在什么情况下通过 |
| --- | --- | --- |
| **Equals (=)** / **Equals** | 所有栏位 | 和值相同 |
| **Not Equals (≠)** / **Not Equals** | 所有栏位 | 和值不同 |
| **Greater Than (>)** | 数字栏位 | 比值大 |
| **Greater Than or Equal (≥)** | 数字栏位 | 等于或大于值 |
| **Less Than (<)** | 数字栏位 | 比值小 |
| **Less Than or Equal (≤)** | 数字栏位 | 等于或小于值 |
| **Contains** | 文字栏位 | 任何位置包含该值 |
| **Does Not Contain** | 文字栏位 | 不包含该值 |
| **Starts With** | 文字栏位 | 以该值开头 |
| **Ends With** | 文字栏位 | 以该值结尾 |
| **Is Empty** | 文字栏位 | 没有值（不显示**Value**框） |
| **Is Not Empty** | 文字栏位 | 有任何值 |

金额栏位是不带“RM”的纯数字，例如`500`或`49.90`。文字比较区分大小写：`KOPI10`不等于`kopi10`。

## 匹配逻辑

有两条或以上规则时，会出现**Match Logic**：

- <strong>All conditions must match (AND)</strong>：每条规则都必须通过。
- <strong>Any condition must match (OR)</strong>：只要一条规则通过就够了。

规则下方的绿色提示会确认它们怎样被解读，例如“Workflow continues if AND of the 2 conditions are met.”

## 条件怎样运行

条件在工作流程到达它的那一刻检查数据。经过**Delay**后，BCL会重新读取交易，所以放在延迟之后的条件会看到最新的状态。提醒信息就是这样在发送前确认订单仍未付款。

条件通过时，连接在它后面的步骤全部都会运行。没有规则的条件会被跳过，它的分支也会停止，画布会标上“No conditions defined”。

## 小贴士

几个让条件保持清楚易读的习惯：

- **把条件放在触发器之后**。当它用来筛选谁收到信息时，就不会为永远收不到信息的顾客安排延迟。
- **在条件之前，先用触发器的表单筛选**。触发器上的**Specific Form**比<strong>Form Name (ID)</strong>条件更简单，而且其他表单根本不会运行这个自动化。
- **在运行记录里查看被跳过的运行**。运行详情会显示每条规则的预期值和实际值，让你马上知道是值错了还是运算符错了。

## 常见问题

### 我可以给消费超过RM500的顾客发送不同的信息吗？

可以。添加一个Condition，选择Payment Amount (Final)、<strong>Greater Than (>)</strong>和500，然后在它后面加信息步骤。低于RM500的顾客会停在这个条件。其他顾客，就用<strong>Less Than or Equal (≤)</strong>创建第二个自动化。

### 怎样只在顾客买了某个产品时才运行自动化？

添加一个Condition，栏位选Product ID，运算符选<strong>Equals (=)</strong>，并在Value选择该产品。只要订单里有这个产品，它就会通过。

### 我的条件一直不符合。怎样看原因？

打开自动化，点击Overview，然后在一次运行上点击View。被跳过的条件会显示每条规则的预期值、实际值，以及是否通过。
