ดึงข้อมูลจากเอกสารด้วย AI + n8n
วิธีดึงข้อมูลจาก PDF, Invoice, ใบเสร็จ และเอกสารต่างๆ อัตโนมัติด้วย AI และ n8n บันทึกลง Google Sheets หรือ Database
การพิมพ์ข้อมูลจาก Invoice หรือเอกสารลงระบบด้วยมือเป็นงานที่เสียเวลามาก ผิดพลาดง่าย และเป็น bottleneck ของหลายทีม n8n + AI แก้ปัญหานี้ได้ด้วย Workflow ที่อ่านเอกสารและดึงข้อมูลออกมาในรูปแบบที่ต้องการโดยอัตโนมัติ
ประเภทเอกสารที่ทำได้
ระบบนี้รองรับเอกสารหลายประเภท:
- Invoice/ใบแจ้งหนี้ — ดึงเลขที่, วันที่, ชื่อผู้ขาย, รายการสินค้า, ยอดรวม
- ใบเสร็จรับเงิน — ดึงข้อมูลค่าใช้จ่ายสำหรับทำบัญชี
- สัญญา — ดึงชื่อคู่สัญญา วันที่เริ่ม-สิ้นสุด มูลค่า เงื่อนไขสำคัญ
- Resume/CV — ดึงข้อมูลผู้สมัครงาน
- Form กรอกข้อมูล — scan แบบฟอร์มกระดาษแล้วดึงข้อมูล
- รายงาน — สรุปข้อมูลสำคัญออกมา
ขั้นตอนที่ 1: รับไฟล์เอกสาร
มีหลายวิธีที่ Workflow รับไฟล์:
Email Attachment — ตั้ง Gmail Trigger ตรวจ inbox เมื่อมี email ที่มี attachment (กรองด้วย subject หรือ sender) ดาวน์โหลด attachment มาประมวลผล
Google Drive — ตั้ง Google Drive Trigger เมื่อมีไฟล์ใหม่ใน folder ที่กำหนด เหมาะกับทีมที่ drop ไฟล์ไว้รอ process
Webhook / Upload Form — สร้าง n8n Form Trigger ให้ user อัปโหลดไฟล์ผ่าน browser ได้โดยตรง
LINE — รับไฟล์ที่ลูกค้าส่งมาใน LINE ดาวน์โหลดผ่าน LINE Content API
ขั้นตอนที่ 2: แปลง PDF เป็น Text
วิธีที่ 1: ใช้ Extract from File Node n8n มี Node ชื่อ Extract from File ที่แปลง PDF เป็น text ได้โดยตรง เหมาะกับ PDF ที่สร้างจากโปรแกรม (ไม่ใช่ scan)
วิธีที่ 2: ใช้ Vision API สำหรับ Scanned Document สำหรับ PDF ที่เป็นรูปสแกน ต้องใช้ OCR ก่อน
เพิ่ม HTTP Request Node เรียก OpenAI Vision API:
POST https://api.openai.com/v1/chat/completions
Content-Type: application/json
{
"model": "gpt-4o",
"messages": [{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "data:image/jpeg;base64,{{ $binary.data.toString('base64') }}"
}
},
{
"type": "text",
"text": "อ่านข้อความทั้งหมดในรูปนี้และแสดงออกมาตามที่ปรากฏ"
}
]
}]
}
Claude 3.5 Sonnet ก็มี Vision capability ที่ดีมาก ใช้แทนกันได้
ขั้นตอนที่ 3: ดึงข้อมูล Structured ด้วย AI
เมื่อได้ text จาก PDF แล้ว ขั้นต่อไปคือดึงข้อมูลในรูป JSON
เพิ่ม OpenAI Node System Prompt:
คุณเป็นระบบดึงข้อมูลจากเอกสาร
ดึงข้อมูลตามที่ระบุ ถ้าไม่พบข้อมูลนั้นให้ใส่ null
ตอบในรูปแบบ JSON เท่านั้น ห้ามมีข้อความอื่น
User Prompt สำหรับ Invoice:
ดึงข้อมูลต่อไปนี้จากเอกสาร:
{
"invoice_number": "เลขที่ใบแจ้งหนี้",
"invoice_date": "วันที่ออกใบแจ้งหนี้ รูปแบบ YYYY-MM-DD",
"due_date": "วันครบกำหนดชำระ รูปแบบ YYYY-MM-DD",
"vendor_name": "ชื่อผู้ขาย/บริษัทที่ออกใบแจ้งหนี้",
"vendor_tax_id": "เลขประจำตัวผู้เสียภาษีของผู้ขาย",
"total_amount": "ยอดรวม ตัวเลขเท่านั้น",
"vat_amount": "ภาษีมูลค่าเพิ่ม ตัวเลขเท่านั้น",
"line_items": [{"description": "", "quantity": 0, "unit_price": 0, "amount": 0}]
}
เอกสาร:
{{ $json.text }}
ขั้นตอนที่ 4: Validate ข้อมูลที่ดึงได้
ก่อนบันทึกลง database ควร validate ว่าข้อมูลถูกต้อง
เพิ่ม Code Node สำหรับ validation:
const data = JSON.parse($input.first().json.message.content);
const errors = [];
if (!data.invoice_number) errors.push('ไม่พบเลขที่ใบแจ้งหนี้');
if (!data.total_amount || isNaN(data.total_amount)) errors.push('ยอดรวมไม่ถูกต้อง');
if (!data.vendor_name) errors.push('ไม่พบชื่อผู้ขาย');
return [{ json: { ...data, validation_errors: errors, is_valid: errors.length === 0 } }];
ถ้า is_valid = false ให้ route ไปสร้าง task สำหรับให้คน review แทน
ขั้นตอนที่ 5: บันทึกลง Google Sheets หรือ Database
เพิ่ม Google Sheets Node (Append Row) ใส่ column mapping:
- Invoice Number →
{{ $json.invoice_number }} - Date →
{{ $json.invoice_date }} - Vendor →
{{ $json.vendor_name }} - Amount →
{{ $json.total_amount }} - Status → “Pending Review”
หรือถ้าใช้ Database เพิ่ม Postgres Node หรือ MySQL Node แทน
ตัวอย่าง Workflow สมบูรณ์
Gmail Trigger (รับ invoice ทาง email)
↓
IF (มี attachment ประเภท PDF)
↓
HTTP Request (ดาวน์โหลด attachment)
↓
Extract from File (แปลง PDF → text)
↓
OpenAI (ดึงข้อมูล structured)
↓
Code Node (parse JSON + validate)
↓
IF (is_valid = true)
├─ YES → Google Sheets (บันทึก)
│ → Gmail (แจ้งว่า process สำเร็จ)
└─ NO → Google Sheets (บันทึก + mark error)
→ Gmail (แจ้ง error ให้ review)
เพิ่มความแม่นยำด้วย Few-shot Examples
ถ้า AI ดึงข้อมูลผิดบ่อย ให้เพิ่มตัวอย่างใน prompt:
ตัวอย่าง:
เอกสาร: "ใบแจ้งหนี้เลขที่ INV-2026-001 วันที่ 10 เมษายน 2569..."
Output: {"invoice_number": "INV-2026-001", "invoice_date": "2026-04-10", ...}
เอกสารจริง:
{{ $json.text }}
2-3 ตัวอย่างมักเพียงพอให้ accuracy เพิ่มขึ้นมาก โดยเฉพาะกับเอกสาร format เฉพาะบริษัท
อยากเรียน n8n แบบเป็นระบบ ตั้งแต่เริ่มต้นจนสร้าง Workflow ใช้งานจริงได้ ลองดู คอร์สสอน n8n ที่ aiunlock.co
Related posts
สร้างคอนเทนต์อัตโนมัติด้วย AI + n8n
สร้างระบบผลิตคอนเทนต์ Social Media อัตโนมัติด้วย AI และ n8n ตั้งแต่เขียนข้อความ ไปจนถึงโพสต์ Facebook, Instagram, Line
AI ตอบอีเมลอัตโนมัติด้วย n8n + ChatGPT
สร้างระบบ AI ตอบอีเมลอัตโนมัติด้วย n8n และ ChatGPT จำแนกประเภทอีเมล ร่างคำตอบ และส่งหรือรอ approve ตามที่ตั้งค่า
สร้างรูปภาพด้วย AI + n8n: DALL-E, Midjourney API
วิธีสร้างรูปภาพด้วย AI อัตโนมัติผ่าน n8n เชื่อม DALL-E 3, Stable Diffusion และ Midjourney API เข้ากับ Workflow