Tổng quan kiến trúc
Một Facebook App production thường gồm app cấu hình trong Meta for Developers, Business Manager sở hữu app, tài khoản quảng cáo hoặc Page được cấp quyền, OAuth để kết nối người dùng và token để gọi Graph API. Webhook chỉ dùng khi app cần nhận sự kiện tin nhắn hoặc event thời gian thực.
Ads Management
Dùng để đọc hoặc quản lý Ad Account, campaign, ad set, ad, insight. Quyền thường gặp: ads_read và ads_management.
Page Posts
Dùng để đọc Page, tạo bài viết, quản lý nội dung và tương tác. Quyền thường gặp: pages_show_list, pages_read_engagement, pages_manage_posts.
Messages
Dùng để nhận và trả lời tin nhắn Page qua Messenger Platform. Quyền thường gặp: pages_messaging. Nếu backend cần nhận event tin nhắn, postback hoặc delivery/read theo thời gian thực thì thêm pages_manage_metadata cho webhook/subscription.
Ba nơi riêng biệt dễ bị nhầm
Meta tách phần phát triển app, phần sở hữu/chia sẻ asset trong business và phần danh tính máy chủ. Khi debug quyền, luôn kiểm tra đúng nơi trước.
1. Developer App / App Dashboard
Nơi tạo app, chọn use case, cấu hình Basic Settings, products, permissions, App Review, Webhooks nếu cần và App Roles như Admin, Developer, Tester cho người quản lý hoặc kiểm thử app.
2. Business Settings > Accounts > Apps
Nơi business sở hữu hoặc yêu cầu truy cập app, assign people/partners, connect assets và kiểm tra app có thuộc đúng Business Portfolio của Michael Aurora hay không.
3. Business Settings > Users > System users
Nơi tạo System User cho tác vụ server-side, gán Page, Ad Account, Instagram hoặc app assets rồi generate token. Đây không phải người thật và không thay thế App Roles.
Chuẩn bị trước khi tạo app
Chuẩn bị kỹ giúp App Review nhanh hơn và tránh bị từ chối do thiếu bằng chứng hoặc cấu hình pháp lý.
Tài khoản & quyền sở hữu
- Facebook cá nhân có bảo mật 2 yếu tố.
- Meta Business Manager của Michael Aurora.
- Quyền admin với Page và Ad Account cần kết nối.
- Phương thức thanh toán hợp lệ nếu chạy quảng cáo.
Website & pháp lý
- Domain production có HTTPS.
- Privacy Policy công khai.
- Terms of Service nếu có thu thập dữ liệu người dùng.
- URL Data Deletion hoặc hướng dẫn xóa dữ liệu.
Kỹ thuật
- Backend có thể giữ
App Secretan toàn. - OAuth redirect URL cố định.
- Nếu dùng webhook, cấu hình endpoint HTTPS trả HTTP 200 nhanh.
- Log/audit để truy vết token, user, Page, Ad Account.
Tài liệu review
- Screencast thể hiện tính năng cần quyền.
- Tài khoản demo với dữ liệu mẫu.
- Mô tả rõ dữ liệu lấy về, nơi lưu, thời gian giữ.
- Lý do từng permission là bắt buộc.
Tạo Meta App
Thao tác trong Meta for Developers. Tên menu có thể thay đổi nhẹ theo giao diện Meta, nhưng luồng tổng thể vẫn tương tự.
Tạo app mới và chọn use case đúng ngay từ đầu
Vào My Apps, chọn Create App. Chọn use case sát nhất với tính năng thật như Ads, Page management, Login hoặc Messaging trước khi cấu hình sâu. Theo luồng App Dashboard hiện tại, use case giúp Meta tự thêm nhóm products, permissions và features cần thiết; một số use case không tương thích với app hiện tại có thể bị mờ hoặc không chọn được.
Gán Business
Trong App Dashboard, liên kết app với Business Manager sở hữu tài sản thật. App nên thuộc business production, không thuộc tài khoản cá nhân của developer.
Kiểm tra Use cases trong App Dashboard
Sau khi app được tạo, mở App Dashboard > Use cases để xác nhận đúng use case đã chọn, thêm tùy chọn liên quan nếu Meta cho phép và bỏ các phần không phục vụ sản phẩm production. Nếu chọn sai, nên cân nhắc tạo app mới sớm thay vì cố xin permission trái với use case.
Cấu hình Basic Settings
Điền App Domains, Contact Email, Privacy Policy URL, Terms URL, User Data Deletion, category và platform Website. Không public app nếu thông tin pháp lý chưa đầy đủ.
Giữ bí mật App Secret
Không nhúng App Secret vào HTML, mobile app hoặc frontend. Chỉ dùng ở server để đổi token, xác minh webhook nếu có và gọi API nội bộ.
Thêm sản phẩm và quyền
Nếu app được tạo theo use case, nhiều product/permission liên quan đã được thêm theo luồng đó. Nếu app dùng kiểu cấu hình product thủ công, thêm product trong App Dashboard rồi xin permission tương ứng qua App Review khi cần dùng với người dùng hoặc tài sản ngoài vai trò developer/tester.
| Use case | Product / API | Permissions thường dùng | Lưu ý review |
|---|---|---|---|
| Ads Management | Marketing API | ads_read, ads_management, có thể cần Business asset access. |
Chứng minh app chỉ quản lý tài khoản quảng cáo được chủ sở hữu ủy quyền. Mô tả hành động tạo/sửa/xóa campaign thật rõ. |
| Page Posts | Graph API for Pages | pages_show_list, pages_read_engagement, pages_manage_posts, đôi khi pages_read_user_content. |
Cần screencast quy trình chọn Page, tạo bài, lên lịch hoặc đọc nội dung. Không xin quyền đọc dữ liệu nếu chỉ cần đăng bài. |
| Messages | Messenger Platform | pages_messaging, pages_manage_metadata, có thể cần pages_show_list. |
Meta kiểm tra cách nhận và trả lời tin nhắn, chính sách 24 giờ và nội dung tự động. Nếu app cần nhận event thời gian thực, chuẩn bị webhook HTTPS hoạt động. |
| Login | Facebook Login | public_profile, email nếu cần email, các scope nâng cao ở trên. |
Redirect URL phải khớp tuyệt đối. Trải nghiệm login phải giải thích vì sao cần từng quyền. |
pages_messaging.
Business Settings > Accounts > Apps
Đây là màn hình trong Business Settings để xác nhận app thuộc đúng business, cấp người/partner làm việc với app và kết nối app với asset business. Nó khác với App Roles trong Developer Dashboard.
Apps > chọn app production
Vào Business Settings > Accounts > Apps, chọn app của Michael Aurora. Nếu app chưa xuất hiện, thêm app vào Business Portfolio hoặc request access theo luồng của Meta. App production nên được sở hữu bởi business chính thức, không nằm rời trong tài khoản cá nhân.
Assign people / Assign partners
Dùng nút Assign people để cấp người trong business quyền làm việc với app; dùng Assign partners nếu agency hoặc business khác cần truy cập. Chỉ cấp mức cần thiết, ví dụ develop/test/view insights thay vì toàn quyền nếu không quản trị app.
Connect assets
Dùng Connect assets để liên kết các asset liên quan như Page, Ad Account, Instagram account hoặc asset khác mà app cần dùng. Nếu asset không hiện, kiểm tra asset đã được thêm vào Business Portfolio và tài khoản hiện tại có full control hoặc quyền phù hợp.
People và Connected assets
Trong app đã chọn, mở tab People để xem ai đang có quyền với app; mở Connected assets để kiểm tra Page/Ad Account/Instagram nào đã kết nối. Đây là nơi đối chiếu nhanh khi API báo thiếu asset access dù permission trong App Dashboard đã đúng.
Facebook Login để kết nối tài khoản
Login là luồng để người dùng cấp quyền cho app truy cập Page, Ad Account hoặc inbox Page mà họ quản lý.
Thêm Facebook Login
Trong App Dashboard, thêm Facebook Login. Cấu hình Valid OAuth Redirect URIs, ví dụ https://app.michaelaurora.com/auth/facebook/callback.
Yêu cầu scope tối thiểu
Luồng đầu tiên nên xin public_profile và các quyền thật sự cần cho màn hình hiện tại. Với Page, thường cần lấy danh sách Page trước rồi đổi sang Page Access Token.
Đổi code lấy token ở backend
Frontend nhận authorization code, backend đổi code lấy short-lived User Token, sau đó đổi sang long-lived token nếu cần. Không xử lý App Secret trên trình duyệt.
Lưu liên kết nội bộ
Lưu mapping giữa user Michael Aurora, Facebook user id, Page id, Ad Account id, permission đã cấp, token expiry và thời điểm refresh/reconnect.
Business Verification và App Review
Đây là phần quyết định app có được dùng quyền nâng cao ngoài chế độ development hay không.
Business Verification
Hoàn tất trong Business Manager bằng thông tin pháp nhân, website/domain, giấy tờ doanh nghiệp và phương thức liên hệ. Business phải khớp với thương hiệu Michael Aurora.
App Review
Gửi từng permission với giải thích use case, video thao tác, credentials demo, link policy và hướng dẫn reviewer tái hiện quy trình.
Hoàn thiện Data Use Checkup
Khai báo loại dữ liệu thu thập, mục đích dùng, nơi lưu, ai có quyền truy cập và cách xóa khi người dùng yêu cầu.
Quay video review ngắn
Video nên bắt đầu từ login, chọn Page/Ad Account, thực hiện tính năng cần quyền, sau đó chỉ ra dữ liệu Facebook đang hiển thị trong app.
Chuẩn bị tài khoản demo
Reviewer phải đăng nhập được mà không cần hỏi thêm. Dùng dữ liệu giả lập nhưng thể hiện đầy đủ Ads, Posts và Messages.
Test Users và chế độ Development
Trước khi review, app chỉ nên test với Admin, Developer, Tester hoặc Test User được tạo trong dashboard.
Khi dùng Test User
Tạo Test User trong App Roles để kiểm thử Facebook Login, consent screen và token mà không ảnh hưởng tài khoản thật. Thêm Test User vào Page hoặc asset test nếu cần.
Khi dùng tài khoản thật
Tài khoản thật phải được thêm vào app role phù hợp trong thời gian Development. Không mời khách hàng production test quyền chưa được review.
System User để token lâu dài
System User là danh tính trong Meta Business Manager, không phải Meta App Admin và không phải người thật. Nó thường được dùng để tạo access token dài hạn cho server/backend automation khi làm việc với asset của business, nhưng không nên gọi là token vĩnh viễn.
System users > tạo hoặc chọn system user
Vào Business Settings > Users > System users. Tạo System User với tên rõ như ma-production-api hoặc chọn system user hiện có. Chỉ dùng Admin System User nếu backend thật sự cần quản trị rộng; đa số tác vụ production nên dùng Employee/System User với quyền asset cụ thể.
Assigned assets
Trong system user đã chọn, mở Assigned assets. Gán đúng Page, Ad Account, Instagram account nếu có dùng và app liên quan. Với Ads, gán ad account và quyền phù hợp; với Page posts/Messages, gán Page và quyền cần thiết. Token sau này chỉ làm được những việc scope và asset assignment cho phép.
Generate token
Chọn Generate token, chọn đúng app production rồi tick scope tối thiểu như ads_read, ads_management, pages_show_list, pages_read_engagement hoặc scope Page/Messaging thật sự cần. Lưu token ở secret manager phía server, không đưa vào frontend, và ghi lại app id, system user id, scope, asset id, ngày tạo.
Revoke tokens và xoay vòng
Dùng Revoke tokens khi nhân sự rời dự án, nghi ngờ lộ secret, đổi backend hoặc dừng tích hợp. Sau khi revoke, generate token mới với scope tối thiểu và cập nhật secret ở môi trường production/staging có kiểm soát.
Access Tokens cần quản lý
Token là điểm rủi ro bảo mật lớn nhất. Cần biết loại token, nơi dùng và cách thu hồi.
| Token | Dùng cho | Nơi lưu | Kiểm soát |
|---|---|---|---|
| User Access Token | Đọc quyền user đã cấp, lấy Page/Ad Account user quản lý. | Backend database, mã hóa nếu có thể. | Theo dõi expiry, scope, reconnect khi thiếu quyền. |
| Page Access Token | Đăng bài Page, đọc engagement, gửi/nhận message theo quyền Page. | Backend secrets hoặc encrypted storage. | Gắn với Page id, kiểm tra Page vẫn thuộc quyền quản lý. |
| System User Token | Tác vụ server/back-end cho asset business đã cấp; long-lived token để automation. | Secret manager phía server, không lưu trong frontend. | Least privilege, rotation, audit log, quản trị vòng đời token. |
| App Access Token | Một số thao tác app-level, debug token, xác minh app. | Backend only. | Không thay thế User/Page token cho dữ liệu người dùng. |
// Ví dụ luồng backend rút gọn
1. Redirect user tới Facebook OAuth với scope cần thiết
2. Backend nhận authorization code tại callback URL
3. Backend đổi code lấy User Access Token
4. Backend gọi /me/accounts để lấy Page và Page Access Token
5. Backend lưu token, expiry, granted scopes, Page id, Ad Account id
6. Khi gọi Graph API, kiểm tra scope trước và xử lý lỗi cần reconnect
Webhook Messages
Webhook là phần tùy chọn, chỉ dùng khi backend cần nhận sự kiện Messenger theo thời gian thực, như tin nhắn mới, postback hoặc delivery/read event. Nếu app chỉ đăng nhập, quản lý Ads hoặc đăng bài, có thể bỏ qua phần này.
Nếu cần realtime
Chỉ khi ứng dụng cần nhận event ngay lập tức, hãy chuẩn bị endpoint như https://api.michaelaurora.com/webhooks/meta/messages. Endpoint trả xác minh GET với hub.challenge và nhận POST nhanh.
Cấu hình Webhooks trong app
Trong App Dashboard, thêm Webhooks cho object Page nếu cần. Điền Callback URL và Verify Token tự đặt. Đăng ký field cần dùng, thường là messages và messaging_postbacks.
Subscribe Page
Khi triển khai webhook, sau khi Page cấp quyền pages_manage_metadata và pages_messaging, gọi API subscribe app vào Page hoặc dùng dashboard để đăng ký.
Xác minh chữ ký
Ở backend, xác minh header chữ ký request bằng App Secret. Nếu xử lý lâu, đưa event vào queue rồi trả 200 để tránh Meta retry quá nhiều.
// Pseudocode xác minh webhook
GET /webhooks/meta/messages:
if hub.verify_token == META_VERIFY_TOKEN:
return hub.challenge
return 403
POST /webhooks/meta/messages:
verify X-Hub-Signature-256 with APP_SECRET
enqueue event
return 200
Checklist xác minh trước production
Tick từng mục sau khi đã kiểm tra trên môi trường thật hoặc staging tương đương production.