Chia sẻ Phần mềm tự động đăng quảng cáo TikTok: quy trình tự động hóa cho đội media buying tại Việt Nam

DM Exness

Nguyễn Văn Húc

Thành viên mới
27/10/26
21
0
1
Token
105
USDT
0.00
Anh Khôi làm media buying ở Thủ Đức kể với mình rằng cao điểm tháng mười một, mỗi ca anh phải đưa chừng bốn mươi mẫu nội dung lên vài tài khoản quảng cáo. Đổi tên chiến dịch, dán đường dẫn đích, chỉnh ngân sách, rồi tối về còn ngồi đối chiếu báo cáo từng dòng. "Tay em nhanh rồi, nhưng mắt vẫn hay nhầm cột ngân sách, có hôm nhầm đúng lúc đang họp", anh cười. Điều làm anh mệt không phải là số lượng, mà là việc phải lặp đi lặp lại một chuỗi thao tác mà lẽ ra chẳng cần người nào ngồi canh.

Mình gợi ý anh đưa phần chuẩn bị sang quy trình tự động hóa qua Local API của BitBrowser, còn bước bấm đăng vẫn để người trong đội xác nhận. Anh thử một ca, thấy buổi tối nhẹ hẳn đi. Nhưng cái đáng bàn ở đây không phải là tốc độ, mà là chỗ phải vạch ranh giới cho cái máy được làm và không được làm.​

Tự động hóa nên đứng ở đâu trong một ca chạy

Hãy chia một ca thành bốn đoạn. Đoạn chuẩn bị gồm đặt tên chiến dịch, gom tệp nội dung, điền thông số, kiểm tra chính tả và gắn nhãn nhóm. Đoạn đối soát gồm xem hồ sơ có đúng môi trường không, IP có khớp khu vực không, tài khoản còn trong trạng thái hoạt động không. Đoạn đăng và điều chỉnh là lúc bấm nút, sửa ngân sách, tạm dừng chiến dịch. Đoạn cuối là kéo báo cáo và ghi nhật ký.

Ba đoạn đầu và đoạn cuối rất hợp để giao cho máy. Riêng đoạn đăng và điều chỉnh nên có người bấm xác nhận, dù chỉ là một cú click. Lý do không nằm ở kỹ thuật, mà ở trách nhiệm: nội dung quảng cáo ở Việt Nam chịu Luật Quảng cáo 75/2025/QH15, quy chế của nền tảng và cả quy định về quảng cáo trực tuyến, nên không có lý do gì để một đoạn script tự quyết thay con người chuyện đăng hay không đăng.​

Khâu trong ca chạyMáy đảm nhiệmNgười xác nhậnGhi chú
Đặt tên, gom tệp, điền thông sốCóSoát mẫu một lầnDùng quy ước đặt tên thống nhất
Kiểm tra hồ sơ, IP, trạng tháiCóXem báo lỗiDừng ngay khi có hồ sơ lệch
Bấm đăng, sửa ngân sáchKhôngCó, bắt buộcGiữ lại người chịu trách nhiệm
Kéo báo cáo, ghi nhật kýCóĐối chiếu cuối caLưu tối thiểu ba mươi ngày
Gắn nhãn quảng cáo, thông tin người chuyển tảiCóKiểm tra trước khi đăngTheo quy định pháp luật hiện hành
Phân ranh giới giữa quy trình tự động hóa và khâu cần con người quyết định.​

Cái máy thật sự chạy phía sau

Về kỹ thuật, CDP (Chrome DevTools Protocol) là cây cầu để điều khiển trang web. Local API đảm nhiệm vòng đời của hồ sơ: tạo, mở, đóng, đọc trạng thái, sửa thông số. Các bộ thư viện như Playwright, Puppeteer hay Selenium kết nối vào đúng hồ sơ được chỉ định qua cổng nội bộ, nên mỗi luồng thao tác chỉ sống trong môi trường của riêng nó, không tràn sang hồ sơ bên cạnh. Phần lặp thao tác thì giao cho RPA dạng kéo thả, còn từ phiên bản 7.1.5 trở đi, MCP cho phép một trợ lý AI nhận lệnh bằng ngôn ngữ tự nhiên rồi gọi lại các năng lực đó.

Có bốn tính chất mình luôn yêu cầu khi viết luồng như vậy. Thứ nhất là lặp lại an toàn: chạy hai lần phải ra cùng một kết quả, không tạo thêm chiến dịch trùng. Thứ hai là dừng sớm khi có lỗi, thay vì cố chạy tiếp rồi để sai lan ra cả lô. Thứ ba là mọi thao tác đều có nhật ký kèm thời điểm và mã hồ sơ. Thứ tư là có khoảng nghỉ giữa các lượt, vì một luồng chạy nhanh bất thường tự nó đã là tín hiệu không tự nhiên.​

Code:
import requests, csv, time
API = "http://127.0.0.1:54345"
HEAD = {"x-api-key": "<token-noi-bo>"}

rows = list(csv.DictReader(open("creative.csv", encoding="utf-8")))
pending = []
for r in rows:
info = requests.post(API + "/browser/detail",
json={"id": r["profile_id"]}, headers=HEAD).json()
ok = info["data"]["proxy"]["country"] == r["expected_country"]
pending.append({"profile": r["profile_id"],
"campaign": r["campaign_name"],
"ready": ok})
if not ok:
break
time.sleep(1.5)
print("Danh sách chờ duyệt:", pending)

Đoạn minh họa chỉ đọc trạng thái và lập danh sách chờ duyệt; không thực hiện thao tác đăng hay thay đổi ngân sách.​

Đoạn code trên cố tình dừng ở mức lập danh sách chờ duyệt. Nó kiểm tra xem quốc gia của IP có đúng với khu vực dự kiến trong file không, rồi in ra những chiến dịch đủ điều kiện. Nhân sự đọc danh sách đó và tự bấm xác nhận. Với mình, đây là hình dáng đúng của một quy trình tự động hóa trong ngành quảng cáo: máy làm sạch dữ liệu, người giữ quyết định.​

Đã có tự động hóa thì còn cần môi trường riêng không

Cần, và cần hơn. Ngay cả khi luồng tự động hóa chạy qua Local API của một nền tảng như BitBrowser, một đoạn script chạy trên hồ sơ dùng chung sẽ mang theo cookie, localStorage và phiên đăng nhập của tài khoản trước đó sang tài khoản sau. Đến lúc đó, lỗi không còn là "bị hỏi xác minh" đơn thuần nữa, mà là dữ liệu đo lường bị lẫn: anh chị tưởng đang so sánh hai mẫu nội dung A/B, thực ra số liệu của hai chiến dịch đã dính vào nhau từ khâu lưu trữ. Kết luận rút ra từ một phép thử bẩn thì không dùng được để tối ưu ngân sách.

Cấu hình mình thường dùng cho một ca bốn mươi mẫu như của anh Khôi như sau. Mỗi tài khoản quảng cáo nằm trong một hồ sơ riêng, gắn nhãn theo đợt và người phụ trách. Trong phần cài đặt, bật xác thực cho Local API và chỉ cấp token cho máy nội bộ. Script đọc file CSV, sinh tên chiến dịch theo quy ước, kiểm tra trạng thái hồ sơ rồi xuất danh sách chờ duyệt. Cuối ca, một luồng khác kéo báo cáo và ghi nhật ký, lưu lại ít nhất ba mươi ngày để khi cần đối chiếu với bộ phận kế toán còn có đường mà tra.

Với nội dung có người chuyển tải, khâu chuẩn bị nên có thêm một cột bắt buộc để đánh dấu thông tin quảng cáo theo quy định hiện hành. Đưa nó thành trường không được bỏ trống trong file CSV thì sẽ khó sót hơn nhiều so với việc nhắc nhau bằng miệng. Đây là kiểu chi tiết nhỏ nhưng cứu đội khỏi những rắc rối không đáng có.​

ranh giới quan trọng hơn năng lực

Gọn lại ba ý. Một, tự động hóa nên tập trung vào chuẩn bị, đối soát và báo cáo, còn quyết định đăng vẫn thuộc về người. Hai, môi trường tách biệt là nền tảng để dữ liệu A/B còn sạch, không phải thứ chỉ cần khi gặp sự cố. Ba, nhật ký và khả năng dừng sớm là hai thứ phân biệt một quy trình dùng được lâu với một đoạn script chạy được vài bữa rồi bỏ.

Về xu hướng, mình nghĩ đội media buying ở Việt Nam sẽ dần chuyển từ "viết script" sang "mô tả yêu cầu". Khi trợ lý AI kết nối qua MCP vào từng hồ sơ riêng biệt, nó có thể tự rà soát thông số, gợi ý nhóm cần kiểm tra và soạn sẵn báo cáo. Nhưng cũng chính vì thế, phần việc của con người sẽ dời sang thiết kế ranh giới, duyệt nội dung và chịu trách nhiệm với nội dung đó. AI càng làm được nhiều, cái khung quy trình càng phải rõ.

Lời khuyên cho ai đang định dựng luồng mới: bắt đầu từ một ca nhỏ, mười mẫu thôi, chạy song song với cách làm tay trong một tuần. So sánh hai bên, thấy chỗ nào hay nhầm thì sửa quy ước đặt tên trước, rồi mới sửa code. Và đừng quên quy đổi chi phí nhân sự lẫn chi phí hạ tầng về VND khi trình sếp, với tỷ giá tham khảo 1 USD bằng 25.739 VND, để bàn về hiệu quả trên cùng một mặt bằng con số.​

Câu hỏi thường gặp

Có nên để script tự bấm nút đăng quảng cáo không?


Không nên. Khâu này cần người xác nhận để chịu trách nhiệm về nội dung, nhãn quảng cáo và ngân sách theo quy định hiện hành cũng như quy chế nền tảng.​

Vì sao vẫn phải tách hồ sơ khi đã có quy trình tự động hóa?

Vì cookie, localStorage và phiên đăng nhập dùng chung sẽ làm lẫn dữ liệu giữa các chiến dịch, khiến kết quả thử nghiệm A/B không còn đáng tin.​

Local API khác gì với việc điều khiển trình duyệt bằng Selenium?

Local API quản lý vòng đời và thông số của hồ sơ; Selenium, Playwright hay Puppeteer điều khiển trang web bên trong hồ sơ đó qua CDP. Hai lớp này thường đi cùng nhau.​

Nhật ký nên lưu những gì và giữ bao lâu?

Mã hồ sơ, thời điểm, thao tác, kết quả và người duyệt. Với đội chạy quảng cáo, ba mươi ngày là mức tối thiểu hợp lý để đối chiếu với báo cáo cuối tháng.​

MCP dùng được vào phần nào của quy trình?

Phù hợp cho rà soát thông số, gom báo cáo và soạn danh sách việc cần kiểm tra bằng ngôn ngữ tự nhiên. Các thao tác mang tính quyết định vẫn nên giữ bước xác nhận của người.​
 

Donate QR VCB




Donate-VCB-QR

Thành viên trực tuyến

Hiện không có ai trực tuyến.

Forum statistics

Threads
467
Messages
646
Thành viên
542
Latest member
duong andy