---
title: "สอนใช้ n8n EP04 : การกำหนด Control Flow ให้กับงาน Automation"
url: https://www.thepexcel.com/n8n-ep04/
type: post
date: 2024-10-27
updated: 2025-12-22
author: Sira Ekabut
categories: [Automation]
tags: [logic, loop, n8n, map]
---

# สอนใช้ n8n EP04 : การกำหนด Control Flow ให้กับงาน Automation

ในการสร้าง Workflow ที่ซับซ้อนและต้องการความยืดหยุ่นสูง การควบคุมทิศทางการทำงาน (Control Flow) เป็นหนึ่งในหัวใจสำคัญของระบบ Automation **เพราะไม่ใช่ทุกงานที่จะดำเนินไปในเส้นทางเดียวกันเสมอ** มีบางสถานการณ์ที่เราจำเป็นต้องแตกแขนง Workflow ออกเป็นหลายเส้นทาง เช่น แยกไปทางใดทางหนึ่งตามเงื่อนไข หรือนำกลับมารวมกันอีกครั้ง

 

[ในตอนที่แล้ว เราเรียนรู้การจัดการข้อมูลใน Flow ไปแล้ว](https://www.thepexcel.com/n8n-ep03/) ในตอนนี้ เราจะมาเรียนรู้วิธีการใช้ Control Flow ใน n8n อย่างละเอียด ซึ่งประกอบไปด้วยการแตกเส้นทางการทำงาน (Splitting), การรวมข้อมูล (Merging), การวนลูป (Looping), การรอคอยเหตุการณ์ (Waiting) และการใช้งาน Sub-workflows ที่จะช่วยให้ระบบ Automation ของคุณทำงานได้อย่างคล่องตัวและมีความยืดหยุ่นมากขึ้น

 

พร้อมกันหรือยังครับ? ถ้าพร้อมแล้ว มาดูกันเลย!

 

## **Control Flow คืออะไร?**

 

Control Flow ใน n8n ช่วยให้คุณกำหนดทิศทางการทำงานของ Workflow ได้ตามเงื่อนไขหรือสถานการณ์ที่กำหนด เช่น การแยกเส้นทางตามเงื่อนไขต่าง ๆ การรวมข้อมูลจากหลายแหล่ง การจัดการกับการวนลูป และการเรียกใช้งาน Sub-workflow การใช้ Control Flow ที่ดีจะทำให้คุณสามารถสร้าง Automation ที่ซับซ้อนและยืดหยุ่นได้อย่างมีประสิทธิภาพ

 

เพื่อความสะดวกในการเรียนรู้ เราจะใช้ **Mockup Data** ที่มีมาให้สำเร็จรูปใน n8n เพื่อประกอบการสอนบทความนี้ ทุกคนจะได้ทำตามได้ง่าย ๆ โดยไม่ต้องเตรียม Data จากที่อื่นให้ยุ่งยาก เราสามารถดึง **Mockup Data** มาจากโหนด **Customer Datastore (n8n training)** ได้เลย

 ![1](https://www.thepexcel.com/wp-content/uploads/2024/10/flow-000.png) 

โดยเลือก option **Get All People** จะได้ลูกค้ามา 5 คนที่มีมาให้สำเร็จรูปใน n8nในการประกอบการสอนบทความนี้นะครับ ทุกคนจะได้ทำตามได้โดยไม่ต้องไปเอา Data มาจากที่อื่นให้ยุ่งยาก

 ![2](https://www.thepexcel.com/wp-content/uploads/2024/10/flow-002-1024x461.png) 

n8n มี Node หลายประเภทที่ช่วยจัดการกับ Control Flow ทำให้ Workflow ของคุณตอบสนองต่อสถานการณ์ต่าง ๆ ได้อย่างราบรื่น เรามาดูกันทีละกลุ่มกันครับ

 

## Splitting: การแยกเส้นทางด้วยเงื่อนไข

 

เราสามารถใช้ **If** หรือ **Switch Node** เพื่อแบ่ง Workflow ออกเป็นหลายเส้นทางตามเงื่อนไขที่กำหนด ซึ่งมีการทำงานแตกต่างกันดังนี้:

 
- **If Node**: แยกผลลัพธ์ออกเป็น 2 เส้นทาง (เช่น True/False)
- **Switch Node**: แยกผลลัพธ์ออกเป็นหลายเส้นทาง เหมาะกับการทำงานที่มีผลลัพธ์มากกว่า 2 เส้นทาง

 

### **If Node**

 

ในตัวอย่างนี้ เราจะใช้ **If Node** เพื่อแยก Workflow ออกเป็น 2 เส้นทาง เช่น หากข้อมูลมีการระบุประเทศไว้ เราจะให้ Workflow ทำงานถัดไปในเส้นทาง A แต่หากไม่มีข้อมูลประเทศ ให้ไปที่เส้นทาง B

 ![3](https://www.thepexcel.com/wp-content/uploads/2024/10/flow-003-1024x460.png) 

โดยใน Work Flow จะมีทางแยกออกมาเป็น “true” และ “false” ชัดเจน

 ![4](https://www.thepexcel.com/wp-content/uploads/2024/10/flow-004.png) 

**เส้น True**: กรณีค่าประเทศไม่ว่าง เราจะใช้ Sort Node จัดเรียงข้อมูลตามประเทศ

 ![5](https://www.thepexcel.com/wp-content/uploads/2024/10/flow-006-1024x467.png) 

**เส้น False**: กรณีไม่มีค่าประเทศ เราจะใช้ Edit Fields Node แก้ไขข้อมูลให้ระบุว่า “ไม่รู้”

 ![6](https://www.thepexcel.com/wp-content/uploads/2024/10/flow-005-1024x456.png) 

ตอนนี้จะได้แบบนี้ เห็นมะ แยกออกมาเป็น 2 เส้นทางชัดเจน

 ![7](https://www.thepexcel.com/wp-content/uploads/2024/10/flow-007-1024x381.png) 

### **Switch Node**

 

ใช้ในการแบ่งเส้นทางที่มีผลลัพธ์หลายเส้นทาง (เหมาะกับผลลัพธ์มีมากกว่า 2 เส้นทาง)

 

สมมติว่าผมเอากรณีจริง ที่ผ่านการเรียงข้อมูลแล้วมาเข้า Switch เล่นๆ ให้ดูว่า

 
- **ถ้า country เป็น US** ให้ผลลัพธ์ออกมาในเส้นทางที่ตั้งชื่อว่า us
- **ถ้า country เป็น UK** ให้ผลลัพธ์ออกมาในเส้นทางที่ตั้งชื่อว่า uk
- **แล้วตั้งค่า Fall Back** (กรณีที่ไม่ตรงตามเงื่อนไขใดๆ เลย) ให้ออกมาอีกส้นทางนึง

 ![8](https://www.thepexcel.com/wp-content/uploads/2024/10/flow-012-1024x455.png) 

จากนั้นผลที่แยกจาก Switch เราก็สามารถแยก Workflow ออกมาอีกหลายเส้นเลย (อันนี้คือทำเล่นๆ ขำๆ) คราวนี้มีรวมๆ ก็ 4 เส้นทางแล้ว 55

 ![9](https://www.thepexcel.com/wp-content/uploads/2024/10/flow-013-1024x368.png) 

## Merging: การรวมข้อมูล

 

การรวมข้อมูลจากหลายแหล่งเป็นสิ่งสำคัญเมื่อต้องการจัดการข้อมูลที่มาจากหลาย Node หรือหลายแหล่งข้อมูล ใน n8n มีการใช้ **Merge Node** ที่ยืดหยุ่นและปรับใช้ได้หลายวิธี:

 
- **Append**: นำข้อมูลมาต่อกันในแนวตั้ง โดยอ้างอิงจากชื่อ Field ซึ่งเหมือนกับการใช้ `UNION` ใน SQL รวมถึงเหมือนกับ Append Query ของ Power Query ด้วย
- **Choose Branch** : รวมแล้วเลือกว่าจะเอาผลลัพธ์จากกิ่งไหนออกไปยังผลลัพธ์ ซึ่งดีตรงสามารถรอให้ทุกกิ่งมาพร้อมกันก่อน ค่อยส่งต่อไป Step ถัดไปได้ (ปกติ Node จะรันเส้นบนให้จบก่อนแล้วค่อยเริ่มวิ่งเส้นล่าง)
- **Combine**: การรวมข้อมูล 2 ตารางมีหลายวิธี แต่ที่จะเน้น คือ **Matching Fields** ซึ่งเหมือน SQL Join แบบต่างๆ รวมถึง Merge Query ของ Power Query เช่น: 
    - **Keep Matches**: รวมเฉพาะรายการที่ตรงกัน (เหมือน `INNER JOIN`)
    - **Keep Non-Matches**: รวมเฉพาะรายการที่ไม่ตรงกัน
    - **Keep Everything**: รวมทั้งรายการที่ตรงกันและไม่ตรงกัน (เหมือน `OUTER JOIN`)
    - **Enrich Input 1**: เก็บข้อมูลทั้งหมดจาก Input 1 และเพิ่มข้อมูลที่ตรงกันจาก Input 2 (เหมือน `LEFT JOIN`)
    - **Enrich Input 2**: เก็บข้อมูลทั้งหมดจาก Input 2 และเพิ่มข้อมูลที่ตรงกันจาก Input 1 (เหมือน `RIGHT JOIN`)
- **SQL Query** : เขียนการรวมด้วยภาษา SQL ได้เลย วิธีนี้จะยืดหยุ่นสุดๆ

 

ในตัวอย่าง: ผมจะลองเอาผลลัพธ์จากทั้ง 4 เส้นกลับมารวมกันด้วยการ **Append** ก่อน

 

ซึ่งถ้าคอลัมน์ตรงกันก็จะกลับมารวมกันได้ง่ายๆ แบบนี้ (ถ้าไม่ตรงกันอาจต้องใช้โหนด Rename Keys มาช่วย)

 ![10](https://www.thepexcel.com/wp-content/uploads/2024/10/flow-010-1024x466.png) 

จากนั้น ค่อยเอาผลที่ได้มา **Combine** กับตารางข้อมูลประเทศที่มีข้อมูลว่าแต่ละประเทศอยู่ทวีปไหนและมีพื้นที่เท่าไหร่ การรวมข้อมูลนี้จะคล้ายกับการใช้ `VLOOKUP` ใน Excel หรือ `LEFT JOIN` ใน SQL

 

โดยผมมีข้อมูลอีกตาราง ที่ระบุว่าแต่ละประเทศ ว่าชื่อเต็มคืออะไร อยู่ทวีปไหน และมีพื้นที่เท่าไหร่ ซึ่งในที่นี้มี 6 ประเทศ

 

|   |   |   |   |
| --- | --- | --- | --- |
| **Country Code** | **Country Name** | **Continent** | **Area (sq km)** |
| US | United States | North America | 9,833,520 |
| UK | United Kingdom | Europe | 243,610 |
| CO | Colombia | South America | 1,141,748 |
| TH | Thailand | Asia | 513,120 |
| JP | Japan | Asia | 377,975 |
| CN | China | Asia | 9,596,961 |

 

โดยผมใช้โหนดที่ชื่อว่า Code ซึ่งมีความสามารถในการรัน Code ภาษา JavaScript หรือ Python **แอบสร้างข้อมูล Mockup ขึ้นมา** แบบนี้ (การทำงานของโหนดนี้โดยละเอียดผมจะสอนทีหลัง ตอนนี้ให้ copy code นี้ไปใส่ก่อน ซึ่งจริงๆ เราก็ให้ AI ช่วยเขียนไปก่อนได้)

 

```javascript
// ข้อมูลประเทศ, ทวีป และพื้นที่
const data = [
  {
    "Country Code": "US",
    "Country Name": "United States",
    "Continent": "North America",
    "Area (sq km)": 9833520
  },
  {
    "Country Code": "UK",
    "Country Name": "United Kingdom",
    "Continent": "Europe",
    "Area (sq km)": 243610
  },
  {
    "Country Code": "CO",
    "Country Name": "Colombia",
    "Continent": "South America",
    "Area (sq km)": 1141748
  },
  {
    "Country Code": "TH",
    "Country Name": "Thailand",
    "Continent": "Asia",
    "Area (sq km)": 513120
  },
  {
    "Country Code": "JP",
    "Country Name": "Japan",
    "Continent": "Asia",
    "Area (sq km)": 377975
  },
  {
    "Country Code": "CN",
    "Country Name": "China",
    "Continent": "Asia",
    "Area (sq km)": 9596961
  }
];

// ส่งออกข้อมูลเป็น output ของ node
return data.map(item => {
  return {
    json: item
  };
});
```

 

เราสามารถเอา Code Node นี้ไปเชื่อมกับ Trigger แรกสุด หรือจะเชื่อมกับ Node ล่าสุดที่เราทำเลยก็ได้ มันจะได้ถูกสั่งให้ทำงานต่อได้ทันทีเช่นกัน

 ![11](https://www.thepexcel.com/wp-content/uploads/2024/10/flow-016-1024x345.png) 

ผลลัพธ์ของโหนดนี้จะได้ตารางอ้างอิงของประเทศแบบที่ผมแปะให้ดูเลย

 ![12](https://www.thepexcel.com/wp-content/uploads/2024/10/flow-015-1024x463.png) 

คราวนี้เราจะทำคล้ายๆ ว่าจะ Lookup ข้อมูลจากประเทศเหล่านี้แปะกลับไปที่ตารางลูกค้าของเรา (คล้ายๆ VLOOKUP ใน Excel หรือ Left Join ใน SQL)

 

ดังนั้นเราจะใช้ Merge Node มาช่วย แต่จะใช้โหมด Combine แบบ Matching Fields Enrich Input 1 (ตารางลูกค้า)

 ![13](https://www.thepexcel.com/wp-content/uploads/2024/10/flow-018-1024x312.png) 

ผลลัพธ์ที่ได้จะมี 5 items (ตาม Input1) หน้าตาสุดท้ายได้แบบนี้ ซึ่งคล้ายๆ ผลลัพธ์จากการใช้พวก VLOOKUP ใน Excel แหละ

 ![14](https://www.thepexcel.com/wp-content/uploads/2024/10/flow-019-1024x463.png) 

อย่างไรก็ถาม ถ้าเราลองไปดูผลลัพธ์จริงๆ ในกรณีที่หาไม่เจอ เช่น ประเทศ “ไม่รู้” มันจะไม่มี Field จาก Input2 โผล่ออกมาที่ผลลัพธ์เลย (ไม่ได้ขึ้นเป็นค่าว่าง หรือ error ด้วย)

 

```json
[
  {
    "id": "23423532",
    "name": "Jay Gatsby",
    "email": "gatsby@west-egg.com",
    "notes": "Keeps asking about a green light??",
    "country": "US",
    "created": "1925-04-10",
    "Country Code": "US",
    "Country Name": "United States",
    "Continent": "North America",
    "Area (sq km)": 9833520
  },
  {
    "id": "23423534",
    "name": "Max Sendak",
    "email": "info@in-and-out-of-weeks.org",
    "notes": "Keeps rolling his terrible eyes",
    "country": "US",
    "created": "1963-04-09",
    "Country Code": "US",
    "Country Name": "United States",
    "Continent": "North America",
    "Area (sq km)": 9833520
  },
  {
    "id": "23423536",
    "name": "Edmund Pevensie",
    "email": "edmund@narnia.gov",
    "notes": "Passionate sailor",
    "country": "UK",
    "created": "1950-10-16",
    "Country Code": "UK",
    "Country Name": "United Kingdom",
    "Continent": "Europe",
    "Area (sq km)": 243610
  },
  {
    "id": "23423533",
    "name": "José Arcadio Buendía",
    "email": "jab@macondo.co",
    "notes": "Lots of people named after him. Very confusing",
    "country": "CO",
    "created": "1967-05-05",
    "Country Code": "CO",
    "Country Name": "Colombia",
    "Continent": "South America",
    "Area (sq km)": 1141748
  },
  {
    "id": "23423535",
    "name": "Zaphod Beeblebrox",
    "email": "captain@heartofgold.com",
    "notes": "Felt like I was talking to more than one person",
    "country": "ไม่รู้",
    "created": "1979-10-12"
  }
]
```

 

## Waiting: รอคอย

 

ใช้ **Wait Node** เพื่อหยุดการทำงานของ Workflow ชั่วคราว เมื่อ Workflow ถูกหยุดไว้ ข้อมูลจะถูกบันทึกลงในฐานข้อมูล และเมื่อเงื่อนไขที่กำหนดเป็นจริง Workflow จะโหลดข้อมูลกลับมาและดำเนินการต่อไป

 

**การใช้งาน**: มีหลาย Option

 
- **After Time Interval**: หยุดรอตามเวลาที่กำหนด เช่น หยุดรอ 10 นาที แล้วทำงานต่อ
- **At Specified Time**: รอจนถึงเวลาที่ระบุ เช่น 31 ธันวาคม เวลา 23:59 น.
- **On Webhook Call**: รอจนกว่าจะได้รับการเรียกผ่าน HTTP (Webhook)
- **On Form Submitted**: รอจนกว่าจะได้รับข้อมูลจากฟอร์ม

 

การใช้งานนี้สามารถใช้เพื่อการควบคุม API Rate Limit หรือรอการตอบกลับจากระบบภายนอกที่จำเป็นต้องรอข้อมูลก่อน ซึ่งจะแสดงให้เห็นในการใช้คู่กับโหนด Loop ในตัวถัดไป

 

## Looping: การวนลูปการทำงาน

 

ปกติแล้ว “การวน Loop” คือการที่เราต้องการให้มีการทำงานซ้ำ ๆ กับข้อมูลทีละรายการไปเรื่อยๆ จนครบรายการที่มีทั้งหมด **ซึ่งต้องบอกว่าใน n8n Node ปกติทั่วไปก็ทำแบบนั้นอยู่แล้ว **อย่าง[ในบทที่แล้วที่ผมส่ง Line Notify](https://www.thepexcel.com/n8n-ep03/) จากข้อมูลที่มีใน Google Sheets 6 รายการ มันก็ส่งทีละรายการ เป็นจำนวนทั้งหมด 6 รอบ เหมือนกับการวน Loop ทีละ item อยู่แล้วนะ

 

อ้าว! แล้วเราจะมี Node Loop ไปทำไมอีก? 🤔

 

คำตอบก็คือ มันอาจจะมี Node บางตัวที่ไม่ได้มีพฤติกรรมทำงานทีละรายการตามปกติ หรืออาจมีสถานการณ์บางอย่างที่อยากจะทำซ้ำๆ จนกว่าจะได้ตามเงื่อนไขที่ต้องการ

 

สถานการณ์ที่พบบ่อย เช่น ผู้ให้บริการบางเจ้าอาจมีการกำหนดว่า ใน 1 ชั่วโมง เรายิง API ไปดึงข้อมูลได้สูงสุดกี่ครั้ง อะไรแบบนี้ (เดี๋ยวเยอะเกิน Server จะรับไม่ไหว) เราก็ต้องมีการควบคุมความถี่ในการส่ง API Request เพื่อเลี่ยงการชนกับ Rate Limit ของ API ได้

 

ยกตัวอย่าง เช่น เราสามารถใช้ **Loop Over Items** เพื่อวนลูปทำงานทีละรายการ และตั้งค่า **Wait Node** เพื่อให้หยุดรอ 5 วินาที ก่อนจะส่งไปที่ API ในรอบถัดไป

 ![15](https://www.thepexcel.com/wp-content/uploads/2024/10/flow-020-1024x468.png) 
- เราเอา Node Loop Over Items มาต่อจาก Output เดิม เพื่อวนทำซ้ำๆ ทีละรายการ (Batch =1)
- แล้วส่งเข้า Line Notify ส่ง Notify item นั้นๆ (record เดียว)
- จากนั้นรอ 5 วินาที
- จากนั้นมันจะวนกลับมา Loop ต่อเพื่อทำ item ถัดไป

 ![16](https://www.thepexcel.com/wp-content/uploads/2024/10/flow-021.png) 

ถ้า Loop ทำเสร็จหมดทุก items แล้ว Workflow ก็จะวิ่งออกไปทำงานต่อในกิ่งที่เขียนว่า Done ได้อีกนั่นเอง

 

หน้าตาทั้ง Flow เราเป็นแบบนี้

 ![17](https://www.thepexcel.com/wp-content/uploads/2024/10/cover-1024x334.png) 

## **สรุป**

 

การกำหนด **Control Flow** ใน n8n จะช่วยให้คุณสามารถสร้าง Workflow ที่ซับซ้อนและยืดหยุ่นได้ตามความต้องการ ไม่ว่าจะเป็นการแยกเส้นทาง (Splitting), รวมข้อมูล (Merging), การหยุดรอ (Waiting) หรือการวนลูป (Looping) ซึ่งการใช้ Node เหล่านี้จะทำให้ Workflow ของคุณทำงานได้อย่างมีประสิทธิภาพและตอบโจทย์ทุกสถานการณ์

 

[ในตอนถัดไป เราจะมาเรียนรู้วิธีการนำ AI Model มาเชื่อมต่อใน Workflow ของคุณ](https://www.thepexcel.com/n8n-ep05/) เพื่อสร้าง **AI Agent** ที่ช่วยให้การทำงานของคุณฉลาดและอัตโนมัติมากขึ้น อย่าพลาดติดตามกันนะครับ!

---

_Source: [https://www.thepexcel.com/n8n-ep04/](https://www.thepexcel.com/n8n-ep04/)_
