/* AAU CRM — Marketing: Cổng kết nối (tổng quan capability). Bảng tham chiếu cho team marketing: 11 nguồn / 4 nhóm — MỖI CỔNG THỰC SỰ kéo về gì. Nguồn dữ liệu của bảng = soi code backend (channels/fbads/fbpages/igconnect/threads/ tiktokads/tiktokorganic/webtracking/websheets/leadgen). Cấu hình thật ở /system/channels. */ function ConnectionsOverview() { // y = kéo đầy đủ · n = không · {p:'…'} = MỘT PHẦN (ghi rõ giới hạn ngay trên ô) const Y = 'y', N = 'n'; const GROUPS = [ { key: 'chat', name: 'Nhóm 1 — Chat (2 chiều)', color: '#0084ff', icon: 'inbox', desc: 'Tin nhắn khách → Inbox + tự tạo Lead. Cập nhật gần như realtime.', rows: [ { name: 'Kênh chat OA (FB · IG · Zalo OA)', lead: Y, cmt: N, eng: Y, ins: N, chat: Y, ads: N, sync: { t: 'Tự động · 120s', tone: 'success' }, note: 'Hội thoại → tạo lead + chấm QC. Số THẬT khi nối CQA, ngược lại là demo.' }, { name: 'Zalo cá nhân (zalo-bridge)', lead: Y, cmt: N, eng: Y, ins: N, chat: Y, ads: N, sync: { t: 'Realtime (push)', tone: 'success' }, note: 'Bản KHÔNG chính thức — dùng SỐ PHỤ, có rủi ro khóa. Nhận tin tức thì.' }, ], }, { key: 'ads', name: 'Nhóm 2 — Ads (chi phí + hiệu suất)', color: '#c4320a', icon: 'megaphone', desc: 'Spend / impression / click / CPL. Lead ở đây là CON SỐ, không kèm liên hệ.', rows: [ { name: 'Facebook Ads', lead: { p: 'chỉ số' }, cmt: N, eng: N, ins: Y, chat: N, ads: Y, sync: { t: 'Tự động · 15′', tone: 'success' }, note: 'CPL/CTR/CVR thật. "Lead" = con số trong insight, KHÔNG có tên/SĐT.' }, { name: 'Ad Sources (nhiều tài khoản FB)', lead: { p: 'chỉ số' }, cmt: N, eng: N, ins: Y, chat: N, ads: Y, sync: { t: 'Tự động · 15′', tone: 'success' }, note: 'Quản lý nhiều tài khoản FB Ads; 1 nguồn "đang dùng" được auto-sync.' }, { name: 'TikTok Ads', lead: { p: 'chỉ số' }, cmt: Y, eng: N, ins: Y, chat: N, ads: Y, sync: { t: 'Tự động · 15′', tone: 'success' }, note: 'Comment DƯỚI QUẢNG CÁO thật + trả lời/ẩn ngay. "Lead" = con số.' }, ], }, { key: 'organic', name: 'Nhóm 3 — Organic content (post + insight)', color: '#7c3aed', icon: 'fileText', desc: 'Reach / engagement / insight từng bài. Comment hiện CHỈ ĐẾM tổng, chưa lấy nội dung.', rows: [ { name: 'Facebook Page & Content', lead: N, cmt: { p: 'chỉ đếm' }, eng: Y, ins: Y, chat: N, ads: N, sync: { t: 'Live khi mở', tone: 'info' }, note: 'Reach/engagement/post thật, đọc trực tiếp mỗi lần mở màn. Comment chỉ lấy tổng số.' }, { name: 'Instagram', lead: N, cmt: { p: 'chỉ đếm' }, eng: Y, ins: Y, chat: N, ads: N, sync: { t: 'Live khi mở', tone: 'info' }, note: 'Account + media insight (reach/save/eng) thật, đọc live. Comment chỉ đếm tổng.' }, { name: 'TikTok Organic (@kênh)', lead: N, cmt: { p: 'chỉ đếm' }, eng: Y, ins: Y, chat: N, ads: N, sync: { t: 'Live khi mở', tone: 'info' }, note: 'Follower/like/video + ER% thật (Display API), đọc live. Token 24h tự gia hạn.' }, { name: 'Threads', lead: N, cmt: { p: 'chỉ đếm' }, eng: Y, ins: Y, chat: N, ads: N, sync: { t: 'Live khi mở', tone: 'info' }, note: 'Views/replies/reposts thật, đọc live. Token 60 ngày. Chưa có DM (Threads chưa mở).' }, ], }, { key: 'web', name: 'Nhóm 4 — Web & Form', color: '#0a9e6e', icon: 'barChart', desc: 'Lưu lượng web (GA4) + form web → Lead.', rows: [ { name: 'GA4 Web Tracking', lead: N, cmt: N, eng: Y, ins: Y, chat: N, ads: N, sync: { t: 'Tự động · 15′', tone: 'success' }, note: 'Session/conversion/landing thật. Tách riêng khỏi ads spend (webFacts).' }, { name: 'Google Sheets (form web / ebook)', lead: Y, cmt: N, eng: N, ins: N, chat: N, ads: N, sync: { t: 'Tự động · 30′', tone: 'success' }, note: 'Form web → tạo lead vào pipeline (stage 2.1). Gộp trùng theo SĐT.' }, ], }, ]; const COLS = [ { k: 'lead', l: 'Lead' }, { k: 'cmt', l: 'Comment' }, { k: 'eng', l: 'Tương tác' }, { k: 'ins', l: 'Insight' }, { k: 'chat', l: 'Chat 2 chiều' }, { k: 'ads', l: 'Ads spend' }, ]; const cell = (v) => { if (v === 'y') return ; if (v === 'n') return ; return {v.p}; // một phần }; return (
navigate('/system/channels')}>Cấu hình cổng} />
Kéo đầy đủ một phầnCó nhưng giới hạn (ô ghi rõ) Không hỗ trợ Tự độngChạy nền theo lịch / realtime Live khi mởĐọc trực tiếp mỗi lần mở màn (luôn tươi) Thủ côngPhải bấm “Đồng bộ” mới cập nhật
{GROUPS.map(g => ( {g.name}} subtitle={g.desc}>
{COLS.map(c => )} {g.rows.map((r, i) => ( {COLS.map(c => )} ))}
Cổng{c.l}Đồng bộ Ghi chú
{r.name}{cell(r[c.k])}{r.sync.t} {r.note}
))}
“Lead” ở các cổng Ads chỉ là CON SỐ — biết tốn bao nhiêu ra bao nhiêu lead, nhưng KHÔNG có tên/SĐT. Lead có liên hệ thật chỉ đến từ ChatGoogle Sheets (form web). (Đang lên kế hoạch bổ sung FB/IG Lead Gen Forms để kéo liên hệ thật.)
Comment trên post (FB/IG/TikTok Organic/Threads) hiện chỉ ĐẾM TỔNG — chưa lấy nội dung, chưa trả lời/ẩn trong CRM. Riêng TikTok Ads đã đọc & trả lời được comment dưới quảng cáo.
Ads + GA4 nay TỰ ĐỘNG đồng bộ mỗi 15 phút (FB Ads · TikTok Ads · Ad Sources → mktFacts, GA4 → webFacts) — không cần bấm tay nữa. Vẫn bấm “Đồng bộ” được để kéo ngay. Các cổng content đọc live khi mở màn nên luôn tươi.
); } Object.assign(window, { ConnectionsOverview });