Triển khai Ads

Bộ triển khai cho học viên

Chạy quảng cáo theo lãi, tệp remarketing tự cập nhật

Trang này gom toàn bộ câu lệnh và các trường cần điền để bạn tự dựng hai phần trên tài khoản của chính mình. Bấm vào ô lệnh hoặc tên trường để chép.

Hai phần chạy thế nào

Bảng 0
bạn điền 1 dòng
Bảng 1, 2, 3
máy dựng nháp
Facebook
tạm dừng
Bạn bậtBảng 5 + thẻ Lark
3 lần mỗi ngày
Bảng khách đăng ký
Lark Base
GitHub
mỗi giờ
Tệp CHƯA MUA
để nhắm
vàTệp ĐÃ MUA
để loại trừ

Chuẩn bị

Cần cóDùng choKiểm tra
Tài khoản Lark, có quyền tạo BaseCả hai phầnTạo được một Base mới
Business Manager mà bạn là quản trị viên, có tài khoản quảng cáo bên trongCả hai phầnCó mã dạng act_1234567890
Token System User của Meta, không hết hạnCả hai phầnXem cách tạo ngay dưới
Node.js 18 trở lênPhần 1node -v
Python 3Phần 1python --version
Git Bash (Windows)Phần 1Mở được cửa sổ Git Bash
lark-cli đã đăng nhậpPhần 1lark-cli auth status
Tài khoản GitHubPhần 2Tạo được kho Private
Bảng Lark Base chứa khách đăng kýPhần 2Có cột số điện thoại hoặc email

Tạo token System User của Meta

  1. Vào business.facebook.com/settings → Người dùng → Người dùng hệ thống → Thêm. Đặt tên, vai trò Quản trị viên.
  2. Chọn người dùng vừa tạo → Chỉ định tài sản → gán Tài khoản quảng cáo (Quản lý chiến dịch) và Trang (Nhà quảng cáo trở lên).
  3. Bấm Tạo mã mới → chọn app của doanh nghiệp → tick ads_management ads_read business_management pages_manage_ads pages_read_engagement → hết hạn: Không bao giờ → chép mã.
  4. Chấp nhận điều khoản danh sách khách hàng một lần: Trình quản lý quảng cáo → Đối tượng → Tạo đối tượng → Đối tượng tùy chỉnh → Danh sách khách hàng. Hiện màn hình điều khoản thì bấm Chấp nhận rồi thoát.

Token cá nhân hết hạn sau khoảng 60 ngày. Token của Trang bị Meta khoá với danh sách khách hàng (lỗi 1870090). Vì vậy cả hai phần đều dùng token System User.

Phần 1

Ads Agent: chạy quảng cáo theo lãi

1

Tải gói và mở thư mục công cụ

Tải ads-agent.zip, giải nén. Mở Git Bash tại thư mục ads-engine bên trong.

Git Bash · cài lark-cli nếu chưa có
npm install -g @larksuite/cli
lark-cli auth login
2

Dựng Base trên Lark của bạn

Một lệnh tạo Base tên ADS AGENT gồm 10 bảng, 160 trường và các công thức ngưỡng lãi. Base trống, không có dữ liệu của ai.

Git Bash · trong thư mục ads-engine
node dung-base.mjs          # xem trước, chưa tạo gì
node dung-base.mjs --tao    # tạo thật

Lệnh in ra đường link Base và tự ghi mã Base vào config.env. Lỡ đứt mạng giữa chừng thì chạy lại đúng lệnh đó, phần đã có được bỏ qua.

3

Điền cấu hình

Git Bash
node do-config.mjs
cp .secrets/meta-ads.env.example .secrets/meta-ads.env

Lệnh đầu tự dò mã 9 bảng. Sau đó mở hai tệp và điền các dòng sau.

Tệp config.env

BiếnĐiền gìLấy ở đâu
BMã BaseLệnh dựng Base đã điền sẵn
DOMAINPhần đầu link Base, ví dụ https://tencongty.sg.larksuite.comLệnh dựng Base đã điền sẵn. Kiểm lại trên thanh địa chỉ
CHATMã nhóm Lark nhận thẻ báo, dạng oc_…lark-cli im +chat-search --query "tên nhóm" --as user
Để trống thì máy không gửi thẻ
ACTSố tài khoản quảng cáo, chỉ phần sốAds Manager. Không kèm act_
T0 … T9, T_NKMã 9 bảngnode do-config.mjs tự điền, đừng sửa tay

Tệp .secrets/meta-ads.env

BiếnĐiền gì
META_ACCESS_TOKENToken System User
META_AD_ACCOUNT_IDact_ cộng số tài khoản, ví dụ act_1234567890
META_API_VERSIONGiữ v25.0. Meta ngừng bản cũ theo định kỳ, khi bị báo "deprecated version" thì đổi sang số Meta nhắc
Git Bash · kiểm tra kết nối Meta, chỉ đọc
node lib/meta.mjs whoami

Ra tên tài khoản và "currency" là đạt.

4

Điền ba bảng nền

BảngĐiền tối thiểuĐể làm gì
9. Pixel (Meta)Tên Pixel pixel_idChọn pixel cho chiến dịch chuyển đổi
7. Thư viện URL đíchTên / Từ khóa URLChọn trang đích
4. Tệp đối tượngTên tệp Loại audience_idSổ ghi các tệp bạn có. Hai tệp ở Phần 2 ghi vào đây
5

Điền một dòng ở Bảng 0. Tổng tư lệnh

Mỗi chiến dịch là một dòng. Điền xong đặt Trạng thái thành 1. Chờ xử lý. Toàn bộ 50 trường của bảng nằm ở mục Trường của Bảng 0 bên dưới.

Tiền nhập bằng đồng, không có dấu chấm: 200000. Phần trăm nhập như trên giao diện Lark: 50%.

6

Dựng nháp trên Lark, đọc lại, rồi đẩy lên Facebook

Git Bash · bước dựng nháp, chưa đụng Facebook
bash buoc2-setup-lark.sh

Máy tạo một dòng ở Bảng 1, các nhóm ở Bảng 2, các bài ở Bảng 3, rồi in ra mã dòng dạng rec….

Mở Bảng 3, đọc và sửa cột Caption trước khi đi tiếp. Máy chỉ viết nháp theo khung 4 phần (mở đầu có số liệu, vấn đề, giải pháp, kêu gọi) với lời văn mẫu chung. Bạn phải sửa cho đúng sản phẩm của mình.

Git Bash · đẩy lên Facebook, tất cả TẠM DỪNG
bash buoc3-len-facebook.sh <mã dòng Bảng 0>

Máy tạo chiến dịch, nhóm và quảng cáo trên Facebook ở trạng thái TẠM DỪNG, ghi campaign_id về Bảng 1. Dòng đã có campaign_id thì máy không tạo lần hai.

Git Bash · khi đã quen, một lệnh chạy cả hai bước
bash chay-tron-bo.sh
7

Bật chiến dịch và cho máy canh ba lần mỗi ngày

  1. Vào Ads Manager xem lại chiến dịch, gắn tệp đối tượng nếu cần, rồi BẬT.
  2. Ở Bảng 1, đổi Trạng thái của chiến dịch thành Đang chạy. Máy chỉ canh những dòng có trạng thái này.
  3. Đăng ký lịch 08:00, 13:00, 19:00.
PowerShell mở bằng quyền Quản trị · trong thư mục ads-engine
powershell -ExecutionPolicy Bypass -File dang-ky-task.ps1
Git Bash · thử ngay không chờ lịch
bash agent-3x.sh --simulate     # số giả, để xem thẻ báo
bash agent-3x.sh                # số thật từ Facebook

Mỗi lượt máy ghi một dòng vào Bảng 5 và gửi thẻ vào nhóm Lark. Máy chỉ đề xuất; việc tắt, tăng tiền, đổi nội dung do bạn làm trong Ads Manager.

Trường của Bảng 0. Tổng tư lệnh

Bạn điền phải có để máy chạy đúng Tuỳ chọn điền thì tốt hơn Tự tính Base tính bằng công thức Máy ghi đừng sửa tay

Đầu bài

Tên trườngKiểuAi điềnGhi chú
Tên lệnh / Sản phẩmChữBạn điềnTên sản phẩm hoặc chương trình. Thành tên chiến dịch trên Facebook.
IDSố tự tăngMáy ghiSố thứ tự tự tăng (ID001, ID002…).
Trạng tháiChọn mộtBạn điềnĐặt "1. Chờ xử lý" để máy nhận lệnh. Các giá trị sau do máy tự đổi.
0. Nháp · 1. Chờ xử lý · 2. Chờ duyệt Base · 3b. Lỗi đẩy Meta · 4. Đã lên Meta (PAUSED) · 5. Tạm dừng - cần bổ sung
Ngày chạyNgày giờBạn điềnNgày bắt đầu. Máy dùng để đặt tên chuẩn và đếm số ngày đã chạy.
Ngày kết thúcNgày giờTuỳ chọnNgày dự kiến dừng.
Mức độ chiến dịchChọn mộtBạn điềnChuyển đổi = đo đăng ký/mua trên web. Tương tác = tin nhắn Messenger hoặc xem video.
Nhận biết (Awareness) · Tương tác (Engagement) · Chuyển đổi (Conversion)
Chủ đích quảng cáoChữTuỳ chọnMột câu nói rõ chiến dịch này để làm gì.
Sự kiện chuyển đổiChọn mộtBạn điềnSự kiện pixel dùng để tối ưu. Chọn "Tin nhắn (Messenger)" nếu chạy tin nhắn.
Lead (để lại SĐT/đăng ký) · Hoàn tất đăng ký · Mua hàng (Purchase) · Tin nhắn (Messenger) · Xem nội dung
Đích chuyển đổiChọn mộtTuỳ chọnKhách bấm quảng cáo thì tới đâu.
Landing page · Form tức thì (Lead form) · Website · Messenger
URL (chạy chuyển đổi)Nối sang Bảng 7Bạn điềnChọn một dòng ở Bảng 7. Bắt buộc khi chạy chuyển đổi.
Pixel IDNối sang Bảng 9Bạn điềnChọn một dòng ở Bảng 9. Bắt buộc khi chạy chuyển đổi.
Page chạy (ID/tên)ChữBạn điềnGõ ID Trang Facebook (dãy số), có thể kèm tên. Máy lấy phần số.
Video / Hình ảnhTệp đính kèmBạn điềnĐính một ảnh hoặc một video. Video nên là MP4 H.264.

Ngân sách và đối tượng

Tên trườngKiểuAi điềnGhi chú
Ngân sách ngàyTiền (đồng)Bạn điềnSố tiền mỗi ngày, đơn vị đồng. Ví dụ 200000.
Chế độ ngân sáchChọn mộtBạn điềnCBO = ngân sách ở chiến dịch. ABO = ngân sách ở từng nhóm. Tin nhắn luôn chạy ABO.
CBO/Advantage (ngân sách ở chiến dịch) · ABO (ngân sách ở nhóm)
Số nhóm quảng cáoSốBạn điềnMáy tạo bấy nhiêu nhóm. Để trống = 2.
Số bài quảng cáoSốBạn điềnSố bài viết, tối đa 3 góc (nỗi đau, khát khao, phản bác). Để trống = 2.
Vị trí phân phốiChữBạn điềnTên thành phố (nhiều nơi cách nhau dấu phẩy) hoặc "Toàn quốc".
Tuổi từSốBạn điềnĐể trống = 22.
Tuổi đếnSốBạn điềnĐể trống = 55.
Giới tínhChọn mộtBạn điềnTất cả, Nam hoặc Nữ.
Tất cả · Nam · Nữ
Nhóm đối tượng / TệpNối sang Bảng 4Tuỳ chọnChọn một dòng ở Bảng 4. Ghi lại để nhớ; tệp thật bạn gắn trong Ads Manager.
Target (thủ công)ChữTuỳ chọnGhi chú nhắm mục tiêu chi tiết. Máy chép sang từng nhóm ở Bảng 2.

Hiểu khách hàng (để máy viết bài)

Tên trườngKiểuAi điềnGhi chú
Nỗi đauChữTuỳ chọnDòng đầu tiên được đưa vào bài góc "Nỗi đau".
Sự sung sướngChữTuỳ chọnDòng đầu tiên được đưa vào bài góc "Khát khao".
Việc khách hàng phải làmChữTuỳ chọnViệc khách đang cố làm cho xong.
Mong muốnChữTuỳ chọnLệnh riêng của bạn cho chiến dịch này.
Ghi chú thêmChữTuỳ chọn

Năm con số để tính ngưỡng lãi

Tên trườngKiểuAi điềnGhi chú
Giá bán PTiền (đồng)Bạn điềnGiá bán một đơn, đơn vị đồng.
Chi phí biến đổi VTiền (đồng)Bạn điềnChi phí phát sinh cho mỗi đơn (giá vốn, giao hàng, hoa hồng).
Biên LN muốn giữPhần trămBạn điềnPhần lãi gộp muốn giữ lại, dạng phần trăm. Ví dụ 50%.
Tỷ lệ Lead ra ĐơnPhần trămBạn điềnCứ 100 người đăng ký thì mấy người mua. Ví dụ 10%.
Tỷ lệ Chat ra ĐơnPhần trămBạn điềnCứ 100 cuộc chat thì mấy người mua. Dùng khi chạy tin nhắn.
Giá trị mỗi khách (LTV)SốTuỳ chọnTổng tiền một khách mang lại về lâu dài.

Ngưỡng Base tự tính

Tên trườngKiểuAi điềnGhi chú
CPA mục tiêuCông thứcTự tínhChi tối đa cho một đơn mà vẫn giữ biên lãi.
ROUND(([Giá bán P]-[Chi phí biến đổi V])*(1-[Biên LN muốn giữ]),0)
Break-even ROASCông thứcTự tínhROAS tối thiểu để hoà vốn.
ROUND(IF([Giá bán P]-[Chi phí biến đổi V]=0,0,[Giá bán P]/([Giá bán P]-[Chi phí biến đổi V])),2)
ROAS mục tiêuCông thứcTự tínhROAS cần đạt để giữ biên lãi.
ROUND(IF([CPA mục tiêu]=0,0,[Giá bán P]/[CPA mục tiêu]),2)
CPL mục tiêuCông thứcTự tínhGiá một lượt đăng ký nên đạt.
ROUND([CPA mục tiêu]*[Tỷ lệ Lead ra Đơn],0)
CPL hòa vốnCông thứcTự tínhLằn không được vượt: quá mức này là lỗ.
ROUND(([Giá bán P]-[Chi phí biến đổi V])*[Tỷ lệ Lead ra Đơn],0)
CPMC mục tiêuCông thứcTự tínhGiá một cuộc chat nên đạt.
ROUND([CPA mục tiêu]*[Tỷ lệ Chat ra Đơn],0)
Lead kỳ vọng ngàyCông thứcTự tínhSố đăng ký mỗi ngày nếu đạt CPL mục tiêu.
ROUND(IF([CPL mục tiêu]=0,0,[Ngân sách ngày]/[CPL mục tiêu]),1)
Đơn kỳ vọng ngàyCông thứcTự tínhSố đơn mỗi ngày nếu đạt tỷ lệ chốt.
ROUND([Lead kỳ vọng ngày]*[Tỷ lệ Lead ra Đơn],1)

Gác cổng

Tên trườngKiểuAi điềnGhi chú
Mức tự quyếtChọn mộtBạn điềnNên để "Báo & chờ duyệt": mọi thay đổi đều hỏi bạn trước.
Báo & chờ duyệt · Tự động (trong ngưỡng)
Ngưỡng tắt (×CPL mục tiêu)SốTuỳ chọnCPL vượt mục tiêu bao nhiêu lần thì đề xuất sửa. Để trống = 1,5.
Cửa sổ học (ngày)SốTuỳ chọnSố ngày đầu máy chỉ quan sát. Để trống = 4.
Trần ngân sách tối đa/ngàyTiền (đồng)Tuỳ chọnKhi tăng tiền, không vượt mức này.
Tổng trần chi tiêuTiền (đồng)Bạn điềnTổng tiền tối đa cho cả chiến dịch. Chạm trần là đề xuất dừng.
Mục tiêu lead/đơn kỳSốTuỳ chọnSố đăng ký muốn đạt trong một kỳ.
Kỳ mục tiêuChọn mộtTuỳ chọnNgày, Tuần hoặc Tháng.
Ngày · Tuần · Tháng

Máy ghi

Tên trườngKiểuAi điềnGhi chú
Chiến dịch tạo ra (LK)Nối sang Bảng 1Máy ghiNối sang dòng chiến dịch ở Bảng 1 mà máy vừa dựng.

Chín bảng còn lại

1. Chiến dịch32 trườngMáy dựng từ Bảng 0. Nhịp 3 lần/ngày đọc ngưỡng và trạng thái ở bảng này.
Tên trườngKiểuAi điềnGhi chú
Tên chiến dịchChữMáy ghiChép từ Bảng 0.
Lệnh gốc (LK)Nối sang Bảng 0Máy ghiNối về dòng Bảng 0.
Trạng tháiChọn mộtBạn điềnSau khi BẬT chiến dịch trong Ads Manager, bạn đổi thành "Đang chạy" để máy bắt đầu canh.
1. Chờ dựng (đầu bài) · 2. Chờ duyệt Base · 3b. Lỗi đẩy Meta · 4. Đã lên Meta (PAUSED) · Đang chạy · Tạm dừng · Kết thúc · Đã tắt
Ngày (DDMMYYYY)ChữMáy ghiNgày chạy viết liền.
Loại phễuChọn mộtMáy ghiSĂN BẮN (chuyển đổi) hoặc NUÔI DƯỠNG (tương tác).
NUÔI DƯỠNG · SĂN BẮN
Tên chuẩn AdsCông thứcTự tínhNgày | Loại phễu | TÊN, để đặt tên thống nhất.
IF(OR(ISBLANK([Ngày (DDMMYYYY)]),ISBLANK([Loại phễu])),"(điền Ngày + Loại phễu)",[Ngày (DDMMYYYY)]&" | "&[Loại phễu]&" | "&UPPER([Tên chiến dịch]))
Mục tiêuChọn mộtMáy ghiTin nhắn (Messenger) · Chuyển đổi - Lead (form/leadpage) · Chuyển đổi - Sale (sale page/mua)
Sự kiện chuyển đổiChọn mộtMáy ghiLead (để lại SĐT/đăng ký) · Hoàn tất đăng ký · Mua hàng (Purchase) · Tin nhắn (Messenger) · Xem nội dung
Chế độ ngân sáchChọn mộtMáy ghiABO (ngân sách ở Nhóm QC) · CBO/Advantage (ngân sách ở chiến dịch)
Ngân sách ngàyTiền (đồng)Máy ghi
URL đích (leadpage/sale)ChữMáy ghiĐường dẫn máy lấy từ Bảng 7.
pixel_idNối sang Bảng 9Máy ghiNối sang Bảng 9.
page_idChữMáy ghiID Trang lấy từ Bảng 0.
campaign_idChữMáy ghiMã chiến dịch trên Facebook, máy ghi sau Bước 3.
Giá bán PTiền (đồng)Máy ghi
Chi phí biến đổi VTiền (đồng)Máy ghi
Lợi nhuận muốn giữPhần trămMáy ghi
Tỷ lệ lead to đơnPhần trămMáy ghi
Tỷ lệ chat to đơnPhần trămMáy ghi
Trần chi tiêu cứngTiền (đồng)Máy ghiChép từ "Tổng trần chi tiêu" ở Bảng 0.
CPA mục tiêuCông thứcTự tínhROUND(([Giá bán P]-[Chi phí biến đổi V])*(1-[Lợi nhuận muốn giữ]),0)
CPL mục tiêuCông thứcTự tínhROUND(([Giá bán P]-[Chi phí biến đổi V])*(1-[Lợi nhuận muốn giữ])*[Tỷ lệ lead to đơn],0)
CPMC mục tiêuCông thứcTự tínhROUND(([Giá bán P]-[Chi phí biến đổi V])*(1-[Lợi nhuận muốn giữ])*[Tỷ lệ chat to đơn],0)
Break-even ROASCông thứcTự tínhROUND(IF([Giá bán P]-[Chi phí biến đổi V]=0,0,[Giá bán P]/([Giá bán P]-[Chi phí biến đổi V])),2)
NgànhChọn mộtTuỳ chọnĐào tạo / Khóa học · Spa / Thẩm mỹ · Bất động sản · Nha khoa / Phòng khám · F&B (Nhà hàng/Quán) · Bán lẻ · Dịch vụ khác
Chế độChọn mộtTuỳ chọnKhô = chỉ đề xuất. Ướt = thực thi sau khi duyệt.
Khô (chỉ đề xuất) · Ướt (tự thực thi sau duyệt)
ad_accountChữTuỳ chọn
Nhóm duyệtChữTuỳ chọn
Ghi chúChữTuỳ chọn
Nhóm quảng cáo (LK)Nối sang Bảng 2Máy ghi
Nội dung trực tiếp (LK)Nối sang Bảng 3Máy ghi
Số liệu (LK)Nối sang Bảng 5Máy ghi
2. Nhóm quảng cáo17 trườngMỗi dòng là một nhóm quảng cáo (ad set). Máy dựng ở Bước 2.
Tên trườngKiểuAi điềnGhi chú
Tên nhóm QCChữMáy ghi
Chiến dịch (LK)Nối sang Bảng 1Máy ghi
Tệp dùng (LK)Nối sang Bảng 4Máy ghiNối sang Bảng 4.
Tệp loại trừ (LK)Nối sang Bảng 4Tuỳ chọnGhi lại tệp cần loại trừ.
Khu vực (Geo)ChữMáy ghiSửa được trước Bước 3.
Tuổi từSốMáy ghi
Tuổi đếnSốMáy ghi
Giới tínhChọn mộtMáy ghiTất cả · Nam · Nữ
Tối ưuChọn mộtMáy ghiCONVERSATIONS (hội thoại) · OFFSITE_CONVERSIONS (chuyển đổi web) · LEAD
Vị trí chạyChọn mộtMáy ghiAdvantage+ (tự động) · Facebook Feed · Instagram · Feed + Stories + Reels · Tất cả vị trí
Trạng tháiChọn mộtMáy ghiChờ dựng · Đã tạo nháp · Đang chạy · Tạm dừng · Kết thúc
Nhắm mục tiêu chi tiếtChữMáy ghi
Vị trí địa điểm (tỉnh/thành/bán kính)ChữTuỳ chọn
Ngân sách ngàyTiền (đồng)Tuỳ chọn
adset_idChữMáy ghi
Ghi chúChữTuỳ chọn
Nội dung QC (LK)Nối sang Bảng 3Máy ghi
3. Quảng cáo9 trườngMỗi dòng là một bài quảng cáo. ĐỌC VÀ SỬA Caption ở đây trước khi chạy Bước 3.
Tên trườngKiểuAi điềnGhi chú
Tên creativeChữMáy ghi
Chiến dịch (LK)Nối sang Bảng 1Máy ghi
Nhóm QC (LK)Nối sang Bảng 2Máy ghi
Góc hookChọn mộtMáy ghiNỗi đau · Khát khao / Kết quả · Phản bác từ chối
CaptionChữBạn điềnMáy viết nháp 4 phần. Bạn sửa cho đúng sản phẩm của mình trước khi đẩy lên Facebook.
Link hình/videoTệp đính kèmMáy ghiẢnh hoặc video chép từ Bảng 0.
Trạng tháiChọn mộtMáy ghiBật · Tắt · Chờ duyệt
Link bài FB sẵnChữTuỳ chọn
Media ID (Meta)ChữTuỳ chọn
4. Tệp đối tượng9 trườngSổ ghi các tệp đối tượng bạn có. Hai tệp remarketing ở Phần 2 ghi vào đây.
Tên trườngKiểuAi điềnGhi chú
Tên tệpChữBạn điềnVí dụ "AUTO | CHƯA MUA".
LoạiChọn mộtBạn điềnLạnh - Sở thích/Nhân khẩu · Custom - Pixel (khách ghé web) · Custom - Danh sách KH · Custom - Tương tác (Page/IG/Video) · Lookalike
Định nghĩaChữTuỳ chọnTệp gồm những ai.
audience_idChữBạn điềnMã tệp trên Meta (dãy số).
Tệp nguồn (cho Lookalike)ChữTuỳ chọn
Tỷ lệ Lookalike %SốTuỳ chọn
Trạng tháiChọn mộtTuỳ chọnChờ tạo · Đã tạo · Lỗi
Ghi chúChữTuỳ chọn
Nhóm dùng tệp (LK)Nối sang Bảng 2Máy ghi
5. Số liệu hằng ngày19 trườngNhịp 3 lần/ngày ghi một dòng cho mỗi chiến dịch đang chạy.
Tên trườngKiểuAi điềnGhi chú
NgàyChữMáy ghi
Chiến dịch (LK)Nối sang Bảng 1Máy ghi
Ad setChữMáy ghi
CPLTiền (đồng)Máy ghi
CPATiền (đồng)Máy ghi
ROASSốMáy ghi
CPMCTiền (đồng)Máy ghi
CPMTiền (đồng)Máy ghi
CTRSốMáy ghi
FrequencySốMáy ghi
Quyết địnhChữMáy ghi
Đề xuấtChữMáy ghi
Lý doChữMáy ghi
CPL mục tiêu (CĐ)Công thứcTự tínhTEXT(ROUND(SUM([Chiến dịch (LK)].[CPL mục tiêu]),0),"#,##0")&"đ"
CPMC mục tiêu (CĐ)Công thứcTự tínhTEXT(ROUND(SUM([Chiến dịch (LK)].[CPMC mục tiêu]),0),"#,##0")&"đ"
ROAS hòa vốn (CĐ)Công thứcTự tínhROUND(SUM([Chiến dịch (LK)].[Break-even ROAS]),2)
Trạng thái CPLCông thứcTự tínhIF(ISBLANK([CPL]),"—",IF([CPL]<=SUM([Chiến dịch (LK)].[CPL mục tiêu]),"✅ Đạt","⚠️ Vượt"))
Trạng thái CPMCCông thứcTự tínhIF(ISBLANK([CPMC]),"—",IF([CPMC]<=SUM([Chiến dịch (LK)].[CPMC mục tiêu]),"✅ Đạt","⚠️ Vượt"))
Trạng thái ROASCông thứcTự tínhIF(ISBLANK([ROAS]),"—",IF([ROAS]>=SUM([Chiến dịch (LK)].[Break-even ROAS]),"✅ Lời","❌ Lỗ"))
6. Nhật ký quyết định5 trườngMáy ghi mỗi bước đã làm.
Tên trườngKiểuAi điềnGhi chú
Thời điểmChữMáy ghi
Chiến dịchChữMáy ghi
Hành độngChữMáy ghi
Người duyệtChữMáy ghi
Kết quảChữMáy ghi
7. Thư viện URL đích9 trườngDanh sách trang đích của bạn. Điền trước khi chạy chuyển đổi.
Tên trườngKiểuAi điềnGhi chú
Tên / Từ khóaChữBạn điềnTên dễ nhớ của trang.
URLĐường linkBạn điềnĐường dẫn đầy đủ, bắt đầu bằng https://
Loại trangChọn mộtTuỳ chọnLeadpage (form) · Sale page (mua) · Trang khác
Sự kiệnChọn mộtTuỳ chọnLEAD · PURCHASE · COMPLETE_REGISTRATION
Pixel gợi ýChữTuỳ chọn
Giá trị đơn (VND)Tiền (đồng)Tuỳ chọn
Mã nhận diện (utm_content)ChữTuỳ chọn
Đang dùngChọn mộtTuỳ chọnCó · Ngưng
Ghi chúChữTuỳ chọn
8. Đội ngũ Agent & Skill5 trườngSổ tuỳ chọn để ghi các công cụ bạn dùng. Máy không đọc bảng này.
Tên trườngKiểuAi điềnGhi chú
TênChữTuỳ chọn
LoạiChọn mộtTuỳ chọnAgent (đội quân) · Skill marketing · Module / Hạ tầng
Vai tròChữTuỳ chọn
File / Skill / NguồnChữTuỳ chọn
Trạng tháiChọn mộtTuỳ chọnĐã chạy thật · Sẵn sàng · Cần build/wiring
9. Pixel (Meta)5 trườngDanh sách pixel của bạn. Điền trước khi chạy chuyển đổi.
Tên trườngKiểuAi điềnGhi chú
Tên PixelChữBạn điền
pixel_idChữBạn điềnMã pixel (dãy số) trong Trình quản lý sự kiện.
Trạng tháiChọn mộtTuỳ chọnĐang hoạt động · Ngủ
Lần bắn cuốiChữTuỳ chọn
Ghi chúChữTuỳ chọn

Máy quyết định thế nào

Tình huốngMáy đề xuất
Chạm Tổng trần chi tiêuDừng
Chưa đủ số ngày học hoặc dưới 10 lượt đăng kýGiữ nguyên
Đã có đơn, ROAS thật dưới mức hoà vốnTắt
Đã có đơn, ROAS trên hoà vốn nhưng dưới mục tiêuTheo dõi
CPL cao hơn CPL hoà vốnTắt gấp
CPL cao hơn mục tiêu nhân ngưỡng tắtSửa
CPL cao hơn mục tiêuTheo dõi
CPL đạt, tần suất từ 3 trở lênĐổi nội dung
CPL đạtTăng 20%, không vượt trần ngày

Công thức ngưỡng

NgưỡngCông thứcVí dụ: P 499.000, V 50.000, biên 50%, Lead ra Đơn 10%
CPA mục tiêu(P − V) × (1 − biên)224.500 đ
CPL mục tiêuCPA mục tiêu × tỷ lệ Lead ra Đơn22.450 đ
CPL hoà vốn(P − V) × tỷ lệ Lead ra Đơn44.900 đ
ROAS hoà vốnP ÷ (P − V)1,11
ROAS mục tiêuP ÷ CPA mục tiêu2,22

Phần 2

Tệp remarketing tự cập nhật

1

Tạo kho GitHub của bạn từ gói

Tải dong-bo-tep-remarketing.zip, giải nén.

  1. github.com → New repository → đặt tên, chọn Private → Create repository.
  2. Trên trang kho trống bấm "uploading an existing file", kéo toàn bộ nội dung thư mục vừa giải nén vào, kể cả hai thư mục .github và .claude → Commit changes.
  3. Kiểm tra: trong kho phải thấy tệp .github/workflows/dong-bo-tep.yml.

Trên Mac, bấm Cmd + Shift + . trong Finder để hiện thư mục có dấu chấm ở đầu.

2

Tạo app Lark và cho app đọc bảng

  1. open.larksuite.com → Developer Console → Create Custom App.
  2. Credentials & Basic Info → chép App ID và App Secret.
  3. Permissions & Scopes → thêm bitable:app:readonly → Create version → phát hành.
  4. Mở Base chứa khách đăng ký → nút … góc phải trên → Add document app → chọn app vừa tạo → quyền Can view.
  5. Chép hai mã từ link Base: phần sau /base/ là mã Base, phần sau ?table= là mã bảng.

Lỗi 91403 Forbidden về sau gần như luôn do quên bước thêm app vào Base.

3

Điền Secrets và Variables trên GitHub

Kho → Settings → Secrets and variables → Actions.

Tab Secrets (bí mật)

TênGiá trị
LARK_APP_SECRETApp Secret của app Lark
META_ACCESS_TOKENToken System User của Meta

Tab Variables (không bí mật)

TênGiá trị
LARK_APP_IDApp ID của app Lark
LARK_BASE_TOKENMã Base
LARK_TABLE_IDMã bảng khách đăng ký
META_AD_ACCOUNT_IDact_ cộng số tài khoản
DONG_BO_BATfalse lúc này, bật ở bước 7
META_AUD_CHUA_MUA META_AUD_DA_MUAMã hai tệp, có sau bước 4

Token và App Secret chỉ dán vào tab Secrets. Không gửi qua chat, không chụp màn hình.

4

Tạo hai tệp trên Meta

  1. Tab Actions → nếu được hỏi thì bấm "I understand my workflows, go ahead and enable them".
  2. Chọn "Tạo tệp trên Meta" → Run workflow → giữ tiền tố AUTO → tick "Tạo thật" → Run workflow.
  3. Đợi dấu tích xanh → mở lượt chạy → Summary → chép hai dòng META_AUD_CHUA_MUA = … và META_AUD_DA_MUA = ….
  4. Thêm hai Variables đó như ở bước 3.
5

Khai tên cột nếu bảng của bạn đặt khác

Bảng dùng đúng tên mặc định thì bỏ qua bước này. Đặt khác thì thêm Variable tương ứng. Bảng không có cột nào thì đặt giá trị là dấu gạch -.

VariableMặc địnhCột chứa gì
COT_SDTSố điện thoạiSố điện thoại khách. Nhận các dạng 0912…, +84912…, 84912…, 912…
COT_EMAILEmailEmail khách
COT_TRANG_THAITrạng thái TTTrạng thái thanh toán
GIA_TRI_DA_MUAĐã thanh toánGiá trị trong cột trạng thái nghĩa là đã trả tiền
COT_SO_TIENSố tiềnSố tiền đơn. Người đã mua phải có số tiền lớn hơn 0
DA_MUA_CAN_SO_TIEN1Đặt 0 nếu chỉ cần trạng thái, không cần số tiền
COT_CHAT_LUONGChất lượng dataKhông bắt buộc
GIA_TRI_RACRácDòng mang giá trị này bị bỏ qua
COT_HUY_NHAN-Cột đánh dấu khách từ chối nhận quảng cáo. Ô có giá trị thì người đó bị rút khỏi tệp
LARK_VIEW_ID(trống)Chỉ đọc một view đã lọc, mã dạng vew… trong link
MA_QUOC_GIA84Mã quốc gia thay số 0 đầu số điện thoại
6

Chạy kiểm tra, xem trước, rồi chạy thật lần đầu

  1. Actions → "Đồng bộ tệp remarketing" → Run workflow → giữ hai ô đã tick (Chỉ xem trước, Chạy kiểm tra cấu hình) → Run workflow.
  2. Bước "Kiểm tra cấu hình" phải ra "Kết quả: không có lỗi". Bước "Đồng bộ" cho biết sẽ đẩy bao nhiêu người.
  3. Run workflow lần nữa, bỏ tick "Chỉ xem trước". Kết quả đúng có dòng "Xong, đã ghi sổ ghi nhớ".
  4. Chạy thật thêm một lần. Phải ra "Không có thay đổi. Nghỉ." Đó là bằng chứng máy nhớ lần trước và không đẩy trùng.
7

Bật lịch tự động

Settings → Variables → sửa DONG_BO_BAT thành true. Từ đây máy tự chạy mỗi giờ vào phút 23, có thể trễ vài phút khi GitHub đông.

ViệcLàm ở đâu
Xem máy có chạy khôngTab Actions: dấu tích xanh mỗi giờ
Tạm dừngVariable DONG_BO_BAT = false
Chạy ngay không chờ giờActions → Run workflow, bỏ tick xem trước
Đổi token MetaSettings → Secrets → META_ACCESS_TOKEN → Update

Mỗi lượt chạy khoảng 20 giây, GitHub tính tròn 1 phút, tức khoảng 720 phút mỗi tháng. Gói miễn phí có 2.000 phút mỗi tháng cho kho Private.

Chạy trên máy (không bắt buộc)

Git Bash · chạy trên máy thay vì GitHub, cần Node.js 18 trở lên
cp config.env.example config.env        # rồi điền
node scripts/kiem-tra.mjs
node scripts/dong-bo.mjs --dry-run
node scripts/dong-bo.mjs --confirm

Chỉ nên chạy một nơi, hoặc GitHub hoặc máy.

Nối hai phần: dùng hai tệp trong quảng cáo

TệpDùng thế nào
AUTO | CHƯA MUALàm đối tượng nhắm cho chiến dịch remarketing: video phản hồi, câu chuyện khách hàng, giải đáp thắc mắc, nhắc hạn. Tắt Đối tượng Advantage+ ở nhóm đó, nếu để bật thì Meta coi tệp chỉ là gợi ý và vẫn phát cho người lạ
AUTO | ĐÃ MUALoại trừ khỏi mọi chiến dịch đang bán sản phẩm đó (mục Đối tượng → Loại trừ). Loại trừ là ràng buộc cứng. Cũng dùng làm nguồn đối tượng tương tự, cần tối thiểu 100 người
  1. Ghi hai tệp vào Bảng 4 của Base Ads Agent: Tên tệp, Loại = Custom - Danh sách KH, audience_id = mã tệp.
  2. Khi điền Bảng 0 cho chiến dịch remarketing, chọn tệp ở ô Nhóm đối tượng / Tệp để ghi nhớ chiến dịch này nhắm ai.
  3. Sau khi máy đẩy chiến dịch lên Facebook ở trạng thái TẠM DỪNG, vào Ads Manager gắn tệp nhắm và tệp loại trừ cho từng nhóm quảng cáo, rồi mới bật. Máy cố ý không tự gắn tệp khách hàng.
Điều nên biếtChi tiết
Tệp nhỏMeta khuyên danh sách từ 1.000 người. Nhỏ hơn thì bị cảnh báo khi dùng làm đối tượng nhắm; dùng làm tệp loại trừ thì không ảnh hưởng. Ads Manager luôn hiện quy mô tối thiểu 1.000 với tệp nhỏ, đó không phải số thật
Không khớp 100%Meta chỉ khớp người có tài khoản trùng số điện thoại hoặc email. Người đã mua vẫn có thể thấy quảng cáo
Độ trễThay đổi tệp mất tới 24 giờ mới có hiệu lực và không làm chiến dịch học lại từ đầu
Người từ chối nhận quảng cáoPhải được rút khỏi tệp theo điều khoản Meta. Khai cột đánh dấu ở COT_HUY_NHAN để máy tự rút
Dữ liệu gửi điSố điện thoại và email được băm SHA-256 trên máy chạy trước khi gửi. Sổ ghi nhớ chỉ chứa mã băm

Gỡ lỗi

Phần 1

Thấy gìLàm gì
deprecated version of the Ads APIĐổi META_API_VERSION sang số Meta nhắc trong câu lỗi
do-config.mjs báo không tìm thấy bảngChưa đăng nhập lark-cli, hoặc mã Base trong config.env sai
thiếu META_ACCESS_TOKENChưa tạo .secrets/meta-ads.env hoặc chưa điền
Trạng thái thành "3b. Lỗi đẩy Meta"Đọc dòng lỗi máy in ra, sửa ở Bảng 0, đặt lại "1. Chờ xử lý" rồi chạy lại. Máy đã tự xoá chiến dịch rỗng
Lỗi quyền Trang (code 10)Token chưa được gán Trang đó. Cài đặt doanh nghiệp → Người dùng hệ thống → Chỉ định tài sản → Trang
Lỗi tuổi khi bật Advantage+Nhắm tuổi dưới 65 thì để đối tượng chỉ định ở nhóm đó
Chạy tin nhắn báo lỗi ngân sáchTin nhắn Messenger chỉ chạy ABO, đổi Chế độ ngân sách
Video không lênDùng MP4 mã H.264. Video quay bằng iPhone (HEVC) cần chuyển mã trước
Thẻ Lark không tớiCHAT trống hoặc sai mã nhóm
Máy không canh chiến dịchBảng 1 chưa đổi Trạng thái thành "Đang chạy", hoặc chưa có campaign_id

Phần 2

Thấy gìLàm gì
deprecated version of the Ads APIThêm Variable META_API_VERSION bằng số Meta nhắc trong câu lỗi
91403 ForbiddenApp Lark chưa được thêm vào Base (Phần 2, bước 2)
1870090Đang dùng token của Trang. Đổi sang token System User
1254024 InvalidFieldNamesTên cột khai ở Variables không khớp tên cột trong bảng
Không thấy mục "Tạo tệp trên Meta" ở tab ActionsThư mục .github chưa lên kho. Tải lại, nhớ hiện thư mục ẩn
Lịch không chạy đúng phút 23GitHub có thể trễ 5 đến 30 phút. Đợi 1 đến 2 giờ rồi mới kết luận
Nhận email "Run failed"Mở lượt chạy đó, đọc dòng lỗi ở bước Đồng bộ

An toàn