Giới thiệu
Hầu hết các workflow thực tế không xử lý mọi mục theo cùng một cách. Một khách hàng vừa đăng ký cần một email chào mừng. Một khách hàng vừa hủy đăng ký cần một chuỗi churn. Một đơn hàng được đánh dấu "khẩn" cần định tuyến khác so với đơn hàng tiêu chuẩn. Đây là lúc logic điều kiện xuất hiện.
n8n cung cấp cho bạn hai nút cho việc này: nút IF cho quyết định nhị phân (đúng/sai, có/không) và nút Switch cho định tuyến đa đường đi dựa trên một giá trị có thể khớp với nhiều trường hợp. Hiểu khi nào nên dùng mỗi cái — và cách kết nối chúng đúng cách — là sự khác biệt giữa một workflow sạch sẽ và một mớ rối rắm.
Nút IF: Phân nhánh nhị phân
Nút IF đánh giá một điều kiện duy nhất và gửi mỗi mục xuống một trong hai đường dẫn đầu ra: đúng hoặc sai. Bạn kết nối các nút downstream khác nhau vào mỗi đầu ra, và n8n sẽ định tuyến các mục tự động dựa trên kết quả.
Để cấu hình, bạn chọn một giá trị (thường là trường từ mục đến đến), chọn một phép toán, và đặt giá trị so sánh. Các phép toán có sẵn bao gồm: bằng, khác bằng, chứa, bắt đầu bằng, kết thúc bằng, rỗng, lớn hơn, nhỏ hơn, và một vài phép khác tùy thuộc kiểu dữ liệu.
Ví dụ, hình dung bạn đang xử lý dữ liệu đơn hàng và muốn gắn cờ các đơn hàng có giá trị cao. Các mục của bạn có dạng như sau:
Trong nút IF bạn sẽ thiết lập: Giá trị 1 = {{ $json.total }}, Hoạt động = Lớn hơn, Giá trị 2 = 200. Các mục có tổng lớn hơn 200 sẽ đi tới nhánh đúng; phần còn lại đi tới nhánh sai. Bạn sau đó kết nối một nút thông báo Slack với đầu ra đúng và một nút "không làm gì" hoặc ghi log với đầu ra sai.
Một điều cần chú ý: nếu bạn để output sai (false) rời rạc không kết nối, n8n sẽ thả bỏ các mục đó một cách âm thầm. Đôi khi điều này là chủ đích, nhưng hãy đảm bảo đó là một lựa chọn có chủ ý.
Node Switch: Định tuyến nhiều nhánh
Khi bạn có nhiều hơn hai kết quả, việc xâu chuỗi nhiều node IF sẽ trở nên rối loạn nhanh chóng. Node Switch giải quyết bằng cách cho phép bạn định nghĩa nhiều quy tắc, mỗi quy tắc có output riêng. Mỗi mục được đánh giá theo các quy tắc theo thứ tự và thoát qua output đầu tiên khớp.
Một trường hợp sử dụng phổ biến là định tuyến ticket hỗ trợ theo độ ưu tiên:
Trong node Switch bạn định nghĩa ba quy tắc:
Quy tắc 1 — Giá trị: {{ $json.priority }}, Hoạt động: Equals, So sánh: "high" → Output 0 Quy tắc 2 — Giá trị: {{ $json.priority }}, Hoạt động: Equals, So sánh: "medium" → Output 1 Quy tắc 3 — Giá trị: {{ $json.priority }}, Hoạt động: Equals, So sánh: "low" → Output 2
Bạn sau đó kết nối Output 0 tới node PagerDuty, Output 1 tới node Jira, và Output 2 tới logger bảng tính. Mỗi ticket tự động tới đúng nơi mà không cần phân loại thủ công.
Node Switch cũng có tùy chọn Output Fallback. Bật nó để bắt mọi mục không khớp với bất kỳ quy tắc nào — tương đương với một trường hợp mặc định trong một câu lệnh switch. Luôn cấu hình cái này khi các giá trị đầu vào có thể là bất kỳ cái gì ngoài những gì bạn liệt kê một cách rõ ràng.
Biểu thức trong Điều kiện
Cả hai node đều hỗ trợ biểu thức n8n, có nghĩa là điều kiện của bạn có thể là động thay vì được viết cứng. Bạn tham chiếu dữ liệu đến từ đầu vào với {{ $json.fieldName }} và có thể áp dụng JavaScript bên trong dấu ngoặc kép kép.
Ví dụ, để kiểm tra xem một đơn hàng có được đặt quá 7 ngày trước hay không:
Đặt đây làm Giá trị 1, sử dụng phép toán "Là Đúng", và để Giá trị 2 trống. Mẫu này cho phép bạn xây dựng định tuyến dựa trên thời gian, kiểm tra xử lý chuỗi, hoặc bất kỳ logic boolean nào mà so sánh trường đơn giản không xử lý được.
Bạn cũng có thể kết hợp các trường. Để định tuyến chỉ các mục có status là "active" VÀ plan là "pro", nối chuỗi hai nút IF — một cái kiểm tra status, cái kia (nhánh đúng) kiểm tra plan. Nút Switch không hỗ trợ sẵn logic AND/OR trong một quy tắc duy nhất, vì vậy ghép nối là cách tiếp cận đúng ở đây.
Những sai lầm phổ biến
Chênh lệch kiểu dữ liệu là vấn đề phổ biến nhất. Nếu {{ $json.total }} đến dưới dạng chuỗi "340" thay vì số 340, so sánh Lớn hơn sẽ thất bại bất ngờ. Sử dụng nút Set ở upstream để ép kiểu khi bạn không chắc điều gì đang đến.
Một lỗi phổ biến khác là quên rằng Switch đánh giá các quy tắc từ trên xuống dưới và dừng ở lần khớp đầu tiên. Nếu bạn để một quy tắc rộng trước một quy tắc cụ thể, quy tắc cụ thể sẽ không được kích hoạt. Sắp xếp các quy tắc của bạn từ cụ thể nhất đến ít cụ thể nhất.
Cuối cùng, hãy cẩn thận với các mục không có giá trị nào cho trường bạn đang kiểm tra. Trường undefined hoặc null sẽ không bằng "high" — nó sẽ trượt qua sang fallback. Đó là hành vi đúng, nhưng chỉ nếu bạn có fallback được cấu hình.
Tóm tắt
Sử dụng nút IF khi bạn cần phân chia đúng/sai rõ ràng — nhanh để thiết lập và dễ đọc. Sử dụng nút Switch khi bạn có ba hoặc nhiều đường đi khác nhau dựa trên giá trị của một trường. Trong cả hai trường hợp, hãy luôn cân nhắc đến các mục không khớp với điều kiện mong đợi của bạn, bằng cách kết nối đầu ra sai/fallback hoặc đưa ra lựa chọn có chủ đích để loại bỏ chúng. Biểu thức cho cả hai nút mang lại sức mạnh thực sự khi các so sánh giá trị đơn giản không đủ.
Bài kiểm tra cuối bài
Ôn lại kiến thức, thử sức và nhận góp ý cho bài làm.