n8n Thai
by n8n Thai

IF/Switch Node: สร้างเงื่อนไขใน n8n Workflow

เรียนรู้วิธีใช้ IF Node และ Switch Node ใน n8n เพื่อแยกเส้นทาง Workflow ตามเงื่อนไข พร้อมตัวอย่างจริงที่ใช้ได้ทันที

IF/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