IF/Switch Node: สร้างเงื่อนไขใน n8n Workflow
เรียนรู้วิธีใช้ IF Node และ Switch Node ใน n8n เพื่อแยกเส้นทาง Workflow ตามเงื่อนไข พร้อมตัวอย่างจริงที่ใช้ได้ทันที
Workflow ที่ดีไม่ใช่แค่ทำงานตามลำดับขั้นตอนตายตัว แต่ต้องตอบสนองต่อสถานการณ์ที่แตกต่างกันได้ เช่น ถ้าลูกค้าสั่งซื้อสินค้าเกิน 1,000 บาท ให้ส่ง SMS แจ้งเตือน แต่ถ้าต่ำกว่านั้นให้ส่งแค่อีเมล หรือถ้าสถานะออเดอร์เป็น “cancelled” ให้ทำขั้นตอนคืนเงินแทนที่จะส่งของ
ตรงนี้คือจุดที่ IF Node และ Switch Node เข้ามาทำหน้าที่ — เป็น “ทางแยก” ให้ Workflow เลือกเส้นทางตามเงื่อนไขที่กำหนด
IF Node คืออะไร
IF Node คือ Node พื้นฐานที่สุดในการสร้างเงื่อนไข มีหลักการง่ายมาก — รับข้อมูลเข้ามา ตรวจสอบว่าตรงตามเงื่อนไขหรือไม่ แล้วส่งออก 2 เส้น
- True — ข้อมูลที่ผ่านเงื่อนไข
- False — ข้อมูลที่ไม่ผ่านเงื่อนไข
การตั้งค่า IF Node ประกอบด้วย 3 ส่วน
Value 1 คือสิ่งที่อยากตรวจสอบ เช่น {{ $json.status }} หรือ {{ $json.amount }}
Operation คือวิธีเปรียบเทียบ เช่น equals, not equals, contains, larger than, smaller than, is empty, regex
Value 2 คือค่าที่ใช้เทียบ เช่น "paid" หรือ 1000
ตัวอย่างเงื่อนไขที่ใช้บ่อย:
ตรวจสอบสถานะออเดอร์ว่าชำระแล้วหรือยัง
Value 1: {{ $json.payment_status }}
Operation: equals
Value 2: paid
ตรวจสอบว่ายอดสั่งซื้อมากกว่า 500 บาทหรือไม่
Value 1: {{ $json.total }}
Operation: larger than
Value 2: 500
ตรวจสอบว่า email ว่างเปล่าหรือไม่
Value 1: {{ $json.email }}
Operation: is not empty
เงื่อนไขหลายข้อใน IF Node เดียว
IF Node รองรับการตั้งหลายเงื่อนไขพร้อมกันด้วย AND หรือ OR
AND — ทุกเงื่อนไขต้องผ่านพร้อมกัน เช่น สถานะต้องเป็น “active” และ tier ต้องเป็น “premium”
OR — ผ่านเงื่อนไขใดเงื่อนไขหนึ่งก็พอ เช่น channel เป็น “line” หรือ channel เป็น “sms”
ตัวอย่างเช็คว่าเป็นลูกค้า VIP ที่ยังใช้งานอยู่
Condition 1: {{ $json.status }} equals active
Condition 2: {{ $json.tier }} equals vip
Combine: AND
Switch Node คืออะไร และแตกต่างจาก IF ยังไง
IF Node ได้สูงสุด 2 เส้น (true/false) แต่ถ้าต้องการแยกหลายทิศทางตามค่าที่แตกต่างกัน Switch Node คือคำตอบ
ลองนึกถึงกรณีนี้ — รับ Webhook มาจากระบบออเดอร์ แล้ว status มีได้ 4 ค่าคือ pending, paid, shipped, cancelled แต่ละค่าต้องทำงานคนละชุด ถ้าใช้ IF ซ้อน IF จะได้ Workflow ที่ยุ่งเหยิงมาก
Switch Node แก้ปัญหานี้ด้วยการแยก Output หลายเส้นในหนึ่ง Node
การตั้งค่า Switch Node:
เลือก Mode ได้ 2 แบบ
Mode Rules — ตั้งเงื่อนไขแต่ละ Output ด้วยตัวเอง คล้าย IF แต่ได้หลาย Case
Mode Expression — ใช้ Expression กำหนดว่าจะออก Output หมายเลขไหน เหมาะกับ Logic ที่ซับซ้อน
ตัวอย่าง Switch Rules สำหรับสถานะออเดอร์:
Input Value: {{ $json.status }}
Output 1 (pending): equals "pending"
Output 2 (paid): equals "paid"
Output 3 (shipped): equals "shipped"
Output 4 (cancelled):equals "cancelled"
จากนั้นเชื่อม Node ต่อจาก Output แต่ละเส้นไปยังขั้นตอนที่เหมาะสม เช่น Output 2 (paid) เชื่อมไปยัง Node ที่สร้างใบเสร็จและส่ง Email ยืนยัน
Fallback Output ใน Switch Node
Switch Node มีตัวเลือก Fallback Output สำหรับกรณีที่ค่าไม่ตรงกับ Rule ใดเลย ควรเปิดใช้เสมอเพื่อป้องกัน Item หาย Workflow โดยไม่รู้ตัว เชื่อมเส้น Fallback ไปยัง Node แจ้งเตือน Error หรือ Log ไว้ตรวจสอบ
เลือกใช้ IF หรือ Switch
ใช้ IF Node เมื่อ
- มีแค่ 2 ทิศทาง (ใช่/ไม่ใช่)
- เงื่อนไขเป็น boolean หรือ comparison ตรงๆ
- ต้องการ AND/OR หลายเงื่อนไขในจุดเดียว
ใช้ Switch Node เมื่อ
- ต้องแยกมากกว่า 2 เส้นทาง
- มีค่าที่เป็นไปได้หลายค่า (เช่น status มี 5 ค่า)
- ต้องการ Fallback สำหรับค่าที่ไม่คาดคิด
ตัวอย่าง Workflow จริง: แจ้งเตือนตามช่องทาง
สถานการณ์ — ระบบแจ้งเตือนลูกค้าที่ตั้งค่าช่องทางต่างกัน บางคนอยาก Line บางคนอยาก Email บางคนอยาก SMS
Trigger (Webhook รับข้อมูลออเดอร์)
→ Switch Node
Input: {{ $json.notify_channel }}
Output 1 (line): equals "line"
→ Line Messaging API Node
Output 2 (email): equals "email"
→ Gmail Node
Output 3 (sms): equals "sms"
→ HTTP Request (SMS API)
Fallback:
→ Set Node (log ว่าไม่รู้จัก channel)
→ Airtable (บันทึกเพื่อตรวจสอบ)
ซ้อน IF ใน Switch ได้ไหม
ได้ และใช้บ่อยมาก เช่น Switch แยกตาม status ก่อน จากนั้นใน Output “paid” ยังมี IF ต่ออีกทีเพื่อเช็คว่ายอดสูงพอที่จะส่ง Gift Voucher หรือไม่
วิธีนี้ทำให้ Workflow อ่านง่ายกว่าการซ้อน IF ซ้ำหลายชั้น เพราะแต่ละ “สาย” มีหน้าที่ชัดเจน
ข้อควรระวัง
Item จะไม่หายถ้ามีเส้นรองรับ — IF Node ที่ False ก็ยัง Process ต่อ แค่ไปคนละเส้น แต่ถ้าไม่ได้เชื่อม Node ต่อ Item นั้นก็จบแค่นั้น
Switch ไม่ duplicate Item — Item หนึ่งชิ้นจะออกแค่ Output เดียว ไม่ใช่ออกทุก Output ที่ผ่านเงื่อนไข (ยกเว้นเปิด “send data to all matching outputs”)
ระวัง Type mismatch — ถ้า $json.amount เป็น String "1000" การเทียบกับ Number 1000 อาจให้ผลไม่ตรงตามที่คาด ควร cast type ก่อนด้วย Number({{ $json.amount }})
อยากเรียน n8n แบบเป็นระบบ ตั้งแต่เริ่มต้นจนสร้าง Workflow ใช้งานจริงได้ ลองดู คอร์สสอน n8n ที่ aiunlock.co
Related posts
n8n Advanced: 10 เทคนิคขั้นสูงสำหรับมืออาชีพ
รวม 10 เทคนิค n8n ขั้นสูงที่มืออาชีพใช้จริง ตั้งแต่ Error Handling, Sub-Workflow, Code Node ไปจนถึง API Pagination
สร้าง AI Workflow ด้วย n8n: จาก ChatGPT ถึง AI Agent
คู่มือครบจบ สร้าง AI Workflow ด้วย n8n ตั้งแต่เชื่อม ChatGPT, Claude, Gemini ไปจนถึงสร้าง AI Agent อัจฉริยะ
Code Node ใน n8n: เขียน JavaScript เสริมพลัง Workflow
คู่มือใช้งาน Code Node ใน n8n เขียน JavaScript แปลงข้อมูล คำนวณ Logic ซับซ้อน และเรียก async function ที่ Node มาตรฐานทำไม่ได้