n8n Thai
by n8n Thai

Loop และ Batch Processing ใน n8n

เรียนรู้วิธีใช้ Loop Node และ SplitInBatches ใน n8n เพื่อประมวลผลข้อมูลหลายรายการอย่างมีประสิทธิภาพโดยไม่ติด Rate Limit

Loop และ Batch Processing ใน n8n

งาน Automation ส่วนใหญ่ต้องจัดการข้อมูลหลายรายการ เช่น ส่งอีเมลหาลูกค้า 500 คน อัปเดตสินค้า 1,000 รายการ หรือดึงข้อมูลจาก API แล้วบันทึกทีละ Record ถ้าไม่รู้จักใช้ Loop และ Batch Processing อย่างถูกวิธี ปัญหาที่เจอบ่อยคือ API ปฏิเสธ Request เพราะ Rate Limit หรือ Instance n8n ค้างเพราะ Memory เต็ม

n8n จัดการข้อมูลหลายรายการยังไง

ก่อนพูดถึง Loop ต้องเข้าใจว่า n8n มีแนวคิดเรื่อง “Items” — ข้อมูลที่ไหลผ่าน Workflow จะอยู่ในรูป Array ของ Items เสมอ Node ส่วนใหญ่ประมวลผล Items ทีละตัวโดยอัตโนมัติ

ตัวอย่าง ถ้า HTTP Request Node ส่งคืนข้อมูล 100 Records Node ถัดไปจะได้รับ 100 Items และจะรันกับแต่ละ Item โดยอัตโนมัติ

แต่บางกรณีต้องการ Control มากกว่านั้น — เช่น ต้องการหน่วง delay ระหว่าง Item ต้องการจัด Item เป็น Batch หรือต้องการวน Loop พร้อมเงื่อนไขหยุด

Loop Over Items Node

Loop Over Items (ชื่อเดิมใน n8n เก่าบางเวอร์ชั่นคือ “Split In Batches” mode 1) ใช้สำหรับวนซ้ำผ่าน Items ทีละตัวพร้อมทำงานบางอย่างในแต่ละรอบ

กรณีที่เหมาะ: เมื่อต้องการ process Items ทีละตัวอย่างเป็นขั้นตอน เช่น เรียก API ทีละ Call แล้วรอผลก่อนไปต่อ

โครงสร้างพื้นฐาน:

Set Node (ข้อมูล Input)
  → Loop Over Items
      → [ประมวลผล 1 Item]
      → Loop Over Items (กลับ loop)
  → [หลังจบ loop ทุก Item]

Loop Over Items มี Output สองเส้น:

  • Loop — ส่ง Item ปัจจุบันออกมาให้ประมวลผล แล้ววนกลับ
  • Done — เมื่อประมวลผลทุก Item แล้ว ไหลออกเส้นนี้

SplitInBatches Node

SplitInBatches แบ่ง Items ทั้งหมดออกเป็น Batch ขนาดที่กำหนด แล้วปล่อยออกมาทีละ Batch เหมาะสำหรับ:

  • API ที่มี Rate Limit เช่น อนุญาต 10 Request ต่อวินาที
  • การ Insert ข้อมูลจำนวนมากลง Database ทีละ Batch
  • การส่งอีเมล Bulk ที่ต้องแบ่งช่วงเวลา

การตั้งค่า:

  • Batch Size — จำนวน Items ต่อ Batch (เช่น 10, 50, 100)
  • Options → Reset — เปิดเมื่อต้องการ reset counter (กรณีพิเศษ)

ตัวอย่างการใช้กับ API Rate Limit:

Get All Users (ได้มา 500 Users)
  → SplitInBatches (Batch Size: 10)
      → Send Email (ส่งอีเมลหา 10 คนพร้อมกัน)
      → Wait Node (รอ 1 วินาที)
      → SplitInBatches (วนกลับไปทำ Batch ถัดไป)
  → Done (เมื่อส่งครบ 500 คน)

Wait Node: ควบคุม Rate

เมื่อต้องหน่วงเวลาระหว่าง Batch ใช้ Wait Node ต่อหลัง SplitInBatches รองรับหน่วงเวลาเป็น วินาที, นาที, ชั่วโมง หรือจนกว่าจะถึงเวลาที่กำหนด

สำหรับ API ที่มี Rate Limit ชัดเจน เช่น 100 Request ต่อนาที ให้คำนวณ delay ที่เหมาะสม:

  • 100 Request/นาที = 1 Request/0.6 วินาที
  • ใช้ SplitInBatches ขนาด 10 + Wait 6 วินาที = ปลอดภัย

Aggregate Node: รวม Items กลับ

หลังจาก Process ทีละ Item แล้วต้องการรวมผลลัพธ์เป็น Array เดียว ใช้ Aggregate Node (หรือ Summarize Node ในบางเวอร์ชั่น)

ตัวอย่าง: ดึงข้อมูลจาก API 50 Endpoints แยกกัน แล้วรวม Response ทั้งหมดเป็น Array เพื่อบันทึกลง Google Sheets ในครั้งเดียว

ตัวอย่างจริง: ส่ง LINE Notification หาลูกค้าทุกคน

สมมติต้องส่ง LINE Message โปรโมชั่นหาลูกค้า 2,000 คน LINE API มี Rate Limit 1,000 Message ต่อนาทีต่อ Channel

Schedule Trigger (วันละครั้ง)
  → Google Sheets (ดึงรายการลูกค้าทั้งหมด)
  → Filter (เฉพาะลูกค้าที่ active)
  → SplitInBatches (Batch Size: 100)
      → LINE Node (ส่ง 100 Message พร้อมกัน)
      → Wait Node (รอ 7 วินาที = ~857 msg/นาที ปลอดภัย)
      → SplitInBatches (วนต่อ)
  → Done → Google Sheets (บันทึกว่าส่งแล้ว)

ตัวอย่างจริง: Sync สินค้าจาก Supplier API

Supplier มีสินค้า 5,000 รายการ ต้องดึงมาอัปเดตราคาทุกวัน Supplier API จำกัด 50 Request ต่อนาที แต่ละ Request ดึงได้ 100 สินค้า

Schedule Trigger (ทุกคืนเที่ยงคืน)
  → HTTP Request (ดึง catalog รวม 5,000 รายการ จาก 50 Request)
     [ใช้ Pagination — ดูบทความ API Pagination]
  → SplitInBatches (Batch Size: 100)
      → Code Node (เปรียบเทียบราคาเดิม-ใหม่)
      → IF Node (ราคาเปลี่ยน?)
          YES → WooCommerce (อัปเดตราคา)
      → Wait Node (รอ 1.2 วินาที)
      → SplitInBatches (วนต่อ)
  → Done → Slack (รายงานสรุป: อัปเดตแล้ว X รายการ)

ป้องกัน Memory Overflow

เมื่อต้องจัดการข้อมูลขนาดใหญ่มาก (หลักหมื่นถึงแสนรายการ) ควรหลีกเลี่ยงการโหลดข้อมูลทั้งหมดเข้า Memory พร้อมกัน แนวทาง:

  1. Pagination ตั้งแต่ต้น — ดึงข้อมูลทีละหน้าจาก Source แทนที่จะดึงทีเดียวทั้งหมด
  2. Process และทิ้ง — Process แต่ละ Batch แล้วปล่อยให้ Garbage Collect ก่อนไป Batch ถัดไป
  3. ใช้ Database เป็น Buffer — บันทึกข้อมูลดิบลง DB ก่อน แล้วค่อยประมวลผลทีหลัง

ตรวจสอบ Progress ระหว่างทำงาน

เมื่อ Loop ทำงานนาน ควรมีวิธีติดตาม Progress ทำได้โดยเพิ่ม Code Node ภายใน Loop เพื่อคำนวณ % ที่เสร็จแล้ว บันทึกลง Google Sheets หรือส่ง Log ทุกๆ 100 Items

// ใน Code Node ภายใน Loop
const current = $('Loop Over Items').context.currentRunIndex + 1;
const total = $('Loop Over Items').context.noItemsLeft + current;
const percent = Math.round((current / total) * 100);

if (current % 100 === 0) {
  // บันทึก progress ทุก 100 items
  console.log(`Progress: ${current}/${total} (${percent}%)`);
}

return $input.all();

Loop และ Batch Processing เป็นทักษะที่แยก Workflow ธรรมดากับ Workflow ระดับ Production ออกจากกัน เมื่อคุณจัดการข้อมูลปริมาณมากได้อย่างมีประสิทธิภาพ ขอบเขตของงานที่ Automate ได้ก็ขยายออกไปอย่างมีนัยสำคัญ

อยากเรียน n8n แบบเป็นระบบ ตั้งแต่เริ่มต้นจนสร้าง Workflow ใช้งานจริงได้ ลองดู คอร์สสอน n8n ที่ aiunlock.co

Related posts