function AnalyticsView({ onNavigate }) { const [loading, setLoading] = useState(false); const [tips, setTips] = useState([]); const [applied, setApplied] = useState([]); const [selected, setSelected] = useState(null); // selected campaign for preview const [campaigns, setCampaigns] = useState([]); const [isLive, setIsLive] = useState(false); const [fetchError, setFetchError] = useState(null); const [fetching, setFetching] = useState(false); // Auto-fetch from Meta API on mount if settings exist React.useEffect(() => { if (hasMetaKey()) { fetchLiveCampaigns(); } }, []); const fetchLiveCampaigns = async () => { setFetching(true); setFetchError(null); try { const data = await fetchMetaCampaigns(); if (data.length > 0) { setCampaigns(data); setIsLive(true); } else { setFetchError('เชื่อมต่อ Meta API สำเร็จ แต่ยังไม่มีแคมเปญที่ Active'); } } catch (e) { setFetchError(e.message); } setFetching(false); }; const hasData = campaigns.length > 0; const metaConfigured = hasMetaKey(); const run = async () => { if (!hasData) return; setLoading(true); try { const data = await aiOptimize(campaigns); setTips(Array.isArray(data) ? data : OPTIMIZATIONS); } catch(e) { setTips(OPTIMIZATIONS); } setLoading(false); }; const actionLabel = { change_creative:'เปลี่ยนครีเอทีฟ', pause:'หยุดชั่วคราว', adjust_budget:'ปรับงบ', modify_audience:'ปรับกลุ่ม' }; return (
กรุณารอสักครู่
เชื่อมต่อ n8n Webhook เพื่อดึงข้อมูล Campaigns, Ad Sets และ Ads จริงจาก Facebook Ads Manager มายังหน้านี้โดยอัตโนมัติ
{t.recommendation}
| ชื่อแคมเปญ | สถานะ | Spend | Revenue | ROAS | CTR | Conv. | |
|---|---|---|---|---|---|---|---|
| {ad.name} | {ad.status || 'ACTIVE'} | ฿{Number(ad.spend).toLocaleString()} | ฿{Number(ad.revenue).toLocaleString()} | = 3.5 ? 'var(--pos)' : 'var(--accent-strong)' }}>{Number(ad.roas).toFixed(2)}x | {ad.ctr}% | {ad.conversions} |
ดูรายละเอียด |