Nguồn tin và chiến dịch
Hai cách để hệ thống tự dựng video theo thời gian: quét feed khi có bài mới, hoặc rải lịch theo chủ đề.
Chọn cái nào
| Nguồn tin | Chiến dịch | |
|---|---|---|
| Kích hoạt bởi | Có bài mới trên feed | Tới giờ trong lịch đã rải |
| Nội dung lấy từ | Chính bài báo được quét | Danh sách chủ đề bạn khai |
| Chạy tới khi nào | Cho tới khi bạn tắt | Hết số ngày đã đặt, trừ khi bật tự gia hạn |
Nguồn tin
GET /sources
GET /sources/{id}
POST /sources
PATCH /sources/{id}
DELETE /sources/{id}POST /sources cần header Idempotency-Key. Bản vá PATCH chỉ đổi những trường có mặt trong thân — trường không gửi thì giữ nguyên.
| Trường | Ý nghĩa |
|---|---|
feedUrl | Địa chỉ RSS hoặc trang danh sách bài |
enabled | Tắt tạm mà không xoá cấu hình |
autoConnectionIds | Kênh nhận video dựng từ nguồn này. Trong phản hồi trường này tên là channelIds. |
maxItemsPerPoll | Trần SỐ VIDEO mỗi lượt quét — không phải số bài được thử |
maxItemsPerDay | Trần số video mỗi ngày |
scanMode, scanTimes, scanDays, scanTimezone | Lịch quét: quét đều theo chu kỳ, hay chỉ vào các mốc giờ đã đặt |
includeKeywords, excludeKeywords | Lọc bài theo từ khoá trước khi dựng |
maxAgeHours | Bỏ qua bài cũ hơn mốc này |
stopWhenCreditBelow | Tự dừng quét khi số dư tụt dưới mức này — chốt an toàn nên đặt |
scheduleMode, scheduleDelayMinutes, immediateSpacingMinutes | Đăng ngay hay hẹn giờ, và giãn cách giữa các bài |
comment | Bình luận tự đăng kèm. Gửi null để tắt; không gửi thì giữ nguyên cấu hình cũ. |
Phản hồi có nextScanAt, lastPolledAt và lastSuccessAt để biết nguồn còn sống hay đã im.
lastSuccessAt không nói gì về việc có ra video hay không
Một lượt quét thành công vẫn có thể ra 0 video: feed không có bài mới, bài bị lọc bởi từ khoá, hoặc trang nguồn đổi cấu trúc nên không bóc được ảnh. Muốn biết thật sự có gì thì đọc GET /sources/{id}/items.
Bài đã quét
GET /sources/{id}/items?page=1&pageSize=25Mỗi phần tử là một bài đã phát hiện, kèm status, attempts và videoId — id của video đã dựng từ bài đó, khớp với GET /videos/{id}. Bài chưa dựng thì videoId là null.
Chiến dịch
GET /campaigns?page=1&pageSize=25&status=ACTIVE
GET /campaigns/{id}
POST /campaignsstatus nhận DRAFT, ACTIVE, PAUSED, COMPLETED hoặc CANCELLED.
POST /campaigns tạo chiến dịch ở dạng nháp: chưa rải lịch và chưa trừ tiền. Cần header chống trùng.
{
"name": "Kiến thức tài chính tháng 10",
"kind": "video-talk",
"connectionIds": ["4e1c…"],
"durationDays": 30,
"startAt": "2026-10-01T00:00:00.000Z",
"videosPerDay": 2,
"timezone": "Asia/Ho_Chi_Minh",
"timeWindows": ["08:00", "20:00"],
"topics": ["Lãi kép", "Quỹ dự phòng"],
"autoRenew": false
}timeWindowslà các mốc giờ trong ngày, tính theotimezonechứ không theo giờ máy chủ. Số mốc nên khớpvideosPerDay.topicsđược quay vòng để sinh nội dung. Hết danh sách thì quay lại từ đầu.autoRenewbật thì hết chu kỳ chiến dịch tự chạy tiếp và tiếp tục tiêu credit.
Vòng đời chiến dịch
POST /campaigns/{id}/launch → 202
POST /campaigns/{id}/pause → 200
POST /campaigns/{id}/resume → 200
POST /campaigns/{id}/cancel → 200| Lệnh | Làm gì | Lùi lại được? |
|---|---|---|
| launch | Rải lịch cho toàn bộ thời gian chạy. Từ đây mỗi ô tới giờ sẽ tiêu credit. | Không — nhưng tạm dừng được ngay sau đó |
| pause | Ngừng dựng và đăng cho tới khi chạy tiếp | Có |
| resume | Chạy tiếp, và tiêu credit trở lại | Có |
| cancel | Dừng hẳn. Những ô chưa tới giờ sẽ không còn được chạy. | KHÔNG — không mở lại được |
Cả bốn lệnh đều đọc lại chiến dịch sau khi đổi trạng thái rồi mới trả về, nên bạn nhận được trạng thái mới chứ không phải trạng thái cũ. Không lệnh nào đòi header chống trùng: gọi hai lần cho kết quả giống gọi một lần.
Tạm dừng, đừng huỷ, nếu chỉ muốn ngưng một lúc
cancel không mở lại được. Muốn ngưng tạm thì dùng pause.
Ô lịch
GET /campaigns/{id}/slots?page=1&pageSize=25Mỗi ô là một lượt dựng-và-đăng đã hẹn: scheduledAt, topic, status, attempts, và videoId khi video đã dựng. Ô hỏng có errorCode và errorDetail.
Ô lỡ giờ không đăng bù. Hệ thống chỉ dời sang mốc kế tiếp, vì đăng dồn mấy bài cùng lúc vào kênh thật là cách nhanh nhất để bị nền tảng hạn chế.
Muốn xem chi phí, đọc creditSpent (tổng đã trừ tích luỹ) và unitCost (đơn giá một video) ở chi tiết chiến dịch. Xem thêm Chiến dịch trên giao diện web.
Số liệu nhanh
renderedVideoCount và failedSlotCount ở chi tiết cho biết chiến dịch đang chạy trơn hay đang hỏng đều — theo dõi hai số này thay vì đếm tay qua danh sách ô.
