# Condition automasi

> Ruangan, operator dan match logic bagi langkah Condition untuk setiap trigger, dan cara BCL menentukan sama ada workflow diteruskan.
>
> Source: https://docs.bcl.my/ms/automation-conditions/

Langkah Condition ialah pintu: workflow hanya diteruskan melepasinya apabila peraturannya sepadan. Jika peraturan tidak sepadan, cabang itu berhenti dan langkah selepasnya dilangkau. Tiada laluan "else", jadi untuk mengendalikan kedua-dua keadaan, bina dua automasi dengan condition yang bertentangan.

## Tambah condition

Anda memerlukan automasi yang sudah ada trigger pada canvas.

1. Klik **Add Node** dan pilih **Condition** di bawah **Flow Control**. Langkah **Check Condition** ditambah di hujung workflow.
2. Double-click langkah itu untuk membuka **Condition Settings**.
3. Masukkan **Condition Name** (sehingga 20 aksara). Nama ini menjadi label langkah itu.
4. Klik **Add Condition**, kemudian pilih **Field**, **Operator** dan **Value**.
5. Untuk menambah lebih banyak peraturan, klik **Add Condition** sekali lagi dan pilih **Match Logic**.
6. Klik **Save Condition**.

   *(Screenshot: Condition Settings dengan satu peraturan: Booking Service ID, Equals (=), Latte Art Class)*

## Ruangan untuk setiap trigger

Senarai **Field** bergantung pada trigger. Ruangan yang ada senarai nilai tetap (status, form, produk) memaparkan dropdown **Value**; ruangan lain menerima teks atau nombor yang anda taip.

| Trigger | Ruangan yang boleh disemak |
| --- | --- |
| Trigger bayaran (kecuali 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** | Semua ruangan di atas, serta **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** |
| Trigger event | **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**, dan **Custom Field** untuk mana-mana ruangan lead form |
| **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** |

Untuk ruangan lead form, pilih **Custom Field** dan taip key ruangan itu dalam **Field Key** dengan format `name:id`, contohnya `email_address:2`. Senarai **Variables** dalam langkah itu memaparkan key setiap ruangan lead form anda.

## Nilai yang dipilih daripada senarai

Ruangan ini menawarkan pilihan tetap dalam **Value**:

| Ruangan | Pilihan |
| --- | --- |
| **Payment Status** | **Pending**, **Failed**, **Successful**, **Cancelled**, **Completed** |
| **Form Type** | **Payment Form**, **Event Form**, **Booking Form**, **QR Terminal** |
| **Form Name (ID)** | Form aktif anda, dipaparkan sebagai `[Payment] #67 - Form title (slug)`, dan format yang sama untuk event dan booking |
| **Product ID**, **Ticket ID**, **Booking Service ID** | Produk, tiket atau servis aktif anda, dikumpulkan mengikut form |
| **Is Paid**, **Is Retry Payment** | **Yes**, **No** |
| **Payment Channel** | Kaedah bayaran yang disokong oleh BCL |
| **Payout Status** | **Pending**, **Approved**, **Rejected**, **Completed** |
| **Event Form** (trigger event) | Event form aktif anda |

**Product ID**, **Ticket ID** dan **Booking Service ID** sepadan apabila item itu ada di mana-mana dalam pesanan, walaupun bersama item lain.

## Operator

Ruangan nombor (jumlah, kiraan, ID, status) menawarkan operator perbandingan. Ruangan teks menawarkan operator teks.

| Operator | Ditawarkan untuk | Lulus apabila ruangan itu |
| --- | --- | --- |
| **Equals (=)** / **Equals** | Semua ruangan | Sama dengan nilai |
| **Not Equals (≠)** / **Not Equals** | Semua ruangan | Berbeza daripada nilai |
| **Greater Than (>)** | Ruangan nombor | Lebih besar daripada nilai |
| **Greater Than or Equal (≥)** | Ruangan nombor | Sama dengan nilai atau lebih besar |
| **Less Than (<)** | Ruangan nombor | Lebih kecil daripada nilai |
| **Less Than or Equal (≤)** | Ruangan nombor | Sama dengan nilai atau lebih kecil |
| **Contains** | Ruangan teks | Mengandungi nilai di mana-mana bahagian |
| **Does Not Contain** | Ruangan teks | Tidak mengandungi nilai |
| **Starts With** | Ruangan teks | Bermula dengan nilai |
| **Ends With** | Ruangan teks | Berakhir dengan nilai |
| **Is Empty** | Ruangan teks | Tiada nilai (kotak **Value** tidak dipaparkan) |
| **Is Not Empty** | Ruangan teks | Ada apa-apa nilai |

Ruangan jumlah ialah nombor biasa tanpa "RM", contohnya `500` atau `49.90`. Perbandingan teks membezakan huruf besar dan kecil: `KOPI10` tidak sama dengan `kopi10`.

## Match logic

Apabila ada dua peraturan atau lebih, **Match Logic** dipaparkan:

- **All conditions must match (AND)**: setiap peraturan mesti lulus.
- **Any condition must match (OR)**: satu peraturan yang lulus sudah cukup.

Nota hijau di bawah peraturan mengesahkan cara peraturan itu dibaca, contohnya "Workflow continues if AND of the 2 conditions are met."

## Cara condition berjalan

Condition menyemak data pada saat workflow sampai kepadanya. Selepas **Delay**, BCL membaca transaksi itu semula, jadi condition yang diletakkan selepas delay melihat status terkini. Inilah cara peringatan boleh menyemak bahawa pesanan masih belum dibayar sebelum peringatan itu dihantar.

Semua langkah yang disambungkan selepas condition berjalan apabila condition itu lulus. Condition tanpa peraturan dilangkau dan cabangnya berhenti, dan canvas menandakannya dengan "No conditions defined".

## Tips

Beberapa tabiat ini memastikan condition mudah dibaca:

- **Letakkan condition sejurus selepas trigger.** Jika condition itu menentukan siapa yang menerima mesej, tiada delay dijadualkan untuk pelanggan yang tidak akan menerimanya.
- **Guna filter form pada trigger sebelum condition.** **Specific Form** pada trigger lebih mudah daripada condition **Form Name (ID)**, dan automasi itu langsung tidak berjalan untuk form lain.
- **Semak run yang dilangkau dalam sejarah.** Butiran execution memaparkan nilai yang dijangka dan nilai sebenar setiap peraturan, jadi anda terus tahu sama ada nilai atau operator yang salah.

## Isu biasa

### Boleh saya hantar mesej lain kepada pelanggan yang berbelanja lebih daripada RM500?

Boleh. Tambah Condition dengan Payment Amount (Final), Greater Than (>) dan 500, kemudian langkah mesej selepasnya. Pelanggan di bawah RM500 berhenti pada condition itu. Untuk pelanggan yang lain, bina automasi kedua dengan Less Than or Equal (≤).

### Bagaimana saya jalankan automasi hanya apabila produk tertentu dibeli?

Tambah Condition dengan ruangan Product ID, operator Equals (=), dan pilih produk itu dalam Value. Condition ini lulus apabila produk itu ada di mana-mana dalam pesanan.

### Kenapa condition saya tidak pernah dipenuhi? Bagaimana saya boleh lihat puncanya?

Buka automasi itu, klik Overview, kemudian View pada satu execution. Condition yang dilangkau memaparkan setiap peraturan dengan nilai yang dijangka, nilai sebenar dan sama ada peraturan itu lulus.
