ปลดล็อกยอดขายด้วยการเชื่อมต่อ Facebook Graph API และ Shopee Auto Post
คุณเคยไหมที่ต้องสลับหน้าจอไปมาระหว่าง Facebook เพื่อตอบแชทลูกค้า แล้วต้องเปิดอีกแท็บเพื่อไปกดคัดลอกรูปและรายละเอียดสินค้าจาก Shopee มาโพสต์ลงเพจจนเหนื่อยล้า? ผมเจอปัญหานี้มานานจนงานขายแทบสะดุดเพราะโพสต์สินค้าไม่ทันคู่แข่ง นี่คือสถานการณ์จริงที่ทำให้ผมต้องหาทางแก้ด้วยการเขียนโปรแกรมเชื่อมต่อระบบเข้าด้วยกันเอง ไม่ใช่เพื่อความเท่ แต่เพื่อเอาเวลาไปทำอย่างอื่นที่สำคัญกว่า
1. เตรียมสภาพแวดล้อมและเวอร์ชันที่ต้องใช้
เราจะใช้ Node.js เวอร์ชัน 20.x ซึ่งเป็น LTS (Long-term Support ที่เสถียรที่สุด) ในการเขียนสคริปต์นี้ เพราะไลบรารี axios สำหรับส่งคำสั่ง HTTP Request นั้นทำงานได้นิ่งมากกับ Node.js รุ่นปัจจุบัน
npm init -y
npm install axios dotenv
บรรทัดแรกเป็นการสร้างไฟล์ package.json เพื่อตั้งค่าโปรเจกต์ ส่วนบรรทัดที่สองติดตั้ง axios สำหรับเรียก API และ dotenv สำหรับเก็บค่าความลับที่ห้ามหลุดไปใน Git ผลลัพธ์ที่ได้คือโฟลเดอร์ node_modules และไฟล์ package.json หากรันแล้วเจอ error ว่า command not found ให้เช็คว่าติดตั้ง Node.js ผ่าน nvm หรือยัง
2. การขอ Access Token จาก Facebook Graph API
Graph API คือช่องทางหลักที่ Facebook เปิดให้โปรแกรมภายนอกคุยกับเพจได้ ก่อนอื่นคุณต้องไปที่ Facebook Developers Portal สร้าง App แล้วกดเลือก Facebook Login เพื่อขอ Page Access Token ที่มีสิทธิ์ manage_pages และ publish_pages
const axios = require('axios');
const PAGE_ID = 'YOUR_PAGE_ID';
const TOKEN = 'YOUR_ACCESS_TOKEN';
const postToFB = async (msg) => {
const url = `https://graph.facebook.com/v19.0/${PAGE_ID}/feed`;
const res = await axios.post(url, { message: msg, access_token: TOKEN });
console.log(res.data.id);
};
บรรทัดที่ 4-7 คือการใช้ axios ยิง POST request ไปที่ endpoint ของ Graph API v19.0 ซึ่งเป็นเวอร์ชันปัจจุบัน ผลลัพธ์ควรจะได้ ID ของโพสต์กลับมา หากขึ้น error 400 ให้ตรวจสอบว่า Token หมดอายุหรือยัง (ปกติถ้าขอแบบยาวจะอยู่ได้ 60 วัน)
3. ดึงข้อมูลสินค้าจาก Shopee ด้วยวิธีที่ยั่งยืน
หลายคนชอบใช้ Puppeteer (เครื่องมือควบคุมเบราว์เซอร์อัตโนมัติ) มา scrape ข้อมูล แต่ผมเลือกไม่ใช้เพราะมันเปราะบางเกินไปเมื่อ UI Shopee เปลี่ยน วิธีที่ผมเลือกคือการเรียก API ภายในของเขาโดยตรงผ่านคุกกี้ที่ถูกต้อง หรือถ้าคุณมี Shopee Open Platform API จะดีที่สุด แต่ถ้าไม่มี ให้ลองเช็ค endpoint แบบ GET ที่ดึงข้อมูลจาก Product List ในหน้าจัดการหลังร้านแทน
4. การจัดการความปลอดภัยด้วย .env
ห้ามเขียน Token ลงในโค้ดตรง ๆ เด็ดขาด ให้สร้างไฟล์ .env ไว้เก็บค่าเหล่านี้
FB_TOKEN=EAAGg...YOUR_TOKEN_HERE
SHOPEE_COOKIE=...
บรรทัดเหล่านี้เก็บค่าเฉพาะตัวของคุณไว้แยกจากโค้ดหลัก เพื่อป้องกันอุบัติเหตุการเผลอ push ขึ้น GitHub ผลลัพธ์คือโปรแกรมจะอ่านค่าผ่าน process.env หากโปรแกรมหาค่าไม่เจอ จะได้ error ว่า undefined ซึ่งหมายความว่าคุณลืมสร้างไฟล์ .env
5. ขั้นตอนการทำ Auto Post อย่างมีจังหวะ
การยิง API รัวเกินไปจะทำให้ Facebook มองว่าเป็น Bot และโดนแบนได้ ผมจึงใช้ setTimeout หรือ setInterval ในการหน่วงเวลาโพสต์
const delay = (ms) => new Promise(res => setTimeout(res, ms));
// รอ 5 วินาทีก่อนโพสต์ถัดไป
await delay(5000);
บรรทัดแรกเป็นการสร้างฟังก์ชันหน่วงเวลาด้วย Promise ช่วยให้โค้ดดูสะอาดขึ้นเมื่อใช้กับ async/await ผลลัพธ์คือการทำงานที่ต่อเนื่องโดยไม่โดน Facebook บล็อก
6. รับมือกับข้อผิดพลาด (Error Handling)
สิ่งที่คุณต้องเจอแน่นอนคือ API ล่มหรือ Token หมดอายุ โค้ดต้องมี try-catch ครอบไว้เสมอ
try {
await postToFB(message);
} catch (e) {
console.error('โพสต์ไม่สำเร็จ: ', e.response.data.error.message);
}
บรรทัดที่ 3 ดึงข้อความ error จริงจากฝั่ง Facebook มาแสดง ทำให้เราทราบว่าติดปัญหาที่ permission หรือ token หมดอายุ ผลลัพธ์ที่ได้คือ log ที่อ่านรู้เรื่องแทนที่จะให้โปรแกรมพังไปดื้อ ๆ
7. เมื่อไหร่ที่ไม่ควรใช้วิธีนี้
ถ้าคุณมียอดขายระดับพันออเดอร์ต่อวัน หรือต้องการความเสถียร 99.9% การเขียนสคริปต์เองอาจไม่คุ้มค่า เพราะต้องคอยดูแลเรื่องการเปลี่ยน API ของ Facebook และ Shopee อยู่ตลอดเวลา ในกรณีนี้ผมแนะนำให้ใช้เครื่องมือจำพวกระบบจัดการสินค้า (Multi-channel Management) หรือบริการสำเร็จรูปที่มี API มาตรฐานรองรับดีกว่า เพราะพวกเขาต้องรับผิดชอบเรื่องการอัปเดตระบบให้คุณอยู่แล้วแทนที่จะต้องมานั่งแก้โค้ดเองทุกครั้งที่ Facebook เปลี่ยนกฎ
หลังจากนี้ ลองนำโค้ดไปปรับให้ดึงข้อมูลจากไฟล์ CSV หรือ Spreadsheet ก่อน แล้วค่อยขยับไปดึงจากระบบจริง เพื่อให้มั่นใจว่ากลไกการโพสต์ทำงานได้แม่นยำครับ