tool-traffic-apitool_traffic_apitool-traffic-apiproxiesPOST /webhook/proxy/get-proxy → API tìm proxy phù hợp (chưa hết lượt dùng, không bị block domain đích, không đang xoay IP) → Gán proxy cho task → Worker dùng proxy thực thi → Sau khi xong, worker trả kết quả về → API cập nhật used_count, domain_used, is_captcha, is_error.| Field | Kiểu | Required | Default | Mô tả và cách dùng |
|---|---|---|---|---|
_id | ObjectID | Có | auto | ID duy nhất của proxy trong MongoDB. |
ip | string | Có | — | Địa chỉ IP nội bộ của proxy server (có thể là IP private nếu dùng proxy xoay). |
port | int | Có | — | Port kết nối proxy. |
username | string | Có | — | Username xác thực proxy. |
password | string | Có | — | Password xác thực proxy. |
ip_public | string | Có | — | IP Public thực tế sau khi xoay. Đây là IP mà Google/CocCoc nhìn thấy. Được cập nhật sau mỗi lần xoay thành công. |
rotate_url | string | Có | — | URL API để xoay IP (đổi IP mới). Mỗi nhà cung cấp có URL khác nhau: ZingProxy, Enode, M2Proxy. Hàm Supplier() parse hostname từ URL này để biết nhà cung cấp. |
rotate_time | int | 0 | Chu kỳ xoay IP tính bằng giây. Sau rotate_time giây, proxy tự động xoay IP mới. 0 = không tự động xoay. | |
next_rotate | datetime | — | Thời điểm xoay IP tiếp theo. Được tính bằng last_rotate + rotate_time. Cron job kiểm tra field này để quyết định có xoay không. | |
last_used_at | datetime | — | Thời điểm proxy được sử dụng lần cuối. Dùng để phát hiện proxy không được dùng lâu. | |
in_use | int | 0 | Số task đang sử dụng proxy này đồng thời. Tăng khi gán task, giảm khi task hoàn thành. Dùng để kiểm soát tải. | |
used_count | int | 0 | Tổng số lần proxy được sử dụng. Khi used_count >= PROXY_USE_MAX (cấu hình trong .env), proxy bị đánh dấu cần xoay IP. | |
domain_used | array[TaskUseProxy] | [] | Danh sách domain đã truy cập qua proxy này. Dùng để tránh gán cùng proxy cho cùng domain quá nhiều lần (có thể bị phát hiện). | |
domain_blocks | array[string] | [] | Danh sách domain bị block với proxy này. Nếu task cần truy cập domain trong list này, proxy sẽ không được chọn. | |
is_active | bool | true | Proxy đang hoạt động và có thể được gán cho task. false = proxy bị vô hiệu hóa thủ công hoặc tự động do quá nhiều lỗi. | |
is_rotating | bool | false | Đang trong quá trình xoay IP. Khi true, proxy không được gán cho task mới để tránh xung đột. | |
is_captcha | bool | false | Lần sử dụng cuối gặp CAPTCHA. Proxy gặp CAPTCHA thường xuyên cần được xoay IP hoặc nghỉ ngơi. | |
is_error | bool | false | Lần sử dụng cuối gặp lỗi kỹ thuật (timeout, connection refused). | |
is_success | bool | false | Lần sử dụng cuối thành công. | |
error_count | int | 0 | Số lỗi liên tiếp. Khi error_count vượt ngưỡng, proxy bị đánh dấu is_active = false tự động. | |
disable_auto_rotate | bool | false | Tắt tính năng tự động xoay IP. Dùng cho proxy tĩnh (static IP) không hỗ trợ xoay. | |
auth_token | string? | null | JWT Token hoặc API key nếu nhà cung cấp dùng token-based auth thay vì username/password. | |
area | string | "global" | Khu vực địa lý của IP: "vn" = IP Việt Nam (dùng cho traffic nội địa), "global" = IP quốc tế. | |
region | string | "" | Vùng địa lý chi tiết hơn. Ví dụ: "HCM", "HN", "US-CA". | |
package_name | string? | null | Tên gói proxy đã mua. Dùng để nhóm proxy theo gói khi báo cáo chi phí. | |
proxy_package_id | ObjectID | — | Tham chiếu đến proxy_packages._id. Dùng để lấy thông tin gói và nhà cung cấp. | |
proxy_price | float64? | null | Giá proxy (VNĐ hoặc USD). Dùng để tính chi phí vận hành. | |
expired_at | datetime? | null | Ngày hết hạn gói proxy. Cron job kiểm tra field này để cảnh báo proxy sắp hết hạn qua Telegram. | |
rotate_server | string? | null | Server thực hiện xoay IP (nếu xoay qua server trung gian). | |
created_by | int | 0 | User ID người tạo proxy (tham chiếu users.id trong MySQL). | |
updated_by | int | 0 | User ID người cập nhật cuối. | |
created_at | datetime | auto | Thời điểm thêm proxy vào hệ thống. | |
updated_at | datetime | auto | Thời điểm cập nhật cuối. |
domain_used (kiểu TaskUseProxy):| Field | Kiểu | Mô tả |
|---|---|---|
task_id | string | ID của task đã dùng proxy này. |
domain | string | Domain đã truy cập qua proxy. |
organic_engine | int? | Engine tìm kiếm: 0=Google.vn, 1=Google, 2=CocCoc. Null nếu truy cập trực tiếp. |
Reset() — Đặt lại in_use=0, domain_used=[], used_count=0, is_captcha=false, is_error=false, error_count=0. Được gọi sau khi xoay IP thành công.ToHttpProxy() — Trả về chuỗi http://username:password@ip:port để cấu hình HTTP proxy cho trình duyệt.ReportString() — Tạo chuỗi báo cáo ngắn gọn để gửi Telegram khi proxy gặp sự cố.tasksproject trong MySQL và giao cho worker thực thi. Đây là cầu nối giữa cấu hình (MySQL) và thực thi (Worker).SCHEDULE_SEND_TASK (mỗi phút) đọc projects từ MySQL → Tạo task documents trong MongoDB → Worker gọi POST /api/task/request → Nhận danh sách task → Thực thi → Gọi webhook cập nhật kết quả.| Field | Kiểu | Required | Mô tả và cách dùng |
|---|---|---|---|
_id | ObjectID | Có | ID task trong MongoDB. |
project_id | int | Có | Tham chiếu projects.id trong MySQL. Dùng để cập nhật thống kê vào project_details. |
proxy_url | string | Có | URL webhook để worker lấy proxy: {WEBHOOK_HOST}/webhook/proxy/get-proxy. |
webhook_url | string | Có | URL webhook để worker gửi kết quả: {WEBHOOK_HOST}/webhook/task/update-status. |
result_status | int | Kết quả cuối cùng: 0=Unknown, 1=Success, -1=Error, -2=NotFound, -3=Captcha. | |
result_status_tmp | int | Kết quả tạm thời trong quá trình xử lý. Dùng để theo dõi tiến trình trước khi có kết quả cuối. | |
result_error | string | Thông báo lỗi chi tiết khi result_status = -1. | |
traffic_type | object | Có | Cấu hình luồng traffic (xem sub-document bên dưới). |
traffic_device | int | Có | Thiết bị thực thi: 0=Desktop, 1=Mobile. |
device_os | int | Hệ điều hành: Desktop: 0=Windows, 1=MacOS. Mobile: 0=Android, 1=iOS. | |
status | int | Trạng thái xử lý: 0=Pending (chờ), 1=Processing (đang chạy), 2=Completed (xong). | |
page_view | array[PageView] | Cấu hình thời gian ở lại trang. Worker ngẫu nhiên chọn giá trị trong khoảng [time_min, time_max] giây. | |
geolocation | object | Tọa độ GPS {lat, lng}. Worker cấu hình vị trí GPS của trình duyệt theo giá trị này. | |
campaign_id | int | ID chiến dịch (tham chiếu campaigns.id MySQL). Dùng để thống kê theo chiến dịch. | |
project_detail_id | int | ID project detail (tham chiếu project_details.id MySQL). Dùng để cập nhật thống kê theo giờ. | |
execution_time | int | Thời gian thực thi tính bằng millisecond. Dùng để phân tích hiệu suất. | |
mark | string? | Nhãn đánh dấu tùy chỉnh. Dùng để phân loại task trong báo cáo. | |
profile_id | string? | ID của Browser Profile (tham chiếu profiles._id MongoDB). Nếu có, worker dùng profile này thay vì tạo profile mới. | |
server_id | int? | ID server worker đang xử lý task (tham chiếu servers.id MySQL). Được gán khi worker nhận task. | |
created_at | datetime | Thời điểm tạo task. | |
updated_at | datetime | Thời điểm cập nhật cuối (khi worker gửi kết quả). |
traffic_type (kiểu TrafficType):| Field | Kiểu | Mô tả |
|---|---|---|
method | int | Phương thức: 0=Direct (truy cập thẳng URL), 1=Organic (tìm kiếm rồi click). |
organic_engine | int? | Engine tìm kiếm khi method=1: 0=Google.vn, 1=Google, 2=CocCoc, 3=Google.vn Ads, 4=Google Ads, 5=CocCoc Chrome. |
search_keyword | string? | Từ khóa tìm kiếm khi method=1. Worker tìm từ khóa này trên engine rồi click vào URL đích. |
only_ads | bool | true = chỉ click vào kết quả quảng cáo, bỏ qua kết quả tự nhiên. |
is_kill | bool | true = chế độ Negative SEO, gửi traffic đến domain đối thủ để làm hại thứ hạng. |
links | array[string] | Danh sách URL đích cần traffic. Worker ngẫu nhiên chọn một URL trong list. |
ads_relations | array[AdsRelation] | Quan hệ giữa quảng cáo và project detail. Dùng để cập nhật thống kê chính xác. |
page_view (kiểu PageView):| Field | Kiểu | Mô tả |
|---|---|---|
time_min | int | Thời gian ở lại trang tối thiểu (giây). |
time_max | int | Thời gian ở lại trang tối đa (giây). Worker ngẫu nhiên chọn giá trị trong khoảng này. |
profilesprofile_id → Tải profile từ MongoDB → Cấu hình trình duyệt theo thông tin profile (user_agent, screen_resolution, timezone, geolocation) → Thực thi task → Cập nhật total_clicks, total_searches, last_used_at → Đặt cooldown nếu cần.| Field | Kiểu | Required | Mô tả và cách dùng |
|---|---|---|---|
_id | ObjectID | Có | ID profile trong MongoDB. |
profile_id | string | Có | Business ID dạng UUID. Dùng để tham chiếu từ task và các hệ thống khác. |
server_id | string | ID server đang giữ profile này. Một profile chỉ được dùng trên một server tại một thời điểm. | |
proxy_id | string | ID proxy được gán cố định cho profile này. Đảm bảo profile luôn dùng cùng một IP để tạo lịch sử nhất quán. | |
used_for | string | Mục đích sử dụng: "report" (gửi báo cáo quảng cáo), "traffic" (tạo traffic). | |
name | string | Có | Tên đầy đủ của persona. Ví dụ: "Nguyễn Văn An". |
email | string | Có | Địa chỉ email tài khoản Google của persona. |
password | string | Có | Mật khẩu email. |
app_password | string? | App Password Gmail (dùng cho SMTP khi 2FA bật). | |
refresh_token | string? | OAuth2 Refresh Token để duy trì đăng nhập mà không cần nhập lại mật khẩu. | |
client_id | string? | OAuth2 Client ID. | |
recovery_email | string | Email khôi phục tài khoản. | |
is_active | bool | true = profile đang hoạt động và có thể được gán task. false = bị vô hiệu hóa. | |
failed_login_attempts | int | Số lần đăng nhập thất bại liên tiếp. Khi vượt ngưỡng, profile bị đánh dấu is_blocked. | |
last_failed_login_at | datetime? | Thời điểm đăng nhập thất bại cuối. Dùng để tính thời gian chờ trước khi thử lại. | |
last_used_at | datetime? | Thời điểm profile được sử dụng lần cuối. | |
cooldown_end | datetime? | Thời điểm kết thúc cooldown. Trong thời gian cooldown, profile không được gán task mới. | |
cooldown_until | datetime? | Tương tự cooldown_end, dùng cho cooldown dài hạn. | |
cooldown | int | Thời gian cooldown mặc định tính bằng phút. Hàm SetCooldown() đặt cooldown 15 phút. | |
server_region | string | Vùng server đang giữ profile. Dùng để phân bổ profile theo vùng địa lý. | |
proxy_region | string | Vùng proxy được gán. Đảm bảo proxy và profile cùng vùng địa lý. | |
profile_name | string | Tên hiển thị của profile trong Admin Dashboard. | |
phone | string | Số điện thoại của persona. | |
country | string | Quốc gia của persona. Ví dụ: "VN", "US". | |
timezone | string | Múi giờ. Ví dụ: "Asia/Ho_Chi_Minh". Trình duyệt được cấu hình theo múi giờ này. | |
device_type | string | Loại thiết bị: "desktop", "mobile", "tablet". | |
browser_type | string | Loại trình duyệt: "chrome", "firefox", "edge". | |
operating_system | string | Hệ điều hành: "Windows 10", "macOS Sonoma", "Android 14". | |
screen_resolution | string | Độ phân giải màn hình. Ví dụ: "1920x1080", "390x844". | |
user_agent | string | HTTP User-Agent header. Trình duyệt được cấu hình để gửi User-Agent này. | |
ip_address | string | Địa chỉ IP hiện tại của profile. | |
location | string | Địa chỉ dạng text. Ví dụ: "Hà Nội, Việt Nam". | |
latitude | float64 | Vĩ độ GPS. Trình duyệt được cấu hình vị trí GPS theo giá trị này. | |
longitude | float64 | Kinh độ GPS. | |
total_clicks | int | Tổng số lần click đã thực hiện. Dùng để đánh giá mức độ hoạt động của profile. | |
total_searches | int | Tổng số lần tìm kiếm đã thực hiện. | |
last_activity | datetime? | Thời điểm hoạt động cuối cùng. | |
profile_age | int | Tuổi của profile tính bằng ngày kể từ khi tạo. Profile lâu năm thường đáng tin cậy hơn. | |
is_verified | bool | true = tài khoản Google đã được xác minh (có số điện thoại, recovery email). | |
is_blocked | bool | true = profile bị khóa do vi phạm hoặc quá nhiều lỗi đăng nhập. | |
block_reason | string? | Lý do bị khóa. Ví dụ: "Too many failed login attempts". | |
notes | string? | Ghi chú tùy chỉnh của admin. | |
deleted_at | datetime? | Soft delete timestamp. Profile bị xóa mềm vẫn giữ lại lịch sử. | |
created_at | datetime | Thời điểm tạo profile. | |
updated_at | datetime | Thời điểm cập nhật cuối. |
IsAvailable() — Kiểm tra profile có thể dùng không: is_active = true VÀ cooldown_end đã qua (hoặc null).SetCooldown() — Đặt cooldown 15 phút. Được gọi sau khi profile hoàn thành task để tránh dùng liên tục.profile_sessions| Field | Kiểu | Mô tả |
|---|---|---|
_id | ObjectID | ID session. |
profile_id | ObjectID | Tham chiếu profiles._id. |
session_id | string | Định danh session duy nhất. |
user_agent | string | User-Agent của phiên đăng nhập. |
ip_address | string | IP đang sử dụng trong phiên này. |
status | string | Trạng thái: "active", "expired", "revoked". |
is_active | bool | Session đang hoạt động. |
is_valid | bool | Session còn hợp lệ (chưa hết hạn và chưa bị thu hồi). |
created_at | datetime | Thời điểm tạo session. |
expires_at | datetime | Thời điểm session hết hạn. |
last_activity | datetime | Hoạt động cuối trong session này. |
IsSessionExpired() kiểm tra time.Now().After(expires_at). IsSessionValid() kiểm tra is_active AND NOT IsSessionExpired().keywordsSCHEDULE_SEARCH_KEYWORD (mỗi 30 phút) đọc từ khóa có status=1 → Tạo keyword_schedules → Worker nhận lịch quét → Thực hiện tìm kiếm thực tế → Gửi kết quả về webhook → API lưu vào keyword_results.| Field | Kiểu | Required | Mô tả và cách dùng |
|---|---|---|---|
_id | ObjectID | Có | ID từ khóa. |
keyword | string | Có | Chuỗi từ khóa cần theo dõi. Ví dụ: "mua xe máy hà nội". |
status | int | 0=Disable (tắt), 1=Enable (đang theo dõi). Chỉ từ khóa status=1 mới được quét. | |
sort | int | Độ ưu tiên. Số nhỏ hơn được quét trước khi có nhiều từ khóa cùng lúc. | |
device | array[int] | Danh sách thiết bị cần quét: [0]=Desktop, [1]=Mobile, [0,1]=cả hai. | |
device_os | map[string][]int | Map OS theo device. Key là "0" (Desktop) hoặc "1" (Mobile). Value là array OS: Desktop: [0]=Windows, [1]=MacOS. Mobile: [0]=Android, [1]=iOS. | |
engine | array[int] | Engine cần quét: [0]=Google.vn, [1]=Google, [2]=CocCoc. Có thể quét nhiều engine cùng lúc. | |
result_num | int | Số kết quả SERP cần cào. Ví dụ: 10 = lấy 10 kết quả đầu tiên. | |
is_running | bool | true = đang có cron job đang quét từ khóa này. Tránh quét trùng lặp. | |
created_by | int | User ID tạo từ khóa (tham chiếu users.id MySQL). | |
created_at | datetime | Thời điểm tạo. | |
updated_at | datetime | Thời điểm cập nhật cuối. |
keyword_results| Field | Kiểu | Required | Mô tả và cách dùng |
|---|---|---|---|
_id | ObjectID | Có | ID kết quả. |
keyword | string | Có | Từ khóa đã quét. |
keyword_id | string | ID từ khóa dạng string (tham chiếu keywords._id). | |
keyword_schedule_id | ObjectID | Tham chiếu keyword_schedules._id. Dùng để biết lần quét này thuộc lịch nào. | |
device | int | Thiết bị quét: 0=Desktop, 1=Mobile. | |
device_os | int | OS thiết bị. | |
engine | int | Engine quét: 0=Google.vn, 1=Google, 2=CocCoc. | |
result_num | int | Số kết quả đã cào. | |
geolocation | object | Tọa độ GPS {lat, lng} của vị trí quét. | |
is_scan_domain | bool | true = đã quét domain để phân loại company/competitors. | |
search_data | object | Dữ liệu kết quả SERP (xem sub-document bên dưới). | |
created_at | datetime | Thời điểm quét. | |
updated_at | datetime | Thời điểm cập nhật. |
search_data:| Field | Kiểu | Mô tả |
|---|---|---|
ads | array[SearchResult] | Danh sách kết quả quảng cáo (Google Ads, CocCoc Ads). |
search | array[SearchResult] | Danh sách kết quả tìm kiếm tự nhiên (organic). |
SearchResult:| Field | Kiểu | Mô tả |
|---|---|---|
url | string | URL của kết quả. |
rank | int | Thứ hạng trên SERP (1 = vị trí đầu tiên). |
type | string | Phân loại domain: "company" = domain của khách hàng, "competitors" = domain đối thủ. |
action_status | string | Trạng thái hành động: "unknow" = chưa xử lý, "kill" = đang kill, "killed" = đã kill. |
confirm_status | bool | true = admin đã xác nhận hành động này. |
label | string | Nhãn tùy chỉnh. |
created_at | datetime | Thời điểm ghi nhận kết quả này. |
keyword_schedules| Field | Kiểu | Mô tả |
|---|---|---|
_id | ObjectID | ID lịch quét. |
keyword_id | string | Tham chiếu keywords._id. |
engine | int | Engine quét: 0=Google.vn, 1=Google, 2=CocCoc. |
scan_desktop | int | Số lần đã quét trên Desktop. Dùng để theo dõi tần suất. |
scan_mb | int | Số lần đã quét trên Mobile. |
created_at | datetime | Thời điểm tạo lịch. |
task_logs| Field | Kiểu | Mô tả |
|---|---|---|
_id | ObjectID | ID log. |
keyword | string | Từ khóa đã dùng trong lượt traffic này. |
user_agent | string | User-Agent của trình duyệt đã dùng. |
link | string | URL đã truy cập. |
date | datetime | Thời điểm thực thi. |
mongodb_cleanup để tránh tốn dung lượng. Chỉ giữ log trong X ngày gần nhất (cấu hình trong system_settings).proxy_packages| Field | Kiểu | Mô tả |
|---|---|---|
_id | ObjectID | ID gói proxy. |
code | string | Mã code gói. Ví dụ: "ZING-VN-100". |
name | string | Tên gói. Ví dụ: "ZingProxy VN 100 IP". |
price | int | Giá gói (VNĐ hoặc USD). |
note | string | Ghi chú về gói: hạn dùng, điều kiện, v.v. |
proxy_provider_id | ObjectID? | Tham chiếu proxy_providers._id. |
proxy_provider | embed{id, name} | Thông tin nhà cung cấp được nhúng trực tiếp (denormalized) để tránh JOIN. |
active | bool | Gói đang được sử dụng. |
created_at | datetime | Thời điểm tạo. |
updated_at | datetime | Thời điểm cập nhật. |
proxy_providers| Field | Kiểu | Mô tả |
|---|---|---|
_id | ObjectID | ID nhà cung cấp. |
name | string | Tên nhà cung cấp. Ví dụ: "ZingProxy", "Enode", "M2Proxy". |
account | string | Tài khoản đăng nhập vào portal nhà cung cấp. |
domain | string | Domain của nhà cung cấp. Ví dụ: "zingproxy.com". |
active | bool | Đang sử dụng nhà cung cấp này. |
created_at | datetime | Thời điểm tạo. |
updated_at | datetime | Thời điểm cập nhật. |
.env (PROXY_XOAY_USERNAME, ENODE_PROXY_TOKEN, v.v.), không lưu trong database để bảo mật.proxy_ip_logs| Field | Kiểu | Mô tả |
|---|---|---|
_id | ObjectID | ID log. |
proxy_id | ObjectID? | Tham chiếu proxies._id. |
ip | string | IP Public sau khi xoay. |
supplier | string | Tên nhà cung cấp (parse từ rotate_url). |
region | string? | Vùng địa lý của IP. |
total | int | Số lần IP này xuất hiện sau khi xoay. Nếu total cao, IP đang bị tái sử dụng nhiều. |
created_at | datetime | Thời điểm ghi log. |
updated_at | datetime | Thời điểm cập nhật. |
backup_proxiesbackup_proxy (mỗi 5 phút) cập nhật danh sách từ các nguồn. Cron job health check (mỗi 2 phút) kiểm tra từng proxy. Khi failure_count >= 3, proxy bị đánh dấu is_working = false.| Field | Kiểu | Mô tả |
|---|---|---|
_id | ObjectID | ID proxy dự phòng. |
host | string | Địa chỉ IP hoặc hostname. |
port | int | Port kết nối. |
username | string | Username (thường trống với proxy công cộng). |
password | string | Password (thường trống với proxy công cộng). |
type | string | Giao thức: "http", "https", "socks4", "socks5". |
country | string | Quốc gia của IP. |
region | string | Vùng địa lý chi tiết. |
ip_public | string | IP Public thực tế (sau khi kiểm tra). |
is_working | bool | Proxy đang hoạt động. Tự động đặt false khi failure_count >= 3. |
last_tested | datetime | Thời điểm kiểm tra sức khỏe cuối. |
success_count | int | Số lần kiểm tra thành công. |
failure_count | int | Số lần kiểm tra thất bại liên tiếp. |
source | string | Nguồn proxy: URL GitHub repo, tên nhà cung cấp, hoặc "proxifly". |
created_at | datetime | Thời điểm thêm vào hệ thống. |
updated_at | datetime | Thời điểm cập nhật cuối. |
free_proxiesbackup_proxies với một điểm khác biệt: failure_count >= 5 (thay vì 3) mới đánh dấu is_working = false vì proxy miễn phí thường không ổn định.| Field | Kiểu | Mô tả |
|---|---|---|
_id | ObjectID | ID proxy miễn phí. |
host | string | Địa chỉ IP. |
port | int | Port. |
username | string | Username (thường trống). |
password | string | Password (thường trống). |
type | string | Giao thức: "http", "https", "socks4", "socks5". |
country | string | Quốc gia. |
region | string | Vùng. |
is_working | bool | Đang hoạt động. false khi failure_count >= 5. |
last_tested | datetime | Lần kiểm tra cuối. |
success_count | int | Số lần thành công. |
failure_count | int | Số lần thất bại. |
source | string | URL GitHub hoặc tên nguồn. |
created_at | datetime | Thời điểm thêm. |
updated_at | datetime | Thời điểm cập nhật. |
coccoc_tokenslocked = null (rảnh) → Đặt locked = task_id (khóa token).locked = null, tăng used, success_count hoặc error_count.| Field | Kiểu | Mô tả |
|---|---|---|
_id | ObjectID | ID token. |
token | object{cc_t, uid} | Token CocCoc gồm hai phần: cc_t (cookie token) và uid (user ID). |
locked | ObjectID? | ID của task đang giữ lock. null = token rảnh, có thể dùng. Không null = đang bị khóa. |
used | int | Số lần sử dụng trong ngày hiện tại. Reset về 0 khi unlock. |
success_count | int | Số lần thành công trong ngày. Reset khi unlock. |
error_count | int | Số lần lỗi trong ngày. Reset khi unlock. |
used_total | int | Tổng số lần sử dụng mọi thời điểm. Không reset. |
first_used_at | datetime? | Thời điểm sử dụng lần đầu. |
last_used_at | datetime? | Thời điểm sử dụng gần nhất. |
unlock_at | datetime? | Thời điểm tự động unlock nếu worker không gọi webhook unlock. Tránh token bị khóa vĩnh viễn khi worker crash. |
created_at | datetime | Thời điểm tạo. |
updated_at | datetime | Thời điểm cập nhật. |
tool_traffic_apiusers| Column | Kiểu SQL | Required | Default | Mô tả và cách dùng |
|---|---|---|---|---|
id | INT AUTO_INCREMENT PK | Có | — | User ID. Được tham chiếu bởi campaigns.user_id, projects.user_id, activity_logs.user_id. |
name | VARCHAR(255) NOT NULL | Có | — | Tên hiển thị đầy đủ. |
email | VARCHAR(255) UNIQUE NOT NULL | Có | — | Email đăng nhập. Phải là duy nhất. Dùng trong POST /api/user/login. |
password | VARCHAR(255) NOT NULL | Có | — | Mật khẩu đã mã hóa bằng bcrypt. Không bao giờ lưu plaintext. |
first_name | VARCHAR(255) | — | Tên. | |
last_name | VARCHAR(255) | — | Họ. | |
secret_key | VARCHAR(255) | — | Secret key TOTP 32 ký tự base32 dùng cho Google Authenticator. Được tạo bởi GET /api/user/generate-totp và lưu sau khi user quét QR thành công. | |
two_factor_authentication | TINYINT(1) | 0 | 1 = user đã thiết lập và xác minh 2FA. 0 = chưa thiết lập. Khi 0, màn hình /auth-factor hiển thị QR code để quét. | |
role | INT | 1 | Phân quyền: 0=Admin (có quyền /api/dashboard/admin/), 1=User (quyền thông thường). | |
last_active_at | DATETIME | auto | Thời điểm hoạt động cuối. Được cập nhật mỗi request thành công qua AuthMiddleware. Dùng để kiểm tra session timeout: nếu time.Since(last_active_at) > SESSION_TIMEOUT thì session hết hạn. | |
device_token | VARCHAR(255) | — | UUID định danh thiết bị đang đăng nhập. Được tạo khi đăng nhập thành công và gửi kèm mọi request qua header Device-Token. Bị xóa khi đăng xuất. Nếu user đăng nhập từ thiết bị mới, device_token cũ bị ghi đè và thiết bị cũ bị đăng xuất. | |
is_logged_in | TINYINT(1) | 0 | 1 = đang đăng nhập. 0 = đã đăng xuất hoặc session hết hạn. AuthMiddleware kiểm tra device_token AND is_logged_in = 1. | |
created_at | DATETIME | auto | Thời điểm tạo tài khoản. | |
updated_at | DATETIME | auto | Thời điểm cập nhật cuối. | |
deleted_at | DATETIME | null | Soft delete của GORM. User bị xóa mềm vẫn giữ lại lịch sử activity_logs. |
users.id ← campaigns.user_id (1 user tạo nhiều campaign)users.id ← projects.user_id (1 user sở hữu nhiều project)users.id ← activity_logs.user_id (1 user có nhiều audit log)campaigns| Column | Kiểu SQL | Required | Default | Mô tả và cách dùng |
|---|---|---|---|---|
id | INT AUTO_INCREMENT PK | Có | — | Campaign ID. |
name | VARCHAR(255) NOT NULL | Có | — | Tên chiến dịch. Ví dụ: "Q1 2026 - Boost SEO". |
description | VARCHAR(255) | — | Mô tả mục tiêu chiến dịch. | |
user_id | INT FK→users.id | Có | — | Người tạo và sở hữu chiến dịch. |
configs | JSON | null | Cấu hình bổ sung: {"active": bool, "max": int, "percent": int}. max = giới hạn traffic tổng, percent = phần trăm phân bổ. | |
created_at | DATETIME | auto | Thời điểm tạo. | |
updated_at | DATETIME | auto | Thời điểm cập nhật. |
campaigns.user_id → users.idcampaigns.id ← projects.campaign_id (1 campaign có nhiều project)projects| Column | Kiểu SQL | Required | Default | Mô tả và cách dùng |
|---|---|---|---|---|
id | INT AUTO_INCREMENT PK | Có | — | Project ID. Được tham chiếu bởi tasks.project_id (MongoDB) và project_details.project_id. |
name | VARCHAR(255) NOT NULL | Có | — | Tên project. Ví dụ: "example.com - Google Ads". |
campaign_id | INT FK→campaigns.id | Có | — | Chiến dịch chứa project này. |
user_id | INT FK→users.id | Có | — | Chủ sở hữu project. |
status | INT CHECK IN(0,1) | Có | 1 | 0=Inactive (tắt, không giao task), 1=Active (đang chạy). |
total_process | INT | Có | 1 | Số lượt traffic cần thực hiện mỗi ngày. Cron job SCHEDULE_SEND_TASK dựa vào field này để tính số task cần tạo. |
traffic_type | INT | Có | 1 | Loại traffic: 0=Direct (truy cập thẳng URL), 1=Organic (tìm kiếm rồi click). |
traffic_device | INT | Có | 1 | Thiết bị: 0=Desktop, 1=Mobile. |
traffic_device_os | INT | Có | 0 | OS: Desktop: 0=Windows, 1=MacOS. Mobile: 0=Android, 1=iOS. |
organic_engine | INT? | null | Engine tìm kiếm (chỉ khi traffic_type=1): 0=Google.vn, 1=Google, 2=CocCoc. | |
search_keyword | VARCHAR(255)? | null | Từ khóa tìm kiếm (chỉ khi traffic_type=1). Worker tìm từ khóa này rồi click vào URL đích trong kết quả. | |
keyword_id | VARCHAR(255) | — | ID của keyword trong MongoDB keywords collection. Dùng để liên kết project với từ khóa đang theo dõi thứ hạng. | |
sort | INT | 1 | Thứ tự ưu tiên xử lý. Số nhỏ hơn được giao task trước. | |
links | JSON | Có | — | Mảng URL đích. Ví dụ: ["https://example.com/san-pham", "https://example.com/dich-vu"]. Worker ngẫu nhiên chọn một URL. |
only_ads | TINYINT(1) | Có | 0 | 1 = chỉ click quảng cáo (Google Ads, CocCoc Ads), bỏ qua kết quả tự nhiên. |
is_kill | TINYINT(1) | Có | 0 | 1 = chế độ Negative SEO. Traffic được gửi đến domain đối thủ để làm hại thứ hạng của họ. |
attribute | JSON | Có | — | Cấu hình khung giờ và thời gian ở lại trang (xem chi tiết bên dưới). |
state | INT CHECK IN(0,1,2) | 1 | Tình trạng domain: 0=Unknown, 1=Kill (đang trong chiến dịch kill), 2=Dead (domain đã chết/bị phạt). | |
state_time | DATETIME? | null | Thời điểm domain chuyển sang state hiện tại. | |
dead_time | JSON | — | Mảng các khoảng thời gian domain bị chết. Ví dụ: ["2026-01-15", "2026-02-20"]. | |
geolocation | JSON | — | Tọa độ GPS {"lat": 21.0285, "lng": 105.8542}. Worker cấu hình vị trí GPS của trình duyệt theo giá trị này. | |
is_traffic_fixed | TINYINT(1) | 0 | 1 = traffic cố định theo khung giờ trong attribute.time_frame. 0 = phân bổ đều trong ngày. | |
testable | INT | 0 | Cờ đánh dấu project đang trong chế độ test. | |
created_at | DATETIME | auto | Thời điểm tạo. | |
updated_at | DATETIME | auto | Thời điểm cập nhật. |
attribute:{
"time_frame": [
{"time_start": "08:00", "time_end": "12:00", "process": 300},
{"time_start": "13:00", "time_end": "17:00", "process": 400},
{"time_start": "19:00", "time_end": "22:00", "process": 255}
],
"time_on_page": [
{"time_min": 30, "time_max": 120}
]
}time_frame — Phân bổ traffic theo khung giờ. process là số lượt traffic trong khung giờ đó. Tổng process của tất cả time_frame nên bằng total_process.time_on_page — Thời gian ở lại trang (giây). Worker ngẫu nhiên chọn giá trị trong khoảng [time_min, time_max] để giả lập hành vi đọc trang tự nhiên.projects.campaign_id → campaigns.idprojects.user_id → users.idprojects.id ← project_details.project_idprojects.id ← tasks.project_id (MongoDB)project_details| Column | Kiểu SQL | Required | Default | Mô tả và cách dùng |
|---|---|---|---|---|
id | INT AUTO_INCREMENT PK | Có | — | ID. |
project_id | INT FK→projects.id | Có | — | Project tương ứng. |
total_process | INT | 0 | Tổng số lượt đã giao cho worker trong ngày/giờ này. | |
total_success | INT | 0 | Số lượt worker hoàn thành thành công (result_status = 1). | |
total_fail | INT | 0 | Số lượt worker thất bại (result_status = -1, -2, -3). | |
hour | INT | Có | 0 | Giờ trong ngày (0-23). Kết hợp với date tạo thành khóa duy nhất cho mỗi bản ghi thống kê. |
date | VARCHAR(10) NOT NULL | Có | — | Ngày theo format YYYY-MM-DD. |
rank | INT? | null | Thứ hạng từ khóa tại thời điểm này. Được cập nhật khi có kết quả quét SERP mới. | |
total_tmp | INT? | null | Số lượt tạm thời đang xử lý (chưa có kết quả cuối). |
SCHEDULE_REPORT_TRAFFIC tổng hợp dữ liệu từ bảng này để tạo báo cáo.project_settings| Column | Kiểu SQL | Required | Mô tả |
|---|---|---|---|
id | INT AUTO_INCREMENT PK | Có | ID. |
project_id | INT FK→projects.id | Có | Project được cấu hình. |
proxy_id | INT | Có | Proxy được phân công cho project này. |
server_id | INT FK→servers.id | Có | Server worker được phân công. |
created_at | DATETIME | Thời điểm tạo. | |
updated_at | DATETIME | Thời điểm cập nhật. | |
deleted_at | DATETIME | Soft delete. |
servers| Column | Kiểu SQL | Required | Default | Mô tả và cách dùng |
|---|---|---|---|---|
id | INT AUTO_INCREMENT PK | Có | — | Server ID. Được tham chiếu bởi server_hourly_reports.server_id và tasks.server_id (MongoDB). |
name | VARCHAR(255) NOT NULL | Có | — | Tên định danh. Ví dụ: "worker-hcm-01", "server-hanoi-02". |
ip | VARCHAR(255) NOT NULL | Có | — | Địa chỉ IP của server. Dùng để ping health check và giao task qua HTTP. |
is_active | TINYINT(1) | 0 | 1 = server đang nhận task mới. 0 = tạm dừng (admin vô hiệu hóa hoặc health check thất bại). | |
limit_process | INT | 0 | Số task tối đa server có thể xử lý đồng thời. Cron job không giao quá limit_process task cho server. | |
current_process | INT | 0 | Số task đang xử lý hiện tại. Được cập nhật bởi webhook từ worker. | |
created_at | DATETIME | auto | Thời điểm thêm server. | |
updated_at | DATETIME | auto | Thời điểm cập nhật. | |
deleted_at | DATETIME | null | Soft delete. |
servers.id ← server_hourly_reports.server_idserver_hourly_reportsSCHEDULE_SERVER_HOURLY_REPORT (mỗi đầu giờ) tổng hợp kết quả task từ MongoDB và ghi vào bảng này. Mỗi row là thống kê của một server trong một giờ cụ thể.| Column | Kiểu SQL | Required | Default | Mô tả và cách dùng |
|---|---|---|---|---|
id | INT AUTO_INCREMENT PK | Có | — | ID. |
server_id | INT? FK→servers.id | null | Server tương ứng. null = báo cáo tổng hợp toàn hệ thống. | |
report_date | DATE NOT NULL | Có | — | Ngày báo cáo. |
hour_start | TINYINT NOT NULL | Có | — | Giờ bắt đầu (0-23). |
process | INT | 0 | Tổng số task đã xử lý trong giờ này. | |
success | INT | 0 | Số task thành công (click đúng URL đích, result_status = 1). | |
fail | INT | 0 | Số task thất bại do lỗi kỹ thuật. | |
waiting | INT | 0 | Số task đang chờ trong hàng đợi. | |
captcha | INT | 0 | Số task gặp CAPTCHA và không thể tiếp tục. Tỷ lệ captcha cao = IP đang bị nghi ngờ. | |
error | INT | 0 | Số task gặp lỗi kỹ thuật (network error, browser crash, timeout). | |
notfound | INT | 0 | Số task không tìm thấy URL đích trong kết quả tìm kiếm. | |
unknown | INT | 0 | Số task có kết quả không xác định. | |
r_success | INT | 0 | Số task báo cáo (report task) thành công. Prefix r_ = report tasks. | |
r_fail | INT | 0 | Số task báo cáo thất bại. | |
r_captcha | INT | 0 | Số task báo cáo gặp CAPTCHA. | |
r_error | INT | 0 | Số task báo cáo gặp lỗi. | |
r_notfound | INT | 0 | Số task báo cáo không tìm thấy. | |
r_unknown | INT | 0 | Số task báo cáo kết quả không xác định. | |
total_task | INT | 0 | Tổng số task được giao cho server trong giờ này (bao gồm cả task chưa hoàn thành). | |
created_at | DATETIME | auto | Thời điểm tạo. | |
updated_at | DATETIME | auto | Thời điểm cập nhật. |
activity_logs| Column | Kiểu SQL | Required | Mô tả và cách dùng |
|---|---|---|---|
id | INT AUTO_INCREMENT PK | Có | ID. |
user_id | INT? FK→users.id | Người thực hiện. null nếu hành động từ hệ thống (cron job). | |
action | VARCHAR(255) NOT NULL | Có | Loại thao tác: "create", "update", "delete", "login", "logout". |
parameter | JSON? | Tham số đầu vào của request. Ví dụ: {"page": 1, "limit": 20}. | |
model_name | VARCHAR(255) NOT NULL | Có | Tên entity bị tác động. Ví dụ: "Server", "Proxy", "Campaign". |
model_id | INT NOT NULL | Có | ID của entity bị tác động. |
old_value | JSON? | Giá trị trước khi thay đổi. null khi tạo mới. | |
new_value | JSON? | Giá trị sau khi thay đổi. null khi xóa. | |
ip_address | VARCHAR(255) | Địa chỉ IP của người thực hiện. | |
user_agent | VARCHAR(255) | User-Agent của trình duyệt. | |
created_at | DATETIME | Thời điểm thực hiện. | |
updated_at | DATETIME | Thời điểm cập nhật. |
system_settings| Column | Kiểu SQL | Required | Mô tả |
|---|---|---|---|
id | INT AUTO_INCREMENT PK | Có | ID. |
key | VARCHAR(255) UNIQUE NOT NULL | Có | Tên cấu hình. |
value | TEXT NOT NULL | Có | Giá trị cấu hình dạng chuỗi. |
created_at | DATETIME | Thời điểm tạo. | |
updated_at | DATETIME | Thời điểm cập nhật. | |
deleted_at | DATETIME | Soft delete. |
| Key | Giá Trị | Mô Tả |
|---|---|---|
telegram_notification_enabled | "true" / "false" | Bật/tắt thông báo Telegram toàn hệ thống. Ghi đè ENABLE_PUSH_MESSAGE_ERROR_TO_TELEGRAM trong .env. |
setup_fires| Column | Kiểu SQL | Required | Mô tả |
|---|---|---|---|
id | INT AUTO_INCREMENT PK | Có | ID. |
campaign_gg_id | INT | Có | ID chiến dịch Google Ads. |
campaign_cc_id | INT | Có | ID chiến dịch CocCoc Ads. |
created_at | DATETIME | Thời điểm tạo. | |
updated_at | DATETIME | Thời điểm cập nhật. |
locations| Column | Kiểu SQL | Required | Default | Mô tả và cách dùng |
|---|---|---|---|---|
id | BIGINT AUTO_INCREMENT PK | Có | — | Location ID. |
name | VARCHAR(255) UNIQUE NOT NULL | Có | — | Tên vị trí. Ví dụ: "Hà Nội", "TP. Hồ Chí Minh". |
region | VARCHAR(255) NOT NULL | Có | — | Vùng/khu vực. Ví dụ: "Miền Bắc", "Miền Nam". |
active | BOOLEAN | true | true = vị trí đang được sử dụng. | |
geolocation | JSON NOT NULL | Có | — | Tọa độ GPS: {"lat": 21.0285, "lng": 105.8542}. Worker cấu hình GPS của trình duyệt theo giá trị này để giả lập người dùng đang ở vị trí đó. |
created_at | DATETIME | auto | Thời điểm tạo. | |
updated_at | DATETIME | auto | Thời điểm cập nhật. |
| Key Pattern | Kiểu | TTL | Nội Dung | Mô Tả |
|---|---|---|---|---|
user:activity:{user_id} | String | SESSION_TIMEOUT | Chuỗi datetime RFC3339 | Thời điểm hoạt động cuối của user. JWTMiddleware đọc key này để kiểm tra session timeout. Được cập nhật mỗi request thành công. |
cache:proxy:{id} | String | 5 phút | JSON proxy object | Cache thông tin proxy thường dùng để tránh query MongoDB liên tục. |
lock:cron:{job_name} | String | Thời gian job | "1" | Distributed lock ngăn cron job chạy trùng lặp trên nhiều instance. Khi cron bắt đầu, set key này. Khi xong, xóa key. |
Redis SET user:activity:{user_id} = "2026-03-26T09:30:00+07:00"
TTL = SESSION_TIMEOUT (mặc định 1 giờ)JWTMiddleware:Redis GET user:activity:{user_id}
→ Parse thành time.Time
→ Kiểm tra time.Since(lastActive) > SESSION_TIMEOUT
→ Nếu quá hạn: trả về 401 Unauthorized
→ Nếu còn hạn: tiếp tục xử lý requestRedis DEL user:activity:{user_id}
MySQL UPDATE users SET is_logged_in=0, device_token='' WHERE id=?MySQL (tool_traffic_api)
═══════════════════════════════════════════════════════════════
users (id, email, role, device_token, is_logged_in)
│
├──► campaigns (id, user_id, name, configs)
│ │
│ └──► projects (id, campaign_id, user_id, status,
│ │ total_process, traffic_type, links,
│ │ attribute, geolocation, is_kill)
│ │
│ ├──► project_details (project_id, date, hour,
│ │ total_process, total_success,
│ │ total_fail, rank)
│ │
│ └──► project_settings (project_id, server_id)
│
├──► activity_logs (user_id, action, model_name, model_id,
│ old_value, new_value, ip_address)
│
servers (id, name, ip, is_active, limit_process, current_process)
│
└──► server_hourly_reports (server_id, report_date, hour_start,
process, success, fail, captcha,
error, notfound, r_success, r_fail)
system_settings (key, value)
setup_fires (campaign_gg_id, campaign_cc_id)
locations (id, name, region, geolocation)
MongoDB (tool-traffic-api)
═══════════════════════════════════════════════════════════════
proxies (ip, port, rotate_url, is_active, used_count,
domain_used, proxy_package_id, expired_at)
│
├──► proxy_packages (code, name, price, proxy_provider_id)
│ │
│ └──► proxy_providers (name, account, domain)
│
└──► proxy_ip_logs (proxy_id, ip, supplier, total)
tasks (project_id→MySQL, traffic_type, status, result_status,
profile_id, server_id→MySQL, geolocation)
profiles (email, password, is_active, cooldown_end,
user_agent, screen_resolution, latitude, longitude)
│
└──► profile_sessions (profile_id, session_id, is_active, expires_at)
keywords (keyword, status, device, engine, result_num)
│
├──► keyword_results (keyword_id, device, engine, search_data)
│ └── search_data.ads[]: {url, rank, type, action_status}
│ └── search_data.search[]: {url, rank, type, action_status}
│
└──► keyword_schedules (keyword_id, engine, scan_desktop, scan_mb)
task_logs (keyword, user_agent, link, date)
backup_proxies (host, port, type, is_working, failure_count)
free_proxies (host, port, type, is_working, failure_count)
coccoc_tokens (token{cc_t,uid}, locked, used, success_count)
Redis
═══════════════════════════════════════════════════════════════
user:activity:{user_id} → last_active_at (TTL: SESSION_TIMEOUT)
lock:cron:{job_name} → "1" (TTL: job duration)
cache:proxy:{id} → proxy JSON (TTL: 5 phút)
Cross-Database References
═══════════════════════════════════════════════════════════════
tasks.project_id (MongoDB) ←→ projects.id (MySQL)
tasks.server_id (MongoDB) ←→ servers.id (MySQL)
tasks.profile_id (MongoDB) ←→ profiles._id (MongoDB)
projects.keyword_id (MySQL) ←→ keywords._id (MongoDB)
proxies.proxy_package_id (MongoDB) ←→ proxy_packages._id (MongoDB)
proxy_packages.proxy_provider_id (MongoDB) ←→ proxy_providers._id (MongoDB)
proxy_ip_logs.proxy_id (MongoDB) ←→ proxies._id (MongoDB)
profile_sessions.profile_id (MongoDB) ←→ profiles._id (MongoDB)
keyword_results.keyword_id (MongoDB) ←→ keywords._id (MongoDB)
keyword_schedules.keyword_id (MongoDB) ←→ keywords._id (MongoDB)| Giá Trị | Tên | Mô Tả |
|---|---|---|
0 | Direct | Truy cập thẳng URL đích không qua tìm kiếm. |
1 | Organic | Tìm kiếm từ khóa trên engine rồi click vào URL đích trong kết quả. |
| Giá Trị | Tên | Mô Tả |
|---|---|---|
0 | Google.vn | Google tìm kiếm phiên bản Việt Nam (google.com.vn). |
1 | Google tìm kiếm phiên bản quốc tế (google.com). | |
2 | CocCoc | CocCoc tìm kiếm (cốc cốc). |
3 | Google.vn Ads | Click quảng cáo Google Ads trên Google.vn. |
4 | Google Ads | Click quảng cáo Google Ads trên Google.com. |
5 | CocCoc Chrome | Click quảng cáo CocCoc Ads. |
| Giá Trị | Tên | Mô Tả |
|---|---|---|
0 | Desktop | Máy tính để bàn hoặc laptop. |
1 | Mobile | Điện thoại di động. |
| Giá Trị | Thiết Bị | Tên | Mô Tả |
|---|---|---|---|
0 | Desktop | Windows | Windows 10/11. |
1 | Desktop | MacOS | macOS Sonoma/Ventura. |
0 | Mobile | Android | Android 12/13/14. |
1 | Mobile | iOS | iPhone iOS 16/17. |
| Giá Trị | Tên | Mô Tả |
|---|---|---|
0 | Pending | Task đã tạo, chờ worker nhận. |
1 | Processing | Worker đang thực thi. |
2 | Completed | Worker đã hoàn thành (thành công hoặc thất bại). |
| Giá Trị | Tên | Mô Tả |
|---|---|---|
0 | Unknown | Kết quả chưa xác định. |
1 | Success | Thực thi thành công, click đúng URL đích. |
-1 | Error | Lỗi kỹ thuật: network error, browser crash, timeout. |
-2 | NotFound | Không tìm thấy URL đích trong kết quả tìm kiếm. |
-3 | Captcha | Gặp CAPTCHA, không thể tiếp tục. |
| Giá Trị | Tên | Quyền Hạn |
|---|---|---|
0 | Admin | Toàn quyền, bao gồm /api/dashboard/admin/. |
1 | User | Quyền thông thường, không có quyền admin. |
| Giá Trị | Tên | Mô Tả |
|---|---|---|
0 | Inactive | Project tắt, không giao task mới. |
1 | Active | Project đang chạy, cron job giao task. |
| Giá Trị | Tên | Mô Tả |
|---|---|---|
0 | Unknown | Trạng thái chưa xác định. |
1 | Kill | Domain đang trong chiến dịch Negative SEO. |
2 | Dead | Domain đã bị phạt/chết, không còn thứ hạng. |
| Giá Trị | Mô Tả |
|---|---|
"vn" | IP Việt Nam. Dùng cho traffic nội địa, tìm kiếm trên Google.vn. |
"global" | IP quốc tế. Dùng cho traffic quốc tế. |
| Giá Trị | Tên | Mô Tả |
|---|---|---|
0 | Disable | Từ khóa tắt, không quét SERP. |
1 | Enable | Từ khóa đang theo dõi, cron job quét định kỳ. |
| Giá Trị | Tên | Mô Tả |
|---|---|---|
0 | Google.vn | Quét SERP trên Google.com.vn. |
1 | Quét SERP trên Google.com. | |
2 | CocCoc | Quét SERP trên CocCoc. |
| Giá Trị | Mô Tả |
|---|---|
"company" | Domain của khách hàng (cần boost thứ hạng). |
"competitors" | Domain đối thủ (cần kill thứ hạng). |
| Giá Trị | Mô Tả |
|---|---|
"unknow" | Chưa có hành động nào được thực hiện với URL này. |
"kill" | Đang trong quá trình kill (gửi traffic đến URL này). |
"killed" | Đã kill thành công (URL đã bị đẩy xuống thứ hạng thấp). |
| Giá Trị | Mô Tả |
|---|---|
"http" | HTTP proxy. |
"https" | HTTPS proxy. |
"socks4" | SOCKS4 proxy. |
"socks5" | SOCKS5 proxy. |
| Giá Trị | Tên | Mô Tả |
|---|---|---|
"gg" | Chiến dịch Google Ads. | |
"cc" | CocCoc | Chiến dịch CocCoc Ads. |