📘 บทเรียน: วิธีขอ Facebook API

คู่มือเต็มรูปแบบสำหรับโปรเจกต์ lnwAdsSJ88 — ตั้งแต่สมัคร Developer จนถึงดึงข้อมูล Ads ได้จริง

API Version: v24.0  |  Ad Account: act_2807991909289645  |  Updated: 21 ก.พ. 2569

📌 บทที่ 1: สมัคร Meta Developer เริ่มต้น

ก่อนจะใช้ Facebook API ได้ ต้องลงทะเบียนเป็น Meta Developer ก่อน

ขั้นตอน

  1. เข้าเว็บ developers.facebook.com
  2. ล็อกอินด้วยบัญชี Facebook ที่เป็น เจ้าของ/แอดมิน ของ Ad Account
  3. กด "Get Started" หรือ "เริ่มต้น"
  4. ยอมรับข้อตกลง Meta Platform Terms แล้วยืนยันอีเมล
📍 00:00:10
หน้าลงทะเบียนเป็นผู้พัฒนา Meta
📄 หน้าลงทะเบียนเป็นผู้พัฒนาของ Meta — แสดงขั้นตอนการลงทะเบียนบน Developers Portal
⚠️ สำคัญ: บัญชีที่ใช้ต้องเข้าถึง Ad Account ที่จะดึงข้อมูลได้ ถ้าไม่ใช่เจ้าของ ต้องให้เจ้าของเพิ่มสิทธิ์ให้ก่อน

เช็กว่าสมัครสำเร็จ

เมื่อสมัครเสร็จ จะเห็นหน้า My Apps ที่ developers.facebook.com/apps/

📌 บทที่ 2: สร้าง Meta App สำคัญ

แอปคือตัวกลางที่ให้คุณเข้าถึง API ต้องสร้าง 1 แอปต่อ 1 โปรเจกต์

ขั้นตอน

  1. เข้า developers.facebook.com/apps/creation/
  2. กรอก App Name (เช่น lnwAds Dashboard) และ Contact Email
  3. เลือก Use Case ที่เกี่ยวกับ Marketing API:
    • อ่านรายงานอย่างเดียว → Measure ad performance data with Marketing API
    • อ่าน + จัดการแคมเปญ → เพิ่ม Create & manage ads with Marketing API
  4. เชื่อม Business Portfolio (หรือสร้างใหม่)
  5. กด "Go to Dashboard"
  6. จดค่า App ID ไว้ใช้ภายหลัง
📍 00:00:40
ฟอร์มกรอกชื่อแอพ
✏️ ขั้นตอนที่ 1 — กรอกรายละเอียดของแอพ — ใส่ชื่อแอพและอีเมลติดต่อ
📍 00:01:05
เลือก Use Case Marketing API
📋 ขั้นตอนที่ 2 — เลือกกรณีการใช้งาน
Use Case ที่เลือกแล้ว
✅ เลือก Use Case แล้ว 2 รายการ
📍 00:01:25
หน้าภาพรวมก่อนสร้างแอพ
📑 ขั้นตอนที่ 3 — ตรวจสอบภาพรวมก่อนสร้าง — ตรวจสอบให้ครบแล้วกด "ไปที่แดชบอร์ด"
📍 00:01:35
ป๊อปอัพยืนยันรหัสผ่าน
🔒 ขั้นตอนที่ 4 — ยืนยันรหัสผ่าน — ยืนยันรหัสผ่าน Facebook อีกครั้งเพื่อความปลอดภัย
📍 00:05:40
หน้า Dashboard ต้อนรับ
🏠 ยินดีต้อนรับสู่แดชบอร์ดของแอพ — ระบบแสดงป๊อปอัพต้อนรับหลังจากสร้าง App สำเร็จ
📍 00:07:00
Dashboard checklist
📋 แดชบอร์ด — รายการปรับแต่งแอพ
Dashboard เต็มรูปแบบ
📊 แดชบอร์ดเต็มรูปแบบ
🚫 ระวัง: App Type / Use Case บางอย่างแก้ย้อนกลับไม่ได้ ถ้าเลือกผิดมักต้องสร้างแอปใหม่

📌 บทที่ 3: เชื่อม Business Portfolio

เชื่อมแอปกับ Business Portfolio เพื่อให้ Token เข้าถึง Ad Account ได้

ขั้นตอน

  1. เข้า Business Settings
  2. ไปที่ Accounts > Apps
  3. กด "Add" แล้วเลือกแอปที่สร้างในบทที่ 2
  4. ตรวจสอบว่าบัญชีที่ใช้มีสิทธิ์ Admin หรือ Advertiser บน Ad Account

ยืนยัน Ad Account ID

Ad Account ID ต้องเป็นรูปแบบ act_<digits> เช่น act_2807991909289645

ดูได้ที่ Business Settings > Accounts > Ad Accounts

📌 บทที่ 4: ขอ Permissions & Features ต้องทำ

ต้องขอสิทธิ์จาก Meta เพื่อเข้าถึงข้อมูลโฆษณา

Permissions ที่ต้องขอ

Permission ใช้เมื่อ ความจำเป็น
ads_read อ่านรายงาน Insights, ดูแคมเปญ ✅ จำเป็น (ขั้นต่ำ)
ads_management สร้าง/แก้ไข/หยุดแคมเปญ ⚡ ถ้าต้องจัดการ
business_management จัดการ Business Asset 🔧 เฉพาะกรณีจำเป็น

ขอ Standard Access

  1. ไปที่ App Dashboard > App Review > Permissions and Features
  2. ค้นหา Ads Management Standard Access
  3. กด "Request"
  4. กรอกรายละเอียดการใช้งาน แล้วส่งรีวิว
💡 Standard vs Advanced:
Standard — เริ่มพัฒนาได้เร็ว, ใช้กับ ad account ของตัวเอง
Advanced — สำหรับ production หลายลูกค้า, ต้อง Business Verification
📍 00:08:20
เลือก Permissions ใน Graph API Explorer
✅ เลือก Permissions ที่ต้องการ — เลือก ads_management และ ads_read ที่จะใช้งาน

📌 บทที่ 5: สร้าง Access Token กุญแจสำคัญ

Access Token คือ "กุญแจ" ที่ใช้เข้าถึง API ทุกครั้ง

5.1 สร้าง Token แบบเร็ว (ทดสอบ)

  1. เปิด Graph API Explorer
  2. เลือก แอป ที่สร้างไว้ (จากบทที่ 2)
  3. เลือก Permissions: ads_read (และ ads_management ถ้าต้องใช้)
  4. กด "Generate Access Token"
  5. อนุญาตสิทธิ์ที่ขอ
📍 00:07:50
Graph API Explorer - Permissions dropdown
🔧 Graph API Explorer — เปิดรายการ Permissions เพื่อทำการเลือกตัวที่เราต้องใช้งาน
📍 00:08:40
Facebook OAuth Dialog
🛡️ หน้าขออนุญาต — Facebook OAuth
กดเรียบร้อย OAuth
✅ กดปุ่ม "เรียบร้อย" — ยืนยันให้สิทธิ์กับแอป
📍 00:08:50
Token สร้างเสร็จ
🎉 ได้ Access Token แล้ว! — Token จะปรากฏในช่อง "โทเค็นการเข้าถึง" พร้อมใช้งาน
📍 00:09:11
Copy Token
📋 คัดลอก Token — กดปุ่ม Copy เพื่อนำไปตั้งค่าในระบบ `AppApi/config/meta_integration.json`
⚠️ Token จาก Explorer เป็น Short-lived อยู่ได้ ~1 ชั่วโมง ต้องแปลงเป็น Long-lived สำหรับใช้งานจริง

5.2 แปลงเป็น Long-lived Token (~60 วัน)

curl -G "https://graph.facebook.com/v24.0/oauth/access_token" \
  -d "grant_type=fb_exchange_token" \
  -d "client_id=<APP_ID>" \
  -d "client_secret=<APP_SECRET>" \
  -d "fb_exchange_token=<SHORT_LIVED_TOKEN>"

5.3 ความปลอดภัย

📌 บทที่ 6: ทดสอบ API ด้วย curl

ทดสอบว่า Token ใช้ได้จริงผ่าน Terminal

6.1 ตรวจว่า Token ใช้ได้

curl -G "https://graph.facebook.com/v24.0/me" \
  -d "access_token=$META_ACCESS_TOKEN" \
  -d "fields=id,name"
✅ ถ้าสำเร็จจะได้ {"id":"...", "name":"ชื่อบัญชี"}

6.2 ดู Ad Account ที่เข้าถึงได้

curl -G "https://graph.facebook.com/v24.0/me/adaccounts" \
  -d "access_token=$META_ACCESS_TOKEN" \
  -d "fields=id,account_id,name,account_status,currency"

6.3 ดึง Insights 7 วันล่าสุด

curl -G "https://graph.facebook.com/v24.0/act_2807991909289645/insights" \
  -d "access_token=$META_ACCESS_TOKEN" \
  -d "date_preset=last_7d" \
  -d "level=campaign" \
  -d "fields=campaign_id,campaign_name,spend,impressions,reach,clicks,ctr,cpc"

6.4 ดึงช่วงเดือน (เช่น ม.ค. 2569)

curl -G "https://graph.facebook.com/v24.0/act_2807991909289645/insights" \
  -d "access_token=$META_ACCESS_TOKEN" \
  -d "level=campaign" \
  -d 'time_range={"since":"2026-01-01","until":"2026-01-31"}' \
  -d "fields=campaign_id,campaign_name,spend,impressions,reach,clicks"

📌 บทที่ 7: ตัวอย่างโค้ดใช้งานจริง

7.1 Python — ดึง Insights แล้วบันทึก JSON

import json, os, requests

TOKEN = os.environ["META_ACCESS_TOKEN"]
AD_ACCOUNT = "act_2807991909289645"
URL = f"https://graph.facebook.com/v24.0/{AD_ACCOUNT}/insights"

params = {
    "access_token": TOKEN,
    "level": "campaign",
    "time_range": '{"since":"2026-01-01","until":"2026-01-31"}',
    "fields": "campaign_id,campaign_name,spend,impressions,reach,clicks,ctr,cpc",
}

resp = requests.get(URL, params=params, timeout=60)
resp.raise_for_status()
data = resp.json()

os.makedirs("data/raw", exist_ok=True)
with open("data/raw/insights_jan.json", "w", encoding="utf-8") as f:
    json.dump(data, f, ensure_ascii=False, indent=2)
print(f"Saved {len(data.get('data',[]))} rows")

7.2 JavaScript (Node.js / Fetch)

const token = process.env.META_ACCESS_TOKEN;
const adAccount = "act_2807991909289645";

const params = new URLSearchParams({
  access_token: token,
  level: "campaign",
  date_preset: "last_7d",
  fields: "campaign_id,campaign_name,spend,impressions,clicks",
});

const url = `https://graph.facebook.com/v24.0/${adAccount}/insights?${params}`;
const res = await fetch(url);
const json = await res.json();
console.log(json.data);

📌 บทที่ 8: ปัญหาที่เจอบ่อย & วิธีแก้

อาการ สาเหตุ วิธีแก้
{"data":[]} ช่วงเวลาที่เลือกไม่มี spend ลองเปลี่ยนช่วงวันที่ให้กว้างขึ้น
Error 190 Token หมดอายุ / ถูก revoke สร้าง Token ใหม่ที่ Graph Explorer
Error 200 (permissions) ยังไม่ได้ขอสิทธิ์ ads_read ไปขอ Permission ที่ App Review
Error 100 (invalid parameter) ชื่อ field ผิด หรือ API version ไม่รองรับ เช็ก docs ว่า field ยังใช้ได้กับ v24.0
Rate limit / timeout Query หนักเกินไป แบ่งช่วงเวลาให้สั้นลง, ลดจำนวน fields
Error 17 (too many calls) โดน Rate Limit รอ 5-10 นาที แล้วลองใหม่, ใช้ exponential backoff
💡 เปิด Access Token Debugger เพื่อตรวจสอบว่า Token ยังใช้ได้ไหม, มีสิทธิ์อะไรบ้าง, หมดอายุเมื่อไหร่

📌 บทที่ 9: ใช้งานกับโปรเจกต์นี้ โปรเจกต์

โปรเจกต์ lnwAdsSJ88 มีระบบ API พร้อมใช้อยู่แล้วใน AppApi/

9.1 ตั้งค่า Config

แก้ไฟล์ AppApi/config/meta_integration.json:

{
  "access_token": "<TOKEN ของคุณ>",
  "ad_account_id": "act_2807991909289645",
  "api_version": "v24.0",
  "timezone": "Asia/Bangkok",
  "app_id": "<APP_ID>",
  "app_secret": "<APP_SECRET>"
}

9.2 รัน Server & ใช้ UI

# รัน local server
python3 AppApi/server.py --port 8787

# เปิดเบราว์เซอร์
# http://127.0.0.1:8787/settings.html  → กรอก Token + ทดสอบ
# http://127.0.0.1:8787/index.html     → คู่มือ API แบบเต็ม

9.3 CLI Scripts พร้อมใช้

# ดู Ad Accounts
python3 AppApi/scripts/fetch_adaccounts.py \
  --config AppApi/config/meta_integration.json --json

# ดึง Insights
python3 AppApi/scripts/fetch_insights.py \
  --config AppApi/config/meta_integration.json \
  --since 2026-01-01 --until 2026-01-31 --json

# Sync เข้า Database
python3 AppApi/scripts/sync_insights_to_db.py \
  --config AppApi/config/meta_integration.json \
  --db data/facebook/ads.db \
  --since 2026-01-01 --until 2026-01-31 --json

9.4 Checklist สำเร็จ

ตรวจสอบ ผลที่ต้องได้
/api/integration/test ok: true
/api/integration/adaccounts แสดงรายการ account ≥ 1
/api/integration/sync rows_total > 0
ตาราง import_logs มี record ที่ import_type = meta_api

9.5 Permission Matrix (เลือกสิทธิ์ให้พอดี)

กรณีใช้งาน สิทธิ์ขั้นต่ำ ทำอะไรได้ ทำไม่ได้
ดูรายงานอย่างเดียว ads_read อ่าน account/campaign/insights ได้ครบสำหรับ dashboard เพิ่มงบ/ลดงบ/pause campaign ไม่ได้
ต้องการปรับงบอัตโนมัติ ads_management เขียนค่า campaign/adset เช่น budget, status ได้ ใช้งานไม่ได้ถ้ายังไม่ผ่าน review หรือไม่มี role ที่ถูกต้อง
✅ แนะนำให้เริ่มจาก ads_read ก่อนเสมอ แล้วค่อยขยายเป็น ads_management เมื่อ flow รายงานนิ่งและมี audit log พร้อม

9.6 ตัวอย่างไฟล์ api.json (ใช้กับหน้า Live Dashboard)

{
  "access_token": "<TOKEN>",
  "ad_account_id": "act_2807991909289645",
  "api_version": "v24.0",
  "timezone": "Asia/Bangkok",
  "use_case": "ads_read"
}

9.7 Workflow สั้นสำหรับระบบที่ใช้งานอยู่ตอนนี้

  1. เปิดหน้า /demo/live-dashboard แล้วเลือกบัญชีโฆษณา
  2. ตั้งช่วงวันที่ (เช่นทั้งปี 2025) แล้วกดดึงข้อมูลจริง
  3. ระบบจะเรียก API เฉพาะรอบที่ต้องใช้ และ cache ลง DB เพื่อลดการยิงซ้ำ
  4. ตรวจผลจาก KPI, กราฟ, และตาราง campaign จากข้อมูลจริง
  5. ถ้าจะตั้งกฎปรับงบ ให้เริ่มจาก Dry-run ก่อนทุกครั้ง

9.8 Security Checklist (ต้องผ่านก่อนขึ้น Production)

รายการ เกณฑ์ผ่าน
การเก็บ Token เก็บใน env/secret manager เท่านั้น, ไม่โชว์ค่าเต็มบนหน้าเว็บ
การเข้าถึง API มี rate limit + retry + timeout และบันทึก error reason
ฐานข้อมูล มี cache TTL + checkpoint + backup ก่อน deploy
การติดตามย้อนหลัง มี log ว่าใครสั่งอะไร เมื่อไหร่ และผลเป็นอย่างไร
🎉 เมื่อทำครบทุกขั้นตอน คุณจะสามารถดึงข้อมูล Ads ผ่าน API ได้โดยไม่ต้อง export CSV ด้วยมืออีก!