n8n Thai
by n8n Thai

Webhook ใน n8n คืออะไร? วิธีใช้งานแบบละเอียด

เข้าใจ Webhook ตั้งแต่แนวคิดพื้นฐาน วิธีสร้าง Webhook ใน n8n รับข้อมูลจากระบบอื่น พร้อมตัวอย่าง use case จริง

Webhook ใน n8n คืออะไร? วิธีใช้งานแบบละเอียด

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

  1. คลิก “Listen for Test Event” ใน Webhook node
  2. ส่ง 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", "คอร์สออนไลน์"]
  }'
  1. 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:

FieldExpression
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

  1. ตั้งค่า Webhook ใน WooCommerce: Settings → Advanced → Webhooks
  2. Topic: “Order Created”, Delivery URL: n8n webhook URL
  3. n8n รับข้อมูล order → บันทึก Google Sheets → แจ้งเตือน LINE ให้ทีมขนส่ง

รับ Payment Notification จาก Omise

  1. ตั้งค่า Webhook ใน Omise Dashboard
  2. n8n รับ event charge.complete → ตรวจสอบ amount → อัปเดตสถานะ order ใน database

สร้าง LINE Bot

  1. ตั้งค่า Webhook URL ใน LINE Developers Console
  2. n8n รับข้อความจากผู้ใช้ → ประมวลผล → ตอบกลับด้วย LINE Reply API

รับ Form ข้อมูลจาก Typeform

  1. ตั้งค่า Webhook ใน Typeform Integrations
  2. n8n รับ form response → บันทึก Airtable → ส่ง email ขอบคุณ

Production URL vs Test URL

ข้อผิดพลาดที่พบบ่อยสำหรับมือใหม่ — สับสนระหว่าง 2 URL นี้:

Test URLProduction 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