Webhook ใน n8n คืออะไร? วิธีใช้งานแบบละเอียด
เข้าใจ Webhook ตั้งแต่แนวคิดพื้นฐาน วิธีสร้าง Webhook ใน n8n รับข้อมูลจากระบบอื่น พร้อมตัวอย่าง use case จริง
Webhook คือหนึ่งในเครื่องมือที่ทรงพลังที่สุดใน n8n เพราะมันเชื่อมต่อ n8n เข้ากับระบบใด ๆ ก็ได้ที่สามารถส่ง HTTP request ได้ ไม่ว่าจะเป็น WooCommerce, Shopify, LINE, Stripe, หรือแม้แต่แอปที่คุณสร้างเอง
Webhook คืออะไร?
Webhook คือกลไกที่ระบบ A ส่งข้อมูลไปหาระบบ B ทันทีเมื่อเกิด event บางอย่าง แทนที่จะให้ระบบ B คอย “ถาม” ระบบ A ซ้ำ ๆ ว่ามีอะไรใหม่ไหม (polling)
เปรียบง่าย ๆ ได้ว่า:
- Polling = โทรหาเพื่อนทุก 5 นาทีว่า “มีข่าวอะไรไหม?”
- Webhook = บอกเพื่อนว่า “ถ้ามีข่าวอะไรโทรมาหาฉันเลย”
Webhook จึงประหยัด resource กว่า ทำงานเร็วกว่า และเหมาะสำหรับ event ที่เกิดไม่สม่ำเสมอ
วิธีสร้าง Webhook ใน n8n
ขั้นตอนที่ 1: เพิ่ม Webhook Node
ใน n8n workflow ให้เพิ่ม node “Webhook” เป็น node แรก (Trigger) n8n จะสร้าง URL ให้อัตโนมัติ 2 URL:
- Test URL — ใช้ระหว่างพัฒนา ใช้งานได้เฉพาะเมื่อคลิก “Listen for Test Event”
- Production URL — ใช้เมื่อ workflow ถูก activate แล้ว รันได้ตลอดเวลา
ตัวอย่าง URL ที่ได้:
Production: https://your-n8n.com/webhook/550e8400-e29b-41d4-a716-446655440000
Test: https://your-n8n.com/webhook-test/550e8400-e29b-41d4-a716-446655440000
ขั้นตอนที่ 2: เลือก HTTP Method
| Method | ใช้เมื่อ |
|---|---|
| GET | ระบบส่งข้อมูลผ่าน query string เช่น ?name=value |
| POST | ส่งข้อมูลผ่าน request body (JSON) — พบบ่อยที่สุด |
| PUT | อัปเดตข้อมูล |
| DELETE | ลบข้อมูล |
| HEAD | ตรวจสอบ endpoint โดยไม่รับ body |
แอปส่วนใหญ่ใช้ POST ดังนั้น default ของ n8n คือ POST
ขั้นตอนที่ 3: ตั้งค่า Response
n8n มีตัวเลือก “Respond” ว่า webhook จะตอบกลับ requester อย่างไร:
Immediately — ตอบ 200 OK ทันทีโดยไม่รอ workflow ทำงานเสร็จ เหมาะสำหรับ webhook ที่ระบบต้นทางรอคำตอบสั้น ๆ
When Last Node Finishes — ตอบกลับเมื่อ workflow ทำงานเสร็จสมบูรณ์ ส่ง output ของ node สุดท้ายกลับไปเป็น response
Using Respond to Webhook Node — ควบคุม response เองด้วย “Respond to Webhook” node ยืดหยุ่นที่สุด เหมาะสำหรับ API ที่ต้องส่งข้อมูลกลับ
ขั้นตอนที่ 4: ทดสอบ Webhook
- คลิก “Listen for Test Event” ใน Webhook node
- ส่ง request ไปยัง Test URL
# ทดสอบด้วย curl
curl -X POST https://your-n8n.com/webhook-test/abc123 \
-H "Content-Type: application/json" \
-d '{
"order_id": "ORD-001",
"customer": "สมชาย ใจดี",
"amount": 1500,
"items": ["หนังสือ n8n", "คอร์สออนไลน์"]
}'
- n8n แสดง request ที่ได้รับในรูปแบบ JSON — คุณสามารถ inspect ข้อมูลและ map ไปยัง node ถัดไปได้เลย
การดึงข้อมูลจาก Webhook
ข้อมูลที่ได้รับผ่าน Webhook จะอยู่ใน $json ของ output node ถัดไปสามารถเข้าถึงได้ด้วย:
// ใน Code Node หรือ expression
{{ $json.body.order_id }} // ข้อมูลใน body
{{ $json.query.page }} // query string parameter
{{ $json.headers.authorization }} // HTTP headers
ตัวอย่างการ map ข้อมูล webhook ไปยัง Set Node:
| Field | Expression |
|---|---|
| order_id | {{ $json.body.order_id }} |
| customer_name | {{ $json.body.customer }} |
| total_amount | {{ $json.body.amount }} |
การเพิ่มความปลอดภัย
Webhook URL เป็น URL สาธารณะ ใครก็เรียกได้ถ้ารู้ URL ดังนั้นต้องป้องกัน:
Header Authentication
ตั้งค่า “Authentication” ใน Webhook node เป็น “Header Auth” แล้วกำหนด header name และ value:
Header Name: X-Webhook-Secret
Header Value: my-secret-token-here
ระบบที่ส่ง webhook ต้องแนบ header นี้มาด้วยทุกครั้ง:
curl -X POST https://your-n8n.com/webhook/abc123 \
-H "X-Webhook-Secret: my-secret-token-here" \
-H "Content-Type: application/json" \
-d '{"data": "test"}'
Basic Authentication
ใช้ username/password แบบมาตรฐาน HTTP Basic Auth ง่ายกว่าแต่ปลอดภัยน้อยกว่า Header Auth เล็กน้อย
Signature Verification
แพลตฟอร์มอย่าง Stripe, GitHub ส่ง signature ใน header เพื่อยืนยันว่า request มาจากพวกเขาจริง ๆ ต้องใช้ Code Node คำนวณ HMAC เพื่อตรวจสอบ:
const crypto = require('crypto');
const secret = 'your-webhook-secret';
const payload = JSON.stringify($json.body);
const signature = $json.headers['x-signature'];
const expectedSig = crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex');
if (signature !== `sha256=${expectedSig}`) {
throw new Error('Invalid webhook signature');
}
Use Cases ที่พบบ่อย
รับ Order จาก WooCommerce
- ตั้งค่า Webhook ใน WooCommerce: Settings → Advanced → Webhooks
- Topic: “Order Created”, Delivery URL: n8n webhook URL
- n8n รับข้อมูล order → บันทึก Google Sheets → แจ้งเตือน LINE ให้ทีมขนส่ง
รับ Payment Notification จาก Omise
- ตั้งค่า Webhook ใน Omise Dashboard
- n8n รับ event
charge.complete→ ตรวจสอบ amount → อัปเดตสถานะ order ใน database
สร้าง LINE Bot
- ตั้งค่า Webhook URL ใน LINE Developers Console
- n8n รับข้อความจากผู้ใช้ → ประมวลผล → ตอบกลับด้วย LINE Reply API
รับ Form ข้อมูลจาก Typeform
- ตั้งค่า Webhook ใน Typeform Integrations
- n8n รับ form response → บันทึก Airtable → ส่ง email ขอบคุณ
Production URL vs Test URL
ข้อผิดพลาดที่พบบ่อยสำหรับมือใหม่ — สับสนระหว่าง 2 URL นี้:
| Test URL | Production URL | |
|---|---|---|
| ใช้เมื่อ | คลิก “Listen for Test Event” เปิดอยู่ | Workflow ถูก Activate แล้ว |
| Path | /webhook-test/ | /webhook/ |
| เหมาะกับ | พัฒนาและทดสอบ | การใช้งานจริง |
สำคัญ: เมื่อพร้อม go live ต้องคลิปปุ่ม “Activate” ที่มุมบนขวาของ workflow editor และเปลี่ยนไปใช้ Production URL
Respond to Webhook Node
เมื่อต้องการส่งข้อมูลกลับไปยัง requester แบบ custom ใช้ “Respond to Webhook” node:
{
"status": "success",
"message": "Order received",
"order_id": "{{ $('Webhook').item.json.body.order_id }}"
}
ตั้งค่า Webhook node เป็น Respond: Using Respond to Webhook Node แล้ว Respond to Webhook node จะควบคุม HTTP response code และ body ได้อย่างอิสระ
ขั้นต่อไป
ถ้าเข้าใจ Webhook แล้ว ขั้นต่อไปคือการเรียนรู้ Trigger ประเภทอื่น ๆ ใน คู่มือ Trigger ใน n8n และการ ติดตั้ง n8n บน server จริง เพื่อให้ Webhook ทำงานได้ 24/7
อยากเรียน 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 อัจฉริยะ
จัดการ API Pagination ใน n8n: ดึงข้อมูลครบทุกหน้า
เรียนรู้วิธีจัดการ API Pagination ทุกรูปแบบใน n8n ตั้งแต่ Page-based, Cursor-based จนถึง Link Header เพื่อดึงข้อมูลครบทุก Record