1. รับลูกค้าจากฟอร์มเข้าชีต
เหมาะกับ: ทีมขายที่ต้องคัดลอกข้อมูลผู้สนใจจากฟอร์มลง Google Sheets และส่งข้อความให้ทีม

เตรียม: ชีตที่มีหัวคอลัมน์ name, email, company, submittedAt; Google credentials ที่เข้าถึงชีตได้; Slack credentials และสิทธิ์ส่งข้อความใน channel ที่เลือก
- เพิ่ม n8n Form Trigger สร้าง Field Name เป็น name, email และ company ตั้ง email เป็นชนิด Email และเปิด Required
- เพิ่ม Edit Fields (Set) เลือก Manual Mapping แล้วกำหนด name =
{{ $json.name }}, email ={{ $json.email.toLowerCase().trim() }}และ submittedAt ={{ $now.toISO() }}เก็บ company ไว้ด้วย - เพิ่ม Google Sheets เลือก Sheet Within Document → Append Row เลือก document และ sheet แล้ว map ทั้ง 4 ฟิลด์กับหัวคอลัมน์
- เพิ่ม Slack เลือกส่งข้อความไป channel ของทีม ใช้ผลลัพธ์จากชีต หรือเลือกข้อมูลจาก Edit Fields โดยตรงใน expression editor
- กด Execute Workflow แล้วกรอกข้อมูลที่ Test URL เมื่อตรวจครบแล้วจึง Publish และแชร์ Production URL
ทดสอบ: ส่ง name = “คุณเอ”, email = “test@example.com”, company = “Example” ควรเพิ่ม 1 แถวและแจ้ง Slack 1 ข้อความ ลองส่งโดยเว้น email ว่างเพื่อยืนยันว่าแบบฟอร์มไม่รับข้อมูลที่ขาด
ต่อยอด: ถ้าต้องการเก็บลูกค้าหนึ่งรายต่อ email ให้พิจารณา Append or Update Row และเลือก email เป็นคอลัมน์จับคู่ การกดส่งซ้ำอาจยังส่ง Slack ซ้ำได้ จึงต้องออกแบบเงื่อนไขแจ้งเตือนแยกต่างหาก
อ้างอิง: n8n Form · Google Sheets · Google OAuth2
2. ส่งรายงานทุกเช้า
เหมาะกับ: รายงานสถานะคำสั่งซื้อหรืองานค้างที่ต้องส่งให้ทีมเวลาเดิมทุกวัน

เตรียม: API สำหรับอ่านรายงานที่คุณมีสิทธิ์ใช้งานและ Gmail credentials ตัวอย่างสมมติว่า API ตอบ { "orders": [{ "id": "A001", "total": 1200 }, { "id": "A002", "total": 500 }] }
- ใน Workflow Settings ตั้ง timezone เป็น Asia/Bangkok เพิ่ม Schedule Trigger ให้รันทุกวันเวลา 09:00
- เพิ่ม HTTP Request ใช้ GET ใส่ endpoint ของระบบคุณ เลือก credentials และรูปแบบผลลัพธ์ JSON ทดสอบให้เห็นฟิลด์ orders
- เพิ่ม Split Out เลือก Fields To Split Out เป็น orders เพื่อแยกแต่ละ order เป็น item
- เพิ่ม Aggregate เลือก All Item Data และตั้งฟิลด์ผลลัพธ์เป็น orders เพื่อรวมกลับเป็นรายงานชุดเดียว
- เพิ่ม Gmail เลือกส่งอีเมลชนิดข้อความ ใส่ผู้รับและหัวเรื่อง สร้าง body จาก expression ด้านล่าง จากนั้นทดสอบด้วยการรันด้วยมือก่อน Publish
{{ $json.orders.map(order => order.id + ": " + order.total + " บาท").join("
") }}ผลลัพธ์ที่ควรได้: อีเมลหนึ่งฉบับแสดง A001: 1200 บาท และ A002: 500 บาท ตรวจด้วยว่า API คืนรายการว่างแล้ว flow หยุดหรือยังส่งรายงานตามที่ต้องการ หากต้องส่ง “ไม่มีรายการ” ให้แยกเงื่อนไขก่อน Split Out
ข้อควรตรวจ: timezone ของตัวกรองวันที่ใน API ต้องสอดคล้องกับเวลารายงาน หาก API แบ่งหน้าให้ตั้ง pagination ใน HTTP Request ให้ครบก่อนสรุป
อ้างอิง: Schedule Trigger · HTTP Request · Aggregate
3. รับคำสั่งผ่าน Webhook และตอบกลับเป็น JSON
เหมาะกับ: ระบบภายนอกส่งข้อมูลคำสั่งซื้อเข้ามาให้ n8n ตรวจรูปแบบก่อนทำขั้นตอนถัดไป

เตรียม: HTTP client เช่น curl หรือ Postman และ Header Auth credential สำหรับ endpoint
- เพิ่ม Webhook ตั้ง HTTP Method = POST, Path = order-intake และ Authentication = Header Auth เก็บชื่อ header และค่าลับใน credential
- ตั้ง Respond เป็น Using 'Respond to Webhook' Node แล้วเพิ่ม If ตรวจ
{{ $json.body.orderId }}ว่าไม่ว่าง - ต่อกิ่ง true ไป Respond to Webhook เลือก Respond With = JSON, Response Code = 200 และ body ตามตัวอย่างด้านล่าง ส่วนกิ่ง false ใช้ Respond to Webhook อีกตัว คืน code 400 และ
{ "ok": false, "error": "orderId is required" } - กด Listen for Test Event ใน Webhook แล้วส่ง JSON ไปที่ Test URL พร้อม header ที่กำหนด หลังทดสอบผ่านจึง Publish และเปลี่ยนผู้เรียกให้ใช้ Production URL
// Expression สำหรับ Response Body ของกิ่ง true
{{ { ok: true, orderId: $json.body.orderId } }}ทดสอบ: ส่ง { "orderId": "A001" } ควรได้ 200 และ orderId เดิม ส่ง {} ควรได้ 400 ส่งโดยไม่มี header ยืนยันตัวตนต้องถูกปฏิเสธ
ตัวอย่างนี้เพียงตรวจและตอบรับข้อมูล หากต่อเข้าระบบคำสั่งซื้อจริง ต้องตรวจข้อมูลที่จำเป็นเพิ่มเติมและกันการส่งซ้ำด้วย orderId ก่อนบันทึก
อ้างอิง: Webhook · Respond to Webhook
4. เรียก API ทีละชุดและเว้นช่วงระหว่างคำขอ
เหมาะกับ: ส่งข้อมูลหลายรายการไปบริการที่จำกัดจำนวน request ต่อช่วงเวลา

- สร้างข้อมูลทดสอบ 3 items ใน Code โหมด Run Once for All Items ตามตัวอย่างด้านล่าง
- เพิ่ม Loop Over Items ตั้ง Batch Size = 1 ต่อเอาต์พุต loop ไป HTTP Request
- เลือก endpoint ทดสอบที่คุณควบคุม ตั้ง request ให้ส่งฟิลด์ id จาก
{{ $json.id }}และเลือก credentials ตามระบบนั้น - ต่อ HTTP Request ไป Wait เลือก After Time Interval และเว้น 1 วินาทีสำหรับการทดลอง จากนั้นต่อ Wait กลับเข้าด้าน input ของ Loop Over Items
- ใช้เอาต์พุต done สำหรับขั้นตอนสรุปเมื่อครบทุก item ตั้ง Retry On Fail ของ HTTP Request ตามข้อจำกัดบริการ และไม่ถือว่าเวลาหน่วง 1 วินาทีเหมาะกับทุก API
return [1, 2, 3].map(id => ({ json: { id } }));ทดสอบ: endpoint ได้รับ id 1, 2 และ 3 อย่างละหนึ่งครั้ง มีช่วงรอระหว่างรอบ และทาง done ทำงานหลังครบทั้ง 3 items หากได้รับ 429 ให้ตรวจโควตาและ Retry-After ตามเอกสารบริการ
node ของ n8n จำนวนมากประมวลผลหลาย items ให้อยู่แล้ว ใช้ Loop Over Items เมื่อต้องควบคุมจำนวนต่อรอบหรือจังหวะเวลาโดยเฉพาะ
อ้างอิง: Loop Over Items · Handle rate limits
5. ผู้ช่วย AI ค้นข้อมูลจากเครื่องมือที่กำหนด
เหมาะกับ: ผู้ช่วยตอบคำถามที่ต้องอ่านข้อมูลจาก API ภายในที่อนุญาตให้อ่าน เช่นสถานะสินค้า

เตรียม: บัญชีผู้ให้บริการโมเดลและ API key, endpoint ค้นข้อมูลทดสอบ และขอบเขตข้อมูลที่อนุญาตให้ผู้ใช้เห็น การเรียกโมเดลอาจมีค่าใช้จ่ายตามผู้ให้บริการ
- เพิ่ม Chat Trigger แล้วต่อเข้า AI Agent ให้รับ prompt จากข้อความ chat
- เชื่อม Chat Model sub-node ที่รองรับ เช่น OpenAI Chat Model พร้อม credential ของคุณ
- ต่อ HTTP Request Tool เข้าช่อง Tool ของ Agent ตั้ง GET ไปยัง endpoint ที่กำหนด ใช้ credentials สิทธิ์อ่านอย่างเดียว และอธิบายหน้าที่ของ tool ให้ชัด
- กำหนด System Message เช่น “ตอบเป็นภาษาไทย ใช้ข้อมูลจากเครื่องมือเท่านั้น หากไม่พบข้อมูลให้บอกว่าไม่พบ ห้ามเดาสถานะสินค้า”
- เริ่มทดสอบด้วยข้อมูลจำลองและ Chat ภายใน editor ตรวจ execution ว่า Agent เรียก tool และอ้างผลลัพธ์ที่ได้รับจริง ก่อนเปิดให้ผู้ใช้เข้าถึง
ทดสอบ: ถามรหัสสินค้าที่มีอยู่ รหัสที่ไม่มี และคำถามนอกขอบเขต ตรวจทั้งคำตอบและผลลัพธ์จาก tool ไม่ตรวจเฉพาะว่าประโยคอ่านลื่นหรือไม่
AI Agent ต้องเชื่อมอย่างน้อยหนึ่ง tool หากต้องการบทสนทนาต่อเนื่องให้เพิ่ม memory และตรวจ session key ไม่ให้ประวัติข้ามผู้ใช้ การกำหนด prompt ไม่ได้ทดแทนการควบคุมสิทธิ์ที่ API
อ้างอิง: AI Agent · Chat Trigger
6. แจ้งทีมเมื่อ workflow ล้มเหลว
เหมาะกับ: งานอัตโนมัติที่ต้องมีคนรับรู้เมื่อ API หมดสิทธิ์เชื่อมต่อหรือขั้นตอนทำงานผิดพลาด

- สร้าง workflow ใหม่ชื่อ Error Handler ให้ Error Trigger เป็น node แรก แล้วต่อ Slack สำหรับส่งแจ้งเตือน
- เลือกข้อความแจ้งจากข้อมูล Error Trigger เช่นชื่อ workflow และข้อความผิดพลาด ใช้ expression ที่รองรับ error จาก trigger ตามตัวอย่าง
- บันทึก Error Handler แล้วเปิด Settings ของ workflow หลัก เลือก Error workflow เป็น Error Handler และบันทึก
- ทดสอบกับ workflow ทดลองที่รันอัตโนมัติและจงใจล้มเหลว เช่นใส่ Stop And Error หลัง Schedule Trigger แล้วตรวจว่า Slack ได้ข้อความ
{{ $json.workflow.name + ": " + ($json.execution?.error?.message ?? $json.trigger?.error?.message ?? "Unknown error") }}ผลลัพธ์ที่ควรได้: Error Handler รันเมื่อ workflow หลักที่เชื่อมไว้ล้มเหลวจากการรันอัตโนมัติ การกด Execute Workflow ด้วยมือไม่ทำให้ Error Trigger ทำงาน และ Error Handler เองไม่จำเป็นต้อง Publish
execution.url อาจไม่มีเมื่อ workflow ล้มเหลวที่ trigger จึงไม่ควรสมมติว่าทุกข้อความจะมีลิงก์ execution และควรส่งเฉพาะรายละเอียดที่ทีมต้องใช้แทนการส่งข้อมูล credential หรือ payload ทั้งก้อน
อ้างอิง: Error Trigger · Stop And Error
อ่านต่อ: ตัวอย่างที่นำไปใช้จริงกับธุรกิจ
ตัวอย่างด้านบนเน้นลำดับ node และการตั้งค่า ส่วนบทความด้านล่างเล่าว่าแต่ละงานเอาไปใช้กับธุรกิจอย่างไร ต้องระวังอะไร และควรให้คนตัดสินใจตรงจุดไหน
- ให้บอทหาลูกค้าทั้งคืน แล้วตื่นมาเจอลีดรออยู่ในแชต — ต่อยอดจาก use case รับลูกค้าจากฟอร์ม เพิ่มการคัดกรองด้วย AI และการส่งเข้าแชตทีมขาย
- ผลิตวิดีโอ Affiliate วันละสิบคลิป โดยไม่ต้องเปิดโปรแกรมตัดต่อ — สายการผลิตหกขั้น ตั้งแต่ฟีดสินค้าไปจนถึงคิวรอตรวจก่อนเผยแพร่
- รับจองห้องพักผ่าน LINE ด้วย AI แล้วให้ลงปฏิทินเองในแชตเดียว — ต่อยอดจาก use case Webhook และผู้ช่วย AI พร้อมวิธีกันจองชน
ภาพรวมว่าเราวางระบบอัตโนมัติให้ธุรกิจอย่างไร ดูได้ที่ โซลูชัน AI Automation

