Enalyn
Enalyn Internal · 2026
Pilot — Đóng gói
& Bàn giao Đối tác
Hướng dẫn triển khai hệ thống Enalyn AI Pilot
cho nhiều đối tác — từng bước, không skip
Cloudflare Stack
SePay + Resend
Google Sheets
01
Kiến trúc Multi-Partner
🏢 Partner A
aipilot.partner-a.com
⚡Worker
🗝KV
🗄D1
🪣R2
↓
📊 Google Sheet A · ✉️ Resend A · 💳 SePay A
🏢 Partner B
aipilot.partner-b.com
⚡Worker
🗝KV
🗄D1
🪣R2
↓
📊 Google Sheet B · ✉️ Resend B · 💳 SePay B
✅ Mỗi đối tác hoàn toàn độc lập — riêng Worker, riêng DB, riêng bucket, riêng secrets. Không ảnh hưởng nhau.
02
Tài nguyên cần chuẩn bị
⚡
Cloudflare Worker
Xử lý đăng ký, webhook SePay, serve media
Free 100k req/ngày
🗄
D1 Database
Lưu leads vĩnh viễn, remarketing, báo cáo
Free 5GB
🗝
KV Namespace
Lưu tạm 7 ngày, check payment real-time
Free 100k reads
🪣
R2 Bucket
Video demo, media, hỗ trợ range request iOS
Free 10GB
✉️
Resend
Email đăng ký + xác nhận thanh toán HTML đẹp
Free 3k/tháng
📊
Google Sheet
CRM đơn giản, backup leads, dễ xem
Free
💳
SePay
Auto-detect chuyển khoản, trigger webhook
Free (≤50 GD/tháng)
💰
Tổng chi phí
Chỉ trả SePay — tất cả còn lại hoàn toàn miễn phí
Free (≤50 GD/tháng)
03
Checklist trước khi deploy
📋 Đối tác chuẩn bị
Tài khoản Cloudflare (cloudflare.com)
Domain đã trỏ vào Cloudflare (icon cam)
Tài khoản Resend + verify domain email
Tài khoản SePay + STK ngân hàng
Tài khoản Google (Sheet + Apps Script)
Cài Node.js ≥ 18 + wrangler CLI
🔑 Thu thập từ đối tác
Domain muốn dùng cho trang đăng ký
STK + tên chủ TK + ngân hàng nhận TT
Giá bán (VNĐ, đã bao gồm VAT 8%)
Email thương hiệu (gửi từ Resend)
Hotline / Zalo hỗ trợ khách hàng
Logo + tên thương hiệu (thay trong HTML)
04
Bảng cấu hình wrangler.toml
Biến Mẫu Enalyn Điền cho đối tác Loại
nameenalyn-pilot-workerPARTNER-pilot-workertoml
CUSTOM_DOMAINaipilot.enalyn.comaipilot.DOMAIN.comtoml
FROM_EMAILEnalyn <pilot@enalyn.com>BRAND <pilot@DOMAIN.com>vars
BANK_CODEMBMB / VCB / TCB ...vars
BANK_STK2967896868STK đối tácvars
AMOUNT1080000Giá bán (đã VAT 8%)vars
RESEND_API_KEYre_xxxxxre_xxxxx đối tácsecret
SEPAY_API_KEYEPOKNCC...key SePay đối tácsecret
APPS_SCRIPT_WEBHOOKhttps://script.google.com/...URL GAS đối tácsecret
05
10 bước deploy
1
Login Cloudflare
wrangler login
2
Sửa wrangler.toml
Thay name, domain, bank, amount
3
Tạo KV Namespace
wrangler kv namespace create
4
Tạo D1 Database
wrangler d1 create PARTNER-db
5
Chạy Schema SQL
wrangler d1 execute --file=schema.sql
6
Tạo R2 Bucket
wrangler r2 bucket create
7
Khai báo Secrets
wrangler secret put KEY
8
Deploy Apps Script
Copy GAS, sửa SHEET_ID, Web app
9
Deploy Worker
wrangler deploy
10
Cập nhật pilot.html
Thay WEBHOOK_URL + logo + brand
06
Luồng dữ liệu
📝
Form
pilot.html
→
⚡
Worker
/register
→
🗝
KV
lưu 7 ngày
+
🗄
D1
INSERT lead
+
📊
Sheet
Apps Script
+
✉️
Email
QR + CK
💳
SePay
detect CK
→
⚡
Worker
/sepay
→
🗝
KV
status=confirmed
+
🗄
D1
UPDATE paid
+
✉️
Email
xác nhận TT
💡 Frontend tự poll GET /check-payment?code=XXX mỗi 3 giây → khi KV trả về status=success → chuyển trang cảm ơn tự động
07
Quản lý Leads — SQL Queries
Leads mới nhất
SELECT * FROM leads
ORDER BY created_at DESC
LIMIT 50;
Đã thanh toán
SELECT name, email, phone, paid_at
FROM leads
WHERE payment_status = 'paid'
ORDER BY paid_at DESC;
Chưa thanh toán (remarketing)
SELECT name, email, phone, created_at
FROM leads
WHERE payment_status = 'pending'
ORDER BY created_at DESC;
Tổng doanh thu
SELECT
  COUNT(*) AS total_paid,
  SUM(paid_amount) AS revenue
FROM leads
WHERE payment_status = 'paid';
🌐 Admin API — nhanh hơn:
GET /admin/leads?secret=KEY
🖥 D1 Console — Cloudflare Dashboard:
Workers & Pages → D1 → Console
🔧 Confirm tay (bypass SePay):
POST /admin/confirm
08
Lưu ý khi scale nhiều đối tác
🔐
Secrets không được commit
Chỉ dùng wrangler secret put — không bao giờ để key trong .toml hay source code.
🏢
Account Cloudflare riêng
Mỗi đối tác nên có account Cloudflare riêng để tránh conflict naming KV, D1, R2 và bảo mật dữ liệu.
💳
SePay webhook URL riêng
Vào SePay Dashboard → cấu hình webhook URL đúng domain của từng đối tác: aipilot.DOMAIN.com/sepay
🌐
Domain phải qua Cloudflare
Domain phải proxy qua CF (icon cam 🟠) thì mới dùng custom_domain = true được. Nếu chưa, dùng *.workers.dev tạm.
🪣
R2 không cần public URL
Media được serve qua Worker route /media/* với Range request support — không cần bật public R2 bucket.
🔄
Cập nhật code dễ dàng
Khi Enalyn ra bản mới: git pull && wrangler deploy. Không cần tạo lại DB hay bucket — data giữ nguyên.
Ready to scale 🚀
Deploy · Bàn giao · Vận hành
📦
1 bộ code duy nhất
Chỉ thay config — không sửa logic. Deploy cho 10 đối tác không mất thêm thời gian dev.
⚡
Deploy trong ~30 phút
10 bước rõ ràng, mỗi bước có lệnh cụ thể. Người không biết code cũng follow được.
🛡️
Data độc lập hoàn toàn
Mỗi đối tác có DB riêng — leads, payment, media không bao giờ lẫn vào nhau.
📞 Hotline / Zalo: 0834 934 092 (Leon)  ·  ✉️ leon@enalyn.com
1 / 10