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.
Ads Agent
Điền một dòng trên Lark Base. Máy dựng chiến dịch Facebook ở trạng thái tạm dừng, rồi ba lần mỗi ngày so số thật với ngưỡng lãi của bạn.
Chạy trên máy tính của bạn · 60 đến 90 phút2Tệp remarketing
Mỗi giờ, khách đăng ký chưa trả tiền tự vào tệp CHƯA MUA. Người đã thanh toán tự sang tệp ĐÃ MUA để loại trừ.
Chạy trên GitHub, máy tắt vẫn chạy · 45 đến 60 phútHai phần chạy thế nào
bạn điền 1 dòngBảng 1, 2, 3
máy dựng nhápFacebook
tạm dừngBạn bậtBảng 5 + thẻ Lark
3 lần mỗi ngày
Lark BaseGitHub
mỗi giờTệp CHƯA MUA
để nhắmvàTệp ĐÃ MUA
để loại trừ
Chuẩn bị
| Cần có | Dùng cho | Kiểm tra |
|---|---|---|
| Tài khoản Lark, có quyền tạo Base | Cả hai phần | Tạ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 trong | Cả hai phần | Có mã dạng act_1234567890 |
| Token System User của Meta, không hết hạn | Cả hai phần | Xem cách tạo ngay dưới |
| Node.js 18 trở lên | Phần 1 | node -v |
| Python 3 | Phần 1 | python --version |
| Git Bash (Windows) | Phần 1 | Mở được cửa sổ Git Bash |
| lark-cli đã đăng nhập | Phần 1 | lark-cli auth status |
| Tài khoản GitHub | Phần 2 | Tạo được kho Private |
| Bảng Lark Base chứa khách đăng ký | Phần 2 | Có cột số điện thoại hoặc email |
Tạo token System User của Meta
- 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.
- 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).
- Bấm Tạo mã mới → chọn app của doanh nghiệp → tick
ads_managementads_readbusiness_managementpages_manage_adspages_read_engagement→ hết hạn: Không bao giờ → chép mã. - 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
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.
npm install -g @larksuite/cli
lark-cli auth loginDự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.
node dung-base.mjs # xem trước, chưa tạo gì
node dung-base.mjs --tao # tạo thậtLệ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.
Điền cấu hình
node do-config.mjs
cp .secrets/meta-ads.env.example .secrets/meta-ads.envLệ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 |
|---|---|---|
B | Mã Base | Lệnh dựng Base đã điền sẵn |
DOMAIN | Phần đầu link Base, ví dụ https://tencongty.sg.larksuite.com | Lệnh dựng Base đã điền sẵn. Kiểm lại trên thanh địa chỉ |
CHAT | Mã 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ẻ |
ACT | Số tài khoản quảng cáo, chỉ phần số | Ads Manager. Không kèm act_ |
T0 … T9, T_NK | Mã 9 bảng | node do-config.mjs tự điền, đừng sửa tay |
Tệp .secrets/meta-ads.env
| Biến | Điền gì |
|---|---|
META_ACCESS_TOKEN | Token System User |
META_AD_ACCOUNT_ID | act_ cộng số tài khoản, ví dụ act_1234567890 |
META_API_VERSION | Giữ v25.0. Meta ngừng bản cũ theo định kỳ, khi bị báo "deprecated version" thì đổi sang số Meta nhắc |
node lib/meta.mjs whoamiRa tên tài khoản và "currency" là đạt.
Đ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_id | Chọn pixel cho chiến dịch chuyển đổi |
| 7. Thư viện URL đích | Tên / Từ khóa URL | Chọn trang đích |
| 4. Tệp đối tượng | Tên tệp Loại audience_id | Sổ ghi các tệp bạn có. Hai tệp ở Phần 2 ghi vào đây |
Đ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%.
Dựng nháp trên Lark, đọc lại, rồi đẩy lên Facebook
bash buoc2-setup-lark.shMá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.
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.
bash chay-tron-bo.shBật chiến dịch và cho máy canh ba lần mỗi ngày
- 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.
- Ở Bảng 1, đổi
Trạng tháicủ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. - Đăng ký lịch 08:00, 13:00, 19:00.
powershell -ExecutionPolicy Bypass -File dang-ky-task.ps1bash agent-3x.sh --simulate # số giả, để xem thẻ báo
bash agent-3x.sh # số thật từ FacebookMỗ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ường | Kiểu | Ai điền | Ghi chú |
|---|---|---|---|
Tên lệnh / Sản phẩm | Chữ | Bạn điền | Tên sản phẩm hoặc chương trình. Thành tên chiến dịch trên Facebook. |
ID | Số tự tăng | Máy ghi | Số thứ tự tự tăng (ID001, ID002…). |
Trạng thái | Chọn một | Bạ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ạy | Ngày giờ | Bạn điền | Ngà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úc | Ngày giờ | Tuỳ chọn | Ngày dự kiến dừng. |
Mức độ chiến dịch | Chọn một | Bạn điền | Chuyể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áo | Chữ | Tuỳ chọn | Một câu nói rõ chiến dịch này để làm gì. |
Sự kiện chuyển đổi | Chọn một | Bạn điền | Sự 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 đổi | Chọn một | Tuỳ chọn | Khá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 7 | Bạn điền | Chọn một dòng ở Bảng 7. Bắt buộc khi chạy chuyển đổi. |
Pixel ID | Nối sang Bảng 9 | Bạn điền | Chọ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ền | Gõ ID Trang Facebook (dãy số), có thể kèm tên. Máy lấy phần số. |
Video / Hình ảnh | Tệp đính kèm | Bạ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ường | Kiểu | Ai điền | Ghi chú |
|---|---|---|---|
Ngân sách ngày | Tiền (đồng) | Bạn điền | Số tiền mỗi ngày, đơn vị đồng. Ví dụ 200000. |
Chế độ ngân sách | Chọn một | Bạn điền | CBO = 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áo | Số | Bạn điền | Máy tạo bấy nhiêu nhóm. Để trống = 2. |
Số bài quảng cáo | Số | Bạn điền | Số 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ối | Chữ | Bạn điền | Tê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 đến | Số | Bạn điền | Để trống = 55. |
Giới tính | Chọn một | Bạn điền | Tất cả, Nam hoặc Nữ. Tất cả · Nam · Nữ |
Nhóm đối tượng / Tệp | Nối sang Bảng 4 | Tuỳ chọn | Chọ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ọn | Ghi 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ường | Kiểu | Ai điền | Ghi chú |
|---|---|---|---|
Nỗi đau | Chữ | Tuỳ chọn | Dòng đầu tiên được đưa vào bài góc "Nỗi đau". |
Sự sung sướng | Chữ | Tuỳ chọn | Dòng đầu tiên được đưa vào bài góc "Khát khao". |
Việc khách hàng phải làm | Chữ | Tuỳ chọn | Việc khách đang cố làm cho xong. |
Mong muốn | Chữ | Tuỳ chọn | Lệnh riêng của bạn cho chiến dịch này. |
Ghi chú thêm | Chữ | Tuỳ chọn |
Năm con số để tính ngưỡng lãi
| Tên trường | Kiểu | Ai điền | Ghi chú |
|---|---|---|---|
Giá bán P | Tiền (đồng) | Bạn điền | Giá bán một đơn, đơn vị đồng. |
Chi phí biến đổi V | Tiền (đồng) | Bạn điền | Chi 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ăm | Bạn điền | Phần lãi gộp muốn giữ lại, dạng phần trăm. Ví dụ 50%. |
Tỷ lệ Lead ra Đơn | Phần trăm | Bạn điền | Cứ 100 người đăng ký thì mấy người mua. Ví dụ 10%. |
Tỷ lệ Chat ra Đơn | Phần trăm | Bạn điền | Cứ 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ọn | Tổng tiền một khách mang lại về lâu dài. |
Ngưỡng Base tự tính
| Tên trường | Kiểu | Ai điền | Ghi chú |
|---|---|---|---|
CPA mục tiêu | Công thức | Tự tính | Chi 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 ROAS | Công thức | Tự tính | ROAS 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êu | Công thức | Tự tính | ROAS 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êu | Công thức | Tự tính | Giá 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ốn | Công thức | Tự tính | Lằ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êu | Công thức | Tự tính | Giá 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ày | Công thức | Tự tính | Số đă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ày | Công thức | Tự tính | Số đơ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ường | Kiểu | Ai điền | Ghi chú |
|---|---|---|---|
Mức tự quyết | Chọn một | Bạn điền | Nê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ọn | CPL 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ọn | Số ngày đầu máy chỉ quan sát. Để trống = 4. |
Trần ngân sách tối đa/ngày | Tiền (đồng) | Tuỳ chọn | Khi tăng tiền, không vượt mức này. |
Tổng trần chi tiêu | Tiền (đồng) | Bạn điền | Tổ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ọn | Số đăng ký muốn đạt trong một kỳ. |
Kỳ mục tiêu | Chọn một | Tuỳ chọn | Ngày, Tuần hoặc Tháng. Ngày · Tuần · Tháng |
Máy ghi
| Tên trường | Kiểu | Ai điền | Ghi chú |
|---|---|---|---|
Chiến dịch tạo ra (LK) | Nối sang Bảng 1 | Máy ghi | Nố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ường | Kiểu | Ai điền | Ghi chú |
|---|---|---|---|
Tên chiến dịch | Chữ | Máy ghi | Chép từ Bảng 0. |
Lệnh gốc (LK) | Nối sang Bảng 0 | Máy ghi | Nối về dòng Bảng 0. |
Trạng thái | Chọn một | Bạn điền | Sau 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 ghi | Ngày chạy viết liền. |
Loại phễu | Chọn một | Máy ghi | SĂ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 Ads | Công thức | Tự tính | Ngà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êu | Chọn một | Máy ghi | Tin nhắn (Messenger) · Chuyển đổi - Lead (form/leadpage) · Chuyển đổi - Sale (sale page/mua) |
Sự kiện chuyển đổi | Chọn một | Máy ghi | 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ế độ ngân sách | Chọn một | Máy ghi | ABO (ngân sách ở Nhóm QC) · CBO/Advantage (ngân sách ở chiến dịch) |
Ngân sách ngày | Tiề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_id | Nối sang Bảng 9 | Máy ghi | Nối sang Bảng 9. |
page_id | Chữ | Máy ghi | ID Trang lấy từ Bảng 0. |
campaign_id | Chữ | Máy ghi | Mã chiến dịch trên Facebook, máy ghi sau Bước 3. |
Giá bán P | Tiền (đồng) | Máy ghi | |
Chi phí biến đổi V | Tiền (đồng) | Máy ghi | |
Lợi nhuận muốn giữ | Phần trăm | Máy ghi | |
Tỷ lệ lead to đơn | Phần trăm | Máy ghi | |
Tỷ lệ chat to đơn | Phần trăm | Máy ghi | |
Trần chi tiêu cứng | Tiền (đồng) | Máy ghi | Chép từ "Tổng trần chi tiêu" ở Bảng 0. |
CPA mục tiêu | Công thức | Tự tính | ROUND(([Giá bán P]-[Chi phí biến đổi V])*(1-[Lợi nhuận muốn giữ]),0) |
CPL mục tiêu | Công thức | Tự tính | ROUND(([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êu | Công thức | Tự tính | ROUND(([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 ROAS | Công thức | Tự tính | 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) |
Ngành | Chọn một | Tuỳ 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ột | Tuỳ chọn | Khô = chỉ đề xuất. Ướt = thực thi sau khi duyệt. Khô (chỉ đề xuất) · Ướt (tự thực thi sau duyệt) |
ad_account | Chữ | Tuỳ chọn | |
Nhóm duyệt | Chữ | Tuỳ chọn | |
Ghi chú | Chữ | Tuỳ chọn | |
Nhóm quảng cáo (LK) | Nối sang Bảng 2 | Máy ghi | |
Nội dung trực tiếp (LK) | Nối sang Bảng 3 | Máy ghi | |
Số liệu (LK) | Nối sang Bảng 5 | Má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ường | Kiểu | Ai điền | Ghi chú |
|---|---|---|---|
Tên nhóm QC | Chữ | Máy ghi | |
Chiến dịch (LK) | Nối sang Bảng 1 | Máy ghi | |
Tệp dùng (LK) | Nối sang Bảng 4 | Máy ghi | Nối sang Bảng 4. |
Tệp loại trừ (LK) | Nối sang Bảng 4 | Tuỳ chọn | Ghi lại tệp cần loại trừ. |
Khu vực (Geo) | Chữ | Máy ghi | Sửa được trước Bước 3. |
Tuổi từ | Số | Máy ghi | |
Tuổi đến | Số | Máy ghi | |
Giới tính | Chọn một | Máy ghi | Tất cả · Nam · Nữ |
Tối ưu | Chọn một | Máy ghi | CONVERSATIONS (hội thoại) · OFFSITE_CONVERSIONS (chuyển đổi web) · LEAD |
Vị trí chạy | Chọn một | Máy ghi | Advantage+ (tự động) · Facebook Feed · Instagram · Feed + Stories + Reels · Tất cả vị trí |
Trạng thái | Chọn một | Máy ghi | Chờ 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ết | Chữ | 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ày | Tiền (đồng) | Tuỳ chọn | |
adset_id | Chữ | Máy ghi | |
Ghi chú | Chữ | Tuỳ chọn | |
Nội dung QC (LK) | Nối sang Bảng 3 | Má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ường | Kiểu | Ai điền | Ghi chú |
|---|---|---|---|
Tên creative | Chữ | Máy ghi | |
Chiến dịch (LK) | Nối sang Bảng 1 | Máy ghi | |
Nhóm QC (LK) | Nối sang Bảng 2 | Máy ghi | |
Góc hook | Chọn một | Máy ghi | Nỗi đau · Khát khao / Kết quả · Phản bác từ chối |
Caption | Chữ | Bạn điền | Má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/video | Tệp đính kèm | Máy ghi | Ảnh hoặc video chép từ Bảng 0. |
Trạng thái | Chọn một | Máy ghi | Bật · Tắt · Chờ duyệt |
Link bài FB sẵn | Chữ | 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ường | Kiểu | Ai điền | Ghi chú |
|---|---|---|---|
Tên tệp | Chữ | Bạn điền | Ví dụ "AUTO | CHƯA MUA". |
Loại | Chọn một | Bạn điền | Lạ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ĩa | Chữ | Tuỳ chọn | Tệp gồm những ai. |
audience_id | Chữ | Bạn điền | Mã 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ái | Chọn một | Tuỳ chọn | Chờ tạo · Đã tạo · Lỗi |
Ghi chú | Chữ | Tuỳ chọn | |
Nhóm dùng tệp (LK) | Nối sang Bảng 2 | Má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ường | Kiểu | Ai điền | Ghi chú |
|---|---|---|---|
Ngày | Chữ | Máy ghi | |
Chiến dịch (LK) | Nối sang Bảng 1 | Máy ghi | |
Ad set | Chữ | Máy ghi | |
CPL | Tiền (đồng) | Máy ghi | |
CPA | Tiền (đồng) | Máy ghi | |
ROAS | Số | Máy ghi | |
CPMC | Tiền (đồng) | Máy ghi | |
CPM | Tiền (đồng) | Máy ghi | |
CTR | Số | Máy ghi | |
Frequency | Số | Máy ghi | |
Quyết định | Chữ | Máy ghi | |
Đề xuất | Chữ | Máy ghi | |
Lý do | Chữ | Máy ghi | |
CPL mục tiêu (CĐ) | Công thức | Tự tính | TEXT(ROUND(SUM([Chiến dịch (LK)].[CPL mục tiêu]),0),"#,##0")&"đ" |
CPMC mục tiêu (CĐ) | Công thức | Tự tính | TEXT(ROUND(SUM([Chiến dịch (LK)].[CPMC mục tiêu]),0),"#,##0")&"đ" |
ROAS hòa vốn (CĐ) | Công thức | Tự tính | ROUND(SUM([Chiến dịch (LK)].[Break-even ROAS]),2) |
Trạng thái CPL | Công thức | Tự tính | IF(ISBLANK([CPL]),"—",IF([CPL]<=SUM([Chiến dịch (LK)].[CPL mục tiêu]),"✅ Đạt","⚠️ Vượt")) |
Trạng thái CPMC | Công thức | Tự tính | IF(ISBLANK([CPMC]),"—",IF([CPMC]<=SUM([Chiến dịch (LK)].[CPMC mục tiêu]),"✅ Đạt","⚠️ Vượt")) |
Trạng thái ROAS | Công thức | Tự tính | IF(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ường | Kiểu | Ai điền | Ghi chú |
|---|---|---|---|
Thời điểm | Chữ | Máy ghi | |
Chiến dịch | Chữ | Máy ghi | |
Hành động | Chữ | Máy ghi | |
Người duyệt | Chữ | 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ường | Kiểu | Ai điền | Ghi chú |
|---|---|---|---|
Tên / Từ khóa | Chữ | Bạn điền | Tên dễ nhớ của trang. |
URL | Đường link | Bạn điền | Đường dẫn đầy đủ, bắt đầu bằng https:// |
Loại trang | Chọn một | Tuỳ chọn | Leadpage (form) · Sale page (mua) · Trang khác |
Sự kiện | Chọn một | Tuỳ chọn | LEAD · 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ùng | Chọn một | Tuỳ chọn | Có · 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ường | Kiểu | Ai điền | Ghi chú |
|---|---|---|---|
Tên | Chữ | Tuỳ chọn | |
Loại | Chọn một | Tuỳ chọn | Agent (đội quân) · Skill marketing · Module / Hạ tầng |
Vai trò | Chữ | Tuỳ chọn | |
File / Skill / Nguồn | Chữ | Tuỳ chọn | |
Trạng thái | Chọn một | Tuỳ 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ường | Kiểu | Ai điền | Ghi chú |
|---|---|---|---|
Tên Pixel | Chữ | Bạn điền | |
pixel_id | Chữ | Bạn điền | Mã pixel (dãy số) trong Trình quản lý sự kiện. |
Trạng thái | Chọn một | Tuỳ chọn | Đang hoạt động · Ngủ |
Lần bắn cuối | Chữ | Tuỳ chọn | |
Ghi chú | Chữ | Tuỳ chọn |
Máy quyết định thế nào
| Tình huống | Máy đề xuất |
|---|---|
| Chạm Tổng trần chi tiêu | Dừ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ốn | Tắt |
| Đã có đơn, ROAS trên hoà vốn nhưng dưới mục tiêu | Theo dõi |
| CPL cao hơn CPL hoà vốn | Tắt gấp |
| CPL cao hơn mục tiêu nhân ngưỡng tắt | Sửa |
| CPL cao hơn mục tiêu | Theo dõi |
| CPL đạt, tần suất từ 3 trở lên | Đổi nội dung |
| CPL đạt | Tăng 20%, không vượt trần ngày |
Công thức ngưỡng
| Ngưỡng | Công thức | Ví 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êu | CPA mục tiêu × tỷ lệ Lead ra Đơn | 22.450 đ |
| CPL hoà vốn | (P − V) × tỷ lệ Lead ra Đơn | 44.900 đ |
| ROAS hoà vốn | P ÷ (P − V) | 1,11 |
| ROAS mục tiêu | P ÷ CPA mục tiêu | 2,22 |
Phần 2
Tệp remarketing tự cập nhật
Tạo kho GitHub của bạn từ gói
Tải dong-bo-tep-remarketing.zip, giải nén.
- github.com → New repository → đặt tên, chọn Private → Create repository.
- 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
.githubvà.claude→ Commit changes. - 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.
Tạo app Lark và cho app đọc bảng
- open.larksuite.com → Developer Console → Create Custom App.
- Credentials & Basic Info → chép App ID và App Secret.
- Permissions & Scopes → thêm
bitable:app:readonly→ Create version → phát hành. - 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.
- 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.
Điền Secrets và Variables trên GitHub
Kho → Settings → Secrets and variables → Actions.
Tab Secrets (bí mật)
| Tên | Giá trị |
|---|---|
LARK_APP_SECRET | App Secret của app Lark |
META_ACCESS_TOKEN | Token System User của Meta |
Tab Variables (không bí mật)
| Tên | Giá trị |
|---|---|
LARK_APP_ID | App ID của app Lark |
LARK_BASE_TOKEN | Mã Base |
LARK_TABLE_ID | Mã bảng khách đăng ký |
META_AD_ACCOUNT_ID | act_ cộng số tài khoản |
DONG_BO_BAT | false lúc này, bật ở bước 7 |
META_AUD_CHUA_MUA META_AUD_DA_MUA | Mã 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.
Tạo hai tệp trên Meta
- Tab Actions → nếu được hỏi thì bấm "I understand my workflows, go ahead and enable them".
- Chọn "Tạo tệp trên Meta" → Run workflow → giữ tiền tố
AUTO→ tick "Tạo thật" → Run workflow. - Đợ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 = …. - Thêm hai Variables đó như ở bước 3.
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 -.
| Variable | Mặc định | Cột chứa gì |
|---|---|---|
COT_SDT | Số điện thoại | Số điện thoại khách. Nhận các dạng 0912…, +84912…, 84912…, 912… |
COT_EMAIL | Email | Email khách |
COT_TRANG_THAI | Trạng thái TT | Trạng thái thanh toán |
GIA_TRI_DA_MUA | Đã thanh toán | Giá trị trong cột trạng thái nghĩa là đã trả tiền |
COT_SO_TIEN | Số tiền | Số tiền đơn. Người đã mua phải có số tiền lớn hơn 0 |
DA_MUA_CAN_SO_TIEN | 1 | Đặt 0 nếu chỉ cần trạng thái, không cần số tiền |
COT_CHAT_LUONG | Chất lượng data | Không bắt buộc |
GIA_TRI_RAC | Rác | Dò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_GIA | 84 | Mã quốc gia thay số 0 đầu số điện thoại |
Chạy kiểm tra, xem trước, rồi chạy thật lần đầu
- 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.
- 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.
- Run workflow lần nữa, bỏ tick "Chỉ xem trước". Kết quả đúng có dòng "Xong, đã ghi sổ ghi nhớ".
- 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.
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ệc | Làm ở đâu |
|---|---|
| Xem máy có chạy không | Tab Actions: dấu tích xanh mỗi giờ |
| Tạm dừng | Variable DONG_BO_BAT = false |
| Chạy ngay không chờ giờ | Actions → Run workflow, bỏ tick xem trước |
| Đổi token Meta | Settings → 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)
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 --confirmChỉ 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ệp | Dùng thế nào |
|---|---|
| AUTO | CHƯA MUA | Là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 | ĐÃ MUA | Loạ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 |
- 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. - 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. - 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ết | Chi 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áo | Phả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 đi | Số đ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ảng | Chưa đăng nhập lark-cli, hoặc mã Base trong config.env sai |
| thiếu META_ACCESS_TOKEN | Chư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ách | Tin nhắn Messenger chỉ chạy ABO, đổi Chế độ ngân sách |
| Video không lên | Dùng MP4 mã H.264. Video quay bằng iPhone (HEVC) cần chuyển mã trước |
| Thẻ Lark không tới | CHAT trống hoặc sai mã nhóm |
| Máy không canh chiến dịch | Bả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 API | Thêm Variable META_API_VERSION bằng số Meta nhắc trong câu lỗi |
| 91403 Forbidden | App 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 InvalidFieldNames | Tê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 Actions | Thư 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 23 | GitHub 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
- Máy luôn tạo chiến dịch ở trạng thái TẠM DỪNG. Chỉ bạn bật.
- Tệp
config.env,.secrets/meta-ads.envvà mọi token là chìa khoá tài khoản của bạn. Không gửi cho ai, không đưa lên kho công khai. - Lộ token thì vào Cài đặt doanh nghiệp thu hồi rồi tạo mã mới.
- Kho GitHub của Phần 2 để ở chế độ Private.
- Hai gói tải về không chứa dữ liệu, khoá hay mã tài khoản của ai. Mọi thứ chạy bằng tài khoản của chính bạn.