n8n Thai
by n8n Thai

ดึงข้อมูลจากเอกสารด้วย AI + n8n

วิธีดึงข้อมูลจาก PDF, Invoice, ใบเสร็จ และเอกสารต่างๆ อัตโนมัติด้วย AI และ n8n บันทึกลง Google Sheets หรือ Database

ดึงข้อมูลจากเอกสารด้วย AI + n8n

การพิมพ์ข้อมูลจาก 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