- 3
- เมษายน
OpenClaw Deep Dive Series EP.6 (ตอนจบ) — จาก EP.5 ที่เรา Deploy OpenClaw สู่ Production กันไปแล้ว ตอนนี้ถึงเวลาเชื่อม OpenClaw เข้ากับระบบ ERP จริง — สร้าง AI Assistant ที่รู้จักข้อมูลองค์กร ตอบคำถามงบประมาณ อนุมัติเอกสาร และสรุปรายงานได้ทันที ไม่ต้อง login เข้า ERP อีกต่อไป!
สรุปสั้น — สิ่งที่จะได้เรียนรู้ในบทความนี้:
- ERP API Integration — เชื่อม AI กับ ERP ผ่าน REST API อย่างปลอดภัย
- สร้าง ERP Skills 5 ตัว — Budget Query, Document Approval, Report Summary, Inventory Alert, Employee Info
- Data Security & Access Control — Role-based access + sensitive data masking
- Real Use Cases 5 สถานการณ์ — ตัวอย่างการใช้งานจริงในองค์กร
- ROI ของ AI + ERP — ลดเวลา 90%, ลดข้อผิดพลาด 75%, ประหยัดค่าแรง 40%
ทำไมต้องเชื่อม AI กับ ERP?
ปัจจุบันผู้บริหารและพนักงานต้อง login เข้าระบบ ERP → navigate ไปหาเมนูที่ต้องการ → export รายงาน → อ่านวิเคราะห์เอง → ตัดสินใจ ขั้นตอนเหล่านี้กินเวลา 5-10 นาทีต่อครั้ง ต้องรู้ว่าข้อมูลอยู่เมนูไหน และทำซ้ำทุกวัน — ด้วย AI Assistant แค่ถามว่า "สรุปงบเดือนนี้" AI ก็ดึงข้อมูลจาก ERP มาสรุปให้ทันทีภายใน 10 วินาที ภาษาคนเข้าใจง่าย
| เปรียบเทียบ | แบบเดิม (Manual) | แบบใหม่ (AI Assistant) |
|---|---|---|
| เวลาที่ใช้ | 5-10 นาทีต่อครั้ง (login → navigate → export → อ่าน) | 10 วินาที (ถามภาษาคน → ได้คำตอบทันที) |
| ความรู้ที่ต้องมี | ต้องรู้ว่าข้อมูลอยู่เมนูไหน ต้องอบรมก่อนใช้ | ถามภาษาไทยได้เลย ไม่ต้องรู้โครงสร้างระบบ |
| ช่องทาง | ต้องเปิดหน้าจอ ERP เท่านั้น | ถามผ่าน LINE, WhatsApp, หรือ Web Chat ได้ |
| การวิเคราะห์ | ต้องดูตัวเลขเองแล้วสรุป | AI สรุปให้พร้อมเปรียบเทียบกับเดือนก่อน |
Architecture — OpenClaw + ERP
การเชื่อม OpenClaw กับ ERP มีสถาปัตยกรรมหลัก 3 ชั้น — User สื่อสารผ่าน Chat (LINE/WhatsApp/Web) → OpenClaw Agent รับคำสั่งและเลือก Skill ที่เหมาะสม → เรียก ERP API Layer ดึงข้อมูลจาก ERP Database:
# Architecture: OpenClaw + ERP Integration
User (LINE / WhatsApp / Web Chat)
|
v
[OpenClaw Agent] -- เลือก Skill ตามคำถาม -->
|
|--> [Budget Query Skill] --> GET /api/budget/{dept}
|--> [Document Approval Skill] --> POST /api/approval
|--> [Report Summary Skill] --> GET /api/reports/sales
|--> [Inventory Alert Skill] --> GET /api/inventory/low-stock
|--> [Employee Info Skill] --> GET /api/hr/new-employees
|
v
[ERP API Layer] -- REST API with Authentication -->
|
v
[ERP Database]
| วิธีเชื่อมต่อ | หลักการ | ข้อดี | ข้อเสีย |
|---|---|---|---|
| REST API (แนะนำ) | เรียกผ่าน HTTP endpoint มี authentication | ปลอดภัยที่สุด แยก layer ชัดเจน ควบคุมสิทธิ์ได้ | ต้องพัฒนา API layer เพิ่ม |
| Database Direct | เชื่อมต่อ database โดยตรง (SQL query) | เร็ว ไม่ต้องพัฒนา API | เสี่ยงด้านความปลอดภัย AI อาจ query ผิด |
| Webhook (Event-driven) | ERP ส่ง event เมื่อมีการเปลี่ยนแปลง AI รับและประมวลผล | Real-time ไม่ต้อง poll | ซับซ้อน ต้องจัดการ event queue |
แนะนำ REST API เป็นวิธีที่ปลอดภัยที่สุด เพราะแยก layer ระหว่าง AI กับ ERP ชัดเจน มี authentication ทุก request ควบคุมได้ว่า AI เข้าถึงข้อมูลอะไรได้บ้าง ไม่เสี่ยง SQL Injection และ audit ได้ทุก request
สร้าง ERP Skills — 5 ตัวอย่างจริง
แต่ละ Skill คือ function ที่ OpenClaw Agent เรียกใช้เมื่อ user ถามคำถามที่ตรงกัน — เหมือนกับ Custom Skill ที่เราเรียนใน EP.2 แต่คราวนี้เชื่อมกับ ERP จริง:
1. Budget Query Skill — "งบเหลือเท่าไหร่?"
// skills/budget-query.js — ถามงบประมาณแต่ละแผนก
const { Skill } = require('@openclaw/sdk');
module.exports = new Skill({
name: 'budget-query',
description: 'ดึงข้อมูลงบประมาณตามแผนก',
parameters: {
department: { type: 'string', required: true, description: 'ชื่อแผนก' },
year: { type: 'number', default: 2026 }
},
async execute({ department, year }) {
const response = await fetch(
`${ERP_API_URL}/api/budget/${encodeURIComponent(department)}?year=${year}`,
{ headers: { 'Authorization': `Bearer ${ERP_API_TOKEN}` } }
);
const data = await response.json();
return {
department: data.department,
totalBudget: data.totalBudget.toLocaleString(),
spent: data.spent.toLocaleString(),
remaining: data.remaining.toLocaleString(),
percentUsed: ((data.spent / data.totalBudget) * 100).toFixed(1) + '%',
summary: `แผนก${department} ใช้งบไป ${data.spent.toLocaleString()} บาท ` +
`จากงบทั้งหมด ${data.totalBudget.toLocaleString()} บาท ` +
`คงเหลือ ${data.remaining.toLocaleString()} บาท (${((data.spent / data.totalBudget) * 100).toFixed(1)}%)`
};
}
});
2. Document Approval Skill — "อนุมัติใบเบิก PR-001"
// skills/document-approval.js — อนุมัติเอกสารผ่าน AI
module.exports = new Skill({
name: 'document-approval',
description: 'อนุมัติหรือปฏิเสธเอกสาร (PR, PO, Payment)',
parameters: {
documentId: { type: 'string', required: true },
action: { type: 'string', enum: ['approve', 'reject'], required: true },
reason: { type: 'string', default: '' }
},
async execute({ documentId, action, reason }, context) {
// ตรวจสอบสิทธิ์ก่อนอนุมัติ
if (!context.user.permissions.includes('approval')) {
return { error: 'คุณไม่มีสิทธิ์อนุมัติเอกสาร กรุณาติดต่อผู้ดูแลระบบ' };
}
const response = await fetch(`${ERP_API_URL}/api/approval`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${ERP_API_TOKEN}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
documentId, action, reason,
approvedBy: context.user.id,
approvedAt: new Date().toISOString()
})
});
const result = await response.json();
return {
status: result.success ? 'สำเร็จ' : 'ล้มเหลว',
summary: `เอกสาร ${documentId} ได้รับการ${action === 'approve' ? 'อนุมัติ' : 'ปฏิเสธ'}แล้ว`
};
}
});
3. Report Summary Skill — "สรุปยอดขายเดือนนี้"
// skills/report-summary.js — ดึงรายงานแล้วให้ AI สรุป
module.exports = new Skill({
name: 'report-summary',
description: 'ดึงรายงานยอดขาย/ค่าใช้จ่าย แล้วสรุปเป็นภาษาคน',
parameters: {
reportType: { type: 'string', enum: ['sales', 'expenses', 'profit'], required: true },
period: { type: 'string', default: 'current-month' }
},
async execute({ reportType, period }) {
const response = await fetch(
`${ERP_API_URL}/api/reports/${reportType}?period=${period}`,
{ headers: { 'Authorization': `Bearer ${ERP_API_TOKEN}` } }
);
const data = await response.json();
// ส่งข้อมูลดิบให้ AI สรุปเป็นภาษาคน
return {
rawData: data,
promptForAI: `สรุปรายงาน${reportType === 'sales' ? 'ยอดขาย' : reportType === 'expenses' ? 'ค่าใช้จ่าย' : 'กำไร'} ` +
`เปรียบเทียบกับเดือนก่อน เน้นจุดสำคัญ ใช้ภาษาที่ผู้บริหารเข้าใจง่าย`
};
}
});
4. Inventory Alert Skill — "สต็อกอะไรใกล้หมด?"
// skills/inventory-alert.js — แจ้งเตือนสินค้าใกล้หมดสต็อก
module.exports = new Skill({
name: 'inventory-alert',
description: 'ตรวจสอบสินค้าที่ต่ำกว่า min stock พร้อมแนะนำการสั่งซื้อ',
async execute() {
const response = await fetch(
`${ERP_API_URL}/api/inventory/low-stock`,
{ headers: { 'Authorization': `Bearer ${ERP_API_TOKEN}` } }
);
const items = await response.json();
return {
totalLowStock: items.length,
items: items.map(item => ({
name: item.name,
currentStock: item.currentStock,
minStock: item.minStock,
suggestedOrder: item.minStock * 2 - item.currentStock,
lastOrderDate: item.lastOrderDate
})),
summary: `มีสินค้า ${items.length} รายการที่ต่ำกว่า min stock ` +
`รายการเร่งด่วน: ${items.filter(i => i.currentStock === 0).length} รายการหมดสต็อก`
};
}
});
5. Employee Info Skill — "พนักงานใหม่เดือนนี้มีกี่คน?"
// skills/employee-info.js — ดึงข้อมูล HR สรุปภาพรวม
module.exports = new Skill({
name: 'employee-info',
description: 'ดึงข้อมูลพนักงาน สรุป headcount turnover leave',
parameters: {
query: { type: 'string', required: true, description: 'คำถามเกี่ยวกับ HR' },
period: { type: 'string', default: 'current-month' }
},
async execute({ query, period }) {
const response = await fetch(
`${ERP_API_URL}/api/hr/summary?period=${period}`,
{ headers: { 'Authorization': `Bearer ${ERP_API_TOKEN}` } }
);
const data = await response.json();
return {
totalEmployees: data.totalEmployees,
newHires: data.newHires,
resignations: data.resignations,
turnoverRate: data.turnoverRate + '%',
onLeaveToday: data.onLeaveToday,
summary: `พนักงานทั้งหมด ${data.totalEmployees} คน ` +
`เดือนนี้รับใหม่ ${data.newHires} คน ลาออก ${data.resignations} คน ` +
`อัตรา turnover ${data.turnoverRate}% วันนี้ลา ${data.onLeaveToday} คน`
};
}
});
ERP Skills เหล่านี้เชื่อมกับข้อมูลจริงในระบบ ERP ผ่าน REST API — ทำให้ AI ตอบคำถามเกี่ยวกับต้นทุนการผลิต คลังสินค้า ทรัพยากรบุคคล ได้ทันทีโดยไม่ต้อง login เข้าระบบ
Data Security & Access Control
การเชื่อม AI กับ ERP ต้องให้ความสำคัญกับความปลอดภัยเป็นอันดับแรก เพราะ ERP มีข้อมูลที่ sensitive มาก — ต้องใช้ การยืนยันตัวตน 2 ขั้นตอน (2FA) ร่วมด้วย และควบคุมสิทธิ์ตาม Role:
| Role | ข้อมูลที่เห็นได้ | สิ่งที่ทำได้ | สิ่งที่ทำไม่ได้ |
|---|---|---|---|
| CEO / ผู้บริหารสูงสุด | ทุกแผนก ทุกข้อมูล ภาพรวมทั้งองค์กร | ดูรายงานทั้งหมด อนุมัติทุกระดับ | - |
| Manager / หัวหน้าแผนก | เฉพาะแผนกตัวเอง | ดูรายงานแผนก อนุมัติภายในวงเงิน | ดูข้อมูลแผนกอื่น อนุมัติเกินวงเงิน |
| Staff / พนักงาน | เฉพาะข้อมูลตัวเอง | ดูสลิปเงินเดือน เช็ควันลา เบิกของ | ดูเงินเดือนคนอื่น ดูงบประมาณ อนุมัติ |
// middleware/permission-check.js — ตรวจสอบสิทธิ์ก่อนเรียก ERP API
function checkPermission(user, skill, params) {
const permissions = {
'CEO': { skills: ['*'], departments: ['*'] },
'Manager': { skills: ['budget-query', 'report-summary', 'inventory-alert',
'employee-info', 'document-approval'],
departments: [user.department] },
'Staff': { skills: ['employee-info'], departments: [] }
};
const perm = permissions[user.role];
if (!perm) return { allowed: false, reason: 'ไม่พบ role ในระบบ' };
// ตรวจสอบ skill
if (!perm.skills.includes('*') && !perm.skills.includes(skill)) {
return { allowed: false, reason: `${user.role} ไม่มีสิทธิ์ใช้ ${skill}` };
}
// ตรวจสอบ department
if (params.department && !perm.departments.includes('*')
&& !perm.departments.includes(params.department)) {
return { allowed: false, reason: `ไม่มีสิทธิ์ดูข้อมูลแผนก ${params.department}` };
}
return { allowed: true };
}
// Sensitive Data Masking — ซ่อนข้อมูลส่วนบุคคล
function maskSensitiveData(data, userRole) {
if (userRole !== 'CEO') {
// ซ่อนเลขบัตรประชาชน
if (data.nationalId) data.nationalId = '****-*****-**-*';
// ซ่อนเงินเดือนคนอื่น
if (data.salary && !data.isOwnData) data.salary = '***,***';
// ซ่อนเบอร์โทรส่วนตัว
if (data.personalPhone) data.personalPhone = '***-***-' + data.personalPhone.slice(-4);
}
return data;
}
Real-world Use Cases — 5 สถานการณ์จริง
| # | สถานการณ์ | AI ทำอะไร | ผลลัพธ์ |
|---|---|---|---|
| 1 | ผู้บริหารถาม "สรุปงบเดือนนี้" | AI ดึงข้อมูลจาก ERP เปรียบเทียบกับเดือนก่อน วิเคราะห์แผนกที่ใช้งบเกิน | ได้สรุป 1 ย่อหน้าพร้อมตัวเลข + แจ้งเตือนแผนกที่เกินงบ |
| 2 | พนักงานเบิกของ "เบิกกระดาษ A4 5 รีม" | AI ตรวจสอบงบแผนก + ตรวจสต็อก + อนุมัติอัตโนมัติ (ถ้าไม่เกินวงเงิน) | อนุมัติทันที สร้าง PR อัตโนมัติ แจ้งคลังสินค้า |
| 3 | คลังสินค้าแจ้งเตือน "สินค้าใกล้หมด" | AI ตรวจสอบ min stock ทุกรายการ สร้าง PR อัตโนมัติ แจ้ง Manager | ไม่มีสินค้าหมดสต็อกอีก สั่งซื้อก่อนหมด |
| 4 | HR ถาม "สถิติพนักงานเดือนนี้" | AI สรุป headcount, turnover, ลาป่วย, ลาพักร้อน, พนักงานใหม่ | ได้ dashboard สรุปภาพรวม HR ทันที ไม่ต้อง export Excel |
| 5 | Auditor ตรวจสอบ "รายการผิดปกติ" | AI ดึง transaction log วิเคราะห์ anomaly (ยอดสูงผิดปกติ, เวลาผิดปกติ) | รายงาน anomaly พร้อม flag สีแดง + รายละเอียดแต่ละรายการ |
ROI ของ AI + ERP
การเชื่อม AI เข้ากับ ERP ไม่ใช่แค่เรื่องสะดวก แต่คือการลงทุนที่คืนทุนได้จริง — ดูตัวเลขเปรียบเทียบ:
| ตัวชี้วัด | ก่อน (Manual) | หลัง (AI + ERP) | ปรับปรุง |
|---|---|---|---|
| เวลาดึงรายงาน | 10-15 นาที/ครั้ง | 10-30 วินาที/ครั้ง | ลด 90% |
| ข้อผิดพลาดจากคน | 5-8% ต่อเดือน (export ผิด อ่านผิด) | 1-2% ต่อเดือน | ลด 75% |
| ค่าแรงงาน (admin) | 3-4 ชั่วโมง/วัน สำหรับงาน routine | 1-2 ชั่วโมง/วัน | ประหยัด 40% |
| เวลาตัดสินใจ | รอรายงาน 1-2 วัน | ได้ข้อมูลทันที | Real-time |
| สินค้าหมดสต็อก | เดือนละ 3-5 ครั้ง | เดือนละ 0-1 ครั้ง | ลด 80% |
ตัวเลขเหล่านี้มาจากกรณีศึกษาขององค์กรขนาดกลาง (100-500 คน) ที่เริ่มใช้ AI ร่วมกับ ERP — ยิ่งองค์กรใหญ่ ROI ยิ่งสูง เพราะปริมาณงาน routine เยอะกว่า ดูรายละเอียดการวางแผนติดตั้ง ERP สำหรับองค์กรที่สนใจ
ข้อควรระวังเมื่อเชื่อม AI กับ ERP:
- AI ไม่ควรมีสิทธิ์ write ทุกอย่างใน ERP — จำกัดเฉพาะ read-only เป็นหลัก ให้ write ได้เฉพาะ action ที่กำหนดไว้ (เช่น อนุมัติ, สร้าง PR)
- ต้องมี Human-in-the-Loop สำหรับ transaction สำคัญ — เช่น การจ่ายเงิน, ลบข้อมูล, แก้ไขสัญญา ต้องให้คนยืนยันก่อนเสมอ
- ทดสอบกับ Staging ก่อน Production — อย่าเชื่อม AI กับ ERP production โดยตรง ทดสอบให้ครบถ้วนก่อนเสมอ
- Log ทุก action — ทุก request ที่ AI ส่งไป ERP ต้องมี log เก็บไว้ตรวจสอบ ใครถาม ถามอะไร ได้คำตอบอะไร เมื่อไหร่
Saeree ERP + AI Assistant — พร้อมสำหรับอนาคต:
Saeree ERP กำลังพัฒนา AI Assistant ที่สามารถทำสิ่งเหล่านี้ได้จริง — ถามงบ อนุมัติเอกสาร สรุปรายงาน ตรวจสต็อก ทั้งหมดผ่าน Chat เดียว รองรับทั้ง On-premise และ Cloud พร้อม SSL A+ และ 2FA สำหรับความปลอดภัยสูงสุด
สนใจให้ Saeree ERP + AI ช่วยองค์กรของคุณ? ปรึกษาทีมงานฟรี ไม่มีค่าใช้จ่าย
OpenClaw Deep Dive Series — ครบจบ 6 ตอน!
OpenClaw Deep Dive Series — 6 ตอนเจาะลึก AI Agent:
- EP.1: ติดตั้ง OpenClaw และสร้าง AI Agent ตัวแรก
- EP.2: เจาะลึก OpenClaw Skills — สร้าง Custom Skill ตั้งแต่ศูนย์
- EP.3: OpenClaw Kernel Module ภาคปฏิบัติ — เขียน Module เองทีละขั้น
- EP.4: สร้าง Multi-Agent Workflow ด้วย OpenClaw — ออกแบบและ Implement
- EP.5: Deploy OpenClaw สู่ Production — Security, Monitoring, Scaling
- EP.6: เชื่อม OpenClaw กับ ERP — สร้าง AI Assistant สำหรับองค์กร (บทความนี้)
ครบจบ 6 ตอน! จากติดตั้งจนถึงเชื่อม ERP — พร้อมสร้าง AI Agent ที่ทำงานจริงในองค์กรแล้ว
"AI + ERP ไม่ใช่อนาคตอีกต่อไป — องค์กรที่เริ่มวันนี้จะได้เปรียบกว่าคู่แข่งที่รอ เพราะ AI ทำให้ข้อมูลใน ERP มีชีวิต — ตอบได้ทันที ไม่ต้องรอรายงาน"
- ทีมงาน Saeree ERP




