/* 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
| Cổng | {COLS.map(c =>{c.l} | )}Đồng bộ | Ghi chú |
|---|---|---|---|
| {r.name} | {COLS.map(c =>{cell(r[c.k])} | )}{r.note} |